亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 數據庫 > Oracle > 正文

用Oracle閃回功能恢復偶然丟失的數據

2024-08-29 13:46:30
字體:
來源:轉載
供稿:網友
摘 要:本文提出了閃回功能的原理,描述了利用Oracle 9i或Oracle 10g的閃回功能進行恢復偶然丟失數據的方法。

  要害詞:Oracle;閃回;回滾段;數據恢復

  引言

  人為的錯誤是數據庫系統失敗的重要原因之一,根據調查約40%的系統問題是操作失誤或者用戶錯誤引起的,這些人為的錯誤又非凡難以避免。傳統上當發生數據丟失、數據錯誤問題時,解決的主要方法就是數據的導入/導出、備份/恢復技術。這些方法都需要發生數據錯誤之前有一個正確的備份,才能進行恢復?;謴蜁r不取決于錯誤程度,而只取決于備份/恢復策略。這種方法既耗時又使數據庫系統不能提供服務,對于一些用戶偶然地刪除數據這類小錯誤來說顯得有些"大材小用"。那么如何來恢復這種偶然的錯誤操作造成的數據丟失呢?從Oracle 9i開始提供了基于回滾段的閃回查詢(Flashback Query)功能,可用于恢復錯誤的DML操作。在Oracle 10g中對閃回查詢做了較大改進,不再局限于閃回查詢,還可用于恢復錯誤的DDL(Drop)操作、閃回表、閃回數據庫等。

  Oracle 9i的閃回查詢概述

  1、Oracle 9i的閃回查詢功能

  在Oracle 9i之前,假如用戶錯誤操作數據后,除了不完全恢復外,沒有好的解決辦法。Oracle 9i中提供閃回查詢,由一個新的包DBMS_FLASH來實現。用戶使用閃回查詢可以及時取得誤操作DML(Delete、Update、Insert)前某一時間點數據庫的映像視圖,用戶可以利用系統時間或系統改變號(SCN:System Change Number)來指定這個只讀視圖,并可以針對錯誤進行相應的恢復措施。閃回查詢功能完全依靠于自動回滾段治理(AUM),對于Drop等誤操作不能恢復。閃回特性可應用在以下方面:

 ?。?)自我維護過程中的修復:當一些重要的記錄被意外刪除,用戶可以向后移動到一個時間點,查看丟失的行并把它們重新插入現在的表內恢復。

 ?。?)恢復Email和聲音Email:當用戶意外刪除了Email或者聲音信息時,可以通過移回到固定時間點來恢復刪除。

 ?。?)賬號平衡狀況:可以查看以前的歷史數據。如銀行外幣治理中用于記錄特定時間的匯率。在以前,匯率變更被記錄在一個歷史表中,現在就可以通過閃回功能進行查詢。

 ?。?)用于趨勢分析的決策支持系統:決策支持系統和聯機分析應用必須執行一個長時間的事務。使用閃回查詢,這些應用可以對歷史數據執行分析和建模。例如,特定產品如礦泉水隨季節變化需求情況的變化。

  2、回滾段概述

  回滾段用于存放數據修改之前的位置和值,回滾段的頭部包含正在使用的該回滾段事務的信息?;貪L段的作用如下:

 ?。?)事務回滾:當事務修改表中數據的時候,該數據修改前的值(即前影像)會存放在回滾段中,當用戶回滾事務時,Oracle將會利用回滾段中的數據前影像來將修改的數據恢復到原來的值。

 ?。?)事務恢復:當事務正在處理的時候,例程失敗,回滾段的信息保存在重做日志文件中,Oracle將在下次打開數據庫時利用回滾來恢復未提交的數據。

 ?。?)讀一致性:當一個會話正在修改數據時,其它的會話將看不到該會話未提交的修改。而且,當一個語句正在執行時,該語句將看不到從該語句開始執行后的未提交的修改(語句級讀一致性)。

  3、Oracle中Delete和Commit操作的流程分析

 ?。?)刪除(Delete)流程

  ·Oracle讀Block(數據塊)到Buffer Cache(緩沖區)(假如該Block在Buffer中不存在);

  ·在Redo Log Buffer(重做日志緩沖區)中記錄Delete操作的細節;

  ·在相應回滾段段頭的事物表中創建一個Undo(回滾)條目;

  ·把將要刪除的記錄創建前鏡像,存放到Undo Block(回滾塊)中;

  ·在Buffer Cache中的相應數據塊上刪除記錄,并且標記相應的數據塊為Dirty(臟)。

 ?。?)提交(Commit)流程

  ·Oracle產生一個SCN;

  ·在回滾段事物表中標記該事物狀態為Commited;

  ·LGWR(日志讀寫進程) Flush Log Buffer到日志文件;

  ·假如此時數據塊仍然在Buffer Cache中,那么SCN將被記錄到Block Header上,這被稱為快速提交;

  ·假如Dirty Block已經被寫回到磁盤,那么下一個訪問這個Block的進程將會自回滾段中獲取該事物的狀態,確認該事物被提交。然后這個進程獲得提交SCN并寫回到Block Header上,這被稱為延遲塊清除。

  4、Oracle 9i中閃回查詢操作實例

  進行閃回查詢必須設置自動回滾段治理,在init.ora設置參數UNDO_MANAGEMENT=AUTO,參數UNDO_RETENTION=n,決定了能往前閃回的最大時間,值越大就需要越多Undo空間。

  例:Oracle 9i的Flashback Query操作。

 ?。?)創建閃回查詢用戶

SQL> create user flashtest identified by flashtest;
SQL> grant connect, resource to flashtest;
SQL> grant execute on dbms_flashback to flashtest;
SQL> connect flashtest/flashtest;
 ?。?)創建測試表,插入測試記錄

SQL> create table test(id number(3));
SQL> insert into test values (1);
SQL> insert into test values(2);
SQL> commit;
SQL> create table rec_date(date_scn);
  注重:在執行步驟3或者步驟4之前,等待5分鐘。

 ?。?)刪除記錄


SQL> execute dbms_flashback.disable;
SQL> insert into rec_date select sysdate from dual;
SQL> commit;
SQL> delete from test where id=1;
SQL> commit;
  通過以上的操作,我們插入了兩條記錄,并刪除了其中一條記錄。在以下的操作中,我們將通過flashback query找到刪除的記錄

 ?。?)閃回查詢

SQL> DECLARE
Restore_scn date;
BEGIN
Select date_scn into restore_scn from rec_date;
Dbms_flashback.enable_at_time (restore_scn);
END;
SQL> select * from test;
ID
1
2
  可以看出,雖然刪除記錄并提交,但是通過閃回操作,仍能查詢到刪除前的兩條記錄。需要注重Oracle每5分鐘記錄一次SCN,并將SCN和對應時間的映射進行紀錄。假如原來插入的記錄到做閃回操作的時間在5分鐘之內,用基于時間的閃回查詢可能得不到記錄,因為基于時間點的查詢實際上是轉化為最近的一次SCN,然后從這個SCN開始進行恢復。因此,假如需要精確的查詢可以采用基于SCN的閃回查詢,可精確閃回到需要恢復的時間??梢酝ㄟ^DBMS_FLASHBACK.GET_SYSTEM_CHANGE_NUMBER語句獲取SCN。 Oracle 10g的閃回查詢概述

  與Oracle 9i相比Oracle 10g的Flashback有了非常大的改進,從普通的Flashback Query發展到了多種形式,主要表現在如下幾方面新特性:

  1、Flashback 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
  2、Flashback Table

  Oracle Flashback Table特性答應利用Flashback Table語句,確保閃回到表的前一個時間點。與Oracle 9i中的Flashback Query相似,利用回滾段信息來恢復一個或一些表到以前的一個時間點(一個快照)。要注重的是,Flashback Table不等于Flashback Query,Flashback 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表閃回到2005年5月7日下午3點。

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

  Oracle Flashback Drop特性提供一個類似回收站的功能,用來恢復不小心被刪除的表。當刪除表時,Oracle 10g并不馬上釋放被刪除的表所占用的空間,而是將這個被刪除的表進行自動重命名(為了避免同類對象名稱的重復)并放進回收站中。所謂的回收站類似于Windows系統中的回收站,是一個虛擬的容器,用于存放所有被刪除的對象,在回收站中被刪除的對象將占用創建時的同樣的空間。假如這個被刪除的表需要進行恢復,就可利用Flashback Drop功能。

  例:進行一個刪除表后恢復的簡單測試。

 ?。?)顯示回收站信息

SQL>show recyclebin;
  可以看到,回收站中是沒有任何結果的,表示沒有任何表在回收站中。

 ?。?)創建一個表,并刪除,再次顯示回收站信息

SQL>create table test_drop(name varchar2(10));
SQL>drop table test_drop;
SQL>show recyclebin;
ORIGINAL NAME RECYCLEBIN NAME OBJECT TYPE DROP TIME
TEST_DROP BIN$b+XkkO1RS5K10uKo9BfmuA==$0 TABLE 2005-05-07:14:30:47
 ?。?)對被刪除的表進行恢復


SQL>flashback table test_drop to before drop;或
SQL>flashback table "BIN$b+XkkO1RS5K10uKo9BfmuA==$0" to before drop;
 ?。?)治理回收站

  清除回收站中的單個表:purge table test_drop

  清除整個回收站:purge recyclebin

  清除不同的對象回收站:purge user_recyclebin或purge dba_recyclebin

 ?。?)確認刪除一個表

SQL>drop table test_drop purge;
  假如刪除一個表且不放到回收站中不能進行恢復,在drop語句中可以利用purge選項。

  4、Flash Version Query

  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的操作給記錄下來,并具體的查詢出對表進行的任何操作。

SQL>select versions_starttime,versions_endtime, versions_xid,versions_Operation,id
from test versions
between timestamp minvalue and maxvalue
order by versions_starttime;
  在上述查詢中,列 versions_starttime、versions_endtime、versions_xid、versions_operation是偽列,還有一些偽列,如versions_startscn和versions_endscn顯示了該時刻的系統更改號。列versions_xid顯示了更改該行的事務標識符。

  當然,除了分析以上所有的變更之外,可以根據需要指定時間段,如顯示在2005-05-07時間在15:30到16:30之間test表的所有變更。

SQL>select id from test
versions between timestamp to_date(’2005-05-07 15:30:00’,’yyyy-mm-dd hh24:mi:ss’) and to_date(’2005-05-07 16:30:00’,’yyyy-mm-dd hh24:mi:ss’)
  5、Flashback Transaction Query

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

  例:Flashback Transaction Query的操作實例。

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

SQL>delete from test where id=2;
SQL>select xid from v$transaction;
XID
----------------
04001200AE010000
SQL>commit;
  在測試中方便起見,在事務沒有提交的時候,獲得事務的XID為04001F0035000000。實際情況下,不可能去跟蹤每個事務,想要獲得已提交事務的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’);
  注重:這個刪除語句對應的是1個Insert語句,假如想回滾這個事務,執行這個Insert語句即可。

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

  結束語

  通過上面的描述,可以看出閃回功能使用戶恢復偶然的錯誤刪除更加輕易,增強了系統的可用性與讀一致性。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美激情亚洲一区| 久久综合久久美利坚合众国| 国产亚洲精品美女久久久久| 久久综合久久美利坚合众国| 中文字幕av一区| 国产福利成人在线| 日韩免费黄色av| 国产成人免费91av在线| 欧美在线一级va免费观看| 国产不卡av在线| 亚洲自拍偷拍网址| 91久久久久久久久久| 亚洲成年人影院在线| 久久久久久亚洲精品中文字幕| 午夜精品久久久99热福利| 日韩精品在线视频| 亲子乱一区二区三区电影| 午夜美女久久久久爽久久| 亚洲情综合五月天| 精品亚洲男同gayvideo网站| 国产精品丝袜高跟| 91精品国产自产在线老师啪| 亚洲一区二区三区久久| 国产精品美女999| 国产成人精品免高潮在线观看| 国产精品久久久久久久久男| 国产午夜精品一区二区三区| 97视频在线观看免费高清完整版在线观看| 日韩视频在线一区| 亚洲欧洲视频在线| 亚洲精品国精品久久99热一| 国产精品国产三级国产专播精品人| 欧美丰满老妇厨房牲生活| 欧美大片在线看免费观看| 久久视频在线直播| 亚洲一区二区三区香蕉| 亚洲天堂一区二区三区| 欧美一级bbbbb性bbbb喷潮片| 欧美激情亚洲一区| 欧美黄色成人网| 欧美性高潮床叫视频| 国产伊人精品在线| 亚洲欧美日韩国产中文| 成人有码在线视频| 亚洲成人精品在线| 国产精品福利网站| 欧美精品久久久久a| 国产一区深夜福利| 久久精品夜夜夜夜夜久久| 秋霞成人午夜鲁丝一区二区三区| 国产欧美亚洲精品| 国产美女精品视频免费观看| 国产精品免费小视频| 在线视频中文亚洲| 久久久久久久久久国产精品| 青青青国产精品一区二区| 国产97免费视| 在线不卡国产精品| 中文字幕亚洲一区二区三区| 欧美电影免费观看| 日韩成人在线视频网站| 国产亚洲精品一区二555| 欧美日本啪啪无遮挡网站| 日韩精品在线免费观看视频| 91av在线播放| 欧美日韩国产91| 日韩小视频在线| www.色综合| 日韩欧美在线观看视频| 1769国产精品| 亚洲国产成人精品电影| 蜜月aⅴ免费一区二区三区| 成人在线免费观看视视频| 日韩精品在线观看网站| 国产精品成久久久久三级| 国产美女主播一区| 精品无码久久久久久国产| 亚洲欧美成人精品| 尤物九九久久国产精品的特点| 黑人精品xxx一区| 91免费国产网站| 国产免费一区二区三区在线观看| 欧美国产精品日韩| 欧美激情第一页xxx| 中文字幕在线看视频国产欧美| 羞羞色国产精品| 日韩精品视频观看| 欧美老少做受xxxx高潮| 久久久爽爽爽美女图片| 亚洲国产欧美日韩精品| 日本sm极度另类视频| 精品呦交小u女在线| 国产999精品久久久影片官网| 日本成人在线视频网址| 成人av在线网址| 欧美性猛交xxxx黑人| 91在线精品播放| 亚洲码在线观看| 91亚洲人电影| 日韩av在线网页| 91精品视频免费观看| 国产精品自产拍在线观| 色妞色视频一区二区三区四区| 亚洲第一福利视频| 久久人人爽人人爽人人片av高清| 成人啪啪免费看| 成人免费淫片视频软件| 日韩精品在线私人| 538国产精品一区二区免费视频| 欧美性xxxxx| 欧美激情精品久久久| 精品成人国产在线观看男人呻吟| 97激碰免费视频| 中文字幕亚洲欧美日韩2019| 国产欧美精品在线| 欧美午夜精品久久久久久浪潮| 亚洲欧美日韩精品| 欧美精品免费在线观看| 欧美日韩不卡合集视频| 中文字幕9999| 亚洲女成人图区| 国产精品一区=区| 国产最新精品视频| 成人精品视频在线| 欧美激情精品久久久| 亚洲精品狠狠操| 欧美xxxx综合视频| 日韩中文在线中文网三级| 一本大道亚洲视频| 色999日韩欧美国产| 奇门遁甲1982国语版免费观看高清| 97人人模人人爽人人喊中文字| 精品免费在线视频| 69久久夜色精品国产69乱青草| 欧洲成人性视频| 亚洲一区二区福利| 欧美日韩中文字幕在线视频| 欧美一级bbbbb性bbbb喷潮片| 久久久久久亚洲精品不卡| 91精品国产综合久久香蕉| 国产精品中文字幕久久久| 日韩av在线网址| 久久亚洲综合国产精品99麻豆精品福利| 日韩在线观看免费全集电视剧网站| 日本欧美爱爱爱| 91成人精品网站| 九九精品视频在线| 亚洲一区二区三区四区在线播放| 国产精品美女久久| 欧美激情一级二级| 中文字幕亚洲综合久久筱田步美| 亚洲欧美成人网| 性欧美办公室18xxxxhd| 亚洲无线码在线一区观看| 国产mv久久久| 亚洲欧美福利视频| 中文字幕欧美视频在线| 在线看福利67194| 欧美日韩国产页| 日韩高清av在线| 亚洲欧美精品一区| 久久久久久97| 精品亚洲永久免费精品| 亚洲jizzjizz日本少妇|