Open Source Web Development Tutorials - Dev Shed
Oracleのリストアポイント機能の実装と使用
(2008/10/30公開)
リストアポイントとは何か
オラクル社は、Oracle 10gR2のリリースに伴い、リストアポイントの概念をデータベース管理者(以下DBAと記す)に紹介した。これにより、ユーザーにとって、ポイントインタイムリカバリーの実装が一層容易になった。この記事では、リストアポイントとは何か、またその多くの利点と使用方法についてご説明しよう。
オラクルのリストアポイント機能の実装と使用
リストアポイントはDBAがデータベース上の時間軸のある特定の時点にラベルを付けることを可能にしてくれる。これによりSCNの詳細を調べる必要がなくなり、トランザクションが発生している正確な回数を計算しようとするのも防ぐことができる。さらに、保証付きリストアポイントという特定の種類のリストアポイントにより、DBAは確実にデータベースを特定の時点に(あるいは少しの設定を追加すれば、保証付きリストアポイントと現時点の間のどのポイントにさえも)フラッシュバックさせることができる。
リストアポイントはアプリケーションのテスティングを行うDBAが活用できるほか、バッチ更新の失敗に備えたり、従来のポイントインタイムリカバリーが必要などんな分野においても貴重なツールになってくれる。
構成
リストアポイント前提条件:
・COMPATIBLE初期化パラメータは10.2より大きいことが必須。
フラッシュバックデータベース前提条件:
・データベースは必ずARCHIVELOGモードに設定して実行していること。
・データベースは必ずFLASH_RECOVERY_AREAに設定して使用していること。
Oracle 10gで導入されているフラッシュバック機能はリストアポイントと連携しているため、上記のほとんどの前提条件はリストアポイントの構成に適用される。ここまでで上記のパラメータは正しく構成していただけただろうか。では、通常リストアポイントおよび保証付きリストアポイントの両方を実装して使用する方法をご説明しよう。
フラッシュバックロギングを有効化するかどうか
リストアポイント機能はフラッシュバックデータベースと連携しているため、リストアポイント機能を始める前にフラッシュバックロギングを有効化しておくことをおすすめしたい。ロギングの有効化なしには、フラッシュバックデータベースを使用してリストアポイントで指定されている時点まで素早くデータベースを戻すことはできない。ただし、保証付きリストアポイントの場合は別である(ただしこの場合は、指定した保証付きリストアポイントと現時点の間のポイントインタイムへデータベースをリストアすることはできない)。データベースをシャットダウンしてからマウントして、フラッシュバックデータベースを有効化していない状態で最初の保証付きリストアポイントを作成しなければならない。リストアポイントとフラッシュバックデータベースの機能性を十分に楽しむには、フラッシュバックロギングを有効化するのが不可欠である(3ページ目の例2参照)。
通常のリストアポイントと保証付きリストアポイント
作成できるリストアポイントには2種類あり、その機能性レベルはそれぞれ異なっている。通常リストアポイントは、DBAがポイントインタイムリカバリーのために、データベースの現在の状態にSCNやタイムスタンプの代わりに名前を付けることを可能にしてくれる。保証付きリストアポイントもデータベースの現在の状態に名前を付けさせてくれるが、より大きな安全性として、DBAによって明確に削除されない限りリストアポイントは永遠に有効になる。フラッシュバックロギングを始めに有効化しなくても、データベースをフラッシュバックさせることもできる(ただ、前述の「フラッシュバックロギングの有効化するかどうか」でご説明したように機能性レベルは低くなる)。
例:リストアポイントの使用
(例の構成)
次の例で使われているテストユーザーとテストテーブルを作成するには、次のSQL/PL SQLを使ってユーザーを作成し、サンプルデータを200行挿入する(下のプログラムは読者がUSERSテーブルスペースを持っていると仮定している)。
--Create user and grant necessary permissions
create user testuser identified by testuser;
grant create table to testuser;
grant create session to testuser;
grant create procedure to testuser;
grant execute on dbms_lock to testuser;
alter user testuser quota 5m on users;
--Connect as the newly created testuser and create the test table and logging table
conn testuser/testuser;
create table testuser.test (id int, name varchar2(5)) tablespace users;
create table testuser.logging (timestamp date, loginfo varchar2(15)) tablespace users;
--Insert sample data into the test table
declare
i number(5);
begin
for i in 1..200 loop
insert into testuser.test values (i, 'a'||i);
end loop;
commit;
end;
/
Copyright © 2008 Ziff Davis Enterprise, Inc.
Originally appearing in the U.S. Edition of Dev Shed. All Rights Reserved.








