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)

   )

)

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

建立 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


Last Published Date

21 Feb 2021

Version

3

Article Type

Solution