日本語PDF

21 マルチテナント環境でのデータベース・ユーティリティの使用

マルチテナント環境で、Oracle Data Pump、DBNEWID、Oracle LogMinerなどのユーティリティを使用できます。

CDBでのデータのインポートおよびエクスポート

Oracle Data Pumpテクノロジを使用すると、データおよびメタデータをデータベース間で非常に高速に移動できます。

マルチテナント環境でのデータ・ポンプの使用について

一般的に、PDBでデータ・ポンプを使用することは、非CDBでデータ・ポンプを使用することと同じです。

マルチテナント・コンテナ・データベース(CDB)は、0、1または多数のユーザー作成のプラガブル・データベース(PDB)を含むOracleのデータベースです。PDBは、スキーマ、スキーマ・オブジェクトおよび非スキーマ・オブジェクトのポータブル・セットで、Oracle Netクライアントからは、非CDBとして表示されます。非CDBとは、CDBではないOracle Databaseです。

データ・ポンプを使用して、次のシナリオでデータベースの一部またはすべてを移行できます。

  • 非CDBからPDBへ

  • 同じCDBまたは異なるCDB内のPDB間

  • PDBから非CDBへ

ノート:

データ・ポンプでは、CDB全体にわたる操作はサポートされていません。CDBのルートまたはシード・データベースに接続している場合、データ・ポンプにより次の警告が発行されます。

ORA-39357: Warning: Oracle Data Pump operations are not typically needed when connected to the root or seed of a container database.

データ・ポンプを使用したCDBへのデータの移動

空のPDBを作成した後、Oracle Data Pumpの全体モード・エクスポートおよびインポート操作を使用して、データをPDBに移動できます。

データはトランスポータブル・オプションの有無にかかわらずインポートできます。トランスポータブル・オプションを全体モード・エクスポートまたはインポートで使用する場合、全体トランスポータブル・エクスポート/インポートと呼ばれます。

トランスポータブル・オプションが使用される場合、エクスポートおよびインポートでは、トランスポータブル表領域のデータ移動と従来のデータ移動の両方を使用しますが、後者はSYSTEMSYSAUXなどの非トランスポータブル表領域に存在する表が対象です。トランスポータブル・オプションを使用すると、表データをアンロードおよび再ロードする必要と、ユーザー表領域の索引構造を再作成する必要がなくなるため、エクスポート時間と(特に)インポート時間を短縮できます。

データ・ポンプを使用してCDBにデータを移動する場合は、次の要件に注意してください。

  • マルチテナント環境を管理するには、CDB_DBAロールを持っている必要があります。

  • Oracle Database 11.2.0.2以前からの全体データベース・エクスポートは、Oracle Database 12c (CDBまたは非CDB)にインポートされる場合があります。ただし、登録したオプションおよびコンポーネントの情報がエクスポートに含まれるように、まずソース・データベースをOracle Database 11gリリース2 (11.2.0.3以降)にアップグレードすることをお薦めします。

  • 全体データベース・エクスポートまたは全体トランスポータブル・データベース・エクスポートのいずれかを使用して、Oracle Database 11gリリース2 (11.2.0.3以上)をCDB(または非CDB)に移行する場合、Oracle Database 12cにインポートできるダンプ・ファイルを生成するためにデータ・ポンプ・エクスポート・パラメータVERSION=12を設定する必要があります。VERSION=12を設定しない場合、生成したエクスポート・ファイルには、登録したデータベース・オプションおよびコンポーネントの完全な情報は含まれません。

  • ネットワーク・ベースの全体トランスポータブル・インポートでは、FULL=YESTRANSPORTABLE=ALWAYSおよびTRANSPORT_DATAFILES=datafile_nameパラメータを使用する必要があります。ソース・データベースがOracle Database 11gリリース11.2.0.3以上で、Oracle Database 12cリリース1 (12.1)より前の場合、VERSION=12パラメータも必要です。

  • ファイル・ベースの全体トランスポータブル・インポートでは、TRANSPORT_DATAFILES=datafile_nameパラメータのみを使用する必要があります。データ・ポンプ・インポートでは、TRANSPORTABLE=ALWAYSおよびFULL=YESパラメータの存在が推測されます。

  • Oracle Database 12cリリース2 (12.2)以降、マルチテナント・コンテナ・データベース(CDB)環境では、CDBの各PDBに対する一意のパスとして、デフォルトのデータ・ポンプ・ディレクトリ・オブジェクトDATA_PUMP_DIRが定義されます。この一意のパスは、CREATE PLUGGABLE DATABASE文のPATH_PREFIX句が相対パスに定義されているかどうかに関係なく、定義されます。

  • Oracle Database19c以降では、impdpcredentialパラメータに、オブジェクト・ストア・バケットへのアクセスに必要なユーザー名とパスワードを含む資格証明オブジェクトの名前を指定します。DEFAULT_CREDENTIALという名前のPDBプロパティを使用して、デフォルトの資格証明を指定することもできます。デフォルトの資格証明を使用してimpdbを実行する場合は、ダンプ・ファイル名の前にDEFAULT_CREDENTIAL:を付け、credentialパラメータは指定しません。

例21-1 PDBへの表のインポート

エクスポート/インポート操作用に特定のPDBを指定するには、データ・ポンプの開始時に、接続識別子を接続文字列に指定します。たとえば、pdb1というPDBにデータをインポートするには、データ・ポンプ・コマンドラインで次のように入力します。

impdp hr@pdb1 DIRECTORY=dpump_dir1 DUMPFILE=hr.dmp TABLES=employees

例21-2 データのインポート時の資格証明の指定

この例では、次に示すように、DBMS_CREDENTIAL.CREATE_CREDENTIALを使用してHR_CREDという名前の資格証明を作成していることを前提としています。

BEGIN
  DBMS_CLOUD.CREATE_CREDENTIAL(
    credential_name => 'HR_CRED',
    username => 'atpc_user@oracle.com',
    password => 'password'
  );
END;
/

次のコマンドは、資格証明HR_CREDを指定し、オブジェクト・ストアに格納されているファイルを指定します。ファイルのURLはhttps://example.com/ostore/dnfs/myt.dmpです。

impdp hr@pdb1 \
      table_exists_action=replace \
      credential=HR_CRED \
      parallel=16 \
      dumpfile=https://example.com/ostore/dnfs/myt.dmp

例21-3 デフォルトの資格証明を使用したデータのインポート

  1. 次に示すように、DBMS_CREDENTIAL.CREATE_CREDENTIALを使用して、HR_CREDという名前の資格証明を作成します。

    BEGIN
      DBMS_CLOUD.CREATE_CREDENTIAL(
        credential_name => 'HR_CRED',
        username => 'atpc_user@oracle.com',
        password => 'password'
      );
    END;
    /
  2. PDBプロパティDEFAULT_CREDENTIALを次のように設定します。

    ALTER DATABASE PROPERTY SET DEFAULT_CREDENTIAL = 'ADMIN.HR_CRED'
  3. 次のコマンドは、ダンプ・ファイルの場所https://example.com/ostore/dnfs/myt.dmpの接頭辞として、デフォルトの資格証明を指定します。

    impdp hr@pdb1 \
          table_exists_action=replace \
          parallel=16 \
          dumpfile=default_credential:https://example.com/ostore/dnfs/myt.dmp

    credentialパラメータは指定しません。

関連項目:

データ・ポンプを使用したCDB内またはCDB間のPDBの移動

PDBに対するデータ・ポンプ・エクスポートおよびインポート操作は、共通ユーザーの処理方法を除き、非CDBに対する操作と同じです。

CDBで共通ユーザーを作成した場合、CDBのPDB内からそのユーザーの全データベースまたは特権スキーマをエクスポートすると、標準のCREATE USER C##common name DDL文がインポート時に実行されます。ユーザー名の共通ユーザー接頭辞C##が原因で、文は失敗します。次のエラー・メッセージが返されます。

ORA-65094:invalid local user or role name

エクスポート対象のPDBで、そのユーザーのスキーマにローカル・オブジェクトを作成してそれらをインポートする場合、同じ名前の共通ユーザーがすでにターゲットCDBインスタンスに存在することを確認するか、次のようにimpdpコマンドでデータ・ポンプ・インポートのREMAP_SCHEMAパラメータを使用します。

REMAP_SCHEMA=C##common name:local user name

CDBのLogMinerの使用

LogMinerは、マルチテナント・コンテナ・データベース(CDB)で使用できます。

次の項では、CDBと非CDBでLogMinerの使用時に注意する必要がある相違点について説明します。

ルート・コンテナにすべてのPDBのスーパーセットの文字セットが含まれている場合、LogMinerでは異なる文字セットのPDBを含むCDBがサポートされます。

マルチテナント環境を管理するには、CDB_DBAロールを持っている必要があります。

CDBでのLogMiner V$ビューおよびDBAビュー

CDBでは、システムで実行されているLogMinerセッションの情報を表示するためにLogMinerによって使用されるビューに、CON_IDという追加の列が含まれます。

CON_ID列によって、情報が表示されるセッションに関連付けられたコンテナIDを識別します。プラガブル・データベース(PDB)のビューを問い合せると、データベースに関連付けられた情報のみが表示されます。この新しい動作の影響を受けるビューは次のとおりです。

  • V$LOGMNR_DICTIONARY_LOAD

  • V$LOGMNR_LATCH

  • V$LOGMNR_PROCESS

  • V$LOGMNR_SESSION

  • V$LOGMNR_STATS

ノート:

CDBをサポートするため、V$LOGMNR_CONTENTSビューには、CON_ID以外にもいくつかの新しい列が含まれます。

次のDBAビューには、名前がCDBで始まる類似のCDBビューがあります。

ログ・ビューのタイプ DBAビュー CDBビュー
LogMinerログ・ビュー

DBA_LOGMNR_LOG

CDB_LOGMNR_LOG

LogMinerパージ済ログ・ビュー

DBA_LOGMNR_PURGED_LOG

CDB_LOGMNR_PURGED_LOG

LogMinerセッション・ログ・ビュー

DBA_LOGMNR_SESSION

CDB_LOGMNR_SESSION

DBAビューには、問合せが行われたコンテナで定義されているセッションに関連する情報のみが表示されます。

CDBビューには、特定の行が表すデータを含むコンテナを識別する追加のCON_ID列が含まれます。ルートからCDBビューを問い合せると、それらのビューを使用してすべてのコンテナに関する情報を参照できます。

CDBでのV$LOGMNR_CONTENTSビュー

CDBでは、V$LOGMNR_CONTENTSビューとその関連機能はルート・データベースに制限されています。V$LOGMNR_CONTENTSには、CDBを支援するいくつかの新しい列が存在します。

  • CON_ID: 問合せの実行元のコンテナに関連付けられたIDが含まれます。V$LOGMNR_CONTENTSはルート・データベースに制限されるため、問合せがCDBで実行されると、この列は値1を返します。

  • SRC_CON_NAME: PDBの名前。この情報は、マイニングがLogMinerディクショナリで実行される場合にのみ使用できます。

  • SRC_CON_ID: REDOレコードを生成したPDBのコンテナID。この情報は、マイニングがLogMinerディクショナリで実行される場合にのみ使用できます。

  • SRC_CON_DBID: PDBの識別子。この情報は、マイニングが現在のLogMinerディクショナリで実行される場合にのみ使用できます。

  • SRC_CON_GUID: PDBに関連付けられたGUIDが含まれます。この情報は、マイニングが現在のLogMinerディクショナリで実行される場合にのみ使用できます。

CDBでのサプリメンタル・ロギングの有効化

CDBで、ALTER DATABASEコマンドを使用してデータベース全体のサプリメンタル・ロギングを有効または無効にするための構文。

たとえば、サプリメンタル・ログ・データを追加または削除する場合は、次の構文を使用します。

ALTER DATABASE [ADD|DROP] SUPPLEMENTAL LOG DATA ...

次の点に注意してください。

  • CDBでは、CDB$ROOTから有効にしたサプリメンタル・ロギング・レベルは、CDB全体で有効になります。

  • 少なくとも最小サプリメンタル・ロギングがCDB$ROOTで有効になっている場合、追加のサプリメンタル・ロギング・レベルをPDBレベルで有効にできます。

  • CDB$ROOTからCDBレベルで有効にしたサプリメンタル・ロギング・レベルは、PDBレベルでは無効にできません。

  • CDB$ROOTからすべてのサプリメンタル・ロギングを削除した場合、以前のPDBレベルの設定に関係なく、CDB全体ですべてのサプリメンタル・ロギングが無効になります。

CREATE TABLE文とALTER TABLE文で開始するサプリメンタル・ロギング操作は、CDBルートかPDBから実行できます。これらは適用先の表にのみ影響します。

CDBでのフラット・ファイル・ディクショナリの使用

単一のフラット・ファイルにCDB全体のディクショナリ・スナップショットを取得することはできません。個々のPDBに接続する必要があり、そのPDB専用のスナップショットをフラット・ファイルに取得できます。

したがって、フラット・ファイル・ディクショナリを使用する場合、データ・ディクショナリがフラット・ファイル内に含まれるPDBに関連付けられた変更を対象とするREDOログのみをマイニングできます。

DBNEWIDのCDBおよびPDBに関する考慮事項

DBNEWIDパラメータであるPDBを使用すると、プラガブル・データベース(PDB)のDBIDを変更できます。

デフォルトでは、コンテナ・データベース(CDB)に対してDBNEWIDユーティリティを実行すると、そのCDBのみのDBIDが変更され、そのCDBに含まれるプラガブル・データベース(PDB)のDBIDは変更されません。このため、CDBをクローニングした場合などには、PDBのDBIDが重複するという問題が発生することがあります。

Oracle Database 12c リリース2 (12.2)からは、新しいDBNEWID PDBパラメータを使用して、PDBのDBIDを変更できます。特定のPDBを指定することはできません。すべてのPDBのDBIDを新しくするか、どのPDBのDBIDも変更しないかのどちらかです。PDBパラメータは、CDB環境にのみ適用可能です。このファイルは次のような形式です。

PDB=[ALL | NONE]
  • ALLを指定した場合、CDBのDBIDが変更されるだけでなく、そのCDBに含まれるすべてのPDBのDBIDも変更されます。

  • NONE (デフォルト)を指定すると、CDBのDBIDが変更されてもPDBのDBIDは変更されません。

PDB=ALLの使用をお薦めしますが、下位互換性の理由からPDB=NONEがデフォルトになっています。