11 g r 2におけるフラッシュバックデータのアーカイブの強化


11 g r 1にはフラッシュバックデータアーカイブの新しい特性が導入されており、その動作原理はアーカイブ方式が有効になったテーブルに対して、FBDAプロセスは当該テーブルに対応する内部履歴表を作成することである。履歴表は元のテーブルを持つすべての列にタイムスタンプを加えて、事務処理の変化を追跡します。具体的には以下の通りです。

SQL> desc SYS_FBA_HIST_75718;
 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------
 RID                                                VARCHAR2(4000)
 STARTSCN                                           NUMBER
 ENDSCN                                             NUMBER
 XID                                                RAW(8)
 OPERATION                                          VARCHAR2(1)
 T1                                                 NUMBER(38)
 T2                                                 VARCHAR2(20)
/*     T1,T2            */

において、追跡された元のテーブルの行記録を更新または削除すると、FBDAプロセスはアーカイブタグトランザクション処理および対応する取消し記録となる。履歴書には、すべてのdeleteまたはudateの事務処理前の行の前のイメージが記録されています。しかし、insertトランザクションであれば、履歴表には記録が追加されません。この新しい行は前の履歴データがないからです。10 gのflashback queryのようにデータをフラッシュバックして元のデータに依存します。FBDAプロセスはシステムが決めた時間帯で起動され(デフォルトは5分)、マークされたトランザクション処理のキャンセルデータを履歴表にコピーします。したがって、変更が発生した場合、変更はすぐに歴史表に反映されません。時間は数分かかります。データベースが大量のキャンセルデータを生成している場合、FBDAバックグラウンドプロセスの睡眠時間を調整し、それを使ってデータベースのキャッシュからデータを素早く読み出すことができます。FBDAプロセスが履歴書に記録前事務処理(取消し)データを完成するまで、データベースはアーカイブの取消し記録として再利用されません。FBDAプロセスが履歴を完了した場合にのみ、これらの取消しセグメントは再循環可能として表示されます。
The‘fbda’process intelligently adjust its sleep interval based on the system undo generate.As transaction activity increas,‘fbda’atomatmatially reduces its sleep interval fterval from the deult.Fout.font.Fout。‘fbda’also adjust its sleep time in order to maximize und data reads from the buffer cache.In addition,Flashback Data Archive uses partit internal scheme for all the historica data the the formaders the the cordedition。
11 g r 1でフラッシュバックデータアーカイブを有効にするテーブルに対してtruncateを実施することができません。alter table add columnなどの操作がないと、ORA-55610エラーが報告されます。

55610, 00000, "Invalid DDL statement on history-tracked table"
// *Cause: An attempt was made to perform certain DDL statement that is
//         disallowed on tables that are enabled for Flashback Archive.
// *Action: No action required.
//
は11 g r 2においてフラッシュバックデータのアーカイブ特性を強化し、現在はトラッキングテーブルの部分DDL操作をサポートしています。

SQL> select * from v$version;

BANNER
--------------------------------------------------------------------------------
Oracle Database 11g Enterprise Edition Release 11.2.0.2.0 - 64bit Production
PL/SQL Release 11.2.0.2.0 - Production
CORE    11.2.0.2.0      Production
TNS for Linux: Version 11.2.0.2.0 - Production
NLSRTL Version 11.2.0.2.0 - Production

SQL>  create table orz (t1 int) flashback archive fba;
Table created.


SQL> col owner_name for a15;
SQL> col table_name for a10;
SQL> col flashback_archive_name for a15;
SQL> set linesize 200;

/*             SYS_FBA_HIST_75744,                     */

SQL> select * from dba_flashback_archive_tables where table_name = 'ORZ';

TABLE_NAME OWNER_NAME      FLASHBACK_ARCHI ARCHIVE_TABLE_NAME                                    STATUS
---------- --------------- --------------- ----------------------------------------------------- -------------
ORZ        MACLEAN         FBA             SYS_FBA_HIST_75744                                    ENABLED

/*              "    "  */

SQL> select * from dba_objects where owner='SYS_FBA_HIST_75744';
no rows selected


SQL> insert into orf values(1);

1 row created.

SQL> commit;

Commit complete.


SQL> set timing on;

/*       ,truncate   10s */
SQL> truncate table orz;
Table truncated.
Elapsed: 00:00:10.02


SQL> col object_name for a20;
SQL> select object_name,subobject_name,object_type from dba_objects where object_name='SYS_FBA_HIST_75744';

OBJECT_NAME          SUBOBJECT_NAME                 OBJECT_TYPE
-------------------- ------------------------------ -------------------
SYS_FBA_HIST_75744   HIGH_PART                      TABLE PARTITION
SYS_FBA_HIST_75744                                  TABLE

SQL> col rid for a25;
SQL> col t1 for 99;
SQL> select * from maclean.SYS_FBA_HIST_75744;

RID                         STARTSCN     ENDSCN XID              O  T1
------------------------- ---------- ---------- ---------------- - ---
AAASfgAAEAAAAImAAA           1066139    1066237 08001F0028030000 I   1

SQL> insert into orz select object_id from dba_objects;
73064 rows created.

SQL> commit;
Commit complete.

SQL> select current_scn from v$database;

CURRENT_SCN
-----------
    1072650

SQL> truncate table orz;
Table truncated.


SQL> select count(*) from maclean.SYS_FBA_HIST_75744;

  COUNT(*)
----------
     73065

SQL> select count(*) from orz;

  COUNT(*)
----------
         0

SQL> select count(*) from orz as of scn 1072650;
  COUNT(*)
----------
     73064



/* flashback archiver         flashback query       ,                        !*/

/*                         DDL  ,   drop   ;    drop              */

SQL> drop table orz;
drop table orz
           *
ERROR at line 1:
ORA-55610: Invalid DDL statement on history-tracked table
to be continued……