プライマリ・コンテンツに移動
Oracle® Database管理者ガイド
12cリリース1 (12.1)
B71301-11
目次へ移動
目次
索引へ移動
索引

前
次

43 SQL*Plusを使用したCDBおよびPDBに関する情報の表示

SQL*Plusを使用してCDBおよびPDBに関する情報を表示できます。

43.1 ビュー内のCDBおよびPDBの情報の概要

マルチテナント・コンテナ・データベース(CDB)では、データ・ディクショナリ表およびビュー定義のメタデータがルートのみに格納されます。ただし、各プラガブル・データベース(PDB)には、そのPDBに含まれているデータベース・オブジェクトに関する、独自のデータ・ディクショナリ表とビューのセットがあります。

各PDBには異なるデータ・オブジェクトとスキーマ・オブジェクトを含めることができるため、各PDBで同じデータ・ディクショナリ・ビューを問い合せても、PDBによってデータ・ディクショナリ・ビューに異なる情報が表示される場合があります。たとえば、2つの異なるPDBでは、DBA_TABLESビューに表示される、表に関する情報が異なる場合があり、これは、PDBごとに異なる表が含まれていることがあるためです。PDBは、メタデータ・リンクと呼ばれる内部メカニズムを使用して、ルート内のこれらのビューのメタデータにアクセスできます。

ディクショナリ表に、各PDBではなくCDB全体に関連する情報が格納される場合は、メタデータと、データ・ディクショナリ・ビューに表示されるデータの両方がルートに格納されます。たとえば、自動ワークロード・リポジトリ(AWR)データはルートに格納され、DBA_HIST_ACTIVE_SESS_HISTORYビューなどの一部のデータ・ディクショナリ・ビューに表示されます。PDBは、オブジェクト・リンクと呼ばれる内部メカニズムを使用して、ルート内のこれらのタイプのビューのメタデータとデータの両方にアクセスできます。

関連項目:

コンテナ、メタデータ・リンクおよびオブジェクト・リンクでのディクショナリ・アクセスの詳細は、『Oracle Database概要』を参照してください。

43.2 現在のコンテナがPDBである場合の情報の表示について

現在のコンテナがPDBである場合、ユーザーは現在のPDBのデータ・ディクショナリ情報のみを表示できます。

特定のPDBに接続されているアプリケーションからは、データ・ディクショナリは非CDBであるかのように見えます。データ・ディクショナリでは、PDBに関連する情報のみを示します。また、PDBでは、対応するDBA_ビューで表示されるデータベース・オブジェクトに関する情報がCDB_ビューにのみ示されます。

43.3 現在のコンテナがルートである場合の情報の表示について

現在のコンテナがルートである場合、共通ユーザーは、コンテナ・データ・オブジェクトを問い合せて、ルートおよびPDBのデータ・ディクショナリ情報を表示できます。

コンテナ・データ・オブジェクトは、次の内容に関連するデータを含めることができる表またはビューです。

  • 1つ以上のコンテナ

  • CDB全体

  • 1つ以上のコンテナおよびCDB全体

コンテナ・データ・オブジェクトには、V$GV$CDB_およびいくつかの自動ワークロード・リポジトリDBA_HIST*のビューが含まれています。共通ユーザーのCONTAINER_DATA属性は、コンテナ・データ・オブジェクトに表示できるPDBを決定します。

CDBでは、すべてのDBA_ビューに、対応するCDB_ビューがあります。すべてのCDB_ビューはコンテナ・データ・オブジェクトですが、ほとんどのDBA_ビューはそうではありません。

各コンテナ・データ・オブジェクトには、返された各行のコンテナを識別するCON_ID列が含まれています。表43-1では、CON_ID列の値の意味について説明します。

表43-1 コンテナ・データ・オブジェクトのCON_ID列

CON_ID列の値 説明

0

CDB全体に関連するデータ

1

ルートに関連するデータ

2

シードに関連するデータ

3 - 254

PDBに関連するデータ

各PDBには独自のコンテナIDがあります。

次のビューは、他の[G]V$ビューとは動作が異なります。

  • [G]V$SYSSTAT

  • [G]V$SYS_TIME_MODEL

  • [G]V$SYSTEM_EVENT

  • [G]V$SYSTEM_WAIT_CLASS

ルートからの問合せにおいて、これらのビューは、返される各行のCON_ID列に0を含めてインスタンス全体のデータを返します。ただし、他のコンテナ・データ・オブジェクトと同じように動作する同等のビューを問い合せできます。[G]V$CON_SYSSTAT[G]V$CON_SYS_TIME_MODEL[G]V$CON_SYSTEM_EVENTおよび[G]V$CON_SYSTEM_WAIT_CLASSの各ビューは、CDB内の各コンテナに固有のデータを返すことができます。

注意:

  • コンテナ・データ・オブジェクトの問合せにおいて返されるデータは、PDBがオープンであるかどうか、および問合せを実行するユーザーに付与された権限によって異なります。

  • Oracle Real Application Clusters (Oracle RAC)環境では、コンテナ・データ・オブジェクトによって返されるデータは、セッションの接続先インスタンスによって変わる場合があります。

  • 非CDBでは、コンテナ・データ・オブジェクト内のすべてのCON_ID列は0 (ゼロ)です。

関連項目:

  • 「現在のコンテナについて」

  • コンテナ・データ・オブジェクトの概要は、『Oracle Database概要』を参照してください。

  • コンテナ・データ・オブジェクトの詳細は、『Oracle Databaseセキュリティ・ガイド』を参照してください。

43.4 CDBのビュー

CDBおよびそのPDBに関する情報をビューのセットに問い合せることができます。

表43-2は、CDBおよびそのPDBの監視に役立つデータ・ディクショナリ・ビューについて説明しています。

表43-2 CDBのビュー

ビュー 説明 詳細情報

次を含むコンテナ・データ・オブジェクト

  • V$ビュー

  • GV$ビュー

  • CDB_ビュー

  • DBA_HIST*ビュー

コンテナ・データ・オブジェクトによって、複数のPDBに関する情報を表示できます。各コンテナ・データ・オブジェクトには、コンテナを識別するためのCON_ID列が含まれています。

対応する各DBA_ビューのCDB_ビューがあります。

「コンテナ・データ・オブジェクトの問合せ」

『Oracle Databaseセキュリティ・ガイド』

{CDB|DBA}_PDBS

各PDBのステータスなど、CDBに関連付けられたPDBに関する情報が表示されます。

「PDBに関する情報の表示」

『Oracle Databaseリファレンス』

CDB_PROPERTIES

CDB内の各コンテナの永続的なプロパティが表示されます。

『Oracle Databaseリファレンス』

{CDB|DBA}_PDB_HISTORY

各PDBの履歴が表示されます。

『Oracle Databaseリファレンス』

{CDB|DBA}_CONTAINER_DATA

CDBに指定されているユーザー・レベルおよびオブジェクト・レベルのCONTAINER_DATA属性に関する情報が表示されます。

『Oracle Databaseリファレンス』

{CDB|DBA}_HIST_PDB_INSTANCE

ワークロード・リポジトリのPDBおよびインスタンスが表示されます。

『Oracle Databaseリファレンス』

{CDB|DBA}_PDB_SAVED_STATES

CDBの現在保存されているPDBの状態に関する情報が表示されます。

『Oracle Databaseリファレンス』

「CDB再起動時のPDBのオープン・モードの保持または破棄」

{CDB|DBA}_CDB_RSRC_PLANS

すべてのCDBリソース・プランに関する情報が表示されます。

『Oracle Databaseリファレンス』

「CDBリソース・プランの表示」

{CDB|DBA}_CDB_RSRC_PLAN_DIRECTIVES

すべてのCDBリソース・プラン・ディレクティブに関する情報が表示されます。

『Oracle Databaseリファレンス』

「CDBリソース・プラン・ディレクティブの表示」

PDB_ALERTS

PDBアラートの理由の説明が示されます。

『Oracle Databaseリファレンス』

PDB_PLUG_IN_VIOLATIONS

PDBと、それが属するCDB間の非互換性に関する情報が表示されます。このビューは、DBMS_PDB.CHECK_PLUG_COMPATIBILITYを実行して生成される情報を表示するためにも使用されます。

『Oracle Databaseリファレンス』

「CDBへの切断されたPDBの接続によるPDBの作成」

{USER|ALL|DBA|CDB}_OBJECTS

データベース・オブジェクトに関する情報が表示され、SHARING列に、データベース・オブジェクトがメタデータ・リンク・オブジェクトであるか、オブジェクト・リンク・オブジェクトであるか、または別のオブジェクトにリンクされていないスタンドアロン・オブジェクトであるかが示されます。

『Oracle Databaseリファレンス』

{ALL|DBA|CDB}_SERVICES

データベース・サービスに関する情報が表示され、PDB列に、各サービスに関連付けられているPDBの名前が示されます。

『Oracle Databaseリファレンス』

{USER|ALL|DBA|CDB}_VIEWS

{USER|ALL|DBA|CDB}_TABLES

CONTAINER_DATA列に、ビューまたは表がコンテナ・データ・オブジェクトであるかどうかが示されます。

{USER|ALL|DBA|CDB}_USERS

COMMON列に、ユーザーが共通ユーザーであるかローカル・ユーザーであるかが示されます。

{USER|ALL|DBA|CDB}_ROLES

{USER|ALL|DBA|CDB}_COL_PRIVS

{USER|ALL}_COL_PRIVS_MADE

{USER|ALL}_COL_PRIVS_RECD

{USER|ALL}_TAB_PRIVS_MADE

{USER|ALL}_TAB_PRIVS_RECD

{USER|DBA|CDB}_SYS_PRIVS

{USER|DBA|CDB}_ROLE_PRIVS

ROLE_TAB_PRIVS

ROLE_SYS_PRIVS

COMMON列に、ロールまたは権限が共通に付与されているか、またはローカルに付与されているかが示されます。

{USER|ALL|DBA|CDB}_ARGUMENTS

{USER|ALL|DBA|CDB}_CLUSTERS

{USER|ALL|DBA|CDB}_CONSTRAINTS

{ALL|DBA|CDB}_DIRECTORIES

{USER|ALL|DBA|CDB}_IDENTIFIERS

{USER|ALL|DBA|CDB}_LIBRARIES

{USER|ALL|DBA|CDB}_PROCEDURES

{USER|ALL|DBA|CDB}_SOURCE

{USER|ALL|DBA|CDB}_SYNONYMS

{USER|ALL|DBA|CDB}_VIEWS

ORIGIN_CON_ID列は、行の元のコンテナIDを示します。

[G]V$DATABASE

制御ファイルからの、データベースに関する情報が表示されます。データベースがCDBである場合は、CDB関連の情報が含まれます。

「データベースがCDBであるかどうかの判断」

『Oracle Databaseリファレンス』

[G]V$CONTAINERS

ルートおよびすべてのPDBを含む、現在のCDBに関連付けられているコンテナに関する情報が表示されます。

「CDB内のコンテナに関する情報の表示」

『Oracle Databaseリファレンス』

[G]V$PDBS

各PDBのオープン・モードなど、現在のCDBに関連付けられているPDBに関する情報が表示されます。

「各PDBのオープン・モードの表示」

『Oracle Databaseリファレンス』

[G]V$PDB_INCARNATION

すべてのPDBインカネーションに関する情報が表示されます。RESETLOGSオプションを指定してPDBをオープンすると、新規のPDBインカネーションが作成されます。

『Oracle Databaseリファレンス』

[G]V$SYSTEM_PARAMETER

[G]V$PARAMETER

初期化パラメータに関する情報が表示され、ISPDB_MODIFIABLE列にPDBのパラメータを変更できるかどうかが示されます。

「PDBで変更可能な初期化パラメータをリスト」

『Oracle Databaseリファレンス』

43.5 データベースがCDBであるかどうかの判断

V$DATABASEビューのCDB列を問い合せて、データベースがCDBであるか非CDBであるかを判断できます。CDB列は、現在のデータベースがCDBの場合はYESを返し、現在のデータベースが非CDBの場合はNOを返します。

データベースがCDBであるかどうかを判断する手順は、次のとおりです。

  1. SQL*Plusで、管理ユーザーとしてデータベースに接続します。

  2. V$DATABASEビューを問い合せます。

例43-1 データベースがCDBであるかどうかの判断

SELECT CDB FROM V$DATABASE;

出力例:

CDB
---
YES

関連項目:

『Oracle Databaseリファレンス』

43.6 CDB内のコンテナに関する情報の表示

V$CONTAINERSビューは、ルートおよびすべてのPDBを含む、CDB内のすべてのコンテナに関する情報を提供します。

この情報を表示するには、現在のコンテナがルートである共通ユーザーが問合せを実行する必要があります。現在のコンテナがPDBである場合、このビューには現在のPDBに関する情報のみが表示されます。

CDB内のコンテナに関する情報を表示する手順は、次のとおりです。

  1. SQL*Plusで、現在のコンテナがルートであることを確認します。

    「SQL*Plusを使用したCDB内のコンテナへのアクセス」を参照してください。

  2. V$CONTAINERSビューを問い合せます。

例43-2 CDB内の各コンテナに関する識別情報の表示

COLUMN NAME FORMAT A8

SELECT NAME, CON_ID, DBID, CON_UID, GUID FROM V$CONTAINERS ORDER BY CON_ID;

出力例:

NAME         CON_ID       DBID    CON_UID GUID
-------- ---------- ---------- ---------- --------------------------------
CDB$ROOT          1  659189539          1 C091A6F89C7572A1E0436797E40AC78D
PDB$SEED          2 4026479912 4026479912 C091AE9C00377591E0436797E40AC138
HRPDB             3 3718888687 3718888687 C091B6B3B53E7834E0436797E40A9040
SALESPDB          4 2228741407 2228741407 C091FA64EF8F0577E0436797E40ABE9F

43.7 PDBに関する情報の表示

CDB_PDBSビューおよびDBA_PDBSビューは、各PDBのステータスなど、CDBに関連付けられたPDBに関する情報を提供します。

この情報を表示するには、現在のコンテナがルートである共通ユーザーが問合せを実行する必要があります。現在のコンテナがPDBである場合は、これらのビューに対するすべての問合せで結果が返されません。

PDBに関する情報を表示する手順は、次のとおりです。

  1. SQL*Plusで、現在のコンテナがルートであることを確認します。

    「SQL*Plusを使用したCDB内のコンテナへのアクセス」を参照してください。

  2. CDB_PDBSまたはDBA_PDBSビューを問い合せます。

例43-3 各PDBのコンテナID、名前およびステータスの表示

COLUMN PDB_NAME FORMAT A15
 
SELECT PDB_ID, PDB_NAME, STATUS FROM DBA_PDBS ORDER BY PDB_ID;

出力例:

    PDB_ID PDB_NAME        STATUS
---------- --------------- -------------
         2 PDB$SEED        NORMAL
         3 HRPDB           NORMAL
         4 SALESPDB        NORMAL

43.8 各PDBのオープン・モードの表示

V$PDBSビューは、現在のデータベース・インスタンスに関連付けられたPDBに関する情報を提供します。

このビューを問い合せて、各PDBのオープン・モードを判断します。オープンしている各PDBについて、このビューでは、PDBが最後にオープンされたかのがいつであるかを表示することもできます。共通ユーザーは、現在のコンテナがルートまたはPDBである場合にこのビューを問い合せることができます。現在のコンテナがPDBである場合、このビューには現在のPDBに関する情報のみが表示されます。

各PDBのオープン・ステータスを表示する手順は、次のとおりです。

  1. SQL*Plusでコンテナにアクセスします。

    「SQL*Plusを使用したCDB内のコンテナへのアクセス」を参照してください。

  2. V$PDBSビューを問い合せます。

例43-4 各PDBの名前およびオープン・モードの表示

COLUMN NAME FORMAT A15
COLUMN RESTRICTED FORMAT A10
COLUMN OPEN_TIME FORMAT A30
 
SELECT NAME, OPEN_MODE, RESTRICTED, OPEN_TIME FROM V$PDBS;

出力例:

NAME            OPEN_MODE  RESTRICTED OPEN_TIME
--------------- ---------- ---------- ------------------------------
PDB$SEED        READ ONLY  NO         21-MAY-12 12.19.54.465 PM
HRPDB           READ WRITE NO         21-MAY-12 12.34.05.078 PM
SALESPDB        MOUNTED    NO         22-MAY-12 10.37.20.534 AM

43.9 コンテナ・データ・オブジェクトの問合せ

ルートでは、コンテナ・データ・オブジェクトは、ルートおよびそのPDBに含まれるデータベース・オブジェクト(表やユーザーなど)に関する情報を表示できます。PDB情報へのアクセスは、共通ユーザーのCONTAINER_DATA属性によって制御されます。

たとえば、CDB_ビューはコンテナ・データ・オブジェクトです。コンテナ・データ・オブジェクトの詳細は、「現在のコンテナがルートである場合の情報の表示について」および『Oracle Databaseセキュリティ・ガイド』を参照してください。

各コンテナ・データ・オブジェクトには、問合せ結果内の各PDBのコンテナIDが表示されたCON_ID列が含まれています。DBA_PDBSビューを問い合せて、コンテナIDのPDB名を表示できます。

コンテナ・データ・オブジェクトを使用して複数のPDBに関する情報を表示する手順は、次のとおりです。

  1. SQL*Plusで、現在のコンテナがルートであることを確認します。

    「SQL*Plusを使用したCDB内のコンテナへのアクセス」を参照してください。

  2. コンテナ・データ・オブジェクトを問い合せて、目的の情報を表示します。

注意:

問合せにコンテナ・データ・オブジェクトおよび非コンテナ・データ・オブジェクトの結合が含まれ、現在のコンテナがルートである場合、問合せはCDB全体のデータのみを返します(CON_ID = 0)。

関連項目:

  • 「現在のコンテナについて」

  • コンテナ・データ・オブジェクトの概要は、『Oracle Database概要』を参照してください。

  • コンテナ・データ・オブジェクトの詳細は、『Oracle Databaseセキュリティ・ガイド』を参照してください。

例43-5 複数のPDBの特定のスキーマが所有する表の表示

この例では、ルートからDBA_PDBSビューおよびCDB_TABLESビューを問い合せて、CDBに関連付けられているPDBのhrユーザーおよびoeユーザーが所有する表を表示します。この問合せは、PDBのIDが2より大きい(p.PDB_ID > 2)行のみを返すことで、ルートおよびシードのユーザーを表示しないようにしています。

COLUMN PDB_NAME FORMAT A15
COLUMN OWNER FORMAT A15
COLUMN TABLE_NAME FORMAT A30
 
SELECT p.PDB_ID, p.PDB_NAME, t.OWNER, t.TABLE_NAME 
  FROM DBA_PDBS p, CDB_TABLES t 
  WHERE p.PDB_ID > 2 AND
        t.OWNER IN('HR','OE') AND
        p.PDB_ID = t.CON_ID
  ORDER BY p.PDB_ID;

出力例:

    PDB_ID PDB_NAME        OWNER           TABLE_NAME
---------- --------------- --------------- ------------------------------
         3 HRPDB           HR              COUNTRIES
         3 HRPDB           HR              JOB_HISTORY
         3 HRPDB           HR              EMPLOYEES
         3 HRPDB           HR              JOBS
         3 HRPDB           HR              DEPARTMENTS
         3 HRPDB           HR              LOCATIONS
         3 HRPDB           HR              REGIONS
         4 SALESPDB        OE              PRODUCT_INFORMATION
         4 SALESPDB        OE              INVENTORIES
         4 SALESPDB        OE              ORDERS
         4 SALESPDB        OE              ORDER_ITEMS
         4 SALESPDB        OE              WAREHOUSES
         4 SALESPDB        OE              CUSTOMERS
         4 SALESPDB        OE              SUBCATEGORY_REF_LIST_NESTEDTAB
         4 SALESPDB        OE              PRODUCT_REF_LIST_NESTEDTAB
         4 SALESPDB        OE              PROMOTIONS
         4 SALESPDB        OE              PRODUCT_DESCRIPTIONS

この出力例では、PDB hrpdbhrスキーマの表があり、PDB salespdboeスキーマの表があることを示しています。

例43-6 複数のPDBのユーザーの表示

この例では、ルートからDBA_PDBSビューおよびCDB_USERSビューを問い合せて、各PDBのユーザーを表示します。この問合せでは、p.PDB_ID > 2を使用して、ルートおよびシードのユーザーを表示しないようにしています。

COLUMN PDB_NAME FORMAT A15
COLUMN USERNAME FORMAT A30
 
SELECT p.PDB_ID, p.PDB_NAME, u.USERNAME 
  FROM DBA_PDBS p, CDB_USERS u
  WHERE p.PDB_ID > 2 AND
        p.PDB_ID = u.CON_ID
  ORDER BY p.PDB_ID;

出力例:

    PDB_ID PDB_NAME        USERNAME
---------- --------------- ------------------------------
         .
         .
         .
         3 HRPDB           HR
         3 HRPDB           OLAPSYS
         3 HRPDB           MDSYS
         3 HRPDB           ORDSYS
         .
         .
         .
         4 SALESPDB        OE
         4 SALESPDB        CTXSYS
         4 SALESPDB        MDSYS
         4 SALESPDB        EXFSYS
         4 SALESPDB        OLAPSYS
         .
         .
         .

例43-7 CDB内の各PDBのデータファイルの表示

この例では、DBA_PDBSおよびCDB_DATA_FILESビューを問い合せて、シードなど、CDB内のすべてのPDBの各データファイルの名前と場所を表示します。

COLUMN PDB_ID FORMAT 999
COLUMN PDB_NAME FORMAT A8
COLUMN FILE_ID FORMAT 9999
COLUMN TABLESPACE_NAME FORMAT A10
COLUMN FILE_NAME FORMAT A45

SELECT p.PDB_ID, p.PDB_NAME, d.FILE_ID, d.TABLESPACE_NAME, d.FILE_NAME
  FROM DBA_PDBS p, CDB_DATA_FILES d
  WHERE p.PDB_ID = d.CON_ID
  ORDER BY p.PDB_ID;

出力例:

PDB_ID PDB_NAME FILE_ID TABLESPACE FILE_NAME
------ -------- ------- ---------- ---------------------------------------------
     2 PDB$SEED       6 SYSAUX     /disk1/oracle/dbs/pdbseed/cdb1_ax.f
     2 PDB$SEED       5 SYSTEM     /disk1/oracle/dbs/pdbseed/cdb1_db.f
     3 HRPDB          9 SYSAUX     /disk1/oracle/dbs/hrpdb/hrpdb_ax.f
     3 HRPDB          8 SYSTEM     /disk1/oracle/dbs/hrpdb/hrpdb_db.f
     3 HRPDB         13 USER       /disk1/oracle/dbs/hrpdb/hrpdb_usr.dbf
     4 SALESPDB      15 SYSTEM     /disk1/oracle/dbs/salespdb/salespdb_db.f
     4 SALESPDB      16 SYSAUX     /disk1/oracle/dbs/salespdb/salespdb_ax.f
     4 SALESPDB      18 USER       /disk1/oracle/dbs/salespdb/salespdb_usr.dbf

例43-8 CDB内の一時ファイルの表示

この例では、CDB_TEMP_FILESビューを問い合せて、CDB内の各一時ファイルの名前と場所、および一時ファイルを使用する表領域を表示します。

COLUMN CON_ID FORMAT 999
COLUMN FILE_ID FORMAT 9999
COLUMN TABLESPACE_NAME FORMAT A15
COLUMN FILE_NAME FORMAT A45

SELECT CON_ID, FILE_ID, TABLESPACE_NAME, FILE_NAME
  FROM CDB_TEMP_FILES
  ORDER BY CON_ID;

出力例:

CON_ID FILE_ID TABLESPACE_NAME FILE_NAME
------ ------- --------------- ---------------------------------------------
     1       1 TEMP            /disk1/oracle/dbs/t_tmp1.f
     2       2 TEMP            /disk1/oracle/dbs/pdbseed/t_tmp1.f
     3       3 TEMP            /disk1/oracle/dbs/hrpdb/t_hrpdb_tmp1.f
     4       4 TEMP            /disk1/oracle/dbs/salespdb/t_salespdb_tmp1.f

例43-9 PDBに関連付けられているサービスの表示

この例では、CDB_SERVICESビューを問い合せて、PDB名、ネットワーク名、およびPDBに関連付けられている各サービスのコンテナIDを表示します。

COLUMN NETWORK_NAME FORMAT A30
COLUMN PDB FORMAT A15
COLUMN CON_ID FORMAT 999

SELECT PDB, NETWORK_NAME, CON_ID FROM CDB_SERVICES
  WHERE PDB IS NOT NULL AND
        CON_ID > 2
  ORDER BY PDB;

出力例:

PDB             NETWORK_NAME                   CON_ID
--------------- ------------------------------ ------
HRPDB           hrpdb.example.com                   3
SALESPDB        salespdb.example.com                4

関連項目:

『Oracle Databaseリファレンス』

43.10 すべてのPDB間でのユーザーが作成した表およびビューの問合せ

CONTAINERS句を使用すると、CDB内のすべてのPDB間でユーザーが作成した表およびビューを問い合せることができます。この句により、CDB内のすべてのオープンPDBに存在する表またはビューのデータを表示するために、ルートからの問合せが可能になります。

注意:

この機能は、Oracle Database 12cリリース1 (12.1.0.2)以上で使用できます。

次の前提条件を満たしている必要があります。

  • CONTAINERS句に指定した表およびビュー、またはそのシノニムは、ルートおよびすべてのPDBに存在する必要があります。

  • CONTAINERS句に指定した各表およびビューは、文を発行する共通ユーザーが所有している必要があります。CONTAINERS句にシノニムを指定した場合、そのシノニムは文を発行する共通ユーザーが所有している表またはビューに解決される必要があります。

次の型の列は、CONTAINERS句で指定された表内に存在する場合は削除されます。

  • ユーザー定義型: オブジェクト型、VARRAY、REFおよびネストした表

  • Oracle提供型: ANYTYPEANYDATASET、URI型、SDO_TOPO_GEOMETRYSDO_GEORASTERおよびExpression

CONTAINERS句を使用してすべてのPDB間で表およびビューを問い合せるには、次の手順を実行します。

  1. SQL*Plusでコンテナにアクセスします。

    複数のPDBのデータを表示する場合は、現在のコンテナがルートであることを確認します。

    「SQL*Plusを使用したCDB内のコンテナへのアクセス」を参照してください。

  2. CONTAINERS句を含む問合せを実行します。

例43-10 すべてのPDB間での共通ユーザーが所有する表の問合せ

この例では、次のことを想定しています。

  • 組織に複数のPDBがあり、各PDBは組織内のそれぞれ異なる部門のものです。

  • 各PDBには、部門の従業員を追跡管理するemployees表がありますが、各PDBの表には別個の従業員が含まれます。

  • また、ルートには空のemployees表があります。

  • 各コンテナのemployees表は、同じ共通ユーザーが所有します。

ルートを現在のコンテナとし、表を所有する共通ユーザーを現行ユーザーとして、CONTAINERS句を指定した次の問合せを実行し、すべてのPDBのemployees表の全従業員を返します。

SELECT * FROM CONTAINERS(employees);

例43-11 すべてのPDB間でのローカル・ユーザーが所有する表の問合せ

この例では、次のことを想定しています。

  • 組織に複数のPDBがあり、各PDBは組織内のそれぞれ異なる部門のものです。

  • 各PDBには、部門の従業員を追跡管理するhr.employees表がありますが、各PDBの表には別個の従業員が含まれます。

  • また、ルートには、共通ユーザーが所有する空のemployees表があります。

すべてのPDBの全従業員を返す問合せを実行するには、まず共通ユーザーとして各PDBに接続し、次の文を使用してビューを作成します。

CREATE OR REPLACE VIEW employees AS SELECT * FROM hr.employees;

ビューを所有する共通ユーザーは、ルートのemployees表を所有する共通ユーザーと同じである必要があります。各PDBでこの文を実行すると、共通ユーザーは各PDBにemployeesという名前のビューを保持します。

ルートを現在のコンテナとし、共通ユーザーを現行ユーザーとして、CONTAINERS句を指定した次の問合せを実行し、すべてのPDBのhr.employees表の全従業員を返します。

SELECT * FROM CONTAINERS(employees);

特定のコンテナのビューを問い合せることもできます。たとえば、次のSQL文では、CON_ID3および4のコンテナのビューを問い合せます。

SELECT * FROM CONTAINERS(employees) WHERE CON_ID IN(3,4);

注意:

CONTAINERS句を使用してオラクル社提供の表およびビューを問い合せることもできます。この問合せを実行する際、現行ユーザーが表またはビューの所有者であることを確認するか、CONTAINERS句を使用してビューを作成し、そのビューに対するSELECT権限を適切なユーザーに付与します。

関連項目:

  • 「現在のコンテナについて」

  • CONTAINERS句の詳細は、『Oracle Database SQL言語リファレンス』を参照してください。

  • コンテナ・データ・オブジェクトの概要は、『Oracle Database概要』を参照してください。

  • コンテナ・データ・オブジェクトの詳細は、『Oracle Databaseセキュリティ・ガイド』を参照してください。

43.11 現在のコンテナのIDまたは名前の判別

CDB内の現在のコンテナIDまたはコンテナ名を判別できます。

現在のコンテナIDを判別する手順は、次のとおりです。

  • 次のSQL*Plusコマンドを実行します。

    SHOW CON_ID
    

現在のコンテナ名を判別する手順は、次のとおりです。

  • 次のSQL*Plusコマンドを実行します。

    SHOW CON_NAME
    

また、表43-3にリストされたファンクションを使用して、コンテナのコンテナIDを判別することもできます。

表43-3 コンテナのコンテナIDを返すファンクション

ファンクション 説明

CON_NAME_TO_ID('container_name')

コンテナの名前に基づいてコンテナIDを返します。

CON_DBID_TO_ID(container_dbid)

コンテナのDBIDに基づいてコンテナIDを返します。

CON_UID_TO_ID(container_uid)

コンテナの一意識別子(UID)に基づいてコンテナIDを返します。

CON_GUID_TO_ID(container_guid)

コンテナのグローバル一意識別子(GUID)に基づいてコンテナIDを返します。

V$CONTAINERSビューには、CDB内の各コンテナの名前、DBID、UIDおよびGUIDが表示されます。

例43-12 コンテナの名前に基づいたコンテナIDの戻し

SELECT CON_NAME_TO_ID('HRPDB') FROM DUAL;

例43-13 コンテナDBIDに基づいたコンテナIDの戻し

SELECT CON_DBID_TO_ID(2226957846) FROM DUAL;

関連項目:

43.12 PDBで変更可能な初期化パラメータをリスト

CDBでは、一部の初期化パラメータがルートおよびすべてのPDBに適用されます。このような初期化パラメータが変更されると、CDB全体に影響を与えます。他の初期化パラメータは、各コンテナで異なる値に設定できます。

たとえば、1つのパラメータについて、ルートで1つの値を設定し、あるPDBで別の値を設定し、2番目のPDBではさらに別の値を設定できます。

この項で示す問合せによって、各PDBで個別に設定できる初期化パラメータがリストされます。

各コンテナで変更可能な初期化パラメータをリストする手順は、次のとおりです。

  1. SQL*Plusでコンテナにアクセスします。

    「SQL*Plusを使用したCDB内のコンテナへのアクセス」を参照してください。

  2. 次の問合せを実行します。

    SELECT NAME FROM V$SYSTEM_PARAMETER
      WHERE ISPDB_MODIFIABLE = 'TRUE'
      ORDER BY NAME;
    

この問合せでリストされた初期化パラメータがPDBに個別に設定されていない場合、PDBではルートのパラメータ値が継承されます。

43.13 PDBの履歴の表示

CDB_PDB_HISTORYビューには、CDB内のPDBの履歴が表示されます。各PDBがいつどのように作成されたかに関する情報、および各PDBの履歴に関するその他の情報を提供します。

各PDBの履歴を表示する手順は、次のとおりです。

  1. SQL*Plusで、現在のコンテナがルートであることを確認します。

    「SQL*Plusを使用したCDB内のコンテナへのアクセス」を参照してください。

  2. CDB_PDB_HISTORYビューを問い合せます。

例43-14 PDBの履歴の表示

この例では、各PDBの履歴に関する次の情報を表示します。

  • DB_NAMEフィールドには、PDBが含まれているCDBが表示されます。

  • CON_IDフィールドには、PDBのコンテナIDが表示されます。

  • PDB_NAMEフィールドには、PDBのいずれかのインカネーションでのPDBの名前が表示されます。

  • OPERATIONフィールドには、PDBの履歴で実行された操作が表示されます。

  • OP_TIMESTAMPフィールドには、操作が実行された日付が表示されます。

  • PDBが操作でクローニングされた場合、CLONED_FROM_PDBフィールドにはPDBのクローニング元となるPDBが表示されます。

COLUMN DB_NAME FORMAT A10
COLUMN CON_ID FORMAT 999
COLUMN PDB_NAME FORMAT A15
COLUMN OPERATION FORMAT A16
COLUMN OP_TIMESTAMP FORMAT A10
COLUMN CLONED_FROM_PDB_NAME FORMAT A15
 
SELECT DB_NAME, CON_ID, PDB_NAME, OPERATION, OP_TIMESTAMP, CLONED_FROM_PDB_NAME
  FROM CDB_PDB_HISTORY
  WHERE CON_ID > 2
  ORDER BY CON_ID;

出力例:

DB_NAME    CON_ID PDB_NAME        OPERATION        OP_TIMESTA CLONED_FROM_PDB
---------- ------ --------------- ---------------- ---------- ---------------
NEWCDB          3 HRPDB           CREATE           10-APR-12  PDB$SEED
NEWCDB          4 SALESPDB        CREATE           17-APR-12  PDB$SEED
NEWCDB          5 TESTPDB         CLONE            30-APR-12  SALESPDB

注意:

現在のコンテナがPDBである場合、CDB_PDB_HISTORYビューには、現在のPDBの履歴のみが表示されます。現在のコンテナがPDBであるローカル・ユーザーは、DBA_PDB_HISTORYビューを問い合せ、問合せからCON_ID列を除外して、現在のPDBの履歴を表示できます。