レプリケーションとは、分散環境において頻繁に使用される表のコピーをローカルに保持することで、パフォーマンスの改善と冗長性の確保を行うものである。Oracle 7 では、以下のようなレプリケーションの方法が用意されている。
スナップショットには、単純スナップショットと複合スナップショットがある。それぞれの特徴は以下の通り
スナップショットは、実際にはさまざまなオブジェクトの組み合わせである。つまり、スナップショットの作成のためには、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を使用する。