レプリケーションの設定・管理

レプリケーションとは

レプリケーションとは、分散環境において頻繁に使用される表のコピーをローカルに保持することで、パフォーマンスの改善と冗長性の確保を行うものである。Oracle 7 では、以下のようなレプリケーションの方法が用意されている。

スナップショットの使用

スナップショットの種類

スナップショットには、単純スナップショットと複合スナップショットがある。それぞれの特徴は以下の通り

単純スナップショット
元となるテーブルの行と1対1に対応するもの。具体的には、以下の構文を副問い合わせに指定していないものである。 単純スナップショットは、リフレッシュ時に差分だけを送信する「高速リフレッシュ」に対応し、また、更新可能に設定することもできる。
複合スナップショット
単純スナップショットが許可しない構文を副問い合わせに使用したもの。リフレッシュ時に全体を送信する「完全リフレッシュ」のみに対応し、更新も行えない。

スナップショットの作成

スナップショットは、実際にはさまざまなオブジェクトの組み合わせである。つまり、スナップショットの作成のためには、CREATE SNAPSHOT・CREATE TABLE・CREATE VIEW・CREATE TRIGGER(更新可能スナップショットの場合)のような権限が必要とされる。

スナップショット作成の構文は以下のようなものである。

CREATE SNAPSHOT (スナップショット名)
  {CREATE TABLEと同等の記憶領域パラメータ指定}
  REFRESH (リフレッシュ方法)
  START WITH (最初の開始時間)
  NEXT (リフレッシュ処理間隔)
  (FOR UPDATE)
  AS (副問い合わせ句)

それぞれのパラメータの意味は以下の通り:

パラメータ名意味
スナップショット名 スナップショット名。この名称を元に関連オブジェクトが作成されるため、通常の30文字ではなく23文字までに押さえる。
記憶領域パラメータ指定 複合スナップショットの場合、常に完全リフレッシュ(=新規作成)がなされるので、PCTFREEに0,PCTUSEDに100を設定する。単純スナップショットの場合、基本的にはマスター表と同じ設定を使用する。
リフレッシュ方法。 (FAST|COMPLETE|FORCE)。FASTは高速リフレッシュ、COMPLETEは完全リフレッシュ、FORCEは利用可能な場合には高速、そうでない場合には完全リフレッシュを、それぞれ実施する
最初の開始時間 最初に自動リフレッシュを開始する時間
次回の開始時間 スナップショット作成終了後、次のリフレッシュを行う時間。
FOR UPDATE 単純スナップショットであり、他の条件も満たす場合には、更新可能スナップショットに設定できる。
副問い合わせ句 前項で記した内容によってスナップショットの種類が決まる。制限として、LONG形の列は使用できない、SYSユーザの表は使用できない、253文字以下、などがある。

なお、スナップショットの作成のためには、データリンクをあらかじめ作成しておく必要がある。

スナップショットには、対応する実表がSNAP$_(スナップショット名)という形式で作成される。この表に対して索引を作成すると、スナップショットへのアクセスに索引が使用される。

スナップショットログの作成

単純スナップショットで高速リフレッシュを使用する場合、マスター表と同じデータベースにスナップショットログを使用しておく必要がある。これは、元の表にALTER ROWトリガを作成することで動作するので、CREATE TRIGGER権限が必要になる。この構文は以下の通り:

CREATE SNAPSHOT LOG ON (スナップショット名)
  {CREATE TABLEと同等の物理パラメータ指定}

スナップショットログの作成のためには、CREATE TABLE・CREATE TRIGGERシステム権限が必要となる。

スナップショットの運用

1つまたは複数のスナップショットのリフレッシュを行うためには、プロシジャDBMS_SNAPSHOT.REFRESH([スナップショットのリスト],[f|c|?])を実行する。また、複数のスナップショットをまとめてリフレッシュグループとして扱うこともでき、その場合にはプロシジャDBMS_REFRESHを使用する。