Oracle RAC 12cR1でプラガブル データベースに接続する方法を教えてください。
Summary: 当社の信念は、データベース ソリューション、カスタム開発、ダイナミック データセンター、柔軟なコンピューティングを提供することによりITを簡素化するソリューションを提供することです
This article applies to
This article does not apply to
This article is not tied to any specific product.
Not all product versions are identified in this article.
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)および
ストレージ プラットフォーム - Dell EqualLogic PS 5000およびDell EqualLogic PS 6110
問題:
Oracle RAC 12cR1でプラガブル データベースに接続する方法
解決策:
プラガブル データベース(PDB)との接続を確立するには、次の4つの方法があります。
デフォルト サービスを使用してPDBとの接続を確立するには、次の手順を実行する必要があります。
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ユーティリティーを使用して次のコマンドを実行し、プラガブル データベース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の説明は次のとおりです。
表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ユーザーとして再ロードしてから、もう一度試してください。
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を使用する方法
デフォルト サービスを使用してPDBとの接続を確立するには、次の手順を実行する必要があります。
- tnsnames.oraファイルにエントリーを作成する必要があります。ファイルにデータベースのアドレスを定義して、データベースとの接続を確立します。
- pdbのステータスをマウント済みから読み取り/書き込みモードに変更する必要があります。
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で作成)
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 |
この特定の例では、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ユーザーとして再ロードしてから、もう一度試してください。
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.