Oracle閃回表 筆記

2021-09-03 10:55:17 字數 2400 閱讀 5052

flashback是oracle9i開始新特性,但9i只支援flashquery,即根據回滾段讀取表某個時間點的資料。

到了10g,oracle通過recyle bin(迴改站)與flasharea(閃回區)實現快速恢復刪除表((flashback table)

和資料庫時間點恢復((flashback database)(不需要全備份哦)。本文只記錄了flashback table方法與特性。

oracle10g的drop table並不是直正的刪除,而是更名。

sql>create table gjj_test(id number,name varchar2(64));

sql>create index gjj_test_idx on gjj_test(id);

sql>begin for i in 1..1000 loop insert into gjj_test values(i,'gjj');end loop;end;

sql> select relative_fno,bytes,blocks,extents from dba_segments where segment_name='gjj_test'

2  /

relative_fno      bytes     blocks    extents

------------ ---------- ---------- ----------

4      65536          8          1

sql>drop table gjj_test

sql> select * from recyclebin

2  /

object_name                    original_name                   

------------------------------ ---------------

bin$hlwt85nwsgmsv4pq+ajfuw==$0 gjj_test       

sql> select relative_fno,bytes,blocks,extents from dba_segments where segment_name='bin$hlwt85nwsgmsv4pq+ajfuw==$0'

2  /

relative_fno      bytes     blocks    extents

------------ ---------- ---------- ----------

4      65536          8          1

可以看到drop table並不是直正的刪除,而是更名為bin$hlwt85nwsgmsv4pq+ajfuw==$0,儲存空間也沒有發生變化。

依賴於原表的儲存過程都失效了,而建在表上的索引和觸發器也會被重新命名。

sql>select index_name from user_indexes where table_name='gjj_test';

index_name     

--------------

bin$wgff1rfqthqfiylpp1+fxw==$0

sql>flashback table gjj_test to before drop;

可以發現gjj_test已恢復正常,但是索引和觸發器的名字並沒有被改過來,只能通過alert index ..rename更改。

但位圖索引不會放到recylebin中,所以無法恢復。

如果想drop table比較徹底,可以用drop table gjj_test purge。

有一些方法控制**站,比如可以用物件的原有名字從**站中清除指定物件,或者用物件被刪除後系統自動重新命名的名字來指定清除它:

purge table gjj_test,purge table "bin$hlwt85nwsgmsv4pq+ajfuw==$0"

清除表時,同時也會清除依賴這張表的約束,如索引。可以指定只清除表相應的約束,如:

purge index idx_test

此外,還可以將整個表空間的**站內容全部清除:purge tablespace users

也可以清除某個表空間上的**站中某個使用者的物件:purge tablespace users user gjj

當用某個普通使用者登入時,只會清除它自己的物件:purge recyclebin

當以dba身份登入時,可以清除所有表空間上**站 :purge dba_recyclebin

還有乙個,flashback table還可以把錶恢復到某個時間點(scn)

如果未啟用行移動功能, 不能閃回表,

sql>alter table gjj_test  enable row movement

sql>flashback table gjj_test to scn 2299919

可以發現資料以恢復了。

Oracle閃回表 筆記

flashback是oracle9i開始新特性,但9i只支援flashquery,即根據回滾段讀取表某個時間點的資料。到了10g,oracle通過recyle bin 迴改站 與flasharea 閃回區 實現快速恢復刪除表 flashback table 和資料庫時間點恢復 flashback d...

oracle 資料閃回

select from scott.dept insert into scott.dept values 50,錯誤資料 china select from scott.dept as of timestamp to timestamp 2011 12 09 10 00 00 yyyy mm dd ...

oracle閃回技術

1,閃回資料庫到之前某時間點 在安裝時需要開放閃回功能 不支援表空間刪除 select name from v database 看是否開啟閃回功能 select flashback on,name from v database select name from v bgprocess where...