00500015C8E I
AAAJBRAAEAAAWjJAAB? ? 12723378739723? 12723378743708 000A000500015C8E I
AAAJBRAAEAAAWjJAAC? ? 12723378739723? 12723378743689 000A000500015C8E I
AAAJBRAAEAAAWjJAAC? ? 12723378743689? ? ? ? ? ? ? ? ? 000A000D00015C87 U
执行select * from t0516_5 as of scn 12723378743688语句时寻找过程大致如下:rowid='AAAJBRAAEAAAWjJAAA'的行12723378743688>=startscn,endscn为空,表示这行从表里取现值id=1、C3='AAA',无需访问archive table;
rowid='AAAJBRAAEAAAWjJAAB'的行endscn>12723378743688>=startscn,表示这行在scn:12723378743688时刻不在表里,需要访问archive table(SYS_FBA_HIST_36945)里rowid='AAAJBRAAEAAAWjJAAB' and XID=000A000500015C8E对应行获取before-image:id=2、C3='BBB'
rowid='AAAJBRAAEAAAWjJAAC'有两行,根据scn:12723378743688对应到startscn=12723378739723 and endscn=12723378743689这一行,然后去SYS_FBA_HIST_36945找到rowid='AAAJBRAAEAAAWjJAAC' and xid='000A000500015C8E'返回before-image:id=3、C3='CCC'
SCOTT@tstdb1-SQL> select * from t0516_5 as of scn 12723378743688;
? ? ? ? ID C3
---------- ---
? ? ? ? 2 BBB
? ? ? ? 3 CCC
? ? ? ? 1 AAA
/////////////Part 2. SYS_FBA_表结构说明////////////////
select owner,table_name,partitioned from dba_tables where table_name like '%36945';
OWNER? ? ? ? ? ? ? ? ? ? ? ? ? TABLE_NAME? ? ? ? ? ? ? ? ? ? PAR
------------------------------ ------------------------------ ---
SCOTT? ? ? ? ? ? ? ? ? ? ? ? ? SYS_FBA_HIST_36945? ? ? ? ? ? YES
SYS? ? ? ? ? ? ? ? ? ? ? ? ? ? SYS_MFBA_NHIST_36945? ? ? ? ? NO
SCOTT? ? ? ? ? ? ? ? ? ? ? ? ? SYS_FBA_TCRV_36945? ? ? ? ? ? NO
SCOTT? ? ? ? ? ? ? ? ? ? ? ? ? SYS_FBA_DDL_COLMAP_36945? ? ? NO
SYS_FBA_HIST_121239表是分区表,before-image保留在这张表里,为何提高访问性能oracle把它建成了分区表,初始只有一个分区
---SYS_FBA_HIST_36945采用的是range分区,endscn作为partition key
set linesize 100
select owner,table_name,PARTITIONING_TYPE,SUBPARTITIONING_TYPE from dba_part_tables where table_name='SYS_FBA_HIST_36945';
OWNER? ? ? ? ? ? ? ? ? ? ? ? ? TABLE_NAME? ? ? ? ? ? ? ? ? ? PARTITION SUBPARTIT
------------------------------ ------------------------------ --------- ---------
SCOTT? ? ? ? ? ? ? ? ? ? ? ? ? SYS_FBA_HIST_36945? ? ? ? ? ? RANGE? ? NONE
SCOTT@tstdb1-SQL> col column_name format a20
SCOTT@tstdb1-SQL> select name,column_name from dba_part_key_columns where name='SYS_FBA_HIST_36945';
NAME? ? ? ? ? ? ? ? ? ? ? ? ? COLUMN_NAME
------------------------------ --------------------
SYS_FBA_HIST_36945? ? ? ? ? ? ENDSCN
---存放历史数据的分区启用了compress for oltp方式的压缩?
set long 2000 linesize 150
col TABLE_OWNER format a20
col TABLE_NAME format a25
col partition_name format a15
col high_value format a40
select TABLE_OWNER,TABLE_name,PARTITION_NAME,compression,compress_for,COMPOSITE,HIGH_VALUE from dba_tab_partitions where table_name='SYS_FBA_HIST_36945';
TABLE_OWNER? ? ? ? ? TABLE_NAME? ? ? ? ? ? ? ? PARTITION_NAME? COMPRESS COMPRESS_FOR COM HIGH_VALUE
-------------------- ------------------------- --------------- -------- ------------ --- ----------------------------------------
SCOTT? ? ? ? ? ? ? ? SYS_FBA_HIST_36945? ? ? ? HIGH_PART? ? ? ENABLED? OLTP? ? ? ? NO? MAXVALUE
注:测试环境是11.2.0.3,如果是11.2.0.4及以后版本,因为引入了optimize data的功能,默认情况下创建的archive table是不压缩的,除非在create flashback archive时指定了optimize data,在11.2.0.4及以后可以在创建flashback archive时加入"optimize data"选项:create flashback archive fba0516_2 tablespace tbs0516_1 optimize data retention 1 day;
---SYS_MFBA_NHIST_36945、SYS_FBA_TCRV_36945表在RID字段上建有索引,数据量大的时候提高基于rowid的检索效率
SCOTT@tstdb1-SQL> select index_name,column_name from dba_ind_columns where table_name='SYS_FBA_HIST_36945';
no rows selected
SCOTT@ts