3.2 異機種間レプリケーション

Oracle以外のシステムとOracle Databaseの間では、マテリアライズド・ビューを使用してデータをレプリケートできます。

注意:

OracleとOracle以外のデータベースの間で情報をレプリケートするには、Oracle GoldenGateと呼ばれる別の方法もあります。

Oracle GoldenGateの使用の詳細は、Oracle GoldenGateのドキュメントを参照してください。

マテリアライズド・ビューは、特定の時点でOracle以外のマスター・サイトの表からキャプチャされたデータをインスタンス化します。この時点はリフレッシュ操作によって定義され、リフレッシュ操作が、このデータをOracle Databaseにコピーし、Oracleシステム上のコピーをOracle以外のシステムのマスター・コピーと同期します。その後、マテリアライズド・データがOracle Databaseでビューとして使用できるようになります。

レプリケーション機能は、リフレッシュをスケジュールし、マテリアライズド・ビューを管理しやすいようにレプリケーション・グループに収集するためのメカニズムを提供します。リフレッシュ・グループにより、複数のマテリアライズド・ビューをシングル・オブジェクトと同様にリフレッシュできます。

異機種間レプリケーションのサポートは、必ずOracle間レプリケーション機能全体のサブセットに限定されます。

  • プライマリ・サイトにすることができるのは、Oracle以外のシステムのみです。マテリアライズド・ビューはOracle Databaseにしか作成できないためです。

  • マテリアライズド・ビューでは、完全リフレッシュを使用する必要があります。これは、高速リフレッシュを使用するには、Oracle以外のシステムでOracle固有の機能が必要になるためです。

  • タイプによっては、Oracle以外のシステム上で表を参照する目的では作成できないマテリアライズド・ビューがあります。主キーと副問合せのマテリアライズド・ビューはサポートされますが、ROWIDOBJECT IDのマテリアライズド・ビューはサポートされません。これは、ROWIDの書式と内容についてはSQL規格がなく、Oracle以外のシステムにはOracleオブジェクトが実装されていないためです。

Oracleの異機種間サービス機能を介したOracle以外のデータへのアクセスには、その他の制限が適用されます。次に最も重要な制限事項を示します。

  • 固定ビューにマップされる表列のOracle以外のデータ型には、Oracleデータ型との互換性(つまりマッピング)が必要です。通常、このことは、ANSI SQL規格により定義されたデータ型について該当します。

  • 副問合せのマテリアライズド・ビューでは、Oracle以外の個々のシステムにより制限される言語機能を使用できない場合があります。異機種間サービスは、多くのケースで、Oracle Database内で問合せを処理することでそのような言語機能をサポートします。場合によっては、異機種間サービスが問合せを実行するまで、Oracle以外のシステムに制限があることがわからないこともあります。

次の例に、Oracle以外のシステムからOracleデータ・ストアにデータをレプリケートする3つのマテリアライズド・ビューの基本設定と使用例を示します。

注意:

次の例で、remote_dbはOracle DatabaseからアクセスするOracle以外のシステムを指します。

これらの例を環境にあわせて変更してください。そのままの状態では実行しないでください。

トピック:

3.2.1 例: 異機種間レプリケーションに使用するマテリアライズド・ビューの作成

異機種間レプリケーションに使用するマテリアライズド・ビューの作成例を示します。

この例では、異機種間レプリケーション用に3つのマテリアライズド・ビューを作成します。これらのマテリアライズド・ビューは、以降の例で使用されます。

  1. customer@remote_db表の主キーのマテリアライズド・ビューを作成します。
        CREATE MATERIALIZED VIEW pk_mv REFRESH COMPLETE AS
          SELECT * FROM customer@remote_db WHERE "zip" = 94555;
    
  2. orders@remote_db表およびcustomer@remote_db表の副問合せのマテリアライズド・ビューを作成します。
        CREATE MATERIALIZED VIEW sq_mv REFRESH COMPLETE AS
          SELECT * FROM orders@remote_db o WHERE EXISTS
            (SELECT c."c_id" FROM customer@remote_db c
               WHERE c."zip" = 94555 and c."c_id"  = o."c_id" );
    
  3. remote_db上の複数の表からのデータの複合マテリアライズド・ビューを作成します。
        CREATE MATERIALIZED VIEW cx_mv
          REFRESH COMPLETE AS
          SELECT  c."c_id", o."o_id"
            FROM customer@remote_db c,
                 orders@remote_db o,
                 order_line@remote_db ol
            WHERE c."c_id" = o."c_id"
            AND o."o_id" = ol."o_id";

3.2.2 例: 異機種間レプリケーションに使用するリフレッシュ・グループの設定

異機種間レプリケーションに使用するリフレッシュ・グループの設定例を示します。

この例は、「例: 異機種間レプリケーションに使用するマテリアライズド・ビューの作成」で作成したマテリアライズド・ビューの異機種間レプリケーションのリフレッシュ・グループの設定方法を示しています。

BEGIN
  dbms_refresh.make('refgroup1',
   'pk_mv, sq_mv, cx_mv',
   NULL, NULL);
 END;
 /

3.2.3 例: 3つのマテリアライズド・ビューすべての強制リフレッシュ

マテリアライズド・ビューのリフレッシュの強制例を示します。

この例は、「例: 異機種間レプリケーションに使用するマテリアライズド・ビューの作成」で作成した3つのマテリアライズド・ビューすべてを強制的にリフレッシュする方法を示しています。

BEGIN
   dbms_refresh.refresh('refgroup1');
END;
 /