8 インスタンス化とOracle Streamsレプリケーション
この章では、インスタンス化とOracle Streamsレプリケーションの概念について説明します。また、インスタンス化のためのデータベース・オブジェクトの準備、インスタンス化の実行、インスタンス化システム変更番号(SCN)の設定およびインスタンス化の監視の各手順についても説明します。
この章には次のトピックが含まれます:
8.1 インスタンス化とOracle Streamsレプリケーションの概要
単一のデータベース内または複数のデータベース間で1つのデータベース・オブジェクトをレプリケートするOracle Streams環境では、ソース・データベースでオブジェクトに対する変更が生成され、宛先データベースで変更が適用プロセスによってデキューされます。このような変更が取得プロセスまたは同期取得で取得され、その変更がローカルに適用されるか、または他のデータベースに伝播されてから宛先データベースで適用される場合は、オブジェクトに対する変更をレプリケートする前に、ソース・データベース・オブジェクトをインスタンス化する必要があります。ソース・データベース・オブジェクトへの変更が適用されるデータベースが、ソース・データベースと異なる場合は、宛先データベースにこれらのデータベース・オブジェクトのコピーが必要です。
Oracle Streamsでは通常、次の手順を実行してデータベース・オブジェクトをインスタンス化します。
-
ソース・データベースでデータベース・オブジェクトをインスタンス化のために準備します。
-
データベース・オブジェクトのコピーが宛先データベースに存在しない場合、ソース・データベースのデータベース・オブジェクトに基づいて、宛先データベースで物理的にデータベース・オブジェクトを作成します。エクスポート/インポート、トランスポータブル表領域またはRMANを使用して、インスタンス化用にデータベース・オブジェクトをコピーできます。宛先データベースにデータベース・オブジェクトが存在する場合は、この手順は不要です。
-
宛先データベースで、データベース・オブジェクトのインスタンス化システム変更番号(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
アクション・コンテキストを持つルールを含むデータベースまたはスキーマをエクスポートする場合は、そのルールを所有するスキーマのデータベースまたはデフォルト表領域が書込み可能である必要があります。データベースまたは表領域が読取り専用であると、エクスポート・エラーが発生します。
関連項目:
-
適用プロセスの最も古いSCNの詳細は、『Oracle Streams概要および管理』を参照してください。
-
サプリメンタル・ログ・グループを追加および削除する方法の詳細は、「サプリメンタル・ロギングの指定」を参照してください
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データ・ディクショナリは使用されず、サプリメンタル・ロギングは不要です。
関連項目:
-
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パッケージのプロシージャまたはファンクション |
---|---|
|
|
|
|
|
|
プロシージャは、インスタンス化を準備するために複数回コールできます。ダウンストリームの取得を使用していて、ダウンストリームの取得プロセスでダウンストリーム・データベースからソース・データベースへのデータベース・リンクが使用されている場合、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が記録されるため、ルールを追加する際に、データベース・オブジェクトをインスタンス化のために準備する必要があります。同期取得のルールが変更されている場合は、データベース・オブジェクトをインスタンス化のために準備する必要はありませんが、ルールの変更では、ルール条件のデータベース・オブジェクト名またはスキーマを変更することはできません。
関連項目:
-
Oracle Streamsデータ・ディクショナリの詳細は、『Oracle Streams概要および管理』を参照してください。
8.2.3 インスタンス化の準備中のサプリメンタル・ロギング・オプション
レプリケーション環境で、変更の取得に取得プロセスが使用されている場合、サプリメンタル・ロギングが必要になります。サプリメンタル・ロギングでは、操作が実行されるたびにREDOログに列データが追加されます。データベース・オブジェクトをインスタンス化のために準備するためのDBMS_CAPTURE_ADM
パッケージには、PREPARE_TABLE_INSTANTIATION
、PREPARE_SCHEMA_INSTANTIATION
およびPREPARE_GLOBAL_INSTANTIATION
が含まれます。これらのプロシージャには、supplemental_logging
パラメータが含まれており、このパラメータを使用すると、インスタンス化のために準備されているデータベース・オブジェクトのサプリメンタル・ロギングの指定を制御できます。
表8-2に、各プロシージャに対するsupplemental_logging
パラメータの値を示します。
表8-2 インスタンス化の準備中のサプリメンタル・ロギング・オプション
プロシージャ | supplemental_loggingパラメータの設定 | 説明 |
---|---|---|
|
|
インスタンス化のために準備する表の主キー列、一意キー列、ビットマップ索引列および外部キー列のサプリメンタル・ロギングが有効になります。この場合、ログに記録される表の列が、主キー列が無条件のログ・グループ、一意キー列とビットマップ索引列が条件付きのログ・グループ、外部キー列が条件付きのログ・グループと、3つの異なるログ・グループに配置されます。 |
|
|
インスタンス化のために準備する表のすべての列のサプリメンタル・ロギングが有効になります。このプロシージャは、表内のすべての列を無条件のログ・グループに配置します。 |
|
|
インスタンス化のために準備するスキーマ内の表、および将来このスキーマに追加するすべての表の主キー列、一意キー列、ビットマップ索引列および外部キー列のサプリメンタル・ロギングが有効になります。主キー列は、無条件でログに記録されます。一意キー列、ビットマップ索引列および外部キー列は、条件付きでログに記録されます。 |
|
|
インスタンス化のために準備するスキーマ内の表、および将来このスキーマに追加するすべての表のすべての列のサプリメンタル・ロギングが有効になります。すべての列は、無条件でログに記録されます。 |
|
|
インスタンス化のために準備するデータベース内の表、および将来このデータベースに追加するすべての表の主キー列、一意キー列、ビットマップ索引列および外部キー列のサプリメンタル・ロギングが有効になります。主キー列は、無条件でログに記録されます。一意キー列、ビットマップ索引列および外部キー列は、条件付きでログに記録されます。 |
|
|
インスタンス化のために準備するデータベース内のすべての表、および将来このデータベースに追加するすべての表のすべての列のサプリメンタル・ロギングが有効になります。すべての列は、無条件でログに記録されます。 |
すべてのPREPAREプロシージャ |
|
インスタンス化のために準備する表のいずれの列に対してもサプリメンタル・ロギングが有効になりません。 |
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環境から特定のデータベース・オブジェクトを削除すると、これらのプロシージャによって有効化されたサプリメンタル・ロギングを削除して、不要なロギングを回避できます。
関連項目:
-
PREPAREプロシージャによって有効化されたサプリメンタル・ロギングを削除する方法については、「ソース・データベースでのインスタンス化の準備の強制終了」を参照してください
-
データ型の詳細は、『Oracle Database SQL言語リファレンス』を参照してください。
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_INSTANTIATION
、PREPARE_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のインスタンス化の実行について説明します。
関連項目:
-
Oracle Streamsを使用してデータベース上で全データベースのエクスポート/インポートを実行する方法の詳細は、『Oracle Streams概要および管理』 を参照してください
-
データ・ポンプの詳細は、『Oracle Databaseユーティリティ』 を参照してください
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データを生成しません。そのため、セッション・タグの設定は不要です。
関連項目:
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_RULES
、ALL_STREAMS_GLOBAL_RULES
、ALL_STREAMS_SCHEMA_RULES
、ALL_STREAMS_TABLE_RULES
、DBA_STREAMS_RULES
、DBA_STREAMS_GLOBAL_RULES
、DBA_STREAMS_SCHEMA_RULES
およびDBA_STREAMS_TABLE_RULES
にはインポートされません。ただし、これらのルールに関する情報は、STREAMS_CONFIGURATION
パラメータの設定に関係なく、データ・ディクショナリ・ビューALL_RULES
、ALL_RULE_SETS
、ALL_RULE_SET_RULES
、DBA_RULES
、DBA_RULE_SETS
、DBA_RULE_SET_RULES
、USER_RULES
、USER_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
パッケージも使用できます。
関連項目:
-
データ・ポンプの詳細は、『Oracle Databaseユーティリティ』 を参照してください
-
Oracle Streamsのインスタンス化に
DBMS_DATAPUMP
パッケージを使用する場合の例は、『Oracle Streams拡張例』を参照してください。
前述の想定で、データ・ポンプ・エクスポート/インポートを使用してhr
スキーマをインスタンス化するには、次の手順を実行します。
注意:
エクスポート・データベースからエクスポートされた表の表サプリメンタル・ログ・グループは、インポート・データベースで表がインポートされる際に保持されます。これらのサプリメンタル・ログ・グループは、必要に応じて削除できます。
関連項目:
データ・ポンプ・インポートの実行方法の詳細は、『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を使用して表領域内のデータベース・オブジェクトをインスタンス化する場合に必要な手順について説明します。通常、これらのインスタンス化オプションを使用する方が、エクスポート/インポートを使用するより高速にインスタンス化を実行できます。次の例では、表領域内のデータベース・オブジェクトをインスタンス化します。
-
「トランスポータブル表領域を使用したオブジェクトのインスタンス化」では、トランスポータブル表領域機能を使用してインスタンス化を完了します。データ・ポンプを使用すると、ソース・データベースで表領域がエクスポートされ、宛先データベースでその表領域がインポートされます。エクスポート中、表領域は読取り専用になります。
-
「バックアップからのトランスポータブル表領域とRMANを使用したオブジェクトのインスタンス化」では、RMANの
TRANSPORT
TABLESPACE
コマンドを使用して、表領域または表領域セットをオンライン状態にしたままで、表領域または表領域セットのデータ・ポンプ・エクスポート・ダンプ・ファイルおよびデータ・ファイルを生成します。データ・ポンプ・インポートまたはDBMS_STREAMS_TABLESPACE_ADM
パッケージのATTACH_TABLESPACES
プロシージャのいずれかを使用して、宛先データベースに表領域または表領域セットを追加できます。
これらの例では、表領域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
ロールを付与済です。
関連項目:
-
SQL*Plusでデータベースに接続する手順については、『Oracle Database管理者ガイド』を参照してください。
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
表領域内のデータベース・オブジェクトをインスタンス化します。
注意:
エクスポート・データベースからエクスポートされた表の表サプリメンタル・ログ・グループは、インポート・データベースで表がインポートされる際に保持されます。これらのサプリメンタル・ログ・グループは、必要に応じて削除できます。
関連項目:
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
表領域内のデータベース・オブジェクトをインスタンス化します。
関連項目:
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のコマンドを使用してデータベース全体をインスタンス化するには、次の一般的な手順を実行します。
- RMANのコマンドを使用して、ソース・データベース全体を接続先サイトにコピーします。
DBMS_STREAMS_ADM
パッケージのREMOVE_STREAMS_CONFIGURATION
プロシージャを使用して、接続先サイトからOracle Streams構成を削除します。- ソース・データベースからの変更を適用する適用プロセスも含め、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を使用してデータベース全体をインスタンス化します。
関連項目:
8.4.2.2 RMANを使用した異なるプラットフォーム上のデータベース全体のインスタンス化
この項の例では、RMANのCONVERT
DATABASE
コマンドを使用して、データベース全体をインスタンス化します。この例では、次のことを想定しています。
-
ソース・データベース
cvx1.example.com
に対するすべての変更を取得して、別の宛先データベースcvx2.example.com
にそれらの変更を伝播し、適用します。 -
ソース・データベースでOracle Streams管理者
strmadmin
を構成済です。「すべてのデータベースでのOracle Streams管理者の構成」を参照してください。 -
cvx1.example.com
とcvx2.example.com
データベースは異なるプラットフォーム上で実行され、RMANのCONVERT
DATABASE
コマンドはそのプラットフォームの組合せでサポートされています。DBMS_TDB
パッケージを使用して、任意のプラットフォームの組合せでサポートされているかどうかを判別できます。
RMANのCONVERT
DATABASE
コマンドを実行すると、変換済のデータ・ファイル、初期化パラメータ・ファイル(PFILE)およびSQLスクリプトが生成されます。変換済のデータ・ファイルおよびPFILEは宛先データベースで使用し、SQLスクリプトは、接続先プラットフォームで宛先データベースを作成するために使用します。
関連項目:
RMANのCONVERT
DATABASE
コマンドを使用する手順については、『Oracle Databaseバックアップおよびリカバリ・ユーザーズ・ガイド』を参照してください。
次の手順を実行して、ソース・データベースと宛先データベースが異なるプラットフォームで実行されている場合に、RMANを使用してデータベース全体をインスタンス化します。
-
ソース・データベースのバックアップを作成します(存在しない場合)。RMANでは、有効なバックアップが必要です。この例では、
cvx1.example.com
のバックアップを作成します(存在しない場合)。 -
SQL*Plusで、Oracle Streams管理者としてソース・データベース
cvx1.example.com
に接続します。SQL*Plusでデータベースに接続する手順については、『Oracle Database管理者ガイド』を参照してください。
-
ソース・データベースからの変更をステ―ジングする
ANYDATA
キューを作成します(存在しない場合)。このキューは、構成後に宛先データベースに伝播される変更をステージングします。たとえば、次のプロシージャを実行すると、キュー
streams_queue
が作成されます。EXEC DBMS_STREAMS_ADM.SET_UP_QUEUE();
手順8までは、SQL*Plusでソース・データベースにOracle Streams管理者として接続したまま実行してください。
-
cvx1.example.com
からcvx2.example.com
へのデータベース・リンクを作成します。CREATE DATABASE LINK cvx2.example.com CONNECT TO strmadmin IDENTIFIED BY password USING 'cvx2.example.com';
-
ソース・データベースのソース・キューから宛先データベースの宛先キューへの伝播を作成します。この時点では宛先データベースの宛先キューは存在していませんが、この伝播を作成すると、ソース・キューにエンキューされた論理変更レコード(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; /
-
手順5で作成した伝播を停止します。
BEGIN DBMS_PROPAGATION_ADM.STOP_PROPAGATION( propagation_name => 'cvx1_to_cvx2'); END; /
-
ソース・データベース全体をインスタンス化のために準備します(準備していない場合)。「インスタンス化のためのデータベース内のすべてのデータベース・オブジェクトの準備」を参照してください。
DBMS_STREAMS_ADM
パッケージのADD_GLOBAL_RULES
プロシージャを使用して、ソース・データベースに対するすべての変更を取得する取得プロセスを作成します(存在しない場合)。取得プロセスがソース・データベースへのデータベース・リンクを持つローカルの取得プロセスまたはダウンストリームの取得プロセスである場合に、このプロシージャを実行すると、ソース・データベース全体がインスタンス化のために自動的に準備されます。このような取得プロセスがすでに存在している場合は、DBA_CAPTURE_PREPARED_DATABASE
データ・ディクショナリ・ビューを問い合せて、ソース・データベースがインスタンス化のために準備されていることを確認してください。 -
手順7で取得プロセスを作成している場合、その取得プロセスを起動します。
BEGIN DBMS_CAPTURE_ADM.START_CAPTURE( capture_name => 'capture_db'); END; /
-
SQL*Plusで、ソース・データベースに管理ユーザーとして接続します。
SQL*Plusでデータベースに接続する手順については、『Oracle Database管理者ガイド』を参照してください。
-
現行のオンラインREDOログをアーカイブします。
ALTER SYSTEM ARCHIVE LOG CURRENT;
-
データベースの変換用に環境を準備します。たとえば、ソース・データベースを読取り専用モードでオープンします。手順は次のとおりです。
-
ソース・データベースがオープンしている場合は、停止して読取り専用モードで起動します。
-
DBMS_TDB
パッケージのCHECK_DB
およびCHECK_EXTERNAL
ファンクションを実行します。結果をチェックして、RMANのCONVERT
DATABASE
コマンドで変換がサポートされていることを確認します。
関連項目:
これらの手順の詳細は、『Oracle Databaseバックアップおよびリカバリ・ユーザーズ・ガイド』を参照
-
-
ソース・データベースの現行の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
であると想定します。 -
RMANクライアントを起動し、
TARGET
としてソース・データベースcvx1.example.com
に接続します。RMANの
CONNECT
コマンドの詳細は、『Oracle Databaseバックアップおよびリカバリ・リファレンス』を参照してください。 -
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';
-
RMANの
CONVERT
DATABASE
コマンドによって生成されたデータ・ファイル、PFILEおよびSQLスクリプトを、宛先データベースが実行されているコンピュータ・システムに転送します。 -
宛先データベースが実行されているコンピュータ・システムで、制限付きセッションが有効にされた状態で宛先データベースが常にオープンするように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の位置を変更する必要がある場合があります。
-
SQL*Plusで宛先データベースに管理ユーザーとして接続し、次のプロシージャを実行します。
注意:
このプロシージャを実行するとローカルのOracle Streams構成が削除されるため、このプロシージャを実行する際は、ソース・データベースではなく宛先データベースに接続していることを確認してください。
EXEC DBMS_STREAMS_ADM.REMOVE_STREAMS_CONFIGURATION();
注意:
ソース・データベースの表のサプリメンタル・ログ・グループは宛先データベースに保持されるため、
REMOVE_STREAMS_CONFIGURATION
プロシージャを実行しても削除されません。これらのサプリメンタル・ログ・グループは、必要に応じて削除できます。関連項目:
REMOVE_STREAMS_CONFIGURATION
プロシージャの詳細は、Oracle Database PL/SQLパッケージおよびタイプ・リファレンス を参照 -
SQL*Plusで、Oracle Streams管理者として宛先データベース
cvx2.example.com
に接続します。 -
ソース・データベースからクローニングされた、ソース・データベースから宛先データベースへのデータベース・リンクを削除します。
DROP DATABASE LINK cvx2.example.com;
-
宛先データベースで
ALTER
SYSTEM
文を実行して、RESTRICTED
SESSION
を無効化します。ALTER SYSTEM DISABLE RESTRICTED SESSION;
-
宛先データベースで、手順5で指定したキューを作成します。
たとえば、次のプロシージャを実行すると、キュー
streams_queue
が作成されます。EXEC DBMS_STREAMS_ADM.SET_UP_QUEUE();
-
宛先データベースにOracle Streams管理者として接続し、Oracle Streams環境を構成します。「すべてのデータベースでのOracle Streams管理者の構成」を参照してください。
注意:
手順24でグローバル・インスタンス化SCNを設定するまでは、宛先データベースで適用プロセスを起動しないでください。
-
宛先データベースで、ソース・データベースへのデータベース・リンクを作成します。
CREATE DATABASE LINK cvx1.example.com CONNECT TO strmadmin IDENTIFIED BY password USING 'cvx1.example.com';
次の手順でrecursiveパラメータを
TRUE
に設定してSET_GLOBAL_INSTANTIATION_SCN
プロシージャを実行するため、このデータベース・リンクが必要になります。 -
宛先データベースで、ソース・データベースのグローバル・インスタンス化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
に設定されていることを確認してください。 -
宛先データベースで、構成した適用プロセスを起動できます。
-
ソース・データベースで、手順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_SCN
、SET_SCHEMA_INSTANATIATION_SCN
およびSET_GLOBAL_INSTANTIATION_SCN
プロシージャを使用して、インスタンス化SCNを設定します。手順については、「DBMS_APPLY_ADMパッケージを使用したインスタンス化SCNの設定」を参照してください。
関連項目:
8.5.1 エクスポート/インポートを使用したインスタンス化SCNの設定
この項では、エクスポート/インポートを実行してインスタンス化SCNを設定する方法について説明します。この項の情報は、メタデータのエクスポート/インポート操作と、行をインポートするエクスポート/インポート操作の両方に適用されます。FLASHBACK_SCN
やFLASHBACK_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)変更が行われないように注意してください。
-
エクスポート・データベースからエクスポートされた表の表サプリメンタル・ロギング指定は、インポート・データベースで表がインポートされる際に保持されます。
関連項目:
-
エクスポート/インポートの使用方法は、「Oracle Data PumpとOracle Streamsのインスタンス化」および『Oracle Databaseユーティリティ』を参照してください
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の設定対象 | 例 |
---|---|---|
|
表の索引と表のトリガーに対するDDL文 |
表に対する 表に対する |
|
表レベルのインスタンス化SCNによって処理されるDDL文を除き、 |
|
|
所有者を持たない、ユーザー以外のデータベース・オブジェクトに対するDDL文 PUBLICに所有されるデータベース・オブジェクトに対するDDL文
|
|
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
パラメータをリモートの適用に使用するデータベース・リンクに設定します。
関連項目:
-
SET_TABLE_INSTANTIATION_SCN
プロシージャを使用する場合の詳細な例は、『Oracle Streams拡張例』を参照してください。 -
DDL LCRに使用できるインスタンス化SCNの詳細は、『Oracle Database PL/SQLパッケージおよびタイプ・リファレンス』 の
DBMS_APPLY_ADM
パッケージに関する項を参照してください
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は表示されません。