如何配置Hibernate连接oracle12c 的PDB和CDB数据库
2016-11-18 13:52
519 查看
Multitenant : Connecting to Container Databases (CDB) and Pluggable Databases (PDB) in Oracle Database 12c Release 1 (12.1)
The multitenant option introduced in Oracle Database 12c allows a single container database (CDB) to host multiple separate pluggable databases (PDB). This article describes how to connect to container databases (CDB) and pluggable databases (PDB).Connecting to a Container Database
(CDB)
Displaying the Current
Container
Switching
Between Containers
Connecting to a Pluggable Database
(PDB)
JDBC Connections
to PDBs
Related articles.
Multitenant : Connecting to CDBs and PDBs
Connecting to a Container Database (CDB)
Connecting to the root of a container database is the same as that of any previous database instance. On the database server you can use OS Authentication.$ export ORACLE_SID=cdb1 $ sqlplus / as sysdba SQL*Plus: Release 12.1.0.1.0 Production on Mon Aug 26 15:29:49 2013 Copyright (c) 1982, 2013, Oracle. All rights reserved. Connected to: Oracle Database 12c Enterprise Edition Release 12.1.0.1.0 - 64bit Production With the Partitioning, OLAP, Advanced Analytics and Real Application Testing options SQL>
You can connect to other common users in similar way.
SQL> CONN system/password Connected. SQL>
The
V$SERVICESviews can be used to display available services from the database.
COLUMN name FORMAT A30 SELECT name, pdb FROM v$services ORDER BY name; NAME PDB ------------------------------ ------------------------------ SYS$BACKGROUND CDB$ROOT SYS$USERS CDB$ROOT cdb1 CDB$ROOT cdb1XDB CDB$ROOT pdb1 PDB1 pdb2 PDB2 6 rows selected. SQL>
The
lsnrctlutility allows you to display the available services from the command line.
$ lsnrctl service LSNRCTL for Linux: Version 12.1.0.1.0 - Production on 20-MAY-2014 09:01:34 Copyright (c) 1991, 2013, Oracle. All rights reserved. Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1521))) Services Summary... Service "cdb1" has 1 instance(s). Instance "cdb1", status READY, has 1 handler(s) for this service... Handler(s): "DEDICATED" established:0 refused:0 state:ready LOCAL SERVER Service "cdb1XDB" has 1 instance(s). Instance "cdb1", status READY, has 1 handler(s) for this service... Handler(s): "D000" established:0 refused:0 current:0 max:1022 state:ready DISPATCHER (ADDRESS=(PROTOCOL=tcp)(HOST=ol6-121.localdomain)(PORT=21196)) Service "pdb1" has 1 instance(s). Instance "cdb1", status READY, has 1 handler(s) for this service... Handler(s): "DEDICATED" established:0 refused:0 state:ready LOCAL SERVER Service "pdb2" has 1 instance(s). Instance "cdb1", status READY, has 1 handler(s) for this service... Handler(s): "DEDICATED" established:0 refused:0 state:ready LOCAL SERVER The command completed successfully $
Connections using services are unchanged from previous versions.
SQL> -- EZCONNECT SQL> CONN system/password@//localhost:1521/cdb1 Connected. SQL> SQL> -- tnsnames.ora SQL> CONN system/password@cdb1 Connected. SQL>
The connection using a TNS alias requires an entry in the "$ORACLE_HOME/network/admin/tnsnames.ora" file, such as the one shown below.
CDB1 = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = ol6-121.localdomain)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = cdb1) ) )
Displaying the Current Container
The SHOW CON_NAMEand
SHOW CON_IDcommands
in SQL*Plus display the current container name and ID respectively.
SQL> SHOW CON_NAME CON_NAME ------------------------------ CDB$ROOT SQL> SQL> SHOW CON_ID CON_ID ------------------------------ 1 SQL>
They can also be retrieved using the
SYS_CONTEXTfunction.
SELECT SYS_CONTEXT('USERENV', 'CON_NAME') FROM dual; SYS_CONTEXT('USERENV','CON_NAME') -------------------------------------------------------------------------------- CDB$ROOT SQL> SELECT SYS_CONTEXT('USERENV', 'CON_ID') FROM dual; SYS_CONTEXT('USERENV','CON_ID') -------------------------------------------------------------------------------- 1 SQL>
Switching Between Containers
When logged in to the CDB as an appropriately privileged user, the ALTER SESSIONcommand can be used to switch between containers within the container
database.
SQL> ALTER SESSION SET container = pdb1; Session altered. SQL> SHOW CON_NAME CON_NAME ------------------------------ PDB1 SQL> ALTER SESSION SET container = cdb$root; Session altered. SQL> SHOW CON_NAME CON_NAME ------------------------------ CDB$ROOT SQL>
Connecting to a Pluggable Database (PDB)
Direct connections to pluggable databases must be made using a service. Each pluggable database automatically registers a service with the listener. This is how any application will connect to a pluggable database, as well as administrative connections.SQL> -- EZCONNECT SQL> CONN system/password@//localhost:1521/pdb1 Connected. SQL> SQL> -- tnsnames.ora SQL> CONN system/password@pdb1 Connected. SQL>
The connection using a TNS alias requires an entry in the "$ORACLE_HOME/network/admin/tnsnames.ora" file, such as the one shown below.
PDB1 = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = ol6-121.localdomain)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = pdb1) ) )
PDB users with the SYSDBA, SYSOPER, SYSBACKUP, or SYSDG privilege can connect to a closed PDB. All other PDB users can only connect when the PDB is open. As with regular databases, the PDB users require the
CREATE SESSIONprivilege to enable connections.
JDBC Connections to PDBs
It has already been mentioned that you must connect to a PDB using a service. This means that by default many JDBC connect strings will be broken. Valid JDBC connect strings for Oracle use the following format.# Syntax jdbc:oracle:thin:@[HOST][:PORT]:SID 连接SID jdbc:oracle:thin:@[HOST][:PORT]/SERVICE 连接服务名 # Example jdbc:oracle:thin:@ol6-121:1521:pdb1 连接SID jdbc:oracle:thin:@ol6-121:1521/pdb1 连接服务名
When attempting to connect to a PDB using the SID format, you will receive the following error.
ORA-12505, TNS:listener does not currently know of SID given in connect descriptor
Ideally, you would correct the connect string to use services instead of SIDs, but if that is a problem the USE_SID_AS_SERVICE_listener_name listener
parameter can be used.
Edit the "$ORACLE_HOME/network/admin/listener.ora" file, adding the following entry, with the "listener" name matching that used by your listener.
USE_SID_AS_SERVICE_listener=on
Reload or restart the listener.
$ lsnrctl reload
Now both of the following connection attempts will be successful as any SIDs will be treated as services.
jdbc:oracle:thin:@ol6-121:1521:pdb1 jdbc:oracle:thin:@ol6-121:1521/pdb1
For more information see:
Introduction to the Multitenant Architecture
Overview of the Multitenant Architecture
Managing a Multitenant Environment
Connections to Containers in a CDB
Multitenant : Connecting to CDBs and PDBs
Hope this helps. Regards Tim...
Back to the Top.
相关文章推荐
- hibernate配置文件如何连接sql server 2008数据库
- Oracle12c中配置实例参数和修改容器数据库(CDB)及可插拔数据库(PDB)
- hibernate连接多个数据库,如何动态切换(我一般用配置文件动态切换)
- 如何配置数据库连接
- 如何用SSIS包配置动态配置数据库连接?
- 如何获得配置文件中,连接数据库的连接字符串
- 在web.config中如何配置数据库连接字符串,较为安全?
- Hibernate如何配置操作多个数据库
- hibernate中配置数据库连接(集成spring)
- Spring + Hibernate是如何管理数据库连接的
- 对于如何使用默认配置文件连接数据库的记录
- spring配置文件applicationContext.xml配置hibernate的连接数据库信息及sessionFactory创建方式
- hibernate配置连接数据库的文件
- Spring,hibernate数据库连接配置
- 提供各种数据库在JDBC中的连接方法.及在struts与hibernate中的配置
- 数据库连接缓存概念和如何配置连接缓存
- spring与hibernate整合配置多个数据库连接
- 在config文件中配置如何连接【mdf数据库文件】
- Hibernate与各种数据库连接 配置
- 在手动建立数据库关系下,spring结合hibernate配置连接sqlserver数据库