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)との接続を確立するには、次の4つの方法があります。
  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ファイルは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への接続にユーザー定義サービスを使用する

前述のデフォルト サービスは、管理目的でのみ使用し、アプリケーションには使用しないでください。アプリケーションには必ずユーザー定義のサービスを使用してください。ユーザー定義のサービスはアプリケーションの要件に合わせてカスタマイズすることができるためです。ユーザー定義のサービスを使用して接続を確立するには、次の手順に従います。
  1. SRVCTLユーティリティーでPDBプロパティを使用してデータベース サービスを作成します
  2. 作成したサービス用のtnsnames.oraファイルにエントリーを作成します
  3. サービスの開始
  4. 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 
SLN310924_en_US__1icon メモ: 上記を実行してもEM Express URLに接続できない場合は、リスナー コントロールをgridユーザーとして再ロードしてから、もう一度試してください。

Article Properties


Last Published Date

21 Feb 2021

Version

3

Article Type

Solution