DBMS_FLASHBACK_ARCHIVE
パッケージには、フラッシュバック・データ・アーカイブ(FDA)が有効な表の基礎となるFDAからの関連付けの解除および基礎となるFDAとの再関連付けを行うための単純な2つのプロシージャが含まれています。
関連項目: 『Oracle Databaseアドバンスト・アプリケーション開発者ガイド』 |
この章では、次の項目について説明します。
概要
セキュリティ・モデル
例
Total Recallオプションによって使用できるフラッシュバック・データ・アーカイブ機能は、ユーザーのために作成およびメンテナンスする内部履歴表を厳重に保護します。
読取り専用のセマンティクスによって、DBAを含むユーザーは、フラッシュバック・データ・アーカイブ内部履歴表の更新、削除および挿入が禁止されています。この機能では、ユーザーがこれらの表に関するDDL文を発行することも禁止されています。フラッシュバック・データ・アーカイブによって施行されるこの厳密なセキュリティは、法規制の遵守が求められるアプリケーションの要件に適合します。この機能では、フラッシュバック・データ・アーカイブに対して有効にされたユーザー表で、表の定義を変更したりデータの移動を行なうDDL文を含む多数の一般的なDDL文をサポートします。ただし、この機能に対して有効にされた表でサポートされないDDL文もあります。ほとんどのアプリケーション・スキーマは、ソフトウェアの新しいバージョンがリリースされると進化するため、元表でDDL操作を実行できることは主要な顧客要件です。
フラッシュバック・データ・アーカイブでサポートされるDDL文を超えて、アプリケーション・アップグレードやその他の表メンテナンス・タスク中にユーザー・アプリケーションのスキーマの進化をサポートするために、DBMS_FLASHBACK_ARCHIVE
パッケージは簡単に使用できるPL/SQLプロシージャのセットを提供しています。
フラッシュバック・データ・アーカイブが有効な元表と基礎となるFDAの関連付けを解除する。
一時的に関連付けを解除した元表を基礎となるFDAに再関連付けする。
ユーザーが元表とFDAの関連付けを解除した後は、元表またはFDAの履歴表で任意のDDL文を発行することができます。スキーマの変更が完了したら、ユーザーは元表とFDAの再関連付けを行い、フラッシュバック・データ・アーカイブ保護が機能して、自動追跡とアーカイブを再開します。
FLASHBACK
ARCHIVE
ADMINISTER
システム権限を持つユーザーが、関連付けの解除および再関連付けPL/SQLプロシージャを実行できます。表の関連付けが解除されると、表に対して必要な権限があれば、通常のユーザーもDDLおよびDML文を実行できます。
通常、ユーザーは履歴表を変更することはできません。
SQL> DELETE FROM scott.SYS_FBA_HIST_61527; ERROR at line 1: ORA-55622: DML, ALTER and CREATE UNIQUE INDEX operations are not allowed on table "SCOTT"."SYS_FBA_HIST_61527"
ユーザーは履歴表に関するDDL文を発行することもできません。
SQL> ALTER TABLE scott.SYS_FBA_HIST_61527 DROP COLUMN comm; ERROR at line 1: ORA-55622: DML, ALTER and CREATE UNIQUE INDEX operations are not allowed on table "SCOTT"."SYS_FBA_HIST_61527"
DISASSOCIATE_FBAプロシージャを使用して、scott
.emp_test
表の関連付けを解除します。
SQL> EXEC DBMS_FLASHBACK_ARCHIVE.DISASSOCIATE_FBA('scott','emp_test'); PL/SQL procedure successfully completed.
これでユーザーは(DDL文によって)ユーザーの元表の構造を変更できます。
SQL> ALTER TABLE scott.emp_test RENAME COLUMN sal TO salary; Table altered.
またユーザーは以前には変更できなかった履歴表の内容も変更できます。
SQL> DELETE FROM scott.SYS_FBA_HIST_61527 WHERE empno=3968; 2 rows deleted.
ユーザーが履歴表と元表を再関連付けしようとすると、(DDL文によって)対応する履歴表の構造変更を行っていないため失敗します。
SQL> EXEC DBMS_FLASHBACK_ARCHIVE.REASSOCIATE_FBA('scott','emp_test'); BEGIN DBMS_FLASHBACK_ARCHIVE.REASSOCIATE_FBA('scott','emp_test'); END; ERROR at line 1: ORA-55636: Flashback Data Archive enabled table "SCOTT"."EMP_TEST" has different definition from its history table ORA-06512: at "SYS.DBMS_FLASHBACK_ARCHIVE", line 17 ORA-06512: at line 1
表の関連付けを解除して表定義の問題を修正します。
SQL> EXEC DBMS_FLASHBACK_ARCHIVE.DISASSOCIATE_FBA('scott','emp_test'); PL/SQL procedure successfully completed.
履歴表で同じ列の名前変更DDLを実行して、定義を元表のscott
.emp_test
と一致させます。
SQL> ALTER TABLE scott.SYS_FBA_HIST_61527 RENAME COLUMN sal TO salary; Table altered.
これで、元表は履歴表と正常に再関連付けされます。
SQL> EXEC DBMS_FLASHBACK_ARCHIVE.REASSOCIATE_FBA('scott','emp_test') PL/SQL procedure successfully completed.
前述の例は、説明のために使用されています。RENAME COLUMN
はサポートされるDDLとして使用できるので、当然ながら関連付け解除/再関連付けを呼び出す必要はありません。関連付け解除/再関連付けを行う必要があるのは、操作がフラッシュバック・アーカイブによってサポートされておらず、55610
エラー・メッセージが生成される場合のみです。
SQL> create table emp_test as select empno, sal from emp;
表が作成されます。
SQL> alter table emp_test flashback archive;
表が変更されます。
ベース表と同じ形式に、追加のメタデータ列を指定して、一時履歴表を作成します。
SQL> EXEC DBMS_FLASHBACK_ARCHIVE.CREATE_TEMP_HISTORY_TABLE('scott','emp_test');
PL/SQLプロシージャが正常に終了しました。
SQL> describe scott.temp_history Name Null? Type ----------------------------------------- -------- ---------------------------- RID VARCHAR2(4000) STARTSCN NUMBER ENDSCN NUMBER XID RAW(8) OPERATION VARCHAR2(1) EMPNO NUMBER(4) SAL NUMBER(7,2)
データベースごとに次の操作を 1 回ずつ行います。これにより、以前の履歴のインポートを実行できるように、マッピングが過去まで拡張されます。88年1月1日までさかのぼります。
SQL> EXEC DBMS_FLASHBACK_ARCHIVE.extend_mappings();
PL/SQLプロシージャが正常に終了しました。
SQL> insert into scott.temp_history values (NULL, timestamp_to_scn(to_date('01-JAN-06')), timestamp_to_scn(to_date('31-DEC-06')), NULL, 'U', 1, 1000);
1行が作成されます。
SQL> commit;
コミットが完了します。
SQL> EXEC DBMS_FLASHBACK_ARCHIVE.IMPORT_HISTORY('scott','emp_test');
PL/SQLプロシージャが正常に終了しました。
これで、インポートされたデータのフラッシュバック問合せが可能になります。
SQL> select * from scott.emp_test as of timestamp to_date('06-JUN-06') where empno=1; EMPNO SAL ---------- ---------- 1 1000
表70-1 DBMS_FLASHBACK_ARCHIVEパッケージのサブプログラム
サブプログラム | 説明 |
---|---|
|
指定した表とフラッシュバック・データ・アーカイブの関連付けを解除します。 |
|
指定した表をフラッシュバック・データ・アーカイブと再関連付けします。 |