Oracle 備份恢復之 Flashback
<div style="font-family:微軟雅黑;font-size:14px;line-height:21px;white-space:normal;widows:auto;background-color:#FFFFFF;">
<span style="background-color:inherit;line-height:1.5;"><b style="background-color:inherit;"><span style="background-color:inherit;font-size:medium;">1.Flashback的目的</span></b></span>
</div>
<span style="font-family:微軟雅黑;font-size:14px;line-height:21px;white-space:normal;widows:auto;background-color:#FFFFFF;">在推出Flashback之前,如果你對資料誤操作,並已提交,這時想回退該誤操作,將會是很件麻煩的事情。有人可能會說可以用備份恢復到誤操作之前,但正確的運算元據也一起沒了。唯一可能的辦法就是日誌挖掘(logminer),但日誌挖掘非常繁瑣,很難定位。</span><br style="font-family:微軟雅黑;font-size:14px;line-height:21px;white-space:normal;widows:auto;background-color:#FFFFFF;" />
<span style="font-family:微軟雅黑;font-size:14px;line-height:21px;white-space:normal;widows:auto;background-color:#FFFFFF;">因此,Oracle推出了Flashback技術,主要目的就是為了恢復因誤操作而丟失的資料。</span>
<div style="font-family:微軟雅黑;font-size:14px;line-height:21px;white-space:normal;widows:auto;background-color:#FFFFFF;">
<br style="background-color:inherit;" />
</div>
<b style="font-family:微軟雅黑;font-size:14px;line-height:21px;white-space:normal;widows:auto;background-color:#FFFFFF;"><span style="background-color:inherit;font-size:medium;">2.Flashback家族介紹</span></b><br style="font-family:微軟雅黑;font-size:14px;line-height:21px;white-space:normal;widows:auto;background-color:#FFFFFF;" />
<span style="font-family:微軟雅黑;font-size:14px;line-height:21px;white-space:normal;widows:auto;background-color:#FFFFFF;">資料庫級別:Flashback Database</span><br style="font-family:微軟雅黑;font-size:14px;line-height:21px;white-space:normal;widows:auto;background-color:#FFFFFF;" />
<span style="font-family:微軟雅黑;font-size:14px;line-height:21px;white-space:normal;widows:auto;background-color:#FFFFFF;">表級別:Flashback Drop和Flashback Table,Flashback Data Archive</span><br style="font-family:微軟雅黑;font-size:14px;line-height:21px;white-space:normal;widows:auto;background-color:#FFFFFF;" />
<span style="font-family:微軟雅黑;font-size:14px;line-height:21px;white-space:normal;widows:auto;background-color:#FFFFFF;">記錄級別:Flashback Version Query和Flashback Transaction Query</span>
<div style="font-family:微軟雅黑;font-size:14px;line-height:21px;white-space:normal;widows:auto;background-color:#FFFFFF;">
<span style="background-color:inherit;font-size:medium;"><br style="background-color:inherit;" />
</span>
</div>
<b style="font-family:微軟雅黑;font-size:14px;line-height:21px;white-space:normal;widows:auto;background-color:#FFFFFF;"><span style="background-color:inherit;font-size:medium;">3.Flashback家族 應用原理</span></b>
<div style="font-family:微軟雅黑;font-size:14px;line-height:21px;white-space:normal;widows:auto;background-color:#FFFFFF;">
閃回原理基於oracle的 Log、<span style="background-color:inherit;line-height:1.5;"> Recycle Bin、</span><span style="background-color:inherit;line-height:1.5;">UNDO回滾段作用。</span>
</div>
<div style="font-family:微軟雅黑;font-size:14px;line-height:21px;white-space:normal;widows:auto;background-color:#FFFFFF;">
<br style="background-color:inherit;" />
</div>
<div style="font-family:微軟雅黑;font-size:14px;line-height:21px;white-space:normal;widows:auto;background-color:#FFFFFF;">
UNDO閃回:
</div>
<div style="font-family:微軟雅黑;font-size:14px;line-height:21px;white-space:normal;widows:auto;background-color:#FFFFFF;">
Flashback Database 回滾資料庫<br style="background-color:inherit;" />
Flashback Drop 恢復誤刪除的表<br style="background-color:inherit;" />
Flashback Version Query 恢復誤操作的資料<br style="background-color:inherit;" />
Flashback Transaction Query 恢復誤操作的資料<br style="background-color:inherit;" />
Flashback Table 恢復誤操作的資料
<div style="background-color:inherit;">
<b style="background-color:inherit;"><br style="background-color:inherit;" />
</b>
</div>
<b style="background-color:inherit;"><span style="background-color:inherit;font-size:medium;">4.Flashback 技術發展歷程</span></b><br style="background-color:inherit;" />
Flashback Version/Transaction Query 和 Flashback Table、Flashback Query和Flashback Table都是利用undo實現回退功能,當需要閃回到過去某一時刻時,先利用Flashback Query查詢,確認閃回的SCN或Timestamp,然後再利用Flashback Table真正實現閃回。
</div>
<div style="font-family:微軟雅黑;font-size:14px;line-height:21px;white-space:normal;widows:auto;background-color:#FFFFFF;">
<br style="background-color:inherit;" />
<b style="background-color:inherit;"><span style="background-color:inherit;font-size:medium;">5. 9i 的 Flashback Query</span></b><br style="background-color:inherit;" />
9i的Flashback Query可以查詢過去某個時間點物件的狀態,測試如下:<br style="background-color:inherit;" />
系統當前時間為:<br style="background-color:inherit;" />
A105024@O02DMS1>alter session set nls_date_format='yyyy-mm-dd:hh24:mi:ss';<br style="background-color:inherit;" />
A105024@O02DMS1>select sysdate from dual;<br style="background-color:inherit;" />
SYSDATE<br style="background-color:inherit;" />
-------------------<br style="background-color:inherit;" />
2011-12-16:02:51:16<br style="background-color:inherit;" />
test表裡有一條資料:<br style="background-color:inherit;" />
A105024@O02DMS1>select * from test;<br style="background-color:inherit;" />
ID<br style="background-color:inherit;" />
----------<br style="background-color:inherit;" />
1<br style="background-color:inherit;" />
現把該資料刪除:<br style="background-color:inherit;" />
A105024@O02DMS1>delete from test;<br style="background-color:inherit;" />
A105024@O02DMS1>commit;
<div style="background-color:inherit;">
<br style="background-color:inherit;" />
</div>
此時test表中無資料:<br style="background-color:inherit;" />
A105024@O02DMS1>select * from test;<br style="background-color:inherit;" />
no rows selected<br style="background-color:inherit;" />
但是可以透過Flashback Query查詢刪除之前的資料:<br style="background-color:inherit;" />
A105024@O02DMS1>select * from test as of timestamp to_timestamp('2011-12-16:02:51:16','yyyy-mm-dd:hh24:mi:ss');<br style="background-color:inherit;" />
ID<br style="background-color:inherit;" />
----------<br style="background-color:inherit;" />
1<br style="background-color:inherit;" />
必要時還可以恢復資料:<br style="background-color:inherit;" />
A105024@O02DMS1>insert into test select * from test as of timestamp to_timestamp('2011-12-16:02:51:16','yyyy-mm-dd:hh24:mi:ss');<br style="background-color:inherit;" />
A105024@O02DMS1>commit;
</div>
<div style="font-family:微軟雅黑;font-size:14px;line-height:21px;white-space:normal;widows:auto;background-color:#FFFFFF;">
<span style="background-color:inherit;font-size:medium;"><br style="background-color:inherit;" />
<b style="background-color:inherit;">6. Flashback Version Query</b></span><br style="background-color:inherit;" />
10g新引入的Version Query可以看到過去某個時間段內,資料是如何變化的,也就是資料的演變歷史,為此,10g還引入了一個新的偽列ORA_ROWSCN:記錄該資料最後一次修改時的SCN。
<div style="background-color:inherit;">
<br style="background-color:inherit;" />
</div>
A105024@O02DMS1>create table test (id number, name varchar(10));
<div style="background-color:inherit;">
<br style="background-color:inherit;" />
</div>
A105024@O02DMS1>insert into test values (1,'first');
<div style="background-color:inherit;">
<br style="background-color:inherit;" />
</div>
A105024@O02DMS1>commit;
<div style="background-color:inherit;">
<br style="background-color:inherit;" />
</div>
A105024@O02DMS1>update test set name='second' where id=1;
<div style="background-color:inherit;">
<br style="background-color:inherit;" />
</div>
A105024@O02DMS1>commit;
<div style="background-color:inherit;">
<br style="background-color:inherit;" />
</div>
A105024@O02DMS1>update test set name='third' where id=1;
<div style="background-color:inherit;">
<br style="background-color:inherit;" />
</div>
A105024@O02DMS1>commit;
<div style="background-color:inherit;">
<br style="background-color:inherit;" />
</div>
我們建立了一個測試表,插入一條資料,並對該資料進行兩次更新,下面看如何用Version Query獲得資料的演變歷史:
<div style="background-color:inherit;">
<br style="background-color:inherit;" />
</div>
A105024@O02DMS1>select versions_xid,versions_startscn,versions_endscn,versions_operation,id,name from test versions between scn minvalue and maxvalue where id=1;
<div style="background-color:inherit;">
<br style="background-color:inherit;" />
</div>
VERSIONS_XID VERSIONS_STARTSCN VERSIONS_ENDSCN VERSIONS_OPERATION ID NAME<br style="background-color:inherit;" />
---------------- ----------------- --------------- -------------------- ---------- ----------<br style="background-color:inherit;" />
12000900D0720000 6629455993 U 1 third
<div style="background-color:inherit;">
<br style="background-color:inherit;" />
</div>
0C0018003D720000 6629455988 6629455993 U 1 second
<div style="background-color:inherit;">
<br style="background-color:inherit;" />
</div>
0D002A00AD6E0000 6629455888 6629455988 I 1 first
<div style="background-color:inherit;">
<br style="background-color:inherit;" />
</div>
從下往上看,正好對應著我們之前對該資料的操作歷史。
<div style="background-color:inherit;">
<br style="background-color:inherit;" />
</div>
從上面加黑這行可以看出,在SCN 6629455888和6629455993 這段期間,資料的狀態為(1,second),對應的操作為update。
<div style="background-color:inherit;">
<br style="background-color:inherit;" />
</div>
<div style="background-color:inherit;">
<b style="background-color:inherit;"><span style="background-color:inherit;font-size:medium;"><br style="background-color:inherit;" />
</span></b>
</div>
<b style="background-color:inherit;"><span style="background-color:inherit;font-size:medium;">7. Flashback Transaction Query</span></b>
<div style="background-color:inherit;">
<br style="background-color:inherit;" />
</div>
Transaction Query可以檢視事務的演變歷史,使用這個功能需要訪問flashback_transaction_query檢視。
<div style="background-color:inherit;">
<br style="background-color:inherit;" />
</div>
A105024@O02DMS1>create table test (id number);
<div style="background-color:inherit;">
<br style="background-color:inherit;" />
</div>
開始第一個事務:
<div style="background-color:inherit;">
<br style="background-color:inherit;" />
</div>
A105024@O02DMS1>insert into test values (1);
<div style="background-color:inherit;">
<br style="background-color:inherit;" />
</div>
A105024@O02DMS1>update test set id=11 where id=1;
<div style="background-color:inherit;">
<br style="background-color:inherit;" />
</div>
A105024@O02DMS1>commit;
<div style="background-color:inherit;">
<br style="background-color:inherit;" />
</div>
開始第二個事務:
<div style="background-color:inherit;">
<br style="background-color:inherit;" />
</div>
A105024@O02DMS1>insert into test values (2);
<div style="background-color:inherit;">
<br style="background-color:inherit;" />
</div>
A105024@O02DMS1>update test set id=22 where id=2;
<div style="background-color:inherit;">
<br style="background-color:inherit;" />
</div>
A105024@O02DMS1>commit;
<div style="background-color:inherit;">
<br style="background-color:inherit;" />
</div>
檢視flashback_transaction_query檢視獲得事務的演變歷史:
<div style="background-color:inherit;">
<br style="background-color:inherit;" />
</div>
A105024@O02DMS1>select XID,OPERATION,COMMIT_SCN,UNDO_SQL from flashback_transaction_query where xid in
<div style="background-color:inherit;">
<br style="background-color:inherit;" />
</div>
2 (select versions_xid from test versions between scn minvalue and maxvalue);<br style="background-color:inherit;" />
XID OPERATION COMMIT_SCN UNDO_SQL<br style="background-color:inherit;" />
---------------- ---------- ---------- ------------------------------------------------------------<br style="background-color:inherit;" />
10000D000C720000 UPDATE 6629456273 update "A105024"."TEST" set "ID" = '2' where ROWID = 'AACsnzAAEAAABSnAAB';
<div style="background-color:inherit;">
<br style="background-color:inherit;" />
</div>
10000D000C720000 INSERT 6629456273 delete from "A105024"."TEST" where ROWID = 'AACsnzAAEAAABSnAAB';
<div style="background-color:inherit;">
<br style="background-color:inherit;" />
</div>
10000D000C720000 BEGIN 6629456273
<div style="background-color:inherit;">
<br style="background-color:inherit;" />
</div>
0C0002002A720000 UPDATE 6629456260 update "A105024"."TEST" set "ID" = '1' where ROWID = 'AACsnzAAEAAABSnAAA';
<div style="background-color:inherit;">
<br style="background-color:inherit;" />
</div>
0C0002002A720000 INSERT 6629456260 delete from "A105024"."TEST" where ROWID = 'AACsnzAAEAAABSnAAA';
<div style="background-color:inherit;">
<br style="background-color:inherit;" />
</div>
0C0002002A720000 BEGIN 6629456260
<div style="background-color:inherit;">
<br style="background-color:inherit;" />
</div>
<b style="background-color:inherit;"><span style="background-color:inherit;font-size:medium;">8. Flashback Table</span></b>
<div style="background-color:inherit;">
<br style="background-color:inherit;" />
</div>
根據Flashback Query的演變歷史,就可以確定需要回退的時間點,然後再利用Flashback Table功能真正實現回退,注意:在真正回退之前,必須啟用row movement。
<div style="background-color:inherit;">
<br style="background-color:inherit;" />
</div>
<b style="background-color:inherit;">Flashback Drop</b>
<div style="background-color:inherit;">
<br style="background-color:inherit;" />
</div>
Flashback drop是從Oracle10g開始才有的功能,原理是每個表空間都會有嚴格回收站的邏輯區域,當drop時,被刪除的表及其關聯物件不會被物理刪除,只是轉移到回收站中,給使用者提供一個恢復的可能。
<div style="background-color:inherit;">
<br style="background-color:inherit;" />
</div>
使用Flashback drop需要注意以下幾點:
<div style="background-color:inherit;">
<br style="background-color:inherit;" />
</div>
1. 對system表空間無效
<div style="background-color:inherit;">
<br style="background-color:inherit;" />
</div>
2. sqlplus的版本不能低於10g,否則很多命令無法使用
<div style="background-color:inherit;">
<br style="background-color:inherit;" />
</div>
下面做個測試:
<div style="background-color:inherit;">
<br style="background-color:inherit;" />
</div>
SQL> create table test as select * from dba_objects;
<div style="background-color:inherit;">
<br style="background-color:inherit;" />
</div>
SQL> drop table test;
<div style="background-color:inherit;">
<br style="background-color:inherit;" />
</div>
SQL><b style="background-color:inherit;"> show recyclebin;</b><br style="background-color:inherit;" />
ORIGINAL NAME RECYCLEBIN NAME OBJECT TYPE DROP TIME<br style="background-color:inherit;" />
---------------- ------------------------------ ------------ -------------------<br style="background-color:inherit;" />
TEST BIN$S5L+aNpzQmOScn8VfpJBAA==$0 TABLE 2011-12-15:22:38:30
<div style="background-color:inherit;">
<br style="background-color:inherit;" />
</div>
SQL> create table test as select * from dba_objects where 2=1;
<div style="background-color:inherit;">
<br style="background-color:inherit;" />
</div>
SQL> drop table test;
<div style="background-color:inherit;">
<br style="background-color:inherit;" />
</div>
SQL><b style="background-color:inherit;"> show recyclebin;</b><br style="background-color:inherit;" />
ORIGINAL NAME RECYCLEBIN NAME OBJECT TYPE DROP TIME<br style="background-color:inherit;" />
---------------- ------------------------------ ------------ -------------------<br style="background-color:inherit;" />
TEST BIN$XHwrz1OaQaSeq/NQIE85hw==$0 TABLE 2011-12-15:22:39:34<br style="background-color:inherit;" />
TEST BIN$S5L+aNpzQmOScn8VfpJBAA==$0 TABLE 2011-12-15:22:38:30<br style="background-color:inherit;" />
此時recyclebin裡有兩個test表,檢視中兩個表的資料個數:
<div style="background-color:inherit;">
<br style="background-color:inherit;" />
</div>
SQL> select count(*) from "BIN$XHwrz1OaQaSeq/NQIE85hw==$0";<br style="background-color:inherit;" />
COUNT(*)<br style="background-color:inherit;" />
----------<br style="background-color:inherit;" />
0
<div style="background-color:inherit;">
<br style="background-color:inherit;" />
</div>
SQL> select count(*) from "BIN$S5L+aNpzQmOScn8VfpJBAA==$0";<br style="background-color:inherit;" />
COUNT(*)<br style="background-color:inherit;" />
----------<br style="background-color:inherit;" />
1000000
<div style="background-color:inherit;">
<br style="background-color:inherit;" />
</div>
假設想要恢復後一張表:
<div style="background-color:inherit;">
<br style="background-color:inherit;" />
</div>
SQL> flashback table "BIN$S5L+aNpzQmOScn8VfpJBAA==$0" to before drop;<br style="background-color:inherit;" />
Flashback complete.
<div style="background-color:inherit;">
<br style="background-color:inherit;" />
</div>
SQL> select count(*) from test;<br style="background-color:inherit;" />
COUNT(*)<br style="background-color:inherit;" />
----------<br style="background-color:inherit;" />
1000000<br style="background-color:inherit;" />
假設現在還要恢復前一張表,並重新命名為test2:<br style="background-color:inherit;" />
SQL> flashback table "BIN$XHwrz1OaQaSeq/NQIE85hw==$0" to before drop rename to t<br style="background-color:inherit;" />
est2;<br style="background-color:inherit;" />
Flashback complete.
<div style="background-color:inherit;">
<br style="background-color:inherit;" />
</div>
SQL> select count(*) from test2;<br style="background-color:inherit;" />
COUNT(*)<br style="background-color:inherit;" />
----------<br style="background-color:inherit;" />
0
<div style="background-color:inherit;">
<br style="background-color:inherit;" />
</div>
<b style="background-color:inherit;"><span style="background-color:inherit;font-size:medium;">9.Flashback Database</span><br style="background-color:inherit;" />
1. 配置Flashback Database</b><br style="background-color:inherit;" />
1)Flashback 功能預設是關閉的:<br style="background-color:inherit;" />
SQL> select name,flashback_on from v$database;<br style="background-color:inherit;" />
NAME FLASHBACK_ON<br style="background-color:inherit;" />
--------- ------------------<br style="background-color:inherit;" />
O01DMS0 NO
<div style="background-color:inherit;">
<br style="background-color:inherit;" />
</div>
<b style="background-color:inherit;">2)配置Flash recovery area:</b><br style="background-color:inherit;" />
SQL> alter system set db_recovery_file_dest_size=2G scope=both;<br style="background-color:inherit;" />
SQL> alter system set db_recovery_file_dest='H:\flashback' scope=both;
<div style="background-color:inherit;">
<br style="background-color:inherit;" />
</div>
<b style="background-color:inherit;">3)啟用Flashback Database 功能:</b><br style="background-color:inherit;" />
SQL> shutdown immediate<br style="background-color:inherit;" />
SQL> startup mount<br style="background-color:inherit;" />
SQL> alter database flashback on;<br style="background-color:inherit;" />
SQL> select name,flashback_on from v$database;<br style="background-color:inherit;" />
NAME FLASHBACK_ON<br style="background-color:inherit;" />
--------- ------------------<br style="background-color:inherit;" />
O01DMS0 YES
<div style="background-color:inherit;">
<br style="background-color:inherit;" />
</div>
<b style="background-color:inherit;">4)設定db_flashback_retention_target:<br style="background-color:inherit;" />
</b>SQL> alter system set db_flashback_retention_target=1440 scope=both;
<div style="background-color:inherit;">
<br style="background-color:inherit;" />
</div>
<b style="background-color:inherit;">5)開啟資料庫:<br style="background-color:inherit;" />
</b>SQL> alter database open;
<div style="background-color:inherit;">
<br style="background-color:inherit;" />
</div>
<b style="background-color:inherit;">2. Flashback Database 操作<br style="background-color:inherit;" />
</b>1)模擬資料丟失:
<div style="background-color:inherit;">
<br style="background-color:inherit;" />
</div>
SQL> create table test as select * from dba_objects;<br style="background-color:inherit;" />
Table created.<br style="background-color:inherit;" />
SQL> select count(*) from test;<br style="background-color:inherit;" />
COUNT(*)<br style="background-color:inherit;" />
----------<br style="background-color:inherit;" />
10318
<div style="background-color:inherit;">
<br style="background-color:inherit;" />
</div>
SQL> truncate table test;<br style="background-color:inherit;" />
Table truncated.<br style="background-color:inherit;" />
SQL> select count(*) from test;<br style="background-color:inherit;" />
COUNT(*)<br style="background-color:inherit;" />
----------<br style="background-color:inherit;" />
0
<div style="background-color:inherit;">
<br style="background-color:inherit;" />
</div>
<b style="background-color:inherit;">2)確認能恢復的時間點</b><br style="background-color:inherit;" />
能回退的最早時間,取決於保留的Flashback database log的多少,可以從v$flashback_database_log檢視:<br style="background-color:inherit;" />
SQL> select to_char(OLDEST_FLASHBACK_TIME,'yyyy-mm-dd hh24:mi:ss') from v$flashback_database_log;<br style="background-color:inherit;" />
TO_CHAR(OLDEST_FLAS<br style="background-color:inherit;" />
-------------------<br style="background-color:inherit;" />
2011-12-15 02:41:48
<div style="background-color:inherit;">
<br style="background-color:inherit;" />
</div>
<b style="background-color:inherit;">3)恢復資料到指定時間點<br style="background-color:inherit;" />
</b>SQL> shutdown immediate;<br style="background-color:inherit;" />
SQL> startup mount;<br style="background-color:inherit;" />
SQL> flashback database to timestamp to_timestamp('2011-12-15 02:43:00','yyyy-mm-dd hh24:mi:ss');<br style="background-color:inherit;" />
Flashback complete.
<div style="background-color:inherit;">
<br style="background-color:inherit;" />
</div>
恢復成功後,最好先以readonly的方式開啟資料庫,以確認恢復達到預期,如果沒有達到預期,還可以再進行恢復:<br style="background-color:inherit;" />
SQL> alter database open read only;<br style="background-color:inherit;" />
Database altered.<br style="background-color:inherit;" />
SQL> select count(*) from test;<br style="background-color:inherit;" />
select count(*) from test<br style="background-color:inherit;" />
*<br style="background-color:inherit;" />
ERROR at line 1:<br style="background-color:inherit;" />
ORA-00942: table or view does not exist
<div style="background-color:inherit;">
<br style="background-color:inherit;" />
</div>
SQL> shutdown immediate;<br style="background-color:inherit;" />
SQL> startup mount;<br style="background-color:inherit;" />
SQL> flashback database to timestamp to_timestamp('2011-12-15 02:49:00','yyyy-mm-dd hh24:mi:ss');<br style="background-color:inherit;" />
Flashback complete.
<div style="background-color:inherit;">
<br style="background-color:inherit;" />
</div>
SQL> alter database open read only;<br style="background-color:inherit;" />
Database altered.<br style="background-color:inherit;" />
SQL> select count(*) from test;<br style="background-color:inherit;" />
COUNT(*)<br style="background-color:inherit;" />
----------<br style="background-color:inherit;" />
10318
</div>
<div style="font-family:微軟雅黑;font-size:14px;line-height:21px;white-space:normal;widows:auto;background-color:#FFFFFF;">
<br style="background-color:inherit;" />
<b style="background-color:inherit;">4)開啟資料庫</b><br style="background-color:inherit;" />
恢復成功後,以resetlog方式開啟資料庫:<br style="background-color:inherit;" />
SQL> shutdown immediate;<br style="background-color:inherit;" />
SQL> startup mount<br style="background-color:inherit;" />
SQL> alter database open resetlogs;
<div style="background-color:inherit;">
<br style="background-color:inherit;" />
</div>
<b style="background-color:inherit;"><span style="background-color:inherit;font-size:medium;">10.Flashback Data Archive</span><br style="background-color:inherit;" />
</b>Oracle11g則為flashback家族又帶來一個新的成員:flashback data archive。<br style="background-color:inherit;" />
初看起來,flashback data archive和flashback query沒有太大的不同,都是透過as of能夠查詢之前的資料,但是他們的實現機制是不一樣的。Flashback query是透過直接從undo中讀取資訊來構造舊資料,這樣就有一個限制,就是undo中的資訊不能被覆蓋。而undo段是迴圈使用的,只要事務提交,之前的undo資訊就可能被覆蓋,雖然可以透過undo_retention等引數來延長undo的存活期,但這個引數會影響所有的事務,設定過大,可能導致undo tablespace快速膨脹。<br style="background-color:inherit;" />
Falshback data archive特性則透過將變化資料另外儲存到建立的flashback archive中,以和undo區別開來,這樣就可以透過為flashback archive單獨設定存活策略,使得可以閃回到指定時間之前的舊資料而不影響undo策略。並且可以根據需要指定哪些資料庫物件需要儲存歷史變化資料,而不是將資料庫中所有物件的變化資料都儲存下來,這樣可以極大的減少空間需求。
</div>
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31520497/viewspace-2156736/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Oracle備份恢復之熱備份恢復及異機恢復Oracle
- NBU之oracle的備份恢復Oracle
- 【備份與恢復】使用Flashback Database(不完全恢復)Database
- ORACLE之常用FAQ:備份與恢復Oracle
- ORACLE 備份與恢復之 思路整理Oracle
- Oracle 備份恢復概念Oracle
- oracle備份恢復PPTOracle
- Oracle 備份和恢復Oracle
- ORACLE備份&恢復案例Oracle
- Oracle 備份恢復篇之RMAN catalogOracle
- 【備份恢復】Oracle 資料備份與恢復微實踐Oracle
- RMAN備份與恢復之加密備份加密
- oracle flashback特性(2.2)--Flashback Table之從UNDO中恢復Oracle
- ORACLE備份&恢復案例(轉)Oracle
- Oracle 備份 與 恢復 概述Oracle
- Oracle RAC備份與恢復Oracle
- ORACLE備份&恢復案例(3)Oracle
- ORACLE備份&恢復案例(5)Oracle
- ORACLE備份&恢復案例(4)Oracle
- ORACLE備份&恢復案例(7)Oracle
- ORACLE備份&恢復案例(6)Oracle
- ORACLE備份&恢復案例(8)Oracle
- ORACLE備份&恢復案例(1)Oracle
- ORACLE備份&恢復案例(2)Oracle
- Oracle備份與恢復 (zt)Oracle
- Oracle備份與恢復案例Oracle
- Oracle備份與恢復(轉)Oracle
- oracle冷備份、恢復和異機恢復Oracle
- Oracle資料庫備份與恢復之RMANOracle資料庫
- MongoDB之備份與恢復MongoDB
- 循序漸進oracle第7章:備份與恢復之RMAN的簡單備份與恢復Oracle
- Oracle 聯機備份 離線備份 物理備份 恢復Oracle
- 備份&恢復之四:非歸檔模式下的備份與恢復模式
- 【備份恢復】從備份恢復資料庫資料庫
- 【管理篇備份恢復】備份恢復基礎
- ORACLE備份和恢復 - 邏輯備份 exp/impOracle
- Oracle 備份和恢復介紹Oracle
- oracle 增量備份恢復驗證Oracle