適用対象:
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)との接続を確立するには、次の4つの方法があります。
- pdb名と同じ名前のデフォルト サービスを使用する方法。これはデータベース ソフトウェアによって自動的に作成されます。
- ユーザー定義サービスを使用する方法。SRVCTLユーティリティーでpdbプロパティを使用して作成します。これによりサービスをプラガブル データベースに関連付けます。
- alter sessionコマンドを使用して、コンテナーを目的のコンテナーに設定する方法
- Enterprise Manager Expressを使用する方法
1. PDBへの接続にデフォルト サービスを使用する
デフォルト サービスを使用してPDBとの接続を確立するには、次の手順を実行する必要があります。
- tnsnames.oraファイルにエントリーを作成する必要があります。ファイルにデータベースのアドレスを定義して、データベースとの接続を確立します。
- pdbのステータスをマウント済みから読み取り/書き込みモードに変更する必要があります。
tnsnames.oraファイルにエントリーを作成する:
Oracle RAC 12cの場合、プラガブル データベース名と同じ名前でデフォルト サービスが自動的にデータベース ソフトウェアによって作成されますが、tnsnames.oraファイルは1エントリーのみで生成され、グローバル データベースに属します。例えば、2ノードのOracle RAC 12cの場合、cpdbはグローバル データベースで、pdb1とpdb2は作成された2つのプラガブル データベースで、cpdb1とcpdb2は2つのインスタンスです。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: Release 12.1.0.1.0 Production on Tue Oct 8 11:23:32 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, Real Application Clusters, Automatic Storage Management, OLAP, Advanced Analytics and Real Application Testing options
2. PDBへの接続にユーザー定義サービスを使用する
前述のデフォルト サービスは、管理目的でのみ使用し、アプリケーションには使用しないでください。アプリケーションには必ずユーザー定義のサービスを使用してください。ユーザー定義のサービスはアプリケーションの要件に合わせてカスタマイズすることができるためです。ユーザー定義のサービスを使用して接続を確立するには、次の手順に従います。
- SRVCTLユーティリティーでPDBプロパティを使用してデータベース サービスを作成します
- 作成したサービス用のtnsnames.oraファイルにエントリーを作成します
- サービスの開始
- pdbプロパティを付けてサービスを使用してデータベースを接続します(ステップaで作成)
a. SRVCTLユーティリティーを使用してPDBプロパティでデータベース サービスを作成する
SRVCTLユーティリティーを使用して次のコマンドを実行し、プラガブル データベースpdb1に関連付ける2つのデータベース サービス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
pdbプロパティは、データ ディクショナリ ビューのall_servicesから表示できます。
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アプリケーションがそれぞれプラガブル データベースpdb1に接続するために使用できる、HR_PDB1と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.PDBへの接続にAlter Sessionコマンドを使用する
デフォルトでは、RACインスタンスに接続する場合は、CDB$ROOTに接続します。各RACインスタンスは、全体としてPDBを開き、1つのシステム イメージを使用できます。セッションを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.
Connected to:
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は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: Release 12.1.0.1.0 Production on Wed Oct 9 13:51:39 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 Real Application Clusters and Automatic Storage Management options
SQL> show con_id;
CON_ID
0
SQL> show con_name;
CON_NAME
Non Consolidated
4. PDBへの接続にENTERPRISE Manager (EM) Expressを使用する
Database Configuration Assistant (DBCA)を使用してデータベースを作成すると、完了時にEM ExpressのURLがDBCAによって提供されます。URLの形式は、http://<hostname>:p ortnumber/emで、デフォルトのポートIDは5500です。
EM Expressにアクセスするには、そのURLに進む前に、次のSQLステートメントを発行して、EM Expressのポートを確認する必要があります。
SQL> SELECT dbms_xdb_config.gethttpsport from dual;
GETHTTPSPORT
5500
出力が上記の通りである場合は、DBCAによって表示されるURLに接続できます。
ただし、出力が次のようにnullの場合は、
GETHTTPSPORT
PL/SQLプロシージャのDBMS_XDB_CONFIG.SETHTTPSPORTを実行して、EM ExpressのHTTPSポートを設定する必要があります。例:
SQL> exec dbms_xdb_config.sethttpsport(5500);
PL/SQL手順が正常に完了しました。
この後、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
メモ: 上記を実行してもEM Express URLに接続できない場合は、リスナー コントロールをgridユーザーとして再ロードしてから、もう一度試してください。