ヘッダーをスキップ
Oracle Streamsレプリケーション管理者ガイド
11g リリース1(11.1)
E05776-02
  目次
目次
索引
索引

戻る
戻る
 
次へ
次へ
 

10 インスタンス化の実行

この章では、Oracle Streamsレプリケーション環境でインスタンス化を実行する方法について説明します。データベース・オブジェクトに対する変更をレプリケートする前に、接続先データベースでそれらのオブジェクトをインスタンス化する必要があります。

この章の内容は次のとおりです。

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

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

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

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

また、次のプロシージャを使用すると、インスタンス化のために準備する表のすべての主キー列、一意キー列、ビットマップ索引列および外部キー列に対して、またはこれらの表のすべての列に対してサプリメンタル・ロギングを有効化できます。

サプリメンタル・ロギングを有効にする列を指定するには、これらの各プロシージャにsupplemental_loggingパラメータを使用します。

ここでは、インスタンス化のために表を準備する例について説明します。

インスタンス化のための表の準備

取得プロセスによって表に対する変更が取得される場合は、DBMS_CAPTURE_ADMパッケージのPREPARE_TABLE_INSTANTIATIONプロシージャを使用して、表をインスタンス化のために準備します。同期取得によって1つの表または複数の表に対する変更が取得される場合は、PREPARE_SYNC_INSTANTIATIONファンクションを使用して、1つの表または複数の表をインスタンス化のために準備します。

この項の内容は次のとおりです。

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

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

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

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

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

この項の例では、表に対する変更が同期取得によって取得される場合に、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;
/

インスタンス化のためのスキーマ内のデータベース・オブジェクトの準備

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

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

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

インスタンス化のためのデータベース内のすべてのデータベース・オブジェクトの準備

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

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

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

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

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

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

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

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

Oracle Streamsレプリケーション環境でのオブジェクトのインスタンス化

Oracle Streams環境でデータベース・オブジェクトをインスタンス化するには、次の方法があります。

Oracle Data Pumpおよびトランスポータブル表領域を使用すると、個々のデータベース・オブジェクトかスキーマ、またはデータベース全体をインスタンス化できます。Recovery Managerを使用すると、表領域または表領域セット内のデータベース・オブジェクト、またはデータベース全体をインスタンス化できます。


注意:

Oracle Streamsレプリケーションを構成するには、DBMS_STREAMS_ADMパッケージのMAINTAIN_GLOBALMAINTAIN_SCHEMASMAINTAIN_SIMPLE_TTSMAINTAIN_TABLESおよびMAINTAIN_TTSプロシージャを使用します。これらのプロシージャのいずれかを使用する場合、適切なデータベース・オブジェクトに対してインスタンス化が自動的に実行されます。これらのいずれかのプロシージャを使用してレプリケーションを構成することをお薦めします。

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

この項の例では、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パッケージも使用できます。


参照:

  • Oracle Streams管理者を構成する方法は、『Oracle Streams概要および管理』を参照してください。

  • データ・ポンプの詳細は、『Oracle Databaseユーティリティ』を参照してください。

  • Oracle Streamsのインスタンス化にDBMS_DATAPUMPパッケージを使用する例については、第V部「レプリケーション環境の例」を参照してください。


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

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

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

  2. エクスポート・ダンプ・ファイルおよびエクスポート・ログ・ファイルを保持するディレクトリ・オブジェクトを作成します。

    CREATE DIRECTORY DPUMP_DIR AS '/usr/dpump_dir';
    
  3. 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;
      /
      

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

    • DBMS_RULE_ADMパッケージのプロシージャを使用して、hrスキーマのルールを取得プロセスのポジティブ・ルール・セットに追加します。次に、hrスキーマを指定してDBMS_CAPTURE_ADMパッケージのPREPARE_SCHEMA_INSTANTIATIONプロシージャを実行することによって、オブジェクトをインスタンス化のために手動で準備します。

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

      データベース・オブジェクトをインスタンス化のために準備する前に、ルールを取得プロセスのポジティブ・ルール・セットに追加したことを確認してください。

    • DBMS_STREAMS_ADMパッケージのプロシージャを使用して、hrスキーマの表のルールを同期取得のポジティブ・ルール・セットに追加します。実行するプロシージャによって、指定した表がインスタンス化のために自動的に準備されます。

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

      BEGIN
        DBMS_STREAMS_ADM.ADD_TABLE_RULES(
          table_name   => 'hr.employees',
          streams_type => 'sync_capture',
          streams_name => 'sync_capture',
          queue_name   => 'strmadmin.streams_queue');
      END;
      /
      

      インスタンス化のためにhrスキーマ内のすべての表を準備するには、スキーマ内の各表に対してADD_TABLE_RULESプロシージャを実行します。指定した同期取得が存在しない場合は、このプロシージャによって作成されます。

  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ユーティリティ』を参照してください。

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

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

これらの例では、表領域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ロールを付与済です。


参照:

  • 「インスタンス化の後の一貫性の確認」

  • Oracle Streams管理者を構成する方法は、『Oracle Streams概要および管理』を参照してください。

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


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

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

  • ソース・データベースの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表領域内のデータベース・オブジェクトをインスタンス化します。

  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表を準備します。この手順を実行するには、次の方法があります。

    • DBMS_STREAMS_ADMパッケージのプロシージャを使用して、hr.jobs_transport表およびhr.regions_transport表のルールを取得プロセスのポジティブ・ルール・セットに追加します。取得プロセスがソース・データベースへのデータベース・リンクを持つローカルの取得プロセスまたはダウンストリームの取得プロセスである場合に、このプロシージャを実行すると、この表がインスタンス化のために自動的に準備されます。

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

      BEGIN
        DBMS_STREAMS_ADM.ADD_TABLE_RULES(
          table_name     => 'hr.jobs_transport',
          streams_type   => 'capture',
          streams_name   => 'strm01_capture',
          queue_name     => 'strmadmin.strm01_queue',
          include_dml    => TRUE,
          include_ddl    => TRUE,
          inclusion_rule => TRUE);
      END;
      /
      

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

      BEGIN
        DBMS_STREAMS_ADM.ADD_TABLE_RULES(
          table_name     => 'hr.regions_transport',
          streams_type   => 'capture',
          streams_name   => 'strm01_capture',
          queue_name     => 'strmadmin.strm01_queue',
          include_dml    => TRUE,
          include_ddl    => TRUE,
          inclusion_rule => TRUE);
      END;
      /
      
    • DBMS_RULE_ADMパッケージのプロシージャを使用して、hr.jobs_transport表およびhr.regions_transport表のルールを取得プロセスのポジティブ・ルール・セットに追加します。次に、表を指定してDBMS_CAPTURE_ADMパッケージのPREPARE_TABLE_INSTANTIATIONプロシージャを実行することによって、これらの表をインスタンス化のために手動で準備します。

      BEGIN
        DBMS_CAPTURE_ADM.PREPARE_TABLE_INSTANTIATION(
          table_name  => 'hr.jobs_transport');
      END;
      /
      
      BEGIN
        DBMS_CAPTURE_ADM.PREPARE_TABLE_INSTANTIATION(
          table_name  => 'hr.regions_transport');
      END;
      /
      

      データベース・オブジェクトをインスタンス化のために準備する前に、ルールを取得プロセスのポジティブ・ルール・セットに追加したことを確認してください。

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

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

      BEGIN
        DBMS_STREAMS_ADM.ADD_TABLE_RULES(
          table_name   => 'hr.jobs_transport',
          streams_type => 'sync_capture',
          streams_name => 'sync_capture',
          queue_name   => 'strmadmin.streams_queue');
      END;
      /
      

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

      BEGIN
        DBMS_STREAMS_ADM.ADD_TABLE_RULES(
          table_name   => 'hr.regions_transport',
          streams_type => 'sync_capture',
          streams_name => 'sync_capture',
          queue_name   => 'strmadmin.streams_queue');
      END;
      /
      
  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;
    

注意:

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

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

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

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

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

  • 接続先データベースはtts2.netです。


参照:

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

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

  1. インスタンス化する表領域を含むソース・データベースのバックアップを作成します(存在しない場合)。Recovery Managerには、表領域のクローニング用に有効なバックアップが必要です。この例では、jobs_tbs表領域およびregions_tbs表領域を含むソース・データベースのバックアップを作成します(存在しない場合)。

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

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

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

    CREATE DIRECTORY SOURCE_DIR AS '/usr/db_files';
    

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

  4. インスタンス化のためにhr.jobs_transport表およびhr.regions_transport表を準備します。この手順を実行するには、次の方法があります。

    • DBMS_STREAMS_ADMパッケージのプロシージャを使用して、hr.jobs_transport表およびhr.regions_transport表のルールを取得プロセスのポジティブ・ルール・セットに追加します。取得プロセスがソース・データベースへのデータベース・リンクを持つローカルの取得プロセスまたはダウンストリームの取得プロセスである場合に、このプロシージャを実行すると、この表がインスタンス化のために自動的に準備されます。

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

      BEGIN
        DBMS_STREAMS_ADM.ADD_TABLE_RULES(
          table_name     => 'hr.jobs_transport',
          streams_type   => 'capture',
          streams_name   => 'strm01_capture',
          queue_name     => 'strmadmin.strm01_queue',
          include_dml    => TRUE,
          include_ddl    => TRUE,
          inclusion_rule => TRUE);
      END;
      /
      

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

      BEGIN
        DBMS_STREAMS_ADM.ADD_TABLE_RULES(
          table_name     => 'hr.regions_transport',
          streams_type   => 'capture',
          streams_name   => 'strm01_capture',
          queue_name     => 'strmadmin.strm01_queue',
          include_dml    => TRUE,
          include_ddl    => TRUE,
          inclusion_rule => TRUE);
      END;
      /
      
    • DBMS_RULE_ADMパッケージのプロシージャを使用して、hr.jobs_transport表およびhr.regions_transport表のルールを取得プロセスのポジティブ・ルール・セットに追加します。次に、表を指定してDBMS_CAPTURE_ADMパッケージのPREPARE_TABLE_INSTANTIATIONプロシージャを実行することによって、これらの表をインスタンス化のために手動で準備します。

      BEGIN
        DBMS_CAPTURE_ADM.PREPARE_TABLE_INSTANTIATION(
          table_name  => 'hr.jobs_transport');
      END;
      /
      
      BEGIN
        DBMS_CAPTURE_ADM.PREPARE_TABLE_INSTANTIATION(
          table_name  => 'hr.regions_transport');
      END;
      /
      

      データベース・オブジェクトをインスタンス化のために準備する前に、ルールを取得プロセスのポジティブ・ルール・セットに追加したことを確認してください。

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

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

      BEGIN
        DBMS_STREAMS_ADM.ADD_TABLE_RULES(
          table_name   => 'hr.jobs_transport',
          streams_type => 'sync_capture',
          streams_name => 'sync_capture',
          queue_name   => 'strmadmin.streams_queue');
      END;
      /
      

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

      BEGIN
        DBMS_STREAMS_ADM.ADD_TABLE_RULES(
          table_name   => 'hr.regions_transport',
          streams_type => 'sync_capture',
          streams_name => 'sync_capture',
          queue_name   => 'strmadmin.streams_queue');
      END;
      /
      
  5. Recovery Managerの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でRecovery ManagerのTRANSPORT TABLESPACEコマンドにUNTIL句を指定しないでください。UNTIL句が指定されない場合、Recovery Managerは最後のアーカイブREDOログ・ファイルを使用して終了SCNを自動的に判別します。

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

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

    ALTER SYSTEM ARCHIVE LOG CURRENT;
    
  8. Recovery Managerクライアントを起動し、TARGETとしてソース・データベースtts1.netに接続します。

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

  9. ソース・データベースtts1.netで、Recovery Managerの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. 必要に応じて、インポート・スクリプトを変更します。スクリプト内の次のいずれかまたは両方の項目の変更が必要になる場合があります。

    • エクスポートした表領域を接続先データベースに含めるために使用する方法。インポート・スクリプトには、エクスポートした表領域を接続先データベースに含めるための2つの方法が含まれます。データ・ポンプ・インポート・コマンド(impdp)と、DBMS_STREAMS_TABLESPACE_ADMパッケージ内のATTACH_TABLESPACESプロシージャを使用して表領域をアタッチするスクリプトです。

      デフォルトでは、スクリプトでは表領域をアタッチする方法が使用されます。データ・ポンプ・インポート・コマンドはコメント・アウトされます。データ・ポンプ・インポートを使用する場合、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.netに接続します。

  13. インポート・スクリプトを実行します。

    SET ECHO ON
    SPOOL jobs_tbs_imp.out
    @jobs_tbs_imp.sql
    

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

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

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

  1. Recovery Managerのコマンドを使用して、ソース・データベース全体を接続先サイトにコピーします。

  2. DBMS_STREAMS_ADMパッケージのREMOVE_STREAMS_CONFIGURATIONプロシージャを使用して、接続先サイトからOracle Streams構成を削除します。

  3. ソース・データベースからの変更を適用する適用プロセスも含め、Oracle Streams接続先サイトを構成します。

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

ソース・データベースと接続先データベースが同じプラットフォーム上で実行されている場合、Recovery ManagerのDUPLICATEコマンドを使用してインスタンス化します。ソース・データベースと接続先データベースが異なるプラットフォーム上で実行されている場合は、Recovery ManagerのCONVERT DATABASEコマンドを使用してインスタンス化します。次のいずれかの項の手順に従います。


注意:

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

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



参照:

Oracle Streams管理者を構成する方法は、『Oracle Streams概要および管理』を参照してください。

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

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

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

  • ソース・データベースでOracle Streams管理者strmadminを構成済です。

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


参照:

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

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

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


    注意:

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

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

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

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

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

    EXEC DBMS_STREAMS_ADM.SET_UP_QUEUE();
    

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

  4. dpx1.netからdpx2.netにデータベース・リンクを作成します。

    CREATE DATABASE LINK dpx2.net CONNECT TO strmadmin
       IDENTIFIED BY password USING 'dpx2.net';
    
  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.net',
        include_dml             => TRUE,
        include_ddl             => TRUE,
        source_database         => 'dpx1.net',
        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データ・ディクショナリ・ビューを問い合せて、ソース・データベースがインスタンス化のために準備されていることを確認してください。

    取得プロセスが存在せず、作成する必要がある場合、この例ではcapture_db取得プロセスが作成されます。

    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;
    /
    

    取得プロセスがすでに存在しており、データベース全体をインスタンス化のために準備する必要がある場合は、次のプロシージャを実行します。

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

    BEGIN
      DBMS_CAPTURE_ADM.START_CAPTURE(
        capture_name  => 'capture_db');
    END;
    /
    
  9. Recovery Managerの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をメモします。この番号は手順14で使用します。この例では、戻された終了SCNが3050191であると想定します。

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

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

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

    ALTER SYSTEM ARCHIVE LOG CURRENT;
    
  12. データベース複製のために環境を準備します。これには、接続先データベースを複製の補助インスタンスとして準備することも含まれます。手順については、『Oracle Databaseバックアップおよびリカバリ・ユーザーズ・ガイド』を参照してください。

  13. Recovery Managerクライアントを起動し、TARGETとしてソース・データベースdpx1.netに、AUXILIARYとして接続先データベースdpx2.netに接続します。

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

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

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

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

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

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

    参照:

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

  15. SQL*Plusで接続先データベースに管理ユーザーとして接続し、データベースのグローバル名を変更します。Recovery ManagerのDUPLICATEコマンドを実行すると、接続先データベースはソース・データベースと同じグローバル名を持ちます。

    ALTER DATABASE RENAME GLOBAL_NAME TO DPX2.NET;
    
  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. 接続先データベースで、手順5で指定したキューを作成します。

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

    EXEC DBMS_STREAMS_ADM.SET_UP_QUEUE();
    
  19. 接続先データベースにOracle Streams管理者として接続し、Oracle Streams環境を構成します。


    注意:

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


    参照:

    Oracle Streams管理者を構成する方法は、『Oracle Streams概要および管理』を参照してください。

  20. 接続先データベースで、接続先データベースからソース・データベースへのデータベース・リンクを作成します。

    CREATE DATABASE LINK dpx1.net CONNECT TO strmadmin
       IDENTIFIED BY password USING 'dpx1.net';
    

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

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

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

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

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

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

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

    BEGIN
      DBMS_PROPAGATION_ADM.START_PROPAGATION(
        queue_name  => 'dpx1_to_dpx2');
    END;
    /
    

Recovery Managerを使用した異なるプラットフォーム上のデータベース全体のインスタンス化

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

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

  • ソース・データベースでOracle Streams管理者strmadminを構成済です。

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

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


参照:

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

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

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

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

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

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

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

    EXEC DBMS_STREAMS_ADM.SET_UP_QUEUE();
    

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

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

    CREATE DATABASE LINK cvx2.net CONNECT TO strmadmin
       IDENTIFIED BY password USING 'cvx2.net';
    
  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.net',
        include_dml             => TRUE,
        include_ddl             => TRUE,
        source_database         => 'cvx1.net',
        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データ・ディクショナリ・ビューを問い合せて、ソース・データベースがインスタンス化のために準備されていることを確認してください。

    取得プロセスが存在せず、作成する必要がある場合、この例ではcapture_db取得プロセスが作成されます。

    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;
    /
    

    取得プロセスがすでに存在しており、データベース全体をインスタンス化のために準備する必要がある場合は、次のプロシージャを実行します。

    EXEC DBMS_CAPTURE_ADM.PREPARE_GLOBAL_INSTANTIATION();
    
  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ファンクションを実行します。結果をチェックして、Recovery ManagerのCONVERT DATABASEコマンドで変換がサポートされていることを確認します。


    参照:

    これらの手順の詳細は、『Oracle 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. Recovery Managerクライアントを起動し、TARGETとしてソース・データベースcvx1.netに接続します。

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

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

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

    Linux IA(64-bit)プラットフォームで実行される接続先データベースに対するRecovery Managerの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. Recovery Managerの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.netに接続します。

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

    DROP DATABASE LINK cvx2.net;
    
  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環境を構成します。


    注意:

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


    参照:

    Oracle Streams管理者を構成する方法は、『Oracle Streams概要および管理』を参照してください。

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

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

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

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

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

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

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

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

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

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

接続先データベースでのインスタンス化SCNの設定

インスタンス化SCNは、接続先データベースの適用プロセスに対して、ソース・データベースで特定のSCNより後にコミットされたデータベース・オブジェクトに変更を適用するように指示します。インスタンス化SCNを設定するには、次の方法があります。

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

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

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

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

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

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

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

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

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

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

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

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

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

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


注意:

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

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

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



参照:


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

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

  • SET_TABLE_INSTANTIATION_SCN

  • SET_SCHEMA_INSTANTIATION_SCN

  • SET_GLOBAL_INSTANTIATION_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を設定する場合に使用できます。


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

表10-1 インスタンス化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

CREATE USER

CREATE TABLESPACE


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

この項の例を実行するユーザーは、ソース・データベースから接続先データベースへのデータベース・リンクに対するアクセス権を持っている必要があります。この項の例では、データベース・リンクはhrdb2.netです。次の例では、ソース・データベースhrdb1.netで次のプロシージャを実行することで、hrdb2.netデータベースで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.NET(
    source_object_name    => 'hr.departments',
    source_database_name  => 'hrdb1.net',
    instantiation_scn     => iscn);
END;
/

次の例では、ソース・データベースhrdb1.netで次のプロシージャを実行することで、hrdb2.netデータベースで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.NET(
    source_schema_name    => 'oe',
    source_database_name  => 'hrdb1.net',
    instantiation_scn     => iscn,
    recursive             => TRUE);
END;
/

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


注意:

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

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

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

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

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

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

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


注意:

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


参照: