如果您指的是闪回数据存档(又名 FDA)使用哪些表,您首先需要了解 Oracle 如何处理闪回查询。
让我给你看一个例子。我将创建一个小型闪回存档组,并为其分配一个表。
SQL> create flashback archive fda_test tablespace tbrepdata quota 1g retention 1 year ;
Flashback archive created.
SQL> grant flashback archive on fda_test to test ;
Grant succeeded.
SQL> grant flashback archive administer to test ;
Grant succeeded.
SQL> GRANT EXECUTE ON DBMS_FLASHBACK_ARCHIVE TO test;
Grant succeeded.
SQL> create table test.t1 ( c1 number, c2 number ) flashback archive fda_test ;
Table created.
SQL> insert into test.t1 values ( 1 , 1 ) ;
1 row created.
SQL> insert into test.t1 values ( 2 , 2 ) ;
1 row created.
SQL> insert into test.t1 values ( 3, 3 ) ;
1 row created.
SQL> commit ;
Commit complete.
SQL> update test.t1 set c1=4,c2=4 where c1=3 ;
1 row updated.
SQL> commit ;
Commit complete.
现在,如果我进行查询
SQL> col versions_startscn format 9999999999999999
SQL> col versions_endscn format 9999999999999999
SQL> r
1 SELECT versions_startscn,
2 --versions_starttime,
3 versions_endscn,
4 --versions_endtime,
5 versions_xid,
6 versions_operation,
7 c1,
8 c2
9* from test.t1 versions between scn minvalue and maxvalue
VERSIONS_STARTSCN VERSIONS_ENDSCN VERSIONS_XID V C1 C2
----------------- ----------------- ---------------- - ---------- ----------
13142361651647 13001C0000AB0000 U 4 4
13142361651581 13142361651647 20002A00BD960000 I 3 3
13142361651581 20002A00BD960000 I 2 2
13142361651581 20002A00BD960000 I 1 1
让我们检查一下计划
SQL> set autotrace traceonly
SQL> r
1 SELECT versions_startscn,
2 --versions_starttime,
3 versions_endscn,
4 --versions_endtime,
5 versions_xid,
6 versions_operation,
7 c1,
8 c2
9* from test.t1 versions between scn minvalue and maxvalue
Execution Plan
----------------------------------------------------------
Plan hash value: 3617692013
--------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
--------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 164 | 4264 | 2 (0)| 00:00:01 |
| 1 | TABLE ACCESS FULL| T1 | 164 | 4264 | 2 (0)| 00:00:01 |
--------------------------------------------------------------------------
Statistics
----------------------------------------------------------
5 recursive calls
4 db block gets
22 consistent gets
0 physical reads
0 redo size
1091 bytes sent via SQL*Net to client
591 bytes received via SQL*Net from client
2 SQL*Net roundtrips to/from client
0 sorts (memory)
0 sorts (disk)
4 rows processed
如您所见,Oracle 只是在访问该表。为什么 ?因为数据还在 undo 表空间中,因为 undo 块还没有过期。当您使用 FDA 时,Oracle 在您使用闪回查询时将始终使用这种方法:
- 如果数据到 Undo Tablespace,数据是从它恢复的。
- 如果数据在 Undo 表空间中不再可用,那么它将从基础 FDA 表中检索行。
基础表包含基于为存档组建立的保留期的存档数据
SQL> set lines 200
SQL> SELECT owner_name,
2 table_name,
3 flashback_archive_name,
4 archive_table_name,
5 status
6* FROM dba_flashback_archive_tables where owner_name = 'TEST' and table_name = 'T1'
OWNER_NAME TABLE_NAME FLASHBACK_ARCHIVE_NAME ARCHIVE_TABLE_NAME STATUS
------------------------------ ------------------------------ ------------------------------ ------------------------------ -------------
TEST T1 FDA_TEST SYS_FBA_HIST_2779773 ENABLED
如果您确定要恢复的数据as of timestamp
不再在撤消表空间中,您可以使用10046
事件生成跟踪文件,以真正了解 Oracle 是如何真正获取数据的。
尽管我想知道您在获得该级别的详细信息时在寻找什么。