oracle中關於flashback閃回的介紹

來源:互聯網
上載者:User

  1、必須設定undo保留時間足夠大以能夠重構需要閃回的資料

  ALTER SYSTEM SET UNDO_RETENTION=; seconds值是undo資料保持的秒數。

  Flashback view是由undo retention interval來限制的。

  2、包DBMS_FLASHBACK提供了需求介面

  call dbms_flashback.enable_at_time(‘2010-10-19:11:00:00’);

  call dbms_flashback.disable();

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

  enable_at_time:會話級的enable flashback,映像時間被設定為最接近指定時間戳記的scn

  enable_at_system_change_number:將資料庫閃回到指定的scn號。

  get_system_change_number:返回當前的scn。

  disable:這個預存程序允許我們在整個會話內停止flashback並將你帶回目前時間的資料狀態。

  ----------

  dbms_flashback.enable預存程序不可以在有活動事務的時候執行,並且,這個包不能用sys身份執行。

  在使用DBMS_FLASHBACK.ENABLE_AT_TIME前,你必須設定你的NLS_DATE_FORMAT的精確程度,Oracle預設的是精確到天

  3、timestamp 與scn(系統改變號) 的對應關係

  事實上,Oracle在內部都是使用scn,即使你指定的是as of timestamp,oracle也會將其轉換成scn,系統時間標記與scn之間存在一張表,即SYS下的SMON_SCN_TIME表。

  每隔5分鐘,系統產生一次系統時間標記與scn的匹配並存入sys.smon_scn_time表,該表中記錄了最近1440個系統時間標記與scn的匹配記錄,由於該表只維護了最近的1440條記錄,因此如果使用as of timestamp的方式則只能flashback最近5天內的資料(假設系統是在持續不斷運行並無中斷或關機重啟之類操作的話)。SYS.SMON_SCN_TIME最多擁有1440條記錄。這個最大記錄數是這樣計算出來的,ORACLE平均每5分鐘同步一次該表資料,最大儲存最近5天的記錄,因此就相當於12(每小時更新次數)*24*5=1440。

  可以用sql驗證一下:

  Sql代碼

  select scn,to_char(time_dp,'yyyy-mm-dd hh24:mi:ss') from sys.smon_scn_time;

  10g中提供了兩個函數scn_to_timestamp() 和timestamp_to_scn() 用來執行時間戳記和SCN的轉換。

  下面使用閃回進行示範一下:

  1、登陸到資料庫。

  Sql代碼

  C:>sqlplus tivan/tivan

  SQL*Plus: Release 10.2.0.1.0 - Production on 星期二 10月 19 22:24:03 2010

  Copyright (c) 1982, 2005, Oracle. All rights reserved.

  串連到:

  Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production

  With the Partitioning, OLAP and Data Mining options

  2、查看錶的記錄。

  Sql代碼

  SQL> select count(*) from t1

  2 ;

  COUNT(*)

  ----------

  8302

  3、刪除所有的記錄提交。

  Sql代碼

  SQL> delete from t1

  2 ;

  已刪除8302行。

  SQL> commit;

  提交完成。

  4、獲得當前SCN

  如果能夠確切知道刪除之前SCN最好,如果不知道,可以進行閃回查詢嘗試。

  Sql代碼

  SQL> select dbms_flashback.get_system_change_number from dual;

  GET_SYSTEM_CHANGE_NUMBER

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

  1482649

  SQL> select count(*) from t1 as of scn 1482600;

  COUNT(*)

  ----------

  8302

  SCN=1482600時,t1表中的所有記錄都還在。

  5、利用閃回恢複資料。

  查看驗證一下:

  Sql代碼

  SQL> insert into t1 select * from t1 as of scn 1482600;

  已建立8302行。

  SQL> commit;

  提交完成。

  結果OK

  或者還可以如下操作

  Sql代碼

  SQL>flashback table t1 to scn 1482600;

  SQL> commit;

  Commit complete.

  --對於drop table t1 的操作flashback

  SQL> drop table t1;

  SQL>COMMIT;

  SQL> flashback table t1to before drop;

  SQL>commit;

  對於怎麼取的SCN可以使用timestamp_to_scn() 函數,如:

  Sql代碼

 

  select timestamp_to_scn(to_timestamp('2010-10-19 21:00:00','YYYY-MM-DD HH:MI:SS')) from dual;

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.