Skip to main content
  • Place orders quickly and easily
  • View orders and track your shipping status
  • Enjoy members-only rewards and discounts
  • Create and access a list of your products
  • Manage your Dell EMC sites, products, and product-level contacts using Company Administration.

如何连接到 Oracle RAC 12cR1 中的可插拔数据库?

Summary: 我们的目标是提供各种解决方案,通过提供数据库解决方案、自定义开发、动态数据中心、灵活计算,从而简化IT

This article may have been automatically translated. If you have any feedback regarding its quality, please let us know using the form at the bottom of this page.

Article Content


Symptoms

应用于:

Oracle 数据库       -     Oracle 12cR1 12.1.0.1.0 Enterprise Edition

操作系统  –     Oracle Linux 6.4,带有内核 2.6.39-400.109.17.1.el6uek.x86-64  和                                          
Red Hat Enterprise Linux,带有内核 2.6.32-431.el6.x86_64

存储平台   -      Dell EqualLogic PS 5000 和 Dell EqualLogic PS 6110

问题:

如何连接到 Oracle RAC 12cR1 中的可插拔数据库?

解决方案:

有四种方法可以建立与可插拔数据库 (PDB) 的连接。
  1. 使用与 pdb 名称同名的默认服务,此服务由数据库软件自动创建。
  2. 使用用户定义的服务,这些服务通过将其与可插拔数据库相关联的 SRVCTL 实用程序创建,并带有 pdb 属性
  3. 使用 alter session 命令并将容器设置为所需的容器
  4. 使用 Enterprise Manager Express
 1. 使用默认服务连接至 PDB

要使用默认服务建立与 pdb 的连接,需要执行以下操作。
  •    需要在定义数据库地址(允许建立与数据库的连接)的 tnsnames.ora 文件中创建一个条目。
  •    pdb 的状态需要从已安装更改为读写模式。
 在 tnsnames.ora 文件中创建一个条目:

对于 Oracle RAC 12c,虽然与可插拔数据库名称同名的默认服务由数据库软件自动创建,但是,无论如何,tnsnames.ora 文件仅通过与全局数据库有关的单个条目生成。例如,对于双节点 Oracle RAC 12c,其中,cpdb 是全局数据库,pdb1 和 pdb2 是创建的两个可插拔数据库,而 cpdb1 和 cpdb2 是两个实例,tnsnames.ora 文件中的默认条目如下所示:

CPDB =

(DESCRIPTION =

   (ADDRESS = (PROTOCOL = TCP)(HOST = OracleRACscan.dbase.lab)(PORT = 1521))

   (CONNECT_DATA =

     (SERVER = DEDICATED)

     (SERVICE_NAME = cpdb.dbase.lab)

   )

)

因此,需要在 tnsnames.ora 文件中为可插拔数据库的默认服务名称创建相关条目,如下所示:

PDB1 =

(DESCRIPTION =                                                             

   (ADDRESS = (PROTOCOL = TCP) (HOST = OracleRACscan.dbase.lab)(PORT = 1521))

   (CONNECT_DATA =

     (SERVER = DEDICATED)

     (SERVICE_NAME = pdb1.dbase.lab)

   )

)

PDB2 =

(DESCRIPTION =

   (ADDRESS = (PROTOCOL = TCP) (HOST = OracleRACscan.dbase.lab)(PORT = 1521))

   (CONNECT_DATA =

     (SERVER = DEDICATED)

     (SERVICE_NAME = pdb2.dbase.lab)

   )

)

更改可插拔数据库的状态:

创建 pdbs 后,默认情况下,open_mode 仅为“已安装”。这可以按以下方式进行验证:

SQL> select name, open_mode from v$pdbs;

NAME                           OPEN_MODE
PDB$SEED                       READ ONLY

PDB1                           MOUNTED

PDB2                           MOUNTED

以下命令以读写模式打开所有可插拔数据库。

SQL>Alter pluggable database all open;

之后,可以使用 sqlplus 建立与数据库的连接,如下所示:

[oracle@node1 bin]$ sqlplus sys/oracle@pdb1 as sysdba

SQL*Plus: Release 12.1.0.1.0 Production on Tue Oct 8 11:23:32 2013

Copyright (c) 1982, 2013, Oracle. All rights reserved.

连接到:

Oracle Database 12c Enterprise Edition Release 12.1.0.1.0 - 64bit Production With the Partitioning, Real Application Clusters, Automatic Storage Management, OLAP, Advanced Analytics and Real Application Testing options

 2.使用用户定义的服务连接到 PDB

上述默认服务应仅用于管理目的,不应用于应用程序。用户定义的服务应始终用于应用程序,因为用户定义的服务可以根据应用程序的要求进行定制。使用用户定义的服务建立连接涉及以下步骤:
  1. 使用 SRVCTL 实用程序创建具有 PDB 属性的数据库服务
  2. 在 tnsnames.ora 文件中为所创建的服务创建条目
  3. 启动服务
  4. 使用在步骤 a 中创建的带有 pdb 属性的服务连接到数据库
a. 使用 SRVCTL 实用程序创建具有 PDB 属性的数据库服务

使用 SRVCTL 实用程序的以下命令创建与可插拔数据库 pdb1 关联的两个数据库服务 hr1 和 sales1:

[[oracle@node1 bin]$ srvctl add service -db cpdb -service hr1 -pdb pdb1 -preferred cpdb1 -available cpdb2

[oracle@node1 bin]$ srvctl add service -db cpdb -service sales1 -pdb pdb1 -preferred cpdb1 -available cpdb2

可以从 data dictionary view all_services 查看 pdb 属性。

SQL>SELECT NAME, PDB FROM all_services;

 NAME                       PDB

pdb1.dbase.lab             PDB1

hr1                        PDB1

sales1                     PDB1

命令 $ srvctl config service –db<databasename> 还列出了可用服务。

b. 在 tnsnames.ora 文件中为所创建的服务创建条目

我们可以创建 hr 应用程序和 sales 应用程序可以分别使用的净服务名称 HR_PDB1 和 SALES_PDB1,以连接到可插拔数据库 pdb1,如下所示:

HR_PDB1 =

(DESCRIPTION =

   (ADDRESS = (PROTOCOL = TCP)(HOST = OracleRACscan.dbase.lab)(PORT = 1521))

   (CONNECT_DATA =

     (SERVER = DEDICATED)

     (SERVICE_NAME = hr1.dbase.lab)

   )

)

SALES_PDB1 =

(DESCRIPTION =

   (ADDRESS = (PROTOCOL = TCP)(HOST = OracleRACscan.dbase.lab)(PORT = 1521))

   (CONNECT_DATA =

     (SERVER = DEDICATED)

     (SERVICE_NAME = sales1.dbase.lab)

   )

)

c. 启动服务

[oracle@nsnode1 bin]$ srvctl status service -db cpdb -service hr1

Service hr1 未运行

 [oracle@nsnode1 bin]$ srvctl start service -db cpdb -service hr1

启动与 pdb 关联的服务会自动以读写模式打开 pdb。

d.连接到数据库服务

用户使用具有 pdb 属性的数据库服务连接到 pdb。

例如,SYS 用户可以使用与 pdb1 关联的数据库服务 HR_PDB1 连接到 pdb1,如下所示:

SQL> connect sys/oracle@HR_PDB1 AS SYSDBA

Connected.

SQL> SHOW CON_ID;

 CON_ID

3

SQL> SHOW CON_NAME;

CON_NAME

PDB1

3.使用 Alter Session 命令连接至 PDB

默认情况下,当您连接到 RAC 实例时,您将连接到 CDB$ROOT。每个 RAC 实例将作为一个整体打开 PDB,系统将提供单个系统图像。当您想要将会话更改为 pdb 时,可以通过更改会话并将容器设置为所需的容器来执行此操作。查询 show con_name 可用于验证当前容器的名称。

[oracle@node1 bin]$ sqlplus / as sysdba

SQL*Plus: Release 12.1.0.1.0 Production on Wed Oct 9 13:56:27 2013

Copyright (c) 1982, 2013, Oracle. All rights reserved. 

连接到:

Oracle Database 12c Enterprise Edition Release 12.1.0.1.0 - 64bit Production

With the Partitioning, Real Application Clusters, Automatic Storage Management, OLAP,

Advanced Analytics and Real Application Testing options

SQL> show con_name;

CON_NAME

CDB$ROOT

SQL> ALTER SESSION SET CONTAINER = PDB1;

Session altered.

SQL> SHOW CON_NAME;

CON_NAME

PDB1

 SQL> ALTER SESSION SET CONTAINER = PDB2;

Session altered.

SQL> SHOW CON_ID;

CON_ID

4

SQL> ALTER SESSION SET CONTAINER = CDB$ROOT;

Session altered.

SQL> SHOW CON_NAME;

CON_NAME

CDB$ROOT

容器 Id 说明如下:
容器 ID 描述
0 整个 CDB
1 CDB$ROOT
2 PDB$SEED
3 至 254 PDB
表 1:  容器 Id 说明

在这个特定的示例中,是 con_id 3 represents pdb1 和 con_id 4 represents pdb2。

grid@node1 bin]$ echo $ORACLE_HOME

/u01/app/12.1.0/grid

 [grid@node1 bin]$ echo $ORACLE_SID

+ASM1

[grid@node1 bin]$ sqlplus / as sysdba

 SQL*Plus:Release 12.1.0.1.0 Production on Wed Oct 9 13:51:39 2013

Copyright (c) 1982, 2013, Oracle.保留所有权利。

连接到:

Oracle Database 12c Enterprise Edition Release 12.1.0.1.0 - 64bit Production

With the Real Application Clusters and Automatic Storage Management options

 SQL> show con_id;

CON_ID

0

 SQL> show con_name;

 CON_NAME

Non Consolidated

4.使用 Enterprise Manager(EM) Express 连接至 PDB

当使用 Database Configuration Assistant (DBCA) 创建数据库时,完成时,EM Express 的 URL 由 DBCA 提供。URL 的格式为 http://<hostname>:portnumber/em,5500 是默认端口 ID。

在转到该 URL 以访问 EM Express 之前,您需要发出以下 SQL 语句以确认 EM Express 端口:

SQL> SELECT dbms_xdb_config.gethttpsport from dual;

GETHTTPSPORT

       5500

如果输出如上所示,则可以通过 DBCA 连接到上面显示的 URL。

但如果输出为空,例如

GETHTTPSPORT

必须执行 PL/SQL 程序 DBMS_XDB_CONFIG.SETHTTPSPORT,设置 EM Express 设置 HTTPS 端口。例如:

SQL> exec dbms_xdb_config.sethttpsport(5500);

已成功完成 PL/SQL 流程。

在此之后,您可以尝试使用 URL 访问 EM Express。

HTTP 端口也可按如下所示为 EM Express 配置:

SQL> select dbms_xdb_config.gethttpport from dual;

 SQL> exec dbms_xdb_config.sethttpport(8080);

要设置 pdbs 的 EM Express 端口,需要将容器更改为相应的 pdbs,并执行 PL/SQL 过程来设置该容器的端口。

完成后,可以检查 cpdb、pdb1 和 pdb2 的 HTTP 端口,如下所示:

SQL> select dbms_xdb_config.gethttpport from dual;

GETHTTPPORT

       8080

SQL> alter session set container = pdb1;

Session altered.

SQL> select dbms_xdb_config.gethttpport from dual;

 GETHTTPPORT

       8081

SQL> alter session set container = pdb2;

Session altered.

SQL> select dbms_xdb_config.gethttpport from dual;

GETHTTPPORT

       8082 
SLN310924_en_US__1icon 提醒:如果您仍然无法连接到 EM Express URL,作为网格用户重新加载侦听器控件,然后重试。

Article Properties


Last Published Date

21 Feb 2021

Version

3

Article Type

Solution