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 applies to   This article does not apply to 

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)

   )

)

變更可插拔資料庫的狀態:

建立 pdb 後,預設的 open_mode 為僅「Mounted」。您可以透過以下方法驗證:

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:於 2013 年 10 月 8 日星期二 11:23:32 推出版本 12.1.0.1.0

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

連線至:

Oracle 資料庫 12c Enterprise Edition 版本 12.1.0.1.0 - 64 位元生產環境,搭配 Partitioning、Real Application Clusters、Automatic Storage Management、OLAP、Advanced Analytics 和 Real Application Testing 選項

2.使用使用者定義的服務連線至 PDB

上述預設服務僅應用於系統管理用途,且不應用於應用程式。使用者定義的服務一律必須用於應用程式,因為使用者定義的服務可根據應用程式的需求進行自訂。透過使用者定義服務建立連線包含下列步驟:
  1. 透過 SRVCTL 公用程式使用 PDB 屬性建立資料庫服務
  2. 在建立之服務的 tnsnames.ora 檔案中建立項目
  3. 啟動服務
  4. 運用在步驟 a 中以 pdb 屬性建立的服務連線至資料庫
a. 透過 SRVCTL 公用程式使用 PDB 屬性建立資料庫服務

下列命令使用 SRVCTL 公用程式,建立兩個資料庫服務 hr1 和 sales1,與可插拔資料庫 pdb1 建立關聯:

[[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

可從資料字典的 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_PDB1 和 SALES_PDB1 網路服務名稱,分別供 hr 應用程式和 sales 應用程式使用,以連接至可插拔資料庫 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 is not running

 [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 時,您便可以變更工作階段並將容器設定至所需的容器。可使用顯示 con_name 的查詢來驗證目前容器的名稱。

[oracle@node1 bin]$ sqlplus / as sysdba

SQL*Plus: 版本 12.1.0.1.0 上線於 2013 年 10 月 9 日星期三 13:56:27

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

連線至:

Oracle 資料庫 12c Enterprise Edition 版本 12.1.0.1.0 - 64bit 生產環境

搭配 Partitioning、Real Application Clusters、Automatic Storage Management、OLAP、

Advanced Analytics 和 Real Application Testing 選項

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 代表 pdb1,con_id 4 代表 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: 版本 12.1.0.1.0 上線於 2013 年 10 月 9 日星期三 13:51:39

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

連接至:

Oracle Database 12c Enterprise Edition 版本 12.1.0.1.0 - 64 位元生產環境

搭配 Real Application Clusters 和 Automatic Storage Management 選項

 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) 建立時,在完成時會 DBCA 會提供 EM Express 的 URL。URL 的格式為 http://<hostname>:portnumber/em,預設連接埠 ID 為 5500。

在前往 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 procedure successfully completed.

接著嘗試使用 URL 存取 EM Express。

亦可為 EM Express 設定 HTTP 連接埠,如下所示:

SQL> select dbms_xdb_config.gethttpport from dual;

 SQL> exec dbms_xdb_config.sethttpport(8080);

若要為 pdb 設定 EM Express 連接埠,需要將容器變更至個別 pdb,並執行 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
Article Number: 000146485
Article Type: Solution
Last Modified: 21 Feb 2021
Version:  3
Find answers to your questions from other Dell users
Support Services
Check if your device is covered by Support Services.
Article Properties
Article Number: 000146485
Article Type: Solution
Last Modified: 21 Feb 2021
Version:  3
Find answers to your questions from other Dell users
Support Services
Check if your device is covered by Support Services.