日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

ORACLE 各种闪回操作

發布時間:2023/12/13 编程问答 48 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ORACLE 各种闪回操作 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1Flashback Database(利用閃回日志恢復)

?Oracle Flashback Database特性允許通過SQL語句Flashback Database語句,讓數據庫前滾到當前的前一個時間點或者SCN,而不需要做時間點的恢復。閃回數據庫可以迅速將數據庫回到誤操作或人為錯誤的前一個時間點,如Word中的"撤消"操作,可以不利用備份就快速的實現基于時間點的恢復。Oracle通過創建新的Flashback Logs(閃回日志),記錄數據庫的閃回操作。如果希望能閃回數據庫,需要設置如下參數:DB_RECOVER_FILE_DEST日志的存放位置,DB_RECOVER_FILE_DEST_SIZE恢復區的大小。在創建數據庫的時候,Oracle將自動創建恢復區,但默認是關閉的,需要執行alter database flashback on命令。

?

例:執行Flashback Database命令格式。

SQL>flashback database to time to_timestamp(xxx);

SQL>flashback database to scn xxx

?

2Flashback Table(利用UNDO保留信息恢復)

?Oracle Flashback Table特性允許利用Flashback Table語句,確保閃回到表的前一個時間點。與Oracle 9i中的Flashback Query相似,利用回滾段信息來恢復一個或一些表到以前的一個時間點(一個快照)。要注意的是,Flashback Table不等于Flashback QueryFlashback Query僅僅是查詢以前的一個快照點而已,并不改變當前表的狀態,而Flashback Table將改變當前表及附屬對象一起回到以前的時間點。

?語法:

?flashback table tablename to timestamp xxx

?flashback table tablename to scn xxx

?

注意:如果需要閃回一個表,需要以下條件:

?需要有flashback any table的系統權限或者是該表的flashback對象權限;

?需要有該表的select,insert,delete,alter權限;

?必須保證該表row movement

?

例:執行將test表閃回到201157日下午3點。

SQL>flashback table test to timestamp to_timestamp(’2011-05-07 15:00:00’,’yyyy-mm-dd hh24:mi:ss’);

?

3Flashback Drop(利用回收站功能恢復)

注:由于目前的環境為了實現OGGDDL同步,關閉了回收站功能,故這個功能不可用。

?

4Flash Version Query(利用UNDO保留信息恢復)

?Oracle Flashback Version Query特性,利用保存的回滾信息,可以看到特定的表在時間段內的任何修改,如電影的回放一樣,可以了解表在該期間的任何變化。Flashback version query一樣依賴于AUM,提供了一個查看行改變的功能,能找到所有已經提交了的行的記錄,分析出過去時間都執行了什么操作。Flashback version query采用VERSIONS BETWEEN語句來進行查詢,常用的方法:

?

  ·VERSIONS_SCN -?系統改變號

?

  ·VERSIONS_TIMESTAMP -?時間

?

  例如:在test表中,時間1插入一條記錄,時間2刪除了這條記錄,對于時間3執行select * from test當然查詢不到這條記錄,只能看到該表最后的提交記錄。這時如果利用Flash Table或者是Flash Query,只能看到過去的某一時間點的一個快照,而利用Flashback Version Query,能夠把時間1、時間2的操作給記錄下來,并詳細的查詢出對表進行的任何操作。

?

基于SCN的閃回查詢:

SQL> select count(*) from lm_mtrp_syn_channelinfo as of scn 708000000;

?

??COUNT(*)

----------

????????21

?

基于時間段的閃回查詢:

SQL>select versions_starttime,versions_endtime, versions_xid,versions_operation,id

from test versions

between timestamp minvalue and maxvalue

order by versions_starttime;

?

5,Flashback Transaction Query(利用UNDO保留信息恢復)

?Oracle Flashback Transaction Query特性確保檢查數據庫的任何改變在一個事務級別,可以利用此功能進行診斷問題、性能分析和審計事務。它其實是Flashback Version Query查詢的一個擴充,Flashback Version Query說明了可以審計一段時間內表的所有改變,但是也僅僅是能發現問題,對于錯誤的事務,沒有好的處理辦法。而Flashback Transaction Query提供了從FLASHBACK_TRANSACTION_QUERY視圖中獲得事務的歷史以及Undo_sql(回滾事務對應的sql語句),也就是說審計一個事務到底做了什么,甚至可以回滾一個已經提交的事務。

?例:Flashback Transaction Query的操作實例。

?1)在test表中刪除記錄,獲得事務的標識XID,然后提交。

?SQL>delete from test where id=2;

?SQL>select xid from v$transaction;

?XID

?----------------

?04001200AE010000

?SQL>commit;

?

  在測試中方便起見,在事務沒有提交的時候,獲得事務的XID04001F0035000000。實際情況下,不可能去跟蹤每個事務,想要獲得已提交事務的XID,就必須通過上面的Flashback Version Query

?

  (2)進行Flashback Transaction Query

?

SQL>select * from FLASHBACK_TRANSACTION_QUERY

?where xid=’04001F0035000000’;

?UNDO_SQL

?insert into "FLASHTEST"."TEST"("ID") values (’2’);

?

注意:這個刪除語句對應的是1Insert語句,如果想回滾這個事務,執行這個Insert語句即可。

?可以看到,Flashback Transaction Query主要用于審計一個事務,并可以回滾一個已經提交的事務。如果確定出錯的事務是最后一個事務,我們利用Flashback Table或者Flashback Query就可以解決問題。但是,如果執行了一個錯誤的事務之后,又執行了一系列正確的事務,那么上面的方法就無能為力,利用Flashback Transaction Query可以查看或回滾這個錯誤的事務。

?

另:ORACLE 11G還多了一個閃回數據歸檔的功能,即可將UNDO的信息進行歸檔,這個功能對于一些比較重要的表,可以起到一個長期的歷史數據追溯作用,是對UNDO的過期信息一個革命性的改進,當然,啟用這種功能,也消耗一定的存儲空間和性能。

轉載于:https://www.cnblogs.com/einyboy/archive/2012/08/06/2624858.html

總結

以上是生活随笔為你收集整理的ORACLE 各种闪回操作的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。