3. GLOBAL_DBNAME: 数据库服务名,可以省略,默认和SID_NAME保持一致。在本例中这里需要填写PDB的服务名。创建这个服务名可以通过NETMGR来操作。如下图所示:容器库的sid为cdb,为可插拔库pdb2创建同名服务。
实验环境如下所示,一个名为cdb的多租户数据库包含2个可插拔数据库pdb1,pdb2
[oracle@snow admin]$ sqlplus / as sysdba
SQL*Plus: Release 12.1.0.1.0 Production on Sun May 3 01:57:06 2015
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
SYS@cdb > show pdbs;
CON_ID CON_NAME OPEN MODE RESTRICTED
---------- ------------------------------ ---------- ----------
2 PDB$SEED READ ONLY NO
3 PDB1 READ WRITE NO
4 PDB2 READ WRITE NO
SYS@cdb > show parameter name
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
cell_offloadgroup_name string
db_file_name_convert string
db_name string cdb
db_unique_name string cdb
global_names boolean FALSE
instance_name string cdb
lock_name_space string
log_file_name_convert string
pdb_file_name_convert string
processor_group_name string
service_names string cdb
使用netca工具分别创建名为1522和1523的监听器,过程略。
使用netmgr工具分别为刚刚创建的监听1522,1523添加服务,也就是我们需要的静态注册。

图形工具创建完成后,查看配置文件可以看到配置中的关键步骤。
[oracle@snow admin]$ vi listener.ora
# listener.ora Network Configuration File: /u01/app/oracle/product/12.1.0.1/db_1/network/admin/listener.ora
# Generated by Oracle configuration tools.
#—netca创建的动态监听
1523 =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = snow.oracle.com)(PORT = 1523))
)
#—netca创建的动态监听
1522 =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = snow.oracle.com)(PORT = 1522))
)
ADR_BASE_1523 = /u01/app/oracle
1521 =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = snow.oracle.com)(PORT = 1521))
)
(DESCRIPTION =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
)
)
ADR_BASE_1522 = /u01/app/oracle
ADR_BASE_1521 = /u01/app/oracle
#—netmgr创建的服务,GLOBAL_NAME为pdb名称,SID_NAME为cdb名称
SID_LIST_1523 =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = pdb2)
(ORACLE_HOME = /u01/app/oracle/product/12.1.0.1/db_1)
(SID_NAME = cdb)
)
)
#—netmgr创建的服务,GLOBAL_NAME为pdb名称,SID_NAME为cdb名称
SID_LIST_1522 =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = pdb1)
(ORACLE_HOME = /u01/app/oracle/product/12.1.0.1/db_1)
(SID_NAME = cdb)
)
)
创建完毕测试效果
[oracle@snow admin]$ sqlplus u1/u1@snow.oracle.com:1522/pdb1
SQL*Plus: Release 12.1.0.1.0 Production on Sun May 3 01:54:12 2015
Copyright (c) 1982, 2013, Oracle. All rights reserved.
Last Successful login time: Sun May 03 2015 01:41:23 -04:00
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
U1@snow.oracle.com:1522/pdb1 > exit
[oracle@snow admin]$ sqlplus u2/u2@snow.oracle.com:1523/pdb2
SQL*Plus: Release 12.1.0.1.0 Production on Sun May 3 01:54:38 2015
Copyright (c) 1982, 2013, Oracle. All rights reserved.
Last Successful login time: Sun May 03 2015 01:53:07 -04:00
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
U2@snow.oracle.com:1523/pdb2 > exit
补充内容:
集群环境下tns是grid用户下创建的,使用netmgr创建静态注册的话在ORACLE_HOME一项填写的是GRID用户下的ORACLE_HOME,比如:/u01/12.1.0.1/grid这显然是不对了。 需要手工将其修改为oracle用户下的ORACLE_HOME地址,比如:/u01/app/oracle/product/12.1.0.1/db_1
全文完