8 インスタンス化とOracle Streamsレプリケーション

この章では、インスタンス化とOracle Streamsレプリケーションの概念について説明します。また、インスタンス化のためのデータベース・オブジェクトの準備、インスタンス化の実行、インスタンス化システム変更番号(SCN)の設定およびインスタンス化の監視の各手順についても説明します。

この章には次のトピックが含まれます:

8.1 インスタンス化とOracle Streamsレプリケーションの概要

単一のデータベース内または複数のデータベース間で1つのデータベース・オブジェクトをレプリケートするOracle Streams環境では、ソース・データベースでオブジェクトに対する変更が生成され、宛先データベースで変更が適用プロセスによってデキューされます。このような変更が取得プロセスまたは同期取得で取得され、その変更がローカルに適用されるか、または他のデータベースに伝播されてから宛先データベースで適用される場合は、オブジェクトに対する変更をレプリケートする前に、ソース・データベース・オブジェクトをインスタンス化する必要があります。ソース・データベース・オブジェクトへの変更が適用されるデータベースが、ソース・データベースと異なる場合は、宛先データベースにこれらのデータベース・オブジェクトのコピーが必要です。

Oracle Streamsでは通常、次の手順を実行してデータベース・オブジェクトをインスタンス化します。

  1. ソース・データベースでデータベース・オブジェクトをインスタンス化のために準備します。

  2. データベース・オブジェクトのコピーが宛先データベースに存在しない場合、ソース・データベースのデータベース・オブジェクトに基づいて、宛先データベースで物理的にデータベース・オブジェクトを作成します。エクスポート/インポート、トランスポータブル表領域またはRMANを使用して、インスタンス化用にデータベース・オブジェクトをコピーできます。宛先データベースにデータベース・オブジェクトが存在する場合は、この手順は不要です。

  3. 宛先データベースで、データベース・オブジェクトのインスタンス化システム変更番号(SCN)を設定します。インスタンス化SCNは、宛先データベースの適用プロセスに対して、指定したSCNの後にソース・データベースでコミットされた変更のみを適用するように指示します。

レプリケーション環境の構成用にOracleが提供するDBMS_STREAMS_ADMパッケージの次のいずれかのプロシージャを使用すると、これらすべてのインスタンス化手順を自動的に実行できます。

手順1と手順3は自動的に完了する場合もあります。たとえば、DBMS_STREAMS_ADMパッケージのプロシージャを実行して取得プロセスのポジティブ・ルール・セットにデータベース・オブジェクトのルールを追加すると、データベース・オブジェクトは自動的にインスタンス化のために準備されます。

また、エクスポート/インポート、トランスポータブル表領域またはRMANのTRANSPORT TABLESPACEコマンドを使用してデータベース・オブジェクトをソース・データベースから宛先データベースへコピーすると、このデータベース・オブジェクトのインスタンス化SCNを自動的に設定できます。

注意:

RMANのDUPLICATEコマンドにより、データベース全体をインスタンス化できますが、このコマンドでは、データベース・オブジェクトのインスタンス化SCNは設定されません。

インスタンス化されるデータベース・オブジェクトが表である場合、ソース・データベースと宛先データベースの表は完全に一致していなくてもかまいません。ただし、表データの一部または全部を2つのデータベース間でレプリケートする場合、表をインスタンス化したときにレプリケートするデータに一貫性がある必要があります。データベース・オブジェクトに対する変更をレプリケートする場合は、常にデータベース・オブジェクトをソース・データベースでインスタンス化のために準備して、宛先データベースでデータベース・オブジェクトのインスタンス化SCNを設定する必要があります。インスタンス化のためにオブジェクトを準備することで、オブジェクトに対する変更を宛先データベースで適用できる最小SCNが設定されます。このSCNは非処理SCNと呼ばれます。データベース・オブジェクトに対する変更を取得するように取得プロセスまたは同期取得を構成した後に、データベース・オブジェクトをインスタンス化する準備を行う必要があります。

エクスポート/インポート、トランスポータブル表領域またはRMANを使用して表をインスタンス化した場合、インスタンス化された表についてサプリメンタル・ログ・グループの指定が保持されます。つまり、インスタンス化の後、インポート・データベースのインポートされた表のログ・グループ指定は、エクスポート・データベースの同じ表のログ・グループの指定と同じです。インポート・データベースで表のサプリメンタル・ログ・グループの指定を保持しない場合は、インポート後に特定のサプリメンタル・ログ・グループを削除できます。

全データベースのエクスポート/インポートを実行する場合でも、エクスポート/インポート中はデータベース・サプリメンタル・ロギングの指定は保持されません。一方、RMANのDUPLICATEコマンドでは、データベース・サプリメンタル・ロギングの指定はインスタンス化されたデータベースで保持されます。

注意:

  • Oracle Streamsをインスタンス化するためのエクスポート中は、エクスポート対象のオブジェクトに対してデータ定義言語(DDL)変更が行われないように注意してください。

  • NULLアクション・コンテキストを持つルールを含むデータベースまたはスキーマをエクスポートする場合は、そのルールを所有するスキーマのデータベースまたはデフォルト表領域が書込み可能である必要があります。データベースまたは表領域が読取り専用であると、エクスポート・エラーが発生します。

関連項目:

8.2 取得のルールとインスタンス化の準備

DBMS_CAPTURE_ADMパッケージの次のサブプログラムでは、インスタンス化のためにデータベース・オブジェクトの準備が行われます。

  • PREPARE_TABLE_INSTANTIATIONプロシージャでは、表に対する変更が取得プロセスによって取得される場合、1つの表がインスタンス化のために準備されます。

  • PREPARE_SYNC_INSTANTIATIONファンクションでは、表(1つまたは複数)に対する変更が同期取得によって取得される場合、1つの表または複数の表がインスタンス化のために準備されます。

  • PREPARE_SCHEMA_INSTANTIATIONプロシージャでは、スキーマ内のすべてのデータベース・オブジェクトおよび将来そのスキーマに追加されるすべてのデータベース・オブジェクトがインスタンス化のために準備されます。このプロシージャは、取得プロセスによって変更が取得される場合にのみ使用する必要があります。

  • PREPARE_GLOBAL_INSTANTIATIONプロシージャでは、データベース内のすべてのデータベース・オブジェクトおよび将来そのデータベースに追加されるすべてのデータベース・オブジェクトがインスタンス化のために準備されます。このプロシージャは、取得プロセスによって変更が取得される場合にのみ使用する必要があります。

これらのプロシージャでは、インスタンス化のために各オブジェクトの最小システム変更番号(SCN)が記録されます。オブジェクトに対する最小SCNに続くSCNをオブジェクトのインスタンス化に使用できます。

変更の取得に取得プロセスを使用する場合、前述のプロシージャでは、インスタンス化の準備対象となる表、スキーマまたはデータベースに対する変更を取得、伝播または適用する取得プロセス、伝播および適用プロセスのために、Oracle Streamsデータ・ディクショナリが移入されます。また、取得プロセスを使用して変更を取得する場合は、オプションでこれらのプロシージャを使用して、インスタンス化のために準備された表のキー列またはすべての列のサプリメンタル・ロギングを有効にすることもできます。

注意:

同期取得を使用するレプリケーションでは、Oracle Streamsデータ・ディクショナリは使用されず、サプリメンタル・ロギングは不要です。

8.2.1 自動的にオブジェクトを準備するDBMS_STREAMS_ADMパッケージのプロシージャ

DBMS_STREAMS_ADMパッケージ内のプロシージャを実行して取得プロセスまたは同期取得のポジティブ・ルール・セットにルールを追加すると、変更が取得されるデータベース・オブジェクトに対して、DBMS_CAPTURE_ADMパッケージのプロシージャまたはファンクションが自動的に実行されます。表8-1に、DBMS_STREAMS_ADMパッケージのプロシージャを実行した場合に実行されるDBMS_CAPTURE_ADMパッケージのプロシージャまたはファンクションを示します。

表8-1 自動的に実行されるDBMS_CAPTURE_ADMパッケージのプロシージャ

実行するDBMS_STREAMS_ADMパッケージのプロシージャ 自動的に実行されるDBMS_CAPTURE_ADMパッケージのプロシージャまたはファンクション

ADD_TABLE_RULES

ADD_SUBSET_RULES

PREPARE_TABLE_INSTANTIATION(取得プロセスのルール・セットにルールが追加された場合)

PREPARE_SYNC_INSTANTIATION(同期取得のルール・セットにルールが追加された場合)

ADD_SCHEMA_RULES

PREPARE_SCHEMA_INSTANTIATION

ADD_GLOBAL_RULES

PREPARE_GLOBAL_INSTANTIATION

プロシージャは、インスタンス化を準備するために複数回コールできます。ダウンストリームの取得を使用していて、ダウンストリームの取得プロセスでダウンストリーム・データベースからソース・データベースへのデータベース・リンクが使用されている場合、DBMS_STREAMS_ADMパッケージのこれらのプロシージャのいずれかを実行すると、データベース・オブジェクトは自動的にインスタンス化のために準備されます。ただし、ダウンストリームの取得プロセスでダウンストリーム・データベースからソース・データベースへのデータベース・リンクを使用していない場合、データベース・オブジェクトをインスタンス化する準備を手動で行う必要があります。

DBMS_STREAMS_ADMパッケージではなく、DBMS_RULE_ADMパッケージによって取得プロセスのルールが作成される場合、取得プロセスのルールの結果生じた変更を適用プロセスで適用するには、適切なプロシージャを手動で実行して、変更が取得される各表、スキーマまたはデータベースをインスタンス化のために準備する必要があります。

また、これらのプロシージャを自動的に実行するプロシージャもいくつか存在します。たとえば、DBMS_STREAMS_ADM.MAINTAIN_TABLESプロシージャでは、 ADD_TABLE_RULESプロシージャが自動的に実行されます。

注意:

同期取得では、ADD_TABLE_RULESまたはADD_SUBSET_RULESプロシージャで作成されたルールに基づく変更のみが取得されます。

8.2.2 インスタンス化の準備が必要な場合

次のいずれかの条件が該当する場合、データベース・オブジェクトの取得プロセス、伝播または適用プロセスのポジティブ・ルール・セットに含まれるルールについて、条件を追加または変更する際に、常に適切なプロシージャを実行して、ソース・データベースでそのデータベース・オブジェクトをインスタンス化のために準備する必要があります。

  • オブジェクトに対する変更を取得するように指示する取得プロセスのポジティブ・ルール・セットに、1つ以上のルールを追加する。

  • オブジェクトに対する変更を取得するように指示する取得プロセスのポジティブ・ルール・セットで、ルールについて1つ以上の条件を変更する。

  • オブジェクトに対する変更を伝播するように指示する伝播のポジティブ・ルール・セットに、1つ以上のルールを追加する。

  • オブジェクトに対する変更を伝播するように指示する伝播のポジティブ・ルール・セットで、ルールについて1つ以上の条件を変更する。

  • ソース・データベースのオブジェクトに対する変更を適用するように指示する適用プロセスのポジティブ・ルール・セットに、1つ以上のルールを追加する。

  • ソース・データベースのオブジェクトに対する変更を適用するように指示する適用プロセスのポジティブ・ルール・セットで、ルールについて1つ以上の条件を変更する。

次のいずれかの条件が該当する場合、データベース・オブジェクトの取得プロセス、伝播または適用プロセスのネガティブ・ルール・セットに含まれるルールについて、条件を削除または変更する際に、常に適切なプロシージャを実行して、ソース・データベースでそのデータベース・オブジェクトをインスタンス化のために準備する必要があります。

  • オブジェクトに対する変更を取得するように指示する取得プロセスのネガティブ・ルール・セットから、1つ以上のルールを削除する。

  • オブジェクトに対する変更を取得するように指示する取得プロセスのネガティブ・ルール・セットで、ルールについて1つ以上の条件を変更する。

  • オブジェクトに対する変更を伝播するように指示する伝播のネガティブ・ルール・セットから、1つ以上のルールを削除する。

  • オブジェクトに対する変更を伝播するように指示する伝播のネガティブ・ルール・セットで、ルールについて1つ以上の条件を変更する。

  • ソース・データベースのオブジェクトに対する変更を適用するように指示する適用プロセスのネガティブ・ルール・セットから、1つ以上のルールを削除する。

  • ソース・データベースのオブジェクトに対する変更を適用するように指示する適用プロセスのネガティブ・ルール・セットで、ルールについて1つ以上の条件を変更する。

ポジティブまたはネガティブ・ルール・セットに対する変更について、前述の条件に1つでも該当する場合は、ルールを追加または変更したリモート・データベースにオブジェクトが存在していても、ソース・データベースでインスタンス化のために関連するデータベース・オブジェクトの準備を行って、ソース・オブジェクトに関する情報が必要な関連するOracle Streamsデータ・ディクショナリを移入する必要があります。

関連するOracle Streamsデータ・ディクショナリは、ローカル・ディクショナリとすべてのリモート・ディクショナリについて非同期に移入されます。インスタンス化の準備を行うプロシージャでは、ソース・データベースのREDOログに情報が追加されます。ローカルのOracle Streamsデータ・ディクショナリには、取得プロセスがこれらのREDOエントリを取得するとオブジェクトに関する情報が移入され、リモートのOracle Streamsデータ・ディクショナリには情報が伝播されると移入されます。

同期取得ではOracle Streamsデータ・ディクショナリは使用されません。ただし、同期取得でデータベース・オブジェクトに対する変更を取得している場合は、同期取得のルール・セットにデータベース・オブジェクトのルールを追加する際に、データベース・オブジェクトをインスタンス化のために準備する必要があります。データベース・オブジェクトに対するインスタンス化のための最小SCNが記録されるため、ルールを追加する際に、データベース・オブジェクトをインスタンス化のために準備する必要があります。同期取得のルールが変更されている場合は、データベース・オブジェクトをインスタンス化のために準備する必要はありませんが、ルールの変更では、ルール条件のデータベース・オブジェクト名またはスキーマを変更することはできません。

8.2.3 インスタンス化の準備中のサプリメンタル・ロギング・オプション

レプリケーション環境で、変更の取得に取得プロセスが使用されている場合、サプリメンタル・ロギングが必要になります。サプリメンタル・ロギングでは、操作が実行されるたびにREDOログに列データが追加されます。データベース・オブジェクトをインスタンス化のために準備するためのDBMS_CAPTURE_ADMパッケージには、PREPARE_TABLE_INSTANTIATIONPREPARE_SCHEMA_INSTANTIATIONおよびPREPARE_GLOBAL_INSTANTIATIONが含まれます。これらのプロシージャには、supplemental_loggingパラメータが含まれており、このパラメータを使用すると、インスタンス化のために準備されているデータベース・オブジェクトのサプリメンタル・ロギングの指定を制御できます。

表8-2に、各プロシージャに対するsupplemental_loggingパラメータの値を示します。

表8-2 インスタンス化の準備中のサプリメンタル・ロギング・オプション

プロシージャ supplemental_loggingパラメータの設定 説明

PREPARE_TABLE_INSTANTIATION

keys

インスタンス化のために準備する表の主キー列、一意キー列、ビットマップ索引列および外部キー列のサプリメンタル・ロギングが有効になります。この場合、ログに記録される表の列が、主キー列が無条件のログ・グループ、一意キー列とビットマップ索引列が条件付きのログ・グループ、外部キー列が条件付きのログ・グループと、3つの異なるログ・グループに配置されます。

PREPARE_TABLE_INSTANTIATION

all

インスタンス化のために準備する表のすべての列のサプリメンタル・ロギングが有効になります。このプロシージャは、表内のすべての列を無条件のログ・グループに配置します。

PREPARE_SCHEMA_INSTANTIATION

keys

インスタンス化のために準備するスキーマ内の表、および将来このスキーマに追加するすべての表の主キー列、一意キー列、ビットマップ索引列および外部キー列のサプリメンタル・ロギングが有効になります。主キー列は、無条件でログに記録されます。一意キー列、ビットマップ索引列および外部キー列は、条件付きでログに記録されます。

PREPARE_SCHEMA_INSTANTIATION

all

インスタンス化のために準備するスキーマ内の表、および将来このスキーマに追加するすべての表のすべての列のサプリメンタル・ロギングが有効になります。すべての列は、無条件でログに記録されます。

PREPARE_GLOBAL_INSTANTIATION

keys

インスタンス化のために準備するデータベース内の表、および将来このデータベースに追加するすべての表の主キー列、一意キー列、ビットマップ索引列および外部キー列のサプリメンタル・ロギングが有効になります。主キー列は、無条件でログに記録されます。一意キー列、ビットマップ索引列および外部キー列は、条件付きでログに記録されます。

PREPARE_GLOBAL_INSTANTIATION

all

インスタンス化のために準備するデータベース内のすべての表、および将来このデータベースに追加するすべての表のすべての列のサプリメンタル・ロギングが有効になります。すべての列は、無条件でログに記録されます。

すべてのPREPAREプロシージャ

none

インスタンス化のために準備する表のいずれの列に対してもサプリメンタル・ロギングが有効になりません。

supplemental_loggingパラメータを指定せずにいずれかのPREPAREプロシージャを実行した場合、keysがデフォルトになります。DBMS_STREAMS_ADMパッケージの一部のプロシージャでは、取得プロセスのポジティブ・ルール・セットにルールを追加する際に、表がインスタンス化のために準備されます。この場合、インスタンス化のために準備する表には、デフォルトのサプリメンタル・ロギング・オプションのkeysが指定されます。

注意:

  • supplemental_loggingパラメータにallを指定した場合、LOB型、LONG型、LONG RAW型、ユーザー定義型およびOracleが提供する型の列のサプリメンタル・ロギングは有効になりません。

  • supplemental_loggingパラメータにkeysを指定した場合、ビットマップ結合索引列のサプリメンタル・ロギングは有効になりません。

  • PREPAREプロシージャのsupplemental_loggingパラメータは、Oracle Database 10g リリース2で導入されています。デフォルトでは、これらのプロシージャを実行すると、サプリメンタル・ロギングが有効になります。今回より前のリリースでは、これらのプロシージャを実行しても、サプリメンタル・ロギングは有効になりませんでした。Oracle Streams環境を削除したり、Oracle Streams環境から特定のデータベース・オブジェクトを削除すると、これらのプロシージャによって有効化されたサプリメンタル・ロギングを削除して、不要なロギングを回避できます。

8.2.4 ソース・データベースでインスタンス化を行うためのデータベース・オブジェクトの準備

DBMS_STREAMS_ADMパッケージを使用して取得プロセスまたは同期取得のルールを作成すると、システム作成ルールで参照されるオブジェクトがインスタンス化のために自動的に準備されます。DBMS_RULE_ADMパッケージを使用して取得プロセスのルールを作成する場合は、これらのルールで参照されるデータベース・オブジェクトをインスタンス化のために手動で準備する必要があります。この場合、データベース・オブジェクトに対する変更を取得するように取得プロセスを構成した後で、データベース・オブジェクトをインスタンス化のために準備する必要があります。同期取得では、DBMS_RULE_ADMパッケージで作成されたルールは無視されます。

データベース・オブジェクトをインスタンス化のために準備するPL/SQLサブプログラムの詳細は、「取得のルールとインスタンス化の準備」を参照してください。インスタンス化の準備対象となる1つ以上のデータベース・オブジェクトを長時間実行トランザクションで変更中に、前述のプロシージャの1つを実行すると、そのプロシージャは長時間実行トランザクションが完了するまで待機してから、オブジェクトの非処理SCNを記録します。非処理SCNは、その下では宛先データベースでオブジェクトに対する変更を適用できないSCNです。V$STREAMS_TRANSACTION動的パフォーマンス・ビューを問い合せて、取得プロセスまたは適用プロセスによって処理されている長時間実行トランザクションを監視します。

ここでは、インスタンス化のためにデータベース・オブジェクトを準備する例について説明します。

関連項目:

適用プロセスのインスタンス化SCNと非処理SCNの詳細は、『Oracle Streams概要および管理』を参照してください。

8.2.4.1 インスタンス化のための表の準備
8.2.4.1.1 取得プロセスを使用する場合のDBMS_STREAMS_ADMを使用したインスタンス化のための表の準備

この項の例では、表に対する変更が取得プロセスによって取得される場合に、DBMS_STREAMS_ADMパッケージを使用して、表をインスタンス化のために準備します。hr.regions表をインスタンス化のために準備して、表のすべての主キー列、一意キー列、ビットマップ索引列および外部キー列に対してサプリメンタル・ロギングを有効化するには、DBMS_STREAMS_ADMパッケージのプロシージャを使用して、hr.regions表のルールを取得プロセスのポジティブ・ルール・セットに追加します。取得プロセスがソース・データベースへのデータベース・リンクを持つローカルの取得プロセスまたはダウンストリームの取得プロセスである場合に、このプロシージャを実行すると、この表がインスタンス化のために自動的に準備されます。

次のプロシージャを実行すると、ルールが取得プロセスstrm01_captureのポジティブ・ルール・セットに追加され、hr.regions表がインスタンス化のために準備されます。

BEGIN
  DBMS_STREAMS_ADM.ADD_TABLE_RULES(
    table_name     => 'hr.regions',   
    streams_type   => 'capture',
    streams_name   => 'strm01_capture',
    queue_name     => 'strmadmin.strm01_queue',
    include_dml    => TRUE,
    include_ddl    => TRUE,
    inclusion_rule => TRUE);
END;
/
8.2.4.1.2 取得プロセスを使用する場合のDBMS_CAPTURE_ADMを使用したインスタンス化のための表の準備

この項の例では、表に対する変更が取得プロセスによって取得される場合に、DBMS_CAPTURE_ADMパッケージを使用して、表をインスタンス化のために準備します。hr.regions表をインスタンス化のために準備して、表のすべての主キー列、一意キー列、ビットマップ索引列および外部キー列に対してサプリメンタル・ロギングを有効化するには、次のプロシージャを実行します。

BEGIN
  DBMS_CAPTURE_ADM.PREPARE_TABLE_INSTANTIATION(
    table_name           => 'hr.regions',
    supplemental_logging => 'keys');
END;
/

supplemental_loggingパラメータのデフォルト値はkeysです。そのため、このパラメータが指定されていない場合、インスタンス化のために準備する表のすべての主キー列、一意キー列、ビットマップ索引列および外部キー列に対してサプリメンタル・ロギングが有効になります。

8.2.4.1.3 同期取得を使用する場合のDBMS_STREAMS_ADMを使用したインスタンス化のための表の準備

この項の例では、表に対する変更が同期取得によって取得される場合に、DBMS_STREAMS_ADMパッケージを使用して、hrスキーマ内のすべての表をインスタンス化のために準備します。DBMS_STREAMS_ADMパッケージのプロシージャを使用して、hr.jobs_transportおよびhr.regions_transport表のルールを同期取得のポジティブ・ルール・セットに追加します。実行するプロシージャによって、表がインスタンス化のために自動的に準備されます。

次のプロシージャを実行すると、同期取得sync_captureのポジティブ・ルール・セットにルールが追加され、hr.regions表がインスタンス化のために準備されます。

BEGIN 
  DBMS_STREAMS_ADM.ADD_TABLE_RULES(
    table_name   => 'hr.regions',
    streams_type => 'sync_capture',
    streams_name => 'sync_capture',
    queue_name   => 'strmadmin.streams_queue');
END;
/
8.2.4.1.4 同期取得を使用する場合のDBMS_CAPTURE_ADMを使用したインスタンス化のための表の準備

この項の例では、表に対する変更が同期取得によって取得される場合に、DBMS_CAPTURE_ADMパッケージを使用して、hrスキーマ内のすべての表をインスタンス化のために準備します。インスタンス化のためにhrスキーマ内の表を準備するには、次のファンクションを実行します。

SET SERVEROUTPUT ON
DECLARE
  tables       DBMS_UTILITY.UNCL_ARRAY;
  prepare_scn  NUMBER;
  BEGIN
    tables(1) := 'hr.departments';
    tables(2) := 'hr.employees';
    tables(3) := 'hr.countries';
    tables(4) := 'hr.regions';
    tables(5) := 'hr.locations';
    tables(6) := 'hr.jobs';
    tables(7) := 'hr.job_history';
    prepare_scn := DBMS_CAPTURE_ADM.PREPARE_SYNC_INSTANTIATION(
                      table_names => tables);
  DBMS_OUTPUT.PUT_LINE('Prepare SCN = ' || prepare_scn);
END;
/
8.2.4.2 インスタンス化のためのスキーマ内のデータベース・オブジェクトの準備
8.2.4.2.1 DBMS_STREAMS_ADMを使用した、インスタンス化のためのスキーマ内のデータベース・オブジェクトの準備

この項の例では、スキーマ内のデータベース・オブジェクトに対する変更が取得プロセスによって取得される場合に、DBMS_STREAMS_ADMパッケージを使用して、これらのオブジェクトをインスタンス化のために準備します。

インスタンス化のためにhrスキーマ内のデータベース・オブジェクトを準備し、hrスキーマ内の表のすべての列に対してサプリメンタル・ロギングを有効化するには、次のプロシージャを実行し、DBMS_STREAMS_ADMパッケージのプロシージャを使用して、hrスキーマのルールを取得プロセスのポジティブ・ルール・セットに追加します。取得プロセスがソース・データベースへのデータベース・リンクを持つローカルの取得プロセスまたはダウンストリームの取得プロセスである場合に、このプロシージャを実行すると、hrスキーマ内のオブジェクトがインスタンス化のために自動的に準備されます。

次のプロシージャを実行すると、ルールが取得プロセスstrm01_captureのポジティブ・ルール・セットに追加され、hrスキーマおよびそのすべてのデータベース・オブジェクトがインスタンス化のために準備されます。

BEGIN
  DBMS_STREAMS_ADM.ADD_SCHEMA_RULES(
    schema_name     =>  'hr',
    streams_type    =>  'capture',
    streams_name    =>  'strm01_capture',
    queue_name      =>  'strm01_queue',
    include_dml     =>  TRUE,
    include_ddl     =>  TRUE,
    inclusion_rule  =>  TRUE);
END;
/

指定した取得プロセスが存在しない場合は、このプロシージャによって作成されます。

また、インスタンス化のために準備する表の主キー列、一意キー列、ビットマップ索引列および外部キー列のサプリメンタル・ロギングが有効になります。

8.2.4.2.1.1 DBMS_CAPTURE_ADMを使用した、インスタンス化のためのスキーマ内のデータベース・オブジェクトの準備

この項の例では、スキーマ内のデータベース・オブジェクトに対する変更が取得プロセスによって取得される場合に、DBMS_CAPTURE_ADMパッケージを使用して、これらのオブジェクトをインスタンス化のために準備します。インスタンス化のためにhrスキーマ内のデータベース・オブジェクトを準備し、hrスキーマ内の表のすべての列に対してサプリメンタル・ロギングを有効化するには、次のプロシージャを実行します。

BEGIN
  DBMS_CAPTURE_ADM.PREPARE_SCHEMA_INSTANTIATION(
    schema_name          => 'hr',
    supplemental_logging => 'all');
END;
/

このプロシージャを実行すると、hrスキーマ内の表のすべての列と、将来hrスキーマに追加される表内のすべての列に対してサプリメンタル・ロギングが有効になります。

8.2.4.3 インスタンス化のためのデータベース内のすべてのデータベース・オブジェクトの準備
8.2.4.3.1 DBMS_STREAMS_ADMを使用した、インスタンス化のためのデータベース内のすべてのデータベース・オブジェクトの準備

この項の例では、データベース内のデータベース・オブジェクトに対する変更が取得プロセスによって取得される場合に、DBMS_STREAMS_ADMパッケージを使用して、これらのオブジェクトをインスタンス化のために準備します。データベース内のすべてのデータベース・オブジェクトをインスタンス化のために準備するには、DBMS_STREAMS_ADMパッケージのADD_GLOBAL_RULESプロシージャを実行します。

BEGIN
  DBMS_STREAMS_ADM.ADD_GLOBAL_RULES(
    streams_type   => 'capture',
    streams_name   => 'capture_db',
    queue_name     => 'strmadmin.streams_queue',
    include_dml    => TRUE,
    include_ddl    => TRUE,
    inclusion_rule => TRUE);
END;
/

指定した取得プロセスが存在しない場合は、このプロシージャによって作成されます。

また、インスタンス化のために準備する表の主キー列、一意キー列、ビットマップ索引列および外部キー列のサプリメンタル・ロギングが有効になります。

8.2.4.3.1.1 DBMS_CAPTURE_ADMを使用した、インスタンス化のためのデータベース内のすべてのデータベース・オブジェクトの準備

この項の例では、データベース内のデータベース・オブジェクトに対する変更が取得プロセスによって取得される場合に、DBMS_CAPTURE_ADMパッケージを使用して、これらのオブジェクトをインスタンス化のために準備します。インスタンス化のためにデータベース内のデータベース・オブジェクトを準備するには、次のプロシージャを実行します。

BEGIN
  DBMS_CAPTURE_ADM.PREPARE_GLOBAL_INSTANTIATION(
    supplemental_logging => 'none');
END;
/

supplemental_loggingパラメータにnoneが指定されているため、このプロシージャではどの列に対してもサプリメンタル・ロギングが有効になりません。ただし、ALTER TABLEまたはALTER DATABASE文を使用して、サプリメンタル・ロギングを手動で指定できます。

8.2.5 ソース・データベースでのインスタンス化の準備の強制終了

DBMS_CAPTURE_ADMパッケージの次のプロシージャでは、インスタンス化の準備が強制終了されます。

  • ABORT_TABLE_INSTANTIATIONを実行すると、PREPARE_TABLE_INSTANTIATIONの効果が逆転し、PREPARE_TABLE_INSTANTIATIONプロシージャによって有効化されたサプリメンタル・ロギングが削除されます。

  • ABORT_SYNC_INSTANTIATIONを実行すると、PREPARE_SYNC_INSTANTIATIONの効果が逆転します。

  • ABORT_SCHEMA_INSTANTIATIONを実行すると、PREPARE_SCHEMA_INSTANTIATIONの効果が逆転し、PREPARE_SCHEMA_INSTANTIATIONおよびPREPARE_TABLE_INSTANTIATIONプロシージャによって有効化されたサプリメンタル・ロギングが削除されます。

  • ABORT_GLOBAL_INSTANTIATIONを実行すると、PREPARE_GLOBAL_INSTANTIATIONの効果が逆転し、PREPARE_GLOBAL_INSTANTIATIONPREPARE_SCHEMA_INSTANTIATIONおよびPREPARE_TABLE_INSTANTIATIONプロシージャによって有効化されたサプリメンタル・ロギングが削除されます。

これらのプロシージャでは、関連データベース・オブジェクトの潜在的なインスタンス化に関係するデータ・ディクショナリ情報が削除されます。

たとえば、hr.regions表のインスタンス化の準備を強制終了するには、次のプロシージャを実行します。

BEGIN
  DBMS_CAPTURE_ADM.ABORT_TABLE_INSTANTIATION(
    table_name  => 'hr.regions');
END;
/

8.3 Oracle Data PumpとOracle Streamsのインスタンス化

ここでは、Oracle Data Pumpを使用したOracle Streamsのインスタンス化の実行について説明します。

関連項目:

8.3.1 データ・ポンプ・エクスポートとオブジェクトの一貫性

エクスポート中、Oracle Data Pumpでは、データベース・オブジェクトごとにエクスポートされたデータおよび手続き型操作が特定の時点で一貫性を持つように、自動的にOracle Flashbackが使用されます。Oracle Streams環境でインスタンス化を実行する場合は、ある程度の一貫性が必要です。データ・ポンプ・エクスポート・ユーティリティを使用すると、Oracle Streamsのインスタンス化についてこの一貫性を確保できます。

Oracle Streamsのインスタンス化のみでなく、他の用途にもエクスポート・ダンプ・ファイルを使用しており、その用途がデータ・ポンプのデフォルトのエクスポートで得られる一貫性より厳密な一貫性要件を伴う場合は、Oracle Streamsのインスタンス化にデータ・ポンプ・エクスポート・ユーティリティ・パラメータFLASHBACK_SCNまたはFLASHBACK_TIMEを使用できます。たとえば、エクスポートに外部キー制約を持つオブジェクトが含まれている場合、より厳密な一貫性が要求される場合があります。

8.3.2 Oracle Data Pump ImportとOracle Streamsのインスタンス化

ここでは、Oracle Data Pump ImportとOracle Streamsのインスタンス化について説明します。

8.3.2.1 インスタンス化SCNとデータ・ポンプ・インポート

データ・ポンプ・インポート中、インスタンス化SCNは、データ・ポンプ・エクスポートが実行される前にエクスポート・データベースでインスタンス化が準備されたデータベース・オブジェクトごとに、インポート・データベースで設定されます。インスタンス化SCNは、データ・ポンプ・エクスポート中に取得されるメタデータに基づいて設定されます。

8.3.2.2 インスタンス化SCNとデータ・ポンプ・インポートによるOracle Streamsタグ

データ・ポンプ・インポート・セッションでは、インポートによって発生する変更の循環を回避するために、Oracle Streamsタグが'00'と等価の16進値に設定される場合があります。このようなインポートによって生成されるREDOエントリに、このタグ値が含まれます。

インポート・セッション・タグが'00'と等価の16進値に設定されるかどうかは、インポートされるエクスポートによって決まります。具体的には、次のいずれかの場合にインポート・セッション・タグが'00'と等価の16進値に設定されます。

  • データ・ポンプ・エクスポートがFULLまたはSCHEMAモードである。

  • データ・ポンプ・エクスポートがTABLEまたはTABLESPACEモードであり、エクスポートの実行前に、エクスポートに含まれる1つ以上の表がエクスポート・データベースでインスタンス化のために準備されている。

インポートされるデータ・ポンプ・エクスポートで、前述の条件のどちらも該当しない場合は、インポート・セッション・タグはNULLです。

注意:

  • データ・ポンプを使用してネットワーク・インポートを実行する場合、インポートと同じモードで暗黙的エクスポートが実行されます。たとえば、ネットワーク・インポートがスキーマ・モードの場合は、暗黙的エクスポートもスキーマ・モードで行われます。

  • データ・ポンプ・インポートがTRANSPORTABLE TABLESPACEモードで実行される場合、インポート・セッション・タグは設定されません。このモードで実行されるインポートでは、インポートされるデータのREDOデータを生成しません。そのため、セッション・タグの設定は不要です。

関連項目:

Oracle Streamsタグ

8.3.2.3 STREAMS_CONFIGURATIONデータ・ポンプ・インポート・ユーティリティ・パラメータ

STREAMS_CONFIGURATIONデータ・ポンプ・インポート・ユーティリティ・パラメータでは、エクスポート・ダンプ・ファイルに表示される一般的なOracle Streamsメタデータをインポートするかどうかを指定します。このインポート・パラメータは、全データベースのインポートを実行する場合にのみ関連します。デフォルトでは、STREAMS_CONFIGURATIONインポート・ユーティリティ・パラメータはyに設定されます。通常、インポートがバックアップまたはリストア操作の一部である場合は、yを指定します。

エクスポート・ダンプ・ファイルに情報が表示される場合、次のオブジェクトは、STREAMS_CONFIGURATIONの設定に関係なくインポートされます。

  • ANYDATAキューおよびキュー表。

  • キュー・サブスクライバ

  • アドバンスト・キューイング・エージェント

  • ポジティブ・ルール・セット、ネガティブ・ルール・セットおよび評価コンテキストを含めたルール。Oracle StreamsルールおよびOracle Streams以外のルールを含め、すべてのルールがインポートされます。Oracle Streamsルールとは、DBMS_STREAMS_ADMパッケージの特定のプロシージャが実行されるときにシステムによって生成されるルールで、Oracle Streams以外のルールとは、DBMS_RULE_ADMパッケージを使用して作成されるルールです。

    STREAMS_CONFIGURATIONパラメータの設定がnの場合、Oracle Streamsルールに関する情報は、データ・ディクショナリ・ビューALL_STREAMS_RULESALL_STREAMS_GLOBAL_RULESALL_STREAMS_SCHEMA_RULESALL_STREAMS_TABLE_RULESDBA_STREAMS_RULESDBA_STREAMS_GLOBAL_RULESDBA_STREAMS_SCHEMA_RULESおよびDBA_STREAMS_TABLE_RULESにはインポートされません。ただし、これらのルールに関する情報は、STREAMS_CONFIGURATIONパラメータの設定に関係なく、データ・ディクショナリ・ビューALL_RULESALL_RULE_SETSALL_RULE_SET_RULESDBA_RULESDBA_RULE_SETSDBA_RULE_SET_RULESUSER_RULESUSER_RULE_SETSおよびUSER_RULE_SET_RULESにインポートされます。

STREAMS_CONFIGURATIONインポート・ユーティリティ・パラメータの設定がyで、次の情報がエクスポート・ダンプ・ファイルに表示されている場合、この情報はインポートに含まれます。STREAMS_CONFIGURATIONインポート・ユーティリティ・パラメータの設定がnの場合は、次の情報はインポートに含まれません。

  • ローカルの変更を取得する取得プロセス。各取得プロセスには次の情報が含まれます。

    • 取得プロセスの名前

    • 取得プロセスの状態。

    • 取得プロセスのパラメータの設定。

    • 取得プロセスで使用されるキューのキュー所有者およびキュー名。

    • 取得プロセスで使用されるポジティブ・ルール・セットとネガティブ・ルール・セット、それぞれのルール・セット所有者およびルール・セット名。

    • 取得プロセスの取得ユーザー。

    • 取得プロセスの状態の最終変更時間。この情報は、DBA_CAPTUREデータ・ディクショナリ・ビューに記録されます。

    • 原因となったエラーのエラー番号とメッセージ(取得プロセスが無効化されるか異常終了した場合)。この情報は、DBA_CAPTUREデータ・ディクショナリ・ビューに記録されます。

  • 同期取得。各同期取得には次の情報が含まれます。

    • 同期取得の名前。

    • 同期取得で使用されるキューのキュー所有者およびキュー名。

    • 同期取得で使用されるそれぞれのルール・セットのルール・セット所有者およびルール・セット名。

    • 同期取得の取得ユーザー。

  • 表がエクスポート・データベースでインスタンス化の準備を完了している場合、これらの表がインポート・データベースでインスタンス化用に準備されます。

  • スキーマがエクスポート・データベースでインスタンス化の準備を完了している場合、これらのスキーマがインポート・データベースでインスタンス化用に準備されます。

  • エクスポート・データベースがインスタンス化の準備を完了している場合、インポート・データベースがインスタンス化用に準備されます。

  • Oracle Streamsクライアントが使用する各ANYDATAキューの状態(開始または停止)。Oracle Streamsクライアントには、取得プロセス、同期取得、伝播、適用プロセスおよびメッセージ・クライアントが含まれます。ANYDATAキュー自体は、STREAMS_CONFIGURATIONインポート・ユーティリティ・パラメータの設定に関係なくインポートされます。

  • 伝播。各伝播には次の情報が含まれます。

    • 伝播の名前

    • ソース・キューのキュー所有者およびキュー名。

    • 宛先キューのキュー所有者およびキュー名。

    • 宛先データベース・リンク。

    • 伝播で使用されるポジティブ・ルール・セットとネガティブ・ルール・セット、それぞれのルール・セット所有者およびルール・セット名。

    • Oracle Streamsの伝播に関連するOracle Schedulerジョブ。

  • 適用プロセス。各適用プロセスには次の情報が含まれます。

    • 適用プロセスの名前

    • 適用プロセスの状態。

    • 適用プロセスのパラメータの設定。

    • 適用プロセスで使用されるキューのキュー所有者およびキュー名。

    • 適用プロセスで使用されるルール・セットのポジティブおよびネガティブ・ルール・セット所有者およびルール・セット名。

    • 適用プロセスによって、取得LCRがバッファ・キューに適用されるか、メッセージが永続キューに適用されるか。

    • 適用プロセスの適用ユーザー。

    • 存在する場合は、適用プロセスで使用されるメッセージ・ハンドラ。

    • 存在する場合は、適用プロセスで使用されるDDLハンドラ。

    • 存在する場合は、適用プロセスで使用されるプリコミット・ハンドラ。

    • 適用プロセスによって行われた変更用にREDOログ内で生成されたタグ値。

    • 存在する場合は、適用データベース・リンク。

    • 適用プロセスのソース・データベース。

    • 適用されたメッセージ番号、最も古いメッセージ番号(最も古いSCN)、適用時間および適用されたメッセージの作成時間を含む、DBA_APPLY_PROGRESSデータ・ディクショナリ・ビュー内の適用の進捗に関する情報。

    • 適用エラー

    • 適用プロセスの状態の最終変更時間。この情報は、DBA_APPLYデータ・ディクショナリ・ビューに記録されます。

    • 原因となったエラーのエラー番号とメッセージ(適用プロセスが無効化されるか異常終了した場合)。この情報は、DBA_APPLYデータ・ディクショナリ・ビューに記録されます。

  • DMLハンドラ(文DMLハンドラとプロシージャDMLハンドラの両方を含む)。

  • エラー・ハンドラ

  • 更新の競合ハンドラ

  • 適用表の代替キー列。

  • 各適用オブジェクトのインスタンス化SCN。

  • 各適用オブジェクトの非処理SCN。

  • メッセージ・クライアント。各メッセージ・クライアントには次の情報が含まれます。

    • メッセージ・クライアントの名前。

    • メッセージ・クライアントで使用されるキューのキュー所有者およびキュー名。

    • メッセージ・クライアントで使用されるルール・セットのポジティブ・ルール・セットおよびネガティブ・ルール・セット所有者およびルール・セット名。

    • メッセージ通知設定

  • Oracle Streamsルールに関する一部のデータ・ディクショナリ情報。ルール自体は、STREAMS_CONFIGURATIONパラメータの設定に関係なくインポートされます。

  • Oracle Streams管理者、メッセージ・クライアント、メッセージ・ルール、取得プロセスまたは同期取得で取得される論理変更レコード(LCR)に含まれる追加の属性、およびメッセージ・ルールで使用される追加の属性に関するデータ・ディクショナリ情報。

注意:

ダウンストリームの取得プロセスは、STREAMS_CONFIGURATION設定に関係なくインポートに含まれません。

8.3.3 データ・ポンプ・エクスポート/インポートを使用したオブジェクトのインスタンス化

この項の例では、Oracle Data Pump Export/Importを使用してOracle Streams環境でオブジェクトをインスタンス化する場合に必要な手順について説明します。この例では、次のことを想定しています。

  • ソース・データベースでhrスキーマ内のすべてのデータベース・オブジェクトに対する変更を取得して、別の宛先データベースでそれらの変更を適用します。

  • hrスキーマはソース・データベースに存在しますが、宛先データベースには存在しません。この例のために、宛先データベースのhrユーザーを削除するには、次のSQL文を使用します。

    DROP USER hr CASCADE;
    

    データ・ポンプ・インポートを実行すると、宛先データベースにユーザーおよびユーザーのデータベース・オブジェクトが再作成されます。

  • ソース・データベースおよび宛先データベースでOracle Streams管理者strmadminを構成済です。各データベースで、Oracle Streams管理者にはDBAロールが付与されます。

注意:

この項の例では、データ・ポンプ・ユーティリティのコマンドラインを使用します。Oracle Streamsのインスタンス化にはDBMS_DATAPUMPパッケージも使用できます。

関連項目:

前述の想定で、データ・ポンプ・エクスポート/インポートを使用してhrスキーマをインスタンス化するには、次の手順を実行します。

  1. SQL*Plusで、ソース・データベースにOracle Streams管理者として接続します。

    SQL*Plusでデータベースに接続する手順については、『Oracle Database管理者ガイド』を参照してください。

  2. エクスポート・ダンプ・ファイルおよびエクスポート・ログ・ファイルを保持するディレクトリ・オブジェクトを作成します。
    CREATE DIRECTORY DPUMP_DIR AS '/usr/dpump_dir';
    
  3. hrスキーマ内のデータベース・オブジェクトをインスタンス化のために準備します。「インスタンス化のためのスキーマ内のデータベース・オブジェクトの準備」を参照してください。
  4. ソース・データベースにOracle Streams管理者として接続したまま、ソース・データベースの現行のシステム変更番号(SCN)を判断します。
    SELECT DBMS_FLASHBACK.GET_SYSTEM_CHANGE_NUMBER FROM DUAL;
    

    この問合せで戻されるSCN値を、手順5FLASHBACK_SCNデータ・ポンプ・エクスポート・パラメータに指定します。hrスキーマには表間の外部キー制約が含まれるため、FLASHBACK_SCNエクスポート・パラメータ、または類似のエクスポート・パラメータは、エクスポート中に指定する必要があります。この例では、問合せによって876606が戻されたと想定します。

    この問合せの実行後、エクスポートが完了するまでエクスポート中のオブジェクトに対してDDL変更が行われないようにします。

  5. コマンドラインでデータ・ポンプを使用して、ソース・データベースでhrスキーマをエクスポートします。

    エクスポートを実行するには、EXP_FULL_DATABASEロールが付与された管理ユーザーとして接続します。このユーザーには、手順2で作成したディレクトリ・オブジェクトに対するREAD権限およびWRITE権限も必要です。この例では、Oracle Streams管理者strmadminとして接続します。

    次にデータ・ポンプ・エクスポート・コマンドの例を示します。

    expdp strmadmin SCHEMAS=hr DIRECTORY=DPUMP_DIR DUMPFILE=hr_schema_dp.dmp 
    FLASHBACK_SCN=876606
    

    関連項目:

    データ・ポンプ・エクスポートの実行方法の詳細は、『Oracle Databaseユーティリティ』を参照

  6. SQL*Plusで、宛先データベースにOracle Streams管理者として接続します。
  7. インポート・ダンプ・ファイルおよびインポート・ログ・ファイルを保持するディレクトリ・オブジェクトを作成します。
    CREATE DIRECTORY DPUMP_DIR AS '/usr/dpump_dir';
    
  8. データ・ポンプ・エクスポート・ダンプ・ファイルhr_schema_dp.dmpを宛先データベースに送信します。DBMS_FILE_TRANSFERパッケージ、バイナリFTPまたは他のなんらかの方法を使用して、ファイルを宛先データベースに送信できます。ファイルの転送後、エクスポート・ダンプ・ファイルは、手順7で作成したディレクトリ・オブジェクトに対応するディレクトリに格納されます。
  9. 宛先データベースのコマンドラインでデータ・ポンプを使用して、エクスポート・ダンプ・ファイルhr_schema_dp.dmpをインポートします。インポートが完了するまでは、宛先データベースでインポート対象のスキーマ内の表に対する変更が行われないように注意してください。インポートを実行すると、宛先データベースで、hrスキーマおよびそのすべてのデータベース・オブジェクトにインスタンス化SCNが自動的に設定されます。

    インポートを実行するには、IMP_FULL_DATABASEロールが付与された管理ユーザーとして接続します。このユーザーには、手順7で作成したディレクトリ・オブジェクトに対するREAD権限およびWRITE権限も必要です。この例では、Oracle Streams管理者strmadminとして接続します。

    次にインポート・コマンドの例を示します。

    impdp strmadmin SCHEMAS=hr DIRECTORY=DPUMP_DIR DUMPFILE=hr_schema_dp.dmp
    

注意:

エクスポート・データベースからエクスポートされた表の表サプリメンタル・ログ・グループは、インポート・データベースで表がインポートされる際に保持されます。これらのサプリメンタル・ログ・グループは、必要に応じて削除できます。

関連項目:

データ・ポンプ・インポートの実行方法の詳細は、『Oracle Databaseユーティリティ』を参照

8.4 Recovery Manager(RMAN)とOracle Streamsのインスタンス化

RMANのTRANSPORT TABLESPACEコマンドを使用すると、表領域をインスタンス化でき、RMANのDUPLICATEおよびCONVERT DATABASEコマンドを使用すると、データベース全体をインスタンス化できます。通常、RMANを使用する方が、他の方法より高速にインスタンス化を実行できます。

ここでは、RMANのコマンドを使用したインスタンス化について説明します。

8.4.1 トランスポータブル表領域またはRMANを使用した表領域内のオブジェクトのインスタンス化

RMANのTRANSPORT TABLESPACEコマンドを実行すると、データ・ポンプおよびRMANで管理される補助インスタンスを使用して、ソース・データベースの表領域または表領域セットがオンライン状態のままで、表領域または表領域セットのデータベース・オブジェクトがエクスポートされます。補助インスタンスは、RMANによって自動的にシステム生成名で起動されます。RMANのTRANSPORT TABLESPACEコマンドを実行すると、表領域または表領域セットのデータ・ポンプ・エクスポート・ダンプ・ファイルおよびデータ・ファイルが生成されます。

データ・ポンプを使用して、宛先データベースでダンプ・ファイルをインポートするか、DBMS_STREAMS_TABLESPACE_ADMパッケージのATTACH_TABLESPACESプロシージャを使用して、表領域を宛先データベースにアタッチできます。また、表領域がインポートまたはアタッチされると、表領域のデータベース・オブジェクトのインスタンス化SCNの値が宛先データベースで自動的に設定されます。

注意:

RMANのTRANSPORT TABLESPACEコマンドでは、ユーザー管理の補助インスタンスはサポートされていません。

この項の例では、トランスポータブル表領域またはRMANを使用して表領域内のデータベース・オブジェクトをインスタンス化する場合に必要な手順について説明します。通常、これらのインスタンス化オプションを使用する方が、エクスポート/インポートを使用するより高速にインスタンス化を実行できます。次の例では、表領域内のデータベース・オブジェクトをインスタンス化します。

これらの例では、表領域jobs_tbsおよびregions_tbsを含む表領域セットをインスタンス化します。これらの例を実行するには、SQL*Plusでソース・データベースに管理ユーザーとして接続し、新規の表領域を作成します。

CREATE TABLESPACE jobs_tbs DATAFILE '/usr/oracle/dbs/jobs_tbs.dbf' SIZE 5 M;

CREATE TABLESPACE regions_tbs DATAFILE '/usr/oracle/dbs/regions_tbs.dbf' SIZE 5 M;

jobs_tbs表領域に、新規の表hr.jobs_transportを含めます。

CREATE TABLE hr.jobs_transport TABLESPACE jobs_tbs AS 
  SELECT * FROM hr.jobs;

regions_tbs表領域に、新規の表hr.regions_transportを含めます。

CREATE TABLE hr.regions_transport TABLESPACE regions_tbs AS 
  SELECT * FROM hr.regions;

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

  • ソース・データベースでhr.jobs_transport表およびhr.regions_transport表に対するすべての変更を取得して、別の宛先データベースでそれらの変更を適用します。

  • hr.jobs_transport表はソース・データベースに存在し、単一の自己完結型の表領域jobs_tbsに含まれます。jobs_tbs表領域は、単一のデータ・ファイルjobs_tbs.dbfに格納されます。

  • hr.regions_transport表はソース・データベースに存在し、単一の自己完結型の表領域regions_tbsに含まれます。regions_tbs表領域は、単一のデータ・ファイルregions_tbs.dbfに格納されます。

  • jobs_tbs表領域およびregions_tbs表領域には、他のスキーマからのデータは含まれません。

  • hr.jobs_transport表、hr.regions_transport表、jobs_tbs表領域およびregions_tbs表領域は、宛先データベースには存在しません。

  • ソース・データベースおよび宛先データベースの両方でOracle Streams管理者strmadminを構成済です。また、両方のデータベースでこのOracle Streams管理者にDBAロールを付与済です。

関連項目:

8.4.1.1 トランスポータブル表領域を使用したオブジェクトのインスタンス化

この例では、トランスポータブル表領域を使用して、表領域セット内のデータベース・オブジェクトをインスタンス化します。「トランスポータブル表領域またはRMANを使用した表領域内のオブジェクトのインスタンス化」に示した想定事項に加えて、この例では、次のことを想定しています。

  • ソース・データベースのOracle Streams管理者には、トランスポータブル表領域のエクスポートを実行するためのEXP_FULL_DATABASEロールが付与されています。DBAロールにはEXP_FULL_DATABASEロールが含まれているため、このロールは十分です。この例では、Oracle Streams管理者はトランスポータブル表領域のエクスポートを実行します。

  • 宛先データベースのOracle Streams管理者には、トランスポータブル表領域のインポートを実行するためのIMP_FULL_DATABASEロールが付与されています。DBAロールにはIMP_FULL_DATABASEロールが含まれているため、このロールは十分です。この例では、Oracle Streams管理者はトランスポータブル表領域のエクスポートを実行します。

関連項目:

トランスポータブル表領域を使用する方法、および適用される可能性のある制限については、『Oracle Database管理者ガイド』 を参照してください

次の手順を実行して、トランスポータブル表領域を使用してjobs_tbsおよびregions_tbs表領域内のデータベース・オブジェクトをインスタンス化します。

  1. SQL*Plusで、ソース・データベースにOracle Streams管理者として接続します。

    SQL*Plusでデータベースに接続する手順については、『Oracle Database管理者ガイド』を参照してください。

  2. エクスポート・ダンプ・ファイルおよびエクスポート・ログ・ファイルを保持するディレクトリ・オブジェクトを作成します。
    CREATE DIRECTORY TRANS_DIR AS '/usr/trans_dir';
    
  3. インスタンス化のためにhr.jobs_transport表およびhr.regions_transport表を準備します。手順については、「インスタンス化のための表の準備」を参照してください。
  4. インスタンス化するオブジェクトを含む表領域を読取り専用にします。この例では、jobs_tbs表領域およびregions_tbs表領域にデータベース・オブジェクトが含まれています。
    ALTER TABLESPACE jobs_tbs READ ONLY;
    
    ALTER TABLESPACE regions_tbs READ ONLY;
    
  5. コマンドラインでデータ・ポンプ・エクスポート・ユーティリティを使用し、トランスポータブル表領域のエクスポート・パラメータにソース・データベースのjobs_tbsおよびregions_tbs表領域を指定して、この表領域をエクスポートします。次に、トランスポータブル表領域のエクスポート・パラメータを使用するエクスポート・コマンドの例を示します。
    expdp strmadmin TRANSPORT_TABLESPACES=jobs_tbs, regions_tbs 
    DIRECTORY=TRANS_DIR DUMPFILE=tbs_ts.dmp
    

    エクスポート・コマンドを実行する際は、EXP_FULL_DATABASEロールが付与され、ディレクトリ・オブジェクトに対するREAD権限およびWRITE権限を持つ管理ユーザーとして接続していることを確認してください。

    関連項目:

    エクスポートを実行する方法の詳細は、『Oracle Databaseユーティリティ』 を参照してください

  6. SQL*Plusで、宛先データベースにOracle Streams管理者として接続します。
  7. インポート・ダンプ・ファイルおよびインポート・ログ・ファイルを保持するディレクトリ・オブジェクトを作成します。
    CREATE DIRECTORY TRANS_DIR AS '/usr/trans_dir';
    
  8. 表領域のデータ・ファイルとエクスポート・ダンプ・ファイルtbs_ts.dmpを宛先データベースに送信します。DBMS_FILE_TRANSFERパッケージ、バイナリFTPまたは他のなんらかの方法を使用して、ファイルを宛先データベースに送信できます。ファイルの転送後、エクスポート・ダンプ・ファイルは、手順7で作成したディレクトリ・オブジェクトに対応するディレクトリに格納されます。
  9. 宛先データベースのコマンドラインでデータ・ポンプ・インポート・ユーティリティを使用し、トランスポータブル表領域のインポート・パラメータにエクスポート・ダンプ・ファイルtbs_ts.dmpを使用して、このエクスポート・ダンプ・ファイルをインポートします。インポートを実行すると、宛先データベースで、hr.jobs_transport表およびhr.regions_transport表にインスタンス化SCNが自動的に設定されます。

    インポート・コマンドの例を次に示します。

    impdp strmadmin DIRECTORY=TRANS_DIR DUMPFILE=tbs_ts.dmp 
    TRANSPORT_DATAFILES=/usr/orc/dbs/jobs_tbs.dbf,/usr/orc/dbs/regions_tbs.dbf
    

    インポート・コマンドを実行する際は、IMP_FULL_DATABASEロールが付与され、ディレクトリ・オブジェクトに対するREAD権限およびWRITE権限を持つ管理ユーザーとして接続していることを確認してください。

    関連項目:

    インポートを実行する方法の詳細は、『Oracle Databaseユーティリティ』を参照

  10. 必要に応じて、ソース・データベースと宛先データベースの両方にOracle Streams管理者として接続し、表領域を読取り/書込みモードに設定します。
    ALTER TABLESPACE jobs_tbs READ WRITE;
    
    ALTER TABLESPACE regions_tbs READ WRITE;
    

注意:

エクスポート・データベースからエクスポートされた表の表サプリメンタル・ログ・グループは、インポート・データベースで表がインポートされる際に保持されます。これらのサプリメンタル・ログ・グループは、必要に応じて削除できます。

8.4.1.2 バックアップからのトランスポータブル表領域とRMANを使用したオブジェクトのインスタンス化

RMANのTRANSPORT TABLESPACEコマンドを実行すると、データ・ポンプおよびRMANで管理される補助インスタンスを使用して、ソース・データベースの表領域または表領域セットがオンライン状態のままで、表領域または表領域セットのデータベース・オブジェクトがエクスポートされます。RMANのTRANSPORT TABLESPACEコマンドを使用すると、データ・ポンプ・エクスポート・ダンプ・ファイルおよびデータ・ファイルが生成され、これらのファイルは、宛先データベースでの表領域のデータ・ポンプ・インポートの実行に使用できます。DBMS_STREAMS_TABLESPACE_ADMパッケージのATTACH_TABLESPACESプロシージャを使用して、宛先データベースで表領域をアタッチすることもできます。

「トランスポータブル表領域またはRMANを使用した表領域内のオブジェクトのインスタンス化」に示した想定事項に加えて、この例では、次のことを想定しています。

  • ソース・データベースはtts1.example.comです。

  • 宛先データベースはtts2.example.comです。

関連項目:

RMANのTRANSPORT TABLESPACEコマンドを使用する手順については、『Oracle Databaseバックアップおよびリカバリ・ユーザーズ・ガイド』 を参照してください

次の手順を実行して、トランスポータブル表領域およびRMANを使用してjobs_tbsおよびregions_tbs表領域内のデータベース・オブジェクトをインスタンス化します。

  1. インスタンス化する表領域を含むソース・データベースのバックアップを作成します(存在しない場合)。RMANには、表領域のクローニング用に有効なバックアップが必要です。この例では、jobs_tbs表領域およびregions_tbs表領域を含むソース・データベースのバックアップを作成します(存在しない場合)。
  2. SQL*Plusで、Oracle Streams管理者としてソース・データベースtts1.example.comに接続します。

    SQL*Plusでデータベースに接続する手順については、『Oracle Database管理者ガイド』を参照してください。

  3. オプションで、エクスポート・ダンプ・ファイルおよびエクスポート・ログ・ファイルを保持するディレクトリ・オブジェクトを作成します。
    CREATE DIRECTORY SOURCE_DIR AS '/usr/db_files';
    

    この手順はオプションです。これは、手順9DATAPUMP DIRECTORYパラメータを省略してRMANのTRANSPORT TABLESPACEコマンドを実行した場合に、補助インスタンスにディレクトリ・オブジェクトSTREAMS_DIROBJ_DPDIRが作成されるためです。

  4. インスタンス化のためにhr.jobs_transport表およびhr.regions_transport表を準備します。手順については、「インスタンス化のための表の準備」を参照してください。
  5. RMANのTRANSPORT TABLESPACEコマンドに指定する終了SCNを判断します。
    SET SERVEROUTPUT ON SIZE 1000000
    DECLARE
      until_scn NUMBER;
    BEGIN
      until_scn:= DBMS_FLASHBACK.GET_SYSTEM_CHANGE_NUMBER;
          DBMS_OUTPUT.PUT_LINE('Until SCN: ' || until_scn);
    END;
    /
    

    戻された終了SCNをメモします。この番号は手順9で使用します。この例では、戻された終了SCNが7661956であると想定します。

    オプションで、この手順をスキップできます。この場合、手順9でRMANのTRANSPORT TABLESPACEコマンドにUNTIL句を指定しないでください。UNTIL句が指定されない場合、RMANは最後のアーカイブREDOログ・ファイルを使用して終了SCNを自動的に判別します。

  6. SQL*Plusで、管理ユーザーとしてソース・データベースtts1.netに接続します。
  7. 現行のオンラインREDOログをアーカイブします。
    ALTER SYSTEM ARCHIVE LOG CURRENT;
    
  8. RMANクライアントを起動し、TARGETとしてソース・データベースtts1.example.comに接続します。

    RMANのCONNECTコマンドの詳細は、『Oracle Databaseバックアップおよびリカバリ・リファレンス』を参照してください

  9. ソース・データベースtts1.example.comで、RMANのTRANSPORT TABLESPACEコマンドを使用して表領域セットのダンプ・ファイルを生成します。
    RMAN> RUN
          { 
            TRANSPORT TABLESPACE 'jobs_tbs', 'regions_tbs'
            UNTIL SCN 7661956
            AUXILIARY DESTINATION '/usr/aux_files'
            DATAPUMP DIRECTORY SOURCE_DIR 
            DUMP FILE 'jobs_regions_tbs.dmp' 
            EXPORT LOG 'jobs_regions_tbs.log'
            IMPORT SCRIPT 'jobs_regions_tbs_imp.sql'
            TABLESPACE DESTINATION '/orc/dbs';
          }
    

    TRANSPORT TABLESPACEコマンドを実行すると、ソース・データベースが実行されているコンピュータ・システム上の次のディレクトリに、このファイルが格納されます。

    • SOURCE_DIRディレクトリ・オブジェクト(/usr/db_files)に対応するディレクトリには、エクスポート・ダンプ・ファイルおよびエクスポート・ログ・ファイルが含まれます。

    • /orc/dbsディレクトリには、生成された表領域のデータ・ファイルおよびインポート・スクリプトが含まれます。このスクリプトを使用し、宛先データベースに表領域をアタッチしてインスタンス化を完了します。

  10. 必要に応じて、インポート・スクリプトを変更します。スクリプト内の次のいずれかまたは両方の項目の変更が必要になる場合があります。
    • エクスポートした表領域を宛先データベースに含めるために使用する方法を変更することもできます。インポート・スクリプトには、エクスポートした表領域を宛先データベースに含めるために、データ・ポンプ・インポート・コマンド(impdp)と、DBMS_STREAMS_TABLESPACE_ADMパッケージのATTACH_TABLESPACESプロシージャを使用して表領域をアタッチするスクリプトという2つの方法があります。

      デフォルトでは、スクリプトでは表領域をアタッチする方法が使用されます。データ・ポンプ・インポート・コマンドはコメント・アウトされます。データ・ポンプ・インポートを使用するには、impdpコマンドを囲むコメント記号(/*および*/)を削除し、表領域をアタッチするスクリプトをコメント記号で囲むか、またはそのスクリプトを削除します。表領域をアタッチするスクリプトはSET SERVEROUTPUT ONで始まり、ファイルの最後まで続きます。

    • スクリプトに指定されているディレクトリ・パス。手順11で、インポート・スクリプト(jobs_regions_tbs_imp.sql)、データ・ポンプ・エクスポート・ダンプ・ファイル(jobs_regions_tbs.dmp)および生成された各表領域のデータ・ファイル(jobs_tbs.dbfregions_tbs.dbf)を、宛先データベースが実行されているコンピュータ・システムの1つ以上のディレクトリに転送します。スクリプトに指定されているディレクトリ・パスが正しいことを確認します。

  11. インポート・スクリプト(jobs_regions_tbs_imp.sql)、データ・ポンプ・エクスポート・ダンプ・ファイル(jobs_regions_tbs.dmp)および生成された各表領域のデータ・ファイル(jobs_tbs.dbfregions_tbs.dbf)を宛先データベースに転送します。DBMS_FILE_TRANSFERパッケージ、バイナリFTPまたは他のなんらかの方法を使用して、ファイルを宛先データベースに送信できます。ファイル転送後、これらのファイルは、インポート・スクリプトに指定されたディレクトリに存在します。
  12. SQL*Plusで、Oracle Streams管理者として宛先データベースtts2.example.comに接続します。
  13. インポート・スクリプトを実行します。
    SET ECHO ON
    SPOOL jobs_tbs_imp.out
    @jobs_tbs_imp.sql
    

    スクリプトが完了したら、jobs_tbs_imp.outスプール・ファイルをチェックして、すべてのアクションが正常に終了していることを確認します。

8.4.2 RMANを使用したデータベース全体のインスタンス化

RMANのDUPLICATEコマンドを実行すると、別の場所にターゲット・データベースのコピーが作成されます。このコマンドでは、RMANの補助インスタンスを使用してターゲット・データベース・ファイルのバックアップがリストアされ、新しいデータベースが作成されます。Oracle Streamsでのインスタンス化では、ターゲット・データベースがソース・データベース、新しく作成するデータベースが宛先データベースです。RMANのDUPLICATEコマンドを使用する場合、ソース・データベースと宛先データベースが同じプラットフォームで実行されている必要があります。

RMANのCONVERT DATABASEコマンドを実行すると、異なるプラットフォームの新しい宛先データベース用のデータ・ファイルと初期化パラメータ・ファイルが生成されます。また、新しい宛先データベースを作成するスクリプトも生成されます。これらのファイルによって、ソース・データベースと異なるプラットフォームで実行されている(ただし、エンディアン形式はソース・データベースと同じ)宛先データベース全体をインスタンス化できます。

RMANのDUPLICATEおよびCONVERT DATABASEコマンドでは、データベース・オブジェクトのインスタンス化SCNの値は設定されません。インスタンス化SCNの値は、インスタンス化中に手動で設定する必要があります。

この項の例では、RMANのDUPLICATEコマンドまたはCONVERT DATABASEコマンドを使用してデータベース全体をインスタンス化する場合に必要な手順について説明します。これらのいずれかのRMANのコマンドを使用してデータベース全体をインスタンス化するには、次の一般的な手順を実行します。

  1. RMANのコマンドを使用して、ソース・データベース全体を接続先サイトにコピーします。
  2. DBMS_STREAMS_ADMパッケージのREMOVE_STREAMS_CONFIGURATIONプロシージャを使用して、接続先サイトからOracle Streams構成を削除します。
  3. ソース・データベースからの変更を適用する適用プロセスも含め、Oracle Streams接続先サイトを構成します。

この手順は、ソース・データベースで実行中の取得プロセスまたは伝播を停止させずに実行できます。

次のいずれかの項の手順に従います。

注意:

  • データベース全体のサポートされているすべての変更をレプリケートするOracle Streamsレプリケーション環境を構成するには、DBMS_STREAMS_ADMパッケージのPRE_INSTANTIATION_SETUPおよびPOST_INSTANTIATION_SETUPプロシージャを使用します。手順については、「ローカル取得を使用した2データベース・グローバル・レプリケーションの構成」を参照してください。

  • 分散トランザクションが可能な環境でインスタンス化を行う場合は、RMANを使用しないことをお薦めします。これを行うと、インダウト・トランザクションが発生し、手動で訂正する必要がある場合があります。かわりに、インスタンス化にはエクスポート/インポートまたはトランスポータブル表領域を使用してください。

関連項目:

Oracle Streams管理者を構成する方法の詳細は、「すべてのデータベースでのOracle Streams管理者の構成」を参照してください

8.4.2.1 RMANを使用した同じプラットフォーム上のデータベース全体のインスタンス化

この項の例では、RMANのDUPLICATEコマンドを使用して、データベース全体をインスタンス化します。この例では、次のことを想定しています。

  • ソース・データベースdpx1.example.comに対するすべての変更を取得して、別の宛先データベースdpx2.example.comにそれらの変更を伝播し、適用します。

  • ソース・データベースでOracle Streams管理者strmadminを構成済です。「すべてのデータベースでのOracle Streams管理者の構成」を参照してください。

  • dpx1.example.comデータベースとdpx2.example.comデータベースは、同じプラットフォームで実行されています。

関連項目:

RMANのDUPLICATEコマンドを使用する方法の詳細は、『Oracle Databaseバックアップおよびリカバリ・ユーザーズ・ガイド』を参照してください。

次の手順を実行して、ソース・データベースと宛先データベースが同じプラットフォームで実行されている場合に、RMANを使用してデータベース全体をインスタンス化します。

  1. ソース・データベースのバックアップを作成します(存在しない場合)。RMANには、複製用に有効なバックアップが必要です。この例では、dpx1.example.comのバックアップを作成します(存在しない場合)。

    注意:

    RMANのDUPLICATEコマンドを実行する際にFROM ACTIVE DATABASEオプションを使用する場合、ソース・データベースのバックアップは不要です。大規模なデータベースでは、FROM ACTIVE DATABASEオプションの実行に大量のネットワーク・リソースが必要になります。この例では、このオプションは使用しません。

  2. SQL*Plusで、Oracle Streams管理者としてソース・データベースdpx1.example.comに接続します。

    SQL*Plusでデータベースに接続する手順については、『Oracle Database管理者ガイド』を参照してください。

  3. ソース・データベースからの変更をステ―ジングするANYDATAキューを作成します(存在しない場合)。このキューは、構成後に宛先データベースに伝播される変更をステージングします。

    たとえば、次のプロシージャを実行すると、キューstreams_queueが作成されます。

    EXEC DBMS_STREAMS_ADM.SET_UP_QUEUE();
    

    手順9までは、SQL*Plusでソース・データベースにOracle Streams管理者として接続したまま実行してください。

  4. dpx1.example.comからdpx2.example.comへのデータベース・リンクを作成します。
    CREATE DATABASE LINK dpx2.example.com CONNECT TO strmadmin 
       IDENTIFIED BY password USING 'dpx2.example.com';
    
  5. ソース・データベースのソース・キューから宛先データベースの宛先キューへの伝播を作成します。この時点では宛先データベースの宛先キューは存在していませんが、この伝播を作成すると、ソース・キューにエンキューされた論理変更レコード(LCR)は、伝播が可能になるまでこのキューでステージングされます。ソース・キューは、取得されたLCRのみでなく、宛先データベースでOracle Streamsデータ・ディクショナリを移入する内部メッセージもステージングします。

    次のプロシージャを実行すると、dpx1_to_dpx2伝播が作成されます。

    BEGIN
      DBMS_STREAMS_ADM.ADD_GLOBAL_PROPAGATION_RULES(
        streams_name            => 'dpx1_to_dpx2', 
        source_queue_name       => 'strmadmin.streams_queue',
        destination_queue_name  => 'strmadmin.streams_queue@dpx2.example.com',
        include_dml             => TRUE,
        include_ddl             => TRUE,
        source_database         => 'dpx1.example.com',
        inclusion_rule          => TRUE,
        queue_to_queue          => TRUE);
    END;
    /
    
  6. 手順5で作成した伝播を停止します。
    BEGIN
      DBMS_PROPAGATION_ADM.STOP_PROPAGATION(
        propagation_name  => 'dpx1_to_dpx2');
    END;
    /
    
  7. ソース・データベース全体をインスタンス化のために準備します(準備していない場合)。「インスタンス化のためのデータベース内のすべてのデータベース・オブジェクトの準備」を参照してください。

    DBMS_STREAMS_ADMパッケージのADD_GLOBAL_RULESプロシージャを使用して、ソース・データベースに対するすべての変更を取得する取得プロセスを作成します(存在しない場合)。取得プロセスがソース・データベースへのデータベース・リンクを持つローカルの取得プロセスまたはダウンストリームの取得プロセスである場合に、このプロシージャを実行すると、ソース・データベース全体がインスタンス化のために自動的に準備されます。このような取得プロセスがすでに存在している場合は、DBA_CAPTURE_PREPARED_DATABASEデータ・ディクショナリ・ビューを問い合せて、ソース・データベースがインスタンス化のために準備されていることを確認してください。

  8. 手順7で取得プロセスを作成している場合、その取得プロセスを起動します。
    BEGIN
      DBMS_CAPTURE_ADM.START_CAPTURE(
        capture_name  => 'capture_db');
    END;
    /
    
  9. RMANのDUPLICATEコマンドに指定する終了SCNを判断します。
    SET SERVEROUTPUT ON SIZE 1000000
    DECLARE
      until_scn NUMBER;
    BEGIN
      until_scn:= DBMS_FLASHBACK.GET_SYSTEM_CHANGE_NUMBER;
          DBMS_OUTPUT.PUT_LINE('Until SCN: ' || until_scn);
    END;
    /
    

    戻された終了SCNをメモします。この番号は、後の手順で使用します。この例では、戻された終了SCNが3050191であると想定します。

  10. SQL*Plusで、管理ユーザーとしてソース・データベースdpx1.example.comに接続します。

    SQL*Plusでデータベースに接続する手順については、『Oracle Database管理者ガイド』を参照してください。

  11. 現行のオンラインREDOログをアーカイブします。
    ALTER SYSTEM ARCHIVE LOG CURRENT;
    
  12. データベースの複製用に環境を準備します。宛先データベースを複製の補助インスタンスとして準備します。手順については、『Oracle Databaseバックアップおよびリカバリ・ユーザーズ・ガイド』 を参照してください。
  13. RMANクライアントを起動し、TARGETとしてソース・データベースdpx1.example.comに、AUXILIARYとして宛先データベースdpx2.example.comに接続します。

    RMANのCONNECTコマンドの詳細は、『Oracle Databaseバックアップおよびリカバリ・リファレンス』を参照してください。

  14. OPEN RESTRICTEDオプションを指定してRMANのDUPLICATEコマンドを実行し、宛先データベースでソース・データベースをインスタンス化します。OPEN RESTRICTEDオプションは必須です。このオプションを指定すると、SQL文ALTER SYSTEM ENABLE RESTRICTED SESSIONを発行することによって、複製データベースで制限付きセッションを有効にできます。RMANは、複製データベースがオープン状態になる直前にこの文を発行します。

    UNTIL SCN句を使用して、複製用のSCNを指定できます。この句には、手順9で判断した終了SCNを使用します。RMANのDUPLICATEコマンドに指定した終了SCNは、手順7でデータベースがインスタンス化のために準備された際のSCNより大きい必要があります。また、アーカイブREDOログが、指定した終了SCN値以上で使用可能である必要があります。したがって、手順11では、終了SCNを含むREDOログをアーカイブしています。

    DUPLICATEコマンドのTO database_nameに、複製データベースの名前を指定していることを確認してください。この例では、複製データベースの名前はdpx2です。したがって、この例のDUPLICATEコマンドにはTO dpx2が含まれます。

    次に、RMANのDUPLICATEコマンドの例を示します。

    RMAN> RUN
          { 
            SET UNTIL SCN 3050191;
            ALLOCATE AUXILIARY CHANNEL dpx2 DEVICE TYPE sbt; 
            DUPLICATE TARGET DATABASE TO dpx2 
            NOFILENAMECHECK
            OPEN RESTRICTED;
          }
    

    関連項目:

    RMANのDUPLICATEコマンドの詳細は、『Oracle Databaseバックアップおよびリカバリ・リファレンス』を参照してください。

  15. SQL*Plusで宛先データベースに管理ユーザーとして接続し、データベースのグローバル名を変更します。RMANのDUPLICATEコマンドを実行すると、宛先データベースはソース・データベースと同じグローバル名を持ちます。
    ALTER DATABASE RENAME GLOBAL_NAME TO DPX2.EXAMPLE.COM;
    
  16. SQL*Plusで宛先データベースに管理ユーザーとして接続し、次のプロシージャを実行します。

    注意:

    このプロシージャを実行するとローカルのOracle Streams構成が削除されるため、このプロシージャを実行する際は、ソース・データベースではなく宛先データベースに接続していることを確認してください。

    EXEC DBMS_STREAMS_ADM.REMOVE_STREAMS_CONFIGURATION();
    

    注意:

    ソース・データベースの表のサプリメンタル・ログ・グループは宛先データベースに保持されるため、REMOVE_STREAMS_CONFIGURATIONプロシージャを実行しても削除されません。これらのサプリメンタル・ログ・グループは、必要に応じて削除できます。

    関連項目:

    REMOVE_STREAMS_CONFIGURATIONプロシージャの詳細は、Oracle Database PL/SQLパッケージおよびタイプ・リファレンス を参照

  17. 宛先データベースでALTER SYSTEM文を実行して、RESTRICTED SESSIONを無効化します。
    ALTER SYSTEM DISABLE RESTRICTED SESSION;
    
  18. 宛先データベースで、Oracle Streams管理者として接続します。「すべてのデータベースでのOracle Streams管理者の構成」を参照してください。
  19. 宛先データベースで、手順5で指定したキューを作成します。

    たとえば、次のプロシージャを実行すると、キューstreams_queueが作成されます。

    EXEC DBMS_STREAMS_ADM.SET_UP_QUEUE();
    
  20. 宛先データベースで、Oracle Streams環境を構成します。

    注意:

    手順22でグローバル・インスタンス化SCNを設定するまでは、宛先データベースで適用プロセスを起動しないでください。

  21. 宛先データベースで、宛先データベースからソース・データベースへのデータベース・リンクを作成します。
    CREATE DATABASE LINK dpx1.example.com CONNECT TO strmadmin 
       IDENTIFIED BY password USING 'dpx1.example.com';
    

    次の手順でrecursiveパラメータをTRUEに設定してSET_GLOBAL_INSTANTIATION_SCNプロシージャを実行するため、このデータベース・リンクが必要になります。

  22. 宛先データベースで、ソース・データベースのグローバル・インスタンス化SCNを設定します。RMANのDUPLICATEコマンドを実行すると、UNTIL SCN句で指定したSCN値より1つ少ない値まで、データベースが複製されます。したがって、手順14DUPLICATEコマンドを実行した際に指定した終了SCN値から1を引く必要があります。この例では、終了SCNを3050191に設定しています。つまり、インスタンス化SCNは、3050191 - 13050190となります。

    たとえば、dpx1.example.comソース・データベースのグローバル・インスタンス化SCNを3050190に設定するには、次のプロシージャを実行します。

    BEGIN
      DBMS_APPLY_ADM.SET_GLOBAL_INSTANTIATION_SCN(
        source_database_name   =>  'dpx1.example.com',
        instantiation_scn      =>  3050190,
        recursive              =>  TRUE);
    END;
    /
    

    宛先データベースのすべてのスキーマおよび表のインスタンス化SCNを設定するには、recursiveパラメータがTRUEに設定されていることを確認してください。

  23. 宛先データベースで、構成した適用プロセスを起動できます。
  24. ソース・データベースで、手順6で停止した伝播を起動します。
    BEGIN
      DBMS_PROPAGATION_ADM.START_PROPAGATION(
        queue_name  => 'dpx1_to_dpx2');
    END;
    /
8.4.2.2 RMANを使用した異なるプラットフォーム上のデータベース全体のインスタンス化

この項の例では、RMANのCONVERT DATABASEコマンドを使用して、データベース全体をインスタンス化します。この例では、次のことを想定しています。

  • ソース・データベースcvx1.example.comに対するすべての変更を取得して、別の宛先データベースcvx2.example.comにそれらの変更を伝播し、適用します。

  • ソース・データベースでOracle Streams管理者strmadminを構成済です。「すべてのデータベースでのOracle Streams管理者の構成」を参照してください。

  • cvx1.example.comcvx2.example.comデータベースは異なるプラットフォーム上で実行され、RMANのCONVERT DATABASEコマンドはそのプラットフォームの組合せでサポートされています。DBMS_TDBパッケージを使用して、任意のプラットフォームの組合せでサポートされているかどうかを判別できます。

RMANのCONVERT DATABASEコマンドを実行すると、変換済のデータ・ファイル、初期化パラメータ・ファイル(PFILE)およびSQLスクリプトが生成されます。変換済のデータ・ファイルおよびPFILEは宛先データベースで使用し、SQLスクリプトは、接続先プラットフォームで宛先データベースを作成するために使用します。

関連項目:

RMANのCONVERT DATABASEコマンドを使用する手順については、『Oracle Databaseバックアップおよびリカバリ・ユーザーズ・ガイド』を参照してください。

次の手順を実行して、ソース・データベースと宛先データベースが異なるプラットフォームで実行されている場合に、RMANを使用してデータベース全体をインスタンス化します。

  1. ソース・データベースのバックアップを作成します(存在しない場合)。RMANでは、有効なバックアップが必要です。この例では、cvx1.example.comのバックアップを作成します(存在しない場合)。

  2. SQL*Plusで、Oracle Streams管理者としてソース・データベースcvx1.example.comに接続します。

    SQL*Plusでデータベースに接続する手順については、『Oracle Database管理者ガイド』を参照してください。

  3. ソース・データベースからの変更をステ―ジングするANYDATAキューを作成します(存在しない場合)。このキューは、構成後に宛先データベースに伝播される変更をステージングします。

    たとえば、次のプロシージャを実行すると、キューstreams_queueが作成されます。

    EXEC DBMS_STREAMS_ADM.SET_UP_QUEUE();
    

    手順8までは、SQL*Plusでソース・データベースにOracle Streams管理者として接続したまま実行してください。

  4. cvx1.example.comからcvx2.example.comへのデータベース・リンクを作成します。

    CREATE DATABASE LINK cvx2.example.com CONNECT TO strmadmin 
       IDENTIFIED BY password USING 'cvx2.example.com';
    
  5. ソース・データベースのソース・キューから宛先データベースの宛先キューへの伝播を作成します。この時点では宛先データベースの宛先キューは存在していませんが、この伝播を作成すると、ソース・キューにエンキューされた論理変更レコード(LCR)は、伝播が可能になるまでこのキューでステージングされます。ソース・キューは、取得されたLCRのみでなく、宛先データベースでOracle Streamsデータ・ディクショナリを移入する内部メッセージもステージングします。

    次のプロシージャを実行すると、cvx1_to_cvx2伝播が作成されます。

    BEGIN
      DBMS_STREAMS_ADM.ADD_GLOBAL_PROPAGATION_RULES(
        streams_name            => 'cvx1_to_cvx2', 
        source_queue_name       => 'strmadmin.streams_queue',
        destination_queue_name  => 'strmadmin.streams_queue@cvx2.example.com',
        include_dml             => TRUE,
        include_ddl             => TRUE,
        source_database         => 'cvx1.example.com',
        inclusion_rule          => TRUE,
        queue_to_queue          => TRUE);
    END;
    /
    
  6. 手順5で作成した伝播を停止します。

    BEGIN
      DBMS_PROPAGATION_ADM.STOP_PROPAGATION(
        propagation_name  => 'cvx1_to_cvx2');
    END;
    /
    
  7. ソース・データベース全体をインスタンス化のために準備します(準備していない場合)。「インスタンス化のためのデータベース内のすべてのデータベース・オブジェクトの準備」を参照してください。

    DBMS_STREAMS_ADMパッケージのADD_GLOBAL_RULESプロシージャを使用して、ソース・データベースに対するすべての変更を取得する取得プロセスを作成します(存在しない場合)。取得プロセスがソース・データベースへのデータベース・リンクを持つローカルの取得プロセスまたはダウンストリームの取得プロセスである場合に、このプロシージャを実行すると、ソース・データベース全体がインスタンス化のために自動的に準備されます。このような取得プロセスがすでに存在している場合は、DBA_CAPTURE_PREPARED_DATABASEデータ・ディクショナリ・ビューを問い合せて、ソース・データベースがインスタンス化のために準備されていることを確認してください。

  8. 手順7で取得プロセスを作成している場合、その取得プロセスを起動します。

    BEGIN
      DBMS_CAPTURE_ADM.START_CAPTURE(
        capture_name  => 'capture_db');
    END;
    /
    
  9. SQL*Plusで、ソース・データベースに管理ユーザーとして接続します。

    SQL*Plusでデータベースに接続する手順については、『Oracle Database管理者ガイド』を参照してください。

  10. 現行のオンラインREDOログをアーカイブします。

    ALTER SYSTEM ARCHIVE LOG CURRENT;
    
  11. データベースの変換用に環境を準備します。たとえば、ソース・データベースを読取り専用モードでオープンします。手順は次のとおりです。

    1. ソース・データベースがオープンしている場合は、停止して読取り専用モードで起動します。

    2. DBMS_TDBパッケージのCHECK_DBおよびCHECK_EXTERNALファンクションを実行します。結果をチェックして、RMANのCONVERT DATABASEコマンドで変換がサポートされていることを確認します。

  12. ソース・データベースの現行のSCNを判別します。

    SET SERVEROUTPUT ON SIZE 1000000
    DECLARE
      current_scn NUMBER;
    BEGIN
      current_scn:= DBMS_FLASHBACK.GET_SYSTEM_CHANGE_NUMBER;
          DBMS_OUTPUT.PUT_LINE('Current SCN: ' || current_scn);
    END;
    /
    

    戻されたSCN値を書き留めます。この番号は手順24で使用します。この例では、戻された値が46931285であると想定します。

  13. RMANクライアントを起動し、TARGETとしてソース・データベースcvx1.example.comに接続します。

    RMANのCONNECTコマンドの詳細は、『Oracle Databaseバックアップおよびリカバリ・リファレンス』を参照してください。

  14. CONVERT DATABASEコマンドを実行します。

    CONVERT DATABASEコマンドのNEW DATABASE database_nameに、宛先データベースの名前を指定していることを確認してください。この例では、宛先データベースの名前はcvx2です。したがって、この例のCONVERT DATABASEコマンドにはNEW DATABASE cvx2が含まれます。

    Linux IA(64-bit)プラットフォームで実行される宛先データベースに対するRMANのCONVERT DATABASEコマンドの例を次に示します。

    CONVERT DATABASE NEW DATABASE 'cvx2'
              TRANSPORT SCRIPT '/tmp/convertdb/transportscript.sql'     
              TO PLATFORM 'Linux IA (64-bit)'
              DB_FILE_NAME_CONVERT '/home/oracle/dbs','/tmp/convertdb';
    
  15. RMANのCONVERT DATABASEコマンドによって生成されたデータ・ファイル、PFILEおよびSQLスクリプトを、宛先データベースが実行されているコンピュータ・システムに転送します。

  16. 宛先データベースが実行されているコンピュータ・システムで、制限付きセッションが有効にされた状態で宛先データベースが常にオープンするようにSQLスクリプトを変更します。

    次のスクリプトの例では、必要な変更を太字で示しています。

    -- The following commands will create a new control file and use it
    -- to open the database.
    -- Data used by Recovery Manager will be lost.
    -- The contents of online logs will be lost and all backups will
    -- be invalidated. Use this only if online logs are damaged.
     
    -- After mounting the created controlfile, the following SQL
    -- statement will place the database in the appropriate
    -- protection mode:
    --  ALTER DATABASE SET STANDBY DATABASE TO MAXIMIZE PERFORMANCE
     
    STARTUP NOMOUNT PFILE='init_00gd2lak_1_0.ora'
    CREATE CONTROLFILE REUSE SET DATABASE "CVX2" RESETLOGS  NOARCHIVELOG
        MAXLOGFILES 32
        MAXLOGMEMBERS 2
        MAXDATAFILES 32
        MAXINSTANCES 1
        MAXLOGHISTORY 226
    LOGFILE
      GROUP 1 '/tmp/convertdb/archlog1'  SIZE 25M,
      GROUP 2 '/tmp/convertdb/archlog2'  SIZE 25M
    DATAFILE
      '/tmp/convertdb/systemdf',
      '/tmp/convertdb/sysauxdf',
      '/tmp/convertdb/datafile1',
      '/tmp/convertdb/datafile2',
      '/tmp/convertdb/datafile3'
    CHARACTER SET WE8DEC
    ;
     
    -- NOTE: This ALTER SYSTEM statement is added to enable restricted session.
    
    ALTER SYSTEM ENABLE RESTRICTED SESSION;
    
    -- Database can now be opened zeroing the online logs.
    ALTER DATABASE OPEN RESETLOGS;
     
    -- No tempfile entries found to add.
    --
     
    set echo off
    prompt ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    prompt * Your database has been created successfully!
    prompt * There are many things to think about for the new database. Here
    prompt * is a checklist to help you stay on track:
    prompt * 1. You may want to redefine the location of the directory objects.
    prompt * 2. You may want to change the internal database identifier (DBID) 
    prompt *    or the global database name for this database. Use the 
    prompt *    NEWDBID Utility (nid).
    prompt ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     
    SHUTDOWN IMMEDIATE 
    -- NOTE: This startup has the UPGRADE parameter.
    -- It already has restricted session enabled, so no change is needed.
    STARTUP UPGRADE PFILE='init_00gd2lak_1_0.ora'
    @@ ?/rdbms/admin/utlirp.sql 
    SHUTDOWN IMMEDIATE 
    -- NOTE: The startup below is generated without the RESTRICT clause.
    -- Add the RESTRICT clause.
    STARTUP RESTRICT PFILE='init_00gd2lak_1_0.ora'
    -- The following step will recompile all PL/SQL modules.
    -- It may take serveral hours to complete.
    @@ ?/rdbms/admin/utlrp.sql 
    set feedback 6;
    

    スクリプトに対して他の変更が必要な場合もあります。たとえば、宛先データベースのコンピュータ・システムの正しい位置を指すようにデータファイルの位置およびPFILEの位置を変更する必要がある場合があります。

  17. SQL*Plusで宛先データベースに管理ユーザーとして接続し、次のプロシージャを実行します。

    注意:

    このプロシージャを実行するとローカルのOracle Streams構成が削除されるため、このプロシージャを実行する際は、ソース・データベースではなく宛先データベースに接続していることを確認してください。

    EXEC DBMS_STREAMS_ADM.REMOVE_STREAMS_CONFIGURATION();
    

    注意:

    ソース・データベースの表のサプリメンタル・ログ・グループは宛先データベースに保持されるため、REMOVE_STREAMS_CONFIGURATIONプロシージャを実行しても削除されません。これらのサプリメンタル・ログ・グループは、必要に応じて削除できます。

    関連項目:

    REMOVE_STREAMS_CONFIGURATIONプロシージャの詳細は、Oracle Database PL/SQLパッケージおよびタイプ・リファレンス を参照

  18. SQL*Plusで、Oracle Streams管理者として宛先データベースcvx2.example.comに接続します。

  19. ソース・データベースからクローニングされた、ソース・データベースから宛先データベースへのデータベース・リンクを削除します。

    DROP DATABASE LINK cvx2.example.com;
    
  20. 宛先データベースでALTER SYSTEM文を実行して、RESTRICTED SESSIONを無効化します。

    ALTER SYSTEM DISABLE RESTRICTED SESSION;
    
  21. 宛先データベースで、手順5で指定したキューを作成します。

    たとえば、次のプロシージャを実行すると、キューstreams_queueが作成されます。

    EXEC DBMS_STREAMS_ADM.SET_UP_QUEUE();
    
  22. 宛先データベースにOracle Streams管理者として接続し、Oracle Streams環境を構成します。「すべてのデータベースでのOracle Streams管理者の構成」を参照してください。

    注意:

    手順24でグローバル・インスタンス化SCNを設定するまでは、宛先データベースで適用プロセスを起動しないでください。

  23. 宛先データベースで、ソース・データベースへのデータベース・リンクを作成します。

    CREATE DATABASE LINK cvx1.example.com CONNECT TO strmadmin 
       IDENTIFIED BY password USING 'cvx1.example.com';
    

    次の手順でrecursiveパラメータをTRUEに設定してSET_GLOBAL_INSTANTIATION_SCNプロシージャを実行するため、このデータベース・リンクが必要になります。

  24. 宛先データベースで、ソース・データベースのグローバル・インスタンス化SCNを、手順12で戻されたSCN値に設定します。

    たとえば、cvx1.example.comソース・データベースのグローバル・インスタンス化SCNを46931285に設定するには、次のプロシージャを実行します。

    BEGIN
      DBMS_APPLY_ADM.SET_GLOBAL_INSTANTIATION_SCN(
        source_database_name   =>  'cvx1.example.com',
        instantiation_scn      =>  46931285,
        recursive              =>  TRUE);
    END;
    /
    

    宛先データベースのすべてのスキーマおよび表のインスタンス化SCNを設定するには、recursiveパラメータがTRUEに設定されていることを確認してください。

  25. 宛先データベースで、構成した適用プロセスを起動できます。

  26. ソース・データベースで、手順6で停止した伝播を起動します。

    BEGIN
      DBMS_PROPAGATION_ADM.START_PROPAGATION(
        propagation_name  => 'cvx1_to_cvx2');
    END;
    /

8.5 宛先データベースでのインスタンス化SCNの設定

インスタンス化システム変更番号(SCN)は、宛先データベースの適用プロセスに対して、ソース・データベースで特定のSCNより後にコミットされた変更を適用するように指示します。インスタンス化SCNを設定するには、次の方法があります。

  • ソース・データベースで関連するデータベース・オブジェクトをエクスポートし、宛先データベースでインポートします。この場合は、エクスポート/インポートによって宛先データベースでデータベース・オブジェクトが作成され、そこにソース・データベースからデータが移入され、関連するインスタンス化SCNが設定されます。インスタンス化には、データ・ポンプ・エクスポート/インポートを使用できます。各種のエクスポート/インポート操作用に設定されるインスタンス化SCNの詳細は、「エクスポート/インポートを使用したインスタンス化SCNの設定」を参照してください。

  • データ・ポンプを使用して、メタデータのみのエクスポート/インポートを実行します。データ・ポンプ・エクスポート/インポートを使用する場合、ソース・データベースでのエクスポート中または宛先データベースでのインポート中(あるいはその両方)に、CONTENTパラメータをMETADATA_ONLYに設定します。データベース・オブジェクトのインスタンス化SCNは設定されますが、データはインポートされません。各種のエクスポート/インポート操作用に設定されるインスタンス化SCNの詳細は、「エクスポート/インポートを使用したインスタンス化SCNの設定」を参照してください。

  • トランスポータブル表領域を使用して、ソース・データベースから宛先データベースに、1つ以上の表領域内のオブジェクトをコピーします。エクスポート前にインスタンス化のために準備したこれらの表領域内の各スキーマ、および各データベース・オブジェクトにインスタンス化SCNが設定されます。手順については、「トランスポータブル表領域またはRMANを使用した表領域内のオブジェクトのインスタンス化」を参照してください。

  • DBMS_APPLY_ADMパッケージのSET_TABLE_INSTANTIATION_SCNSET_SCHEMA_INSTANATIATION_SCNおよびSET_GLOBAL_INSTANTIATION_SCNプロシージャを使用して、インスタンス化SCNを設定します。手順については、「DBMS_APPLY_ADMパッケージを使用したインスタンス化SCNの設定」を参照してください。

8.5.1 エクスポート/インポートを使用したインスタンス化SCNの設定

この項では、エクスポート/インポートを実行してインスタンス化SCNを設定する方法について説明します。この項の情報は、メタデータのエクスポート/インポート操作と、行をインポートするエクスポート/インポート操作の両方に適用されます。FLASHBACK_SCNFLASHBACK_TIMEなどのエクスポート・パラメータを使用して、より厳密な一貫性レベルを指定できます。

ここでは、各種のエクスポート/インポート操作用のインスタンス化SCNを設定する方法について説明します。これらの項の説明は、準備済の表を対象としています。準備済の表とは、DBMS_CAPTURE_ADMパッケージのPREPARE_TABLE_INSTANTIATIONプロシージャ、PREPARE_SYNC_INSTANTIATIONファンクション、PREPARE_SCHEMA_INSTANTIATIONプロシージャまたはPREPARE_GLOBAL_INSTANTIATIONプロシージャを使用して、インスタンス化の準備を完了している表です。インポート中にインスタンス化SCNを設定するには、エクスポート前に表を準備済にする必要があります。ただし、データベースとスキーマの場合は、インポート中にインスタンス化SCNが設定されるようにエクスポート前に準備する必要はありません。

8.5.1.1 全データベースのエクスポートと全データベースのインポート

全データベースのエクスポートと全データベースのインポートでは、インポート・データベースで次のインスタンス化SCNが設定されます。

  • データベースの、またはグローバルなインスタンス化SCN

  • インポートされるユーザーごとの、スキーマのインスタンス化SCN

  • インポートされる準備済の表ごとの、表のインスタンス化SCN

8.5.1.2 全データベースまたはユーザー・エクスポートおよびユーザー・インポート

全データベースまたはユーザー・エクスポートとユーザー・インポートでは、インポート・データベースで次のインスタンス化SCNが設定されます。

  • インポートされるユーザーごとの、スキーマのインスタンス化SCN

  • インポートされる準備済の表ごとの、表のインスタンス化SCN

8.5.1.3 全データベース、ユーザーまたは表エクスポートおよび表インポート

1つ以上の表を含むエクスポートと表のインポートでは、インポート・データベースでインポートされる準備済の表ごとに、表のインスタンス化SCNが設定されます。

注意:

  • インポートを実行する宛先データベースに、データベース・オブジェクトについて非NULLのインスタンス化SCNがすでに存在する場合は、インポートを実行すると、そのデータベース・オブジェクトのインスタンス化SCNが更新されます。

  • Oracle Streamsをインスタンス化するためのエクスポート中は、エクスポート対象のオブジェクトに対してデータ定義言語(DDL)変更が行われないように注意してください。

  • エクスポート・データベースからエクスポートされた表の表サプリメンタル・ロギング指定は、インポート・データベースで表がインポートされる際に保持されます。

8.5.2 DBMS_APPLY_ADMパッケージを使用したインスタンス化SCNの設定

DBMS_APPLY_ADMパッケージの次のいずれかのプロシージャを使用すると、指定した表、指定したスキーマまたはデータベース全体について、宛先データベースでインスタンス化SCNを設定できます。

SET_SCHEMA_INSTANTIATION_SCNを使用してスキーマのインスタンス化SCNを設定する場合は、このプロシージャを実行する際にrecursiveパラメータをTRUEに設定すると、スキーマ内の表ごとにインスタンス化SCNを設定できます。同様に、SET_GLOBAL_INSTANTIATION_SCNを使用してデータベースのインスタンス化SCNを設定する場合は、このプロシージャを実行する際にrecursiveパラメータをTRUEに設定すると、データベース内のスキーマ、およびそれらのスキーマが所有する表ごとにインスタンス化SCNを設定できます。

注意:

  • SET_SCHEMA_INSTANTIATION_SCNプロシージャまたはSET_GLOBAL_INSTANTIATION_SCNプロシージャでrecursiveパラメータをTRUEに設定する場合は、宛先データベースからソース・データベースへのデータベース・リンクが必要です。このデータベース・リンクはソース・データベースのグローバル名と同じ名前であり、プロシージャを実行するユーザーからアクセス可能である必要があります。

  • ルールベースの変換または適用ハンドラがスキーマ名またはデータベース・オブジェクト名を変更するように構成されている場合でも、データベース・オブジェクトにインスタンス化SCNを設定するときには、常に、ソース・データベースのスキーマおよびデータベース・オブジェクトの名前を指定します。

  • 関連するインスタンス化SCNが存在しないと、適用中にエラーが発生します。

  • これらのプロシージャでは、取得プロセスおよび同期取得によって取得された変更に対して、インスタンス化SCNを設定できます。

表8-3に、各プロシージャとインスタンス化SCNを設定する文のタイプを示します。

表8-3 インスタンス化SCNを設定するプロシージャと、その対象となる文

プロシージャ インスタンス化SCNの設定対象

SET_TABLE_INSTANTIATION_SCN

CREATE TABLEを除く、表に対するDML文とDDL文

表の索引と表のトリガーに対するDDL文

UPDATE

ALTER TABLE

DROP TABLE

表に対するCREATEALTERまたはDROP INDEX

表に対するCREATEALTERまたはDROP TRIGGER

SET_SCHEMA_INSTANTIATION_SCN

CREATE USERを除く、ユーザーに対するDDL文

表レベルのインスタンス化SCNによって処理されるDDL文を除き、PUBLIC以外の所有者を持つ全データベース・オブジェクトに対するDDL文

CREATE TABLE

ALTER USER

DROP USER

CREATE PROCEDURE

SET_GLOBAL_INSTANTIATION_SCN

所有者を持たない、ユーザー以外のデータベース・オブジェクトに対するDDL文

PUBLICに所有されるデータベース・オブジェクトに対するDDL文

CREATE USER statements

CREATE USER

CREATE TABLESPACE

8.5.2.1 ソース・データベースへの接続中のインスタンス化SCNの設定

この項の例を実行するユーザーは、ソース・データベースから宛先データベースへのデータベース・リンクに対するアクセス権を持っている必要があります。この項の例では、データベース・リンクはhrdb2.example.comです。次の例では、ソース・データベースhrdb1.example.comで次のプロシージャを実行することで、hrdb2.example.comデータベースでhr.departments表のインスタンス化SCNが現行のSCNに設定されます。

DECLARE
  iscn  NUMBER;         -- Variable to hold instantiation SCN value
BEGIN
  iscn := DBMS_FLASHBACK.GET_SYSTEM_CHANGE_NUMBER();
  DBMS_APPLY_ADM.SET_TABLE_INSTANTIATION_SCN@HRDB2.EXAMPLE.COM(
    source_object_name    => 'hr.departments',
    source_database_name  => 'hrdb1.example.com',
    instantiation_scn     => iscn);
END;
/

次の例では、ソース・データベースhrdb1.example.comで次のプロシージャを実行することで、hrdb2.example.comデータベースでoeスキーマおよびそのすべてのオブジェクトのインスタンス化SCNが、ソース・データベースの現行のSCNに設定されます。

DECLARE
  iscn  NUMBER;         -- Variable to hold instantiation SCN value
BEGIN
  iscn := DBMS_FLASHBACK.GET_SYSTEM_CHANGE_NUMBER();
  DBMS_APPLY_ADM.SET_SCHEMA_INSTANTIATION_SCN@HRDB2.EXAMPLE.COM(
    source_schema_name    => 'oe',
    source_database_name  => 'hrdb1.example.com',
    instantiation_scn     => iscn,
    recursive             => TRUE);
END;
/

recursiveパラメータがTRUEに設定されているため、このプロシージャを実行すると、oeスキーマ内のデータベース・オブジェクトごとにインスタンス化SCNが設定されます。

注意:

recursiveパラメータをTRUEに設定する際は、ソース・データベースへの接続中にプロシージャを実行する場合でも、宛先データベースからソース・データベースへのデータベース・リンクが必要です。その場合、データベース・リンクにはソース・データベースのグローバル名と同じ名前を付けて、現行のユーザーからアクセスできるようにしてください。

8.5.2.2 宛先データベースへの接続中のインスタンス化SCNの設定

この項の例を実行するユーザーは、宛先データベースからソース・データベースへのデータベース・リンクに対するアクセス権を持っている必要があります。この項の例では、データベース・リンクはhrdb1.example.comです。次の例では、宛先データベースhrdb2.example.comで次のプロシージャを実行することで、hrdb2.example.comデータベースでhr.departments表のインスタンス化SCNが、ソース・データベースhrdb1.example.comの現行のSCNに設定されます。

DECLARE
  iscn  NUMBER;         -- Variable to hold instantiation SCN value
BEGIN
  iscn := DBMS_FLASHBACK.GET_SYSTEM_CHANGE_NUMBER@HRDB1.EXAMPLE.COM;
  DBMS_APPLY_ADM.SET_TABLE_INSTANTIATION_SCN(
    source_object_name    => 'hr.departments',
    source_database_name  => 'hrdb1.example.com',
    instantiation_scn     => iscn);
END;
/

次の例では、宛先データベースhrdb2.example.comで次のプロシージャを実行することで、hrdb2.example.comデータベースでoeスキーマおよびそのすべてのオブジェクトのインスタンス化SCNが、ソース・データベースhrdb1.example.comの現行のSCNに設定されます。

DECLARE
  iscn  NUMBER;         -- Variable to hold instantiation SCN value
BEGIN
  iscn := DBMS_FLASHBACK.GET_SYSTEM_CHANGE_NUMBER@HRDB1.EXAMPLE.COM;
  DBMS_APPLY_ADM.SET_SCHEMA_INSTANTIATION_SCN(
    source_schema_name    => 'oe',
    source_database_name  => 'hrdb1.example.com',
    instantiation_scn     => iscn,
    recursive             => TRUE);
END;
/

recursiveパラメータがTRUEに設定されているため、このプロシージャを実行すると、oeスキーマ内のデータベース・オブジェクトごとにインスタンス化SCNが設定されます。

注意:

適用プロセスでOracle以外のリモート・データベースに変更が適用される場合は、インスタンス化SCNを設定するときに、apply_database_linkパラメータをリモートの適用に使用するデータベース・リンクに設定します。

関連項目:

8.6 インスタンス化の監視

ここでは、ソース・データベースでインスタンス化のために準備済であるデータベース・オブジェクト、および宛先データベースでのデータベース・オブジェクトのインスタンス化SCNを判断するために実行できる問合せについて説明します。

8.6.1 どのデータベース・オブジェクトがインスタンス化のために準備済であるかの判断

データベース・オブジェクトをインスタンス化のために準備する方法の詳細は、「取得のルールとインスタンス化の準備」を参照してください。

どのデータベース・オブジェクトのインスタンス化の準備が完了しているかを判断するには、次のデータ・ディクショナリ・ビューを問い合せます。

  • DBA_CAPTURE_PREPARED_TABLES

  • DBA_SYNC_CAPTURE_PREPARED_TABS

  • DBA_CAPTURE_PREPARED_SCHEMAS

  • DBA_CAPTURE_PREPARED_DATABASE

たとえば、PREPARE_TABLE_INSTANTIATIONプロシージャでインスタンス化の準備が完了しているすべての表、各表が準備された時刻およびそのSCNを表示するには、次の問合せを実行します。

COLUMN TABLE_OWNER HEADING 'Table Owner' FORMAT A15
COLUMN TABLE_NAME HEADING 'Table Name' FORMAT A15
COLUMN SCN HEADING 'Prepare SCN' FORMAT 99999999999
COLUMN TIMESTAMP HEADING 'Time Ready for|Instantiation'

SELECT TABLE_OWNER, 
       TABLE_NAME, 
       SCN, 
       TO_CHAR(TIMESTAMP, 'HH24:MI:SS MM/DD/YY') TIMESTAMP
  FROM DBA_CAPTURE_PREPARED_TABLES;

出力は次のようになります。

                                                  Time Ready for
Table Owner     Table Name            Prepare SCN Instantiation
--------------- --------------- ----------------- -----------------
HR              COUNTRIES                  196655 12:59:30 02/28/02
HR              DEPARTMENTS                196658 12:59:30 02/28/02
HR              EMPLOYEES                  196659 12:59:30 02/28/02
HR              JOBS                       196660 12:59:30 02/28/02
HR              JOB_HISTORY                196661 12:59:30 02/28/02
HR              LOCATIONS                  196662 12:59:30 02/28/02
HR              REGIONS                    196664 12:59:30 02/28/02

8.6.2 インスタンス化SCNが設定されている表の判断

インスタンス化SCNは、宛先データベースで設定されます。これによって、適用プロセスで、データベース・オブジェクトに対して無視される取得論理変更レコード(LCR)と適用される取得LCRが制御されます。ソース・データベースからの表に関するLCRのコミットSCNが、接続先データベースでその表のインスタンス化SCN以下であれば、接続先データベースの適用プロセスではLCRが廃棄されます。それ以外の場合は、適用プロセスによってLCRが適用されます。LCRは、取得プロセスまたは同期取得で取得できます。「宛先データベースでのインスタンス化SCNの設定」を参照してください。

どのデータベース・オブジェクトのインスタンス化SCNが設定されているかを判断するには、対応する次のデータ・ディクショナリ・ビューを問い合せます。

  • DBA_APPLY_INSTANTIATED_OBJECTS

  • DBA_APPLY_INSTANTIATED_SCHEMAS

  • DBA_APPLY_INSTANTIATED_GLOBAL

次の問合せを実行すると、宛先データベースでインスタンス化SCNが設定されている各表と、それぞれの表のインスタンス化SCNが表示されます。

COLUMN SOURCE_DATABASE HEADING 'Source Database' FORMAT A20
COLUMN SOURCE_OBJECT_OWNER HEADING 'Object Owner' FORMAT A15
COLUMN SOURCE_OBJECT_NAME HEADING 'Object Name' FORMAT A15
COLUMN INSTANTIATION_SCN HEADING 'Instantiation SCN' FORMAT 99999999999

SELECT SOURCE_DATABASE, 
       SOURCE_OBJECT_OWNER, 
       SOURCE_OBJECT_NAME, 
       INSTANTIATION_SCN 
  FROM DBA_APPLY_INSTANTIATED_OBJECTS
  WHERE APPLY_DATABASE_LINK IS NULL;

出力は次のようになります。

Source Database     Object Owner    Object Name     Instantiation SCN
-------------------- --------------- --------------- -----------------
DBS1.EXAMPLE.COM     HR              REGIONS                    196660
DBS1.EXAMPLE.COM     HR              COUNTRIES                  196660
DBS1.EXAMPLE.COM     HR              LOCATIONS                  196660

注意:

Oracle以外のリモート・データベースに適用される変更についてのインスタンス化SCNを表示することもできます。この問合せでは、APPLY_DATABASE_LINK列がNULLの場合にのみインスタンス化SCNが表示されるため、これらのインスタンス化SCNは表示されません。