フェデレーテッド分散データベースの構成

既存のデータベースを使用してフェデレーテッド分散データベース構成をデプロイするには、ユーザー定義のデータ分散方法の場合と同様に、GDSCTLコマンドを使用してデータベースのレイアウトを定義します。

フェデレーテッド分散データベース構成を作成およびデプロイする場合の手順の概要を次に示します。

  1. FOR_FEDERATED_DATABASEオプションを指定してGDSCTL CREATE SHARDCATALOGコマンドを実行し、構成を作成します

  2. シャード・ディレクタを構成に追加します。

  3. シャード領域を構成に追加します。シャード領域は、既存のデータベースおよびそのレプリカとして定義します。

  4. 既存のデータベースをシャード領域に追加することによってシャードを追加し、DEPLOYを実行します。

  5. GDSCTL SYNC SCHEMAを実行して、フェデレーテッド分散データベース構成内のスキーマを比較し、共通の共有スキーマを取得します。SYNC SCHEMAを使用して、DDLの検査および適用を行います。

  6. シャード・カタログに対してSQL ALTER TABLEを使用し、フェデレーテッド・シャードで同じデータを含む表を重複表に変換します。

  7. マルチシャード問合せのために、フェデレーテッド分散データベース構成のシャードを準備します。

フェデレーテッド分散データベース構成の作成

フェデレーテッド分散データベース構成を作成するには、SHARDINGパラメータでデータ分散方法を選択するかわりにFOR_FEDERATED_DATABASEオプションを指定して、GDSCTLコマンドCREATE SHARDCATALOGを使用します。

フェデレーテッド分散データベースの作成でのGDSCTLコマンドCREATE SHARDCATALOGの使用方法は、ユーザー定義のデータ分散方法でシャード・カタログを作成する場合と同様ですが、SHARDINGパラメータで方法を指定するかわりにFOR_FEDERATED_DATABASEオプションを使用します。つまり、FOR_FEDERATED_DATABASEオプションとSHARDINGオプションは相互に排他的です。

CREATE SHARDCATALOG -DATABASE connect_identifier
  [-USER username[/password]]
  [-REGION region_name_list] 
  [-CONFIGNAME config_name]
  [-AUTOVNCR ON/OFF]
  [-FORCE] 
  [-SDB distributed_db_name]
  [-SHARDSPACE shardspace_name_list]
  -FOR_FEDERATED_DATABASE

前述のCREATE SHARDCATALOG構文の文は、サポートされるパラメータを示しています。表示されていないパラメータは、FOR_FEDERATED_DATABASEデータ分散方法で使用する場合はサポートされません(たとえば、–AGENT_PASSWORDREPFACTOR、Oracle Data Guard保護モードのPROTECTMODEなど)。

ノート:

フェデレーテッド分散データベースでは、Oracle Data Guardのレプリケーションのみがサポートされています。Oracle Globally Distributed DatabaseではData Guard構成の作成および管理が処理されませんが、ADD SHARDコマンドでData Guardパラメータを使用すると、プライマリ・データベースおよびスタンバイ・データベースを追加してGDSCTLでステータスを確認できます。

関連項目:

使用上のノートおよびコマンド・オプションについては、Oracle Global Data Services概要および管理ガイドのGDSCTLのCREATE SHARDCATALOGのトピックを参照してください。

DDLの取得、検査および適用

既存のデータベースに共通するスキーマ・オブジェクトをシャード・カタログに作成するには、各フェーズでGDSCTL SYNC SCHEMAコマンドを実行します。

ここに示すGDSCTL SYNC SCHEMA構文は、操作の3つのフェーズを示しています。

sync[hronize] schema
  [-schema [schemalist | all] [-retrieve_only] [-restart [-force]]
 | -apply [-skip_first]
 | -show [[-ddl ddlnum] [-count n] | [-failed_only]]]

SYNC SCHEMAは、ここで説明しているとおりに各フェーズで実行する必要があります。

  1. 取得フェーズ

    -retrieve_onlyオプションを指定してSYNC SCHEMAを実行し、シャード・カタログに対して実行する前にDDLを検査して検証します。

    sync schema -schema schemalist –retrieve_only

    -retrieve_onlyを指定せずにSYNC SCHEMAを実行した場合、DDLの取得と適用が同時に行われます。

  2. 検査フェーズ

    DDL文とその処理ステータスは、-showオプションを使用して検査できます。-ddl ddlnumオプションは指定したDDLを表示し、-count nオプションは表示するエントリの最大数を指定します。

    sync schema –show -ddl ddlnum -count n

    または、-failed_onlyオプションを使用して、エラーが発生した文のみを検査できます。

    sync schema –show -failed_only
  3. 適用フェーズ

    最後のフェーズで、ユーザーはシャード・カタログに対してDDLを実行して、スキーマとそのオブジェクトを作成します。

    sync schema –apply

    適用フェーズでエラーが発生した場合、それを回避する方法は2つあります。

    • エラーの原因を修正できる場合は、修正してからSYNC SCHEMA -applyを再実行すると、失敗したDDLが再試行されます。

    • DDLを修正できない場合、またはそのDDLが不要な場合は、SYNC SCHEMA –apply -skip_firstを実行すると、DDLが失敗した場所から適用フェーズが再開されます。

    セキュリティ上の理由により、Oracle Globally Distributed DatabaseではDDLを編集できません。

  4. 増分の変更のインポート

    スキーマに後から変更が発生した場合は、前のフェーズを再実行して増分の変更をインポートできます。たとえば、新しいオブジェクトを追加したり、表に新しい列を追加すると、ALTER TABLE ADD文が生成されます。

関連項目:

SYNC SCHEMAの使用上のノートおよびオプションの詳細は、Oracle Global Data Services概要および管理ガイドsync schema (synchronize schema)のトピックを参照してください。

SYNC SCHEMAによって実行されるタスクの詳細は、SYNC SCHEMAの操作を参照してください。

重複表への表の変換

フェデレーテッド分散データベース構成の表を重複表としてマークするには、ALTER TABLE table_name externally duplicatedを使用します。

SYNC SCHEMAによって作成される表は、マルチシャード問合せレイヤーではexternally shardedの表とみなされます。すべてのシャードで表に同じデータが含まれている場合、ユーザーはその表をexternally duplicatedに変更できます。これにより、ORA_SHARDSPACE_NAMEに対するフィルタ述部がない表の問合せの場合でも、マルチシャード問合せは1つのシャードのみからデータを取得します。

ALTER TABLE table_name [externally duplicated | externally sharded]

マルチシャード問合せのためのシャードの準備

特定のシャードに対する問合せを実行するには、すべてのシャード・ユーザーを作成して、ORA_SHARDSPACE_NAME疑似列を使用します。

すべてのシャード・ユーザー

シャード・カタログからマルチシャード問合せを実行する前に、すべてのシャード・ユーザーを作成して、シャード表および重複表へのアクセス権を付与する必要があります。これらのユーザーとその権限は、シャードDDLを有効にしてシャード・カタログに作成する必要があります。

シャード領域固有の問合せの作成

フェデレーテッド分散データベースシャード領域は、プライマリ・シャードと0個以上のスタンバイ・シャードで構成されるセットです。特定のシャード(領域)の問合せ結果をフィルタ処理するために、ORA_SHARDSPACE_NAMEという疑似列がすべてのexternally sharded表に追加されます。表のこの疑似列の値は、シャード領域の名前です。

MULTISHARD_QUERY_DATA_CONSISTENCYの値に応じて、シャード領域のプライマリまたはスタンバイから行をフェッチできます。特定のシャードに対してマルチシャード問合せを実行するには、述語ORA_SHARDSPACE_NAME = shardspace_name_shard_belongs_toを使用して問合せをフィルタ処理できます。

CUSTOMER表がexternally shardedとしてマークされている場合、SELECT CUST_NAME, CUST_ID FROM CUSTOMERなどの問合せは、すべてのシャードで実行されます。

SELECT CUST_NAME, CUST_ID FROM CUSTOMER WHERE ora_shardspace_name = 'EUROPE'などの問合せは、shardspace_nameがEuropeであるシャードで実行されます。MULTISHARD_QUERY_DATA_CONSISTENCYパラメータ値に応じて、シャード領域Europeのプライマリ・シャードまたはスタンバイで問合せが実行されます。

異なるシャード領域のシャード表を結合できます。たとえば、シャード領域NAに注文があるシャード領域Europeの顧客を検索するには、次のような問合せを記述します。

SELECT order_id, customer_name FROM customers c , orders o WHERE c.cust_id = o.cust_id and
c.ora_shardspace_name = ‘Europe’ and o.ora_shardspace_name = ‘NA’ 

ORA_SHARDSPACE_NAME述部を使用するかどうかにかかわらず、externally duplicatedの表を問い合せる場合は、いずれかのシャード領域のみを対象とする必要があります。MULTISHARD_QUERY_DATA_CONSISTENCYパラメータ値によって、シャード領域のプライマリ・シャードまたはそのレプリカのどちらに問い合せるかが決定されます。