oracle數(shù)據(jù)庫(kù)閃回[務(wù)實(shí)運(yùn)用]_第1頁(yè)
oracle數(shù)據(jù)庫(kù)閃回[務(wù)實(shí)運(yùn)用]_第2頁(yè)
oracle數(shù)據(jù)庫(kù)閃回[務(wù)實(shí)運(yùn)用]_第3頁(yè)
免費(fèi)預(yù)覽已結(jié)束,剩余6頁(yè)可下載查看

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、前言 人為的錯(cuò)誤是數(shù)據(jù)庫(kù)系統(tǒng)失敗的重要原因之一,根據(jù)調(diào)查約40%的系統(tǒng)問(wèn)題是操作失誤或者用戶錯(cuò)誤引起的,這些人為的錯(cuò)誤又特別難以避免。傳統(tǒng)上當(dāng)發(fā)生數(shù)據(jù)丟失、數(shù)據(jù)錯(cuò)誤問(wèn)題時(shí),解決的主要方法就是數(shù)據(jù)的導(dǎo)入/導(dǎo)出、備份/恢復(fù)技術(shù)。這些方法都需要發(fā)生數(shù)據(jù)錯(cuò)誤之前有一個(gè)正確的備份,才能進(jìn)行恢復(fù)?;謴?fù)時(shí)不取決于錯(cuò)誤程度,而只取決于備份/恢復(fù)策略。這種方法既耗時(shí)又使數(shù)據(jù)庫(kù)系統(tǒng)不能提供服務(wù),對(duì)于一些用戶偶然地刪除數(shù)據(jù)這類小錯(cuò)誤來(lái)說(shuō)顯得有些大材小用。那么如何來(lái)恢復(fù)這種偶然的錯(cuò)誤操作造成的數(shù)據(jù)丟失呢?從Oracle 9i開始提供了基于回滾段的閃回查詢(Flashback Query)功能,可用于恢復(fù)錯(cuò)誤的DML操

2、作。在Oracle 10g中對(duì)閃回查詢做了較大改進(jìn),不再局限于閃回查詢,還可用于恢復(fù)錯(cuò)誤的DDL(Drop)操作、閃回表、閃回?cái)?shù)據(jù)庫(kù)等。 Oracle 9i的閃回查詢概述 1、Oracle 9i的閃回查詢功能 在Oracle 9i之前,如果用戶錯(cuò)誤操作數(shù)據(jù)后,除了不完全恢復(fù)外,沒(méi)有好的解決辦法。Oracle 9i中提供閃回查詢,由一個(gè)新的包DBMS_FLASH來(lái)實(shí)現(xiàn)。用戶使用閃回查詢可以及時(shí)取得誤操作DML(Delete、Update、Insert)前某一時(shí)間點(diǎn)數(shù)據(jù)庫(kù)的映像視圖,用戶可以利用系統(tǒng)時(shí)間或系統(tǒng)改變號(hào)(SCN:System Change Number)來(lái)指定這個(gè)只讀視圖,并可以針對(duì)錯(cuò)

3、誤進(jìn)行相應(yīng)的恢復(fù)措施。閃回查詢功能完全依賴于自動(dòng)回滾段管理(AUM),對(duì)于Drop等誤操作不能恢復(fù)。閃回特性可應(yīng)用在以下方面: (1)自我維護(hù)過(guò)程中的修復(fù):當(dāng)一些重要的記錄被意外刪除,用戶可以向后移動(dòng)到一個(gè)時(shí)間點(diǎn),查看丟失的行并把它們重新插入現(xiàn)在的表內(nèi)恢復(fù)。 (2)恢復(fù)Email和聲音Email:當(dāng)用戶意外刪除了Email或者聲音信息時(shí),可以通過(guò)移回到固定時(shí)間點(diǎn)來(lái)恢復(fù)刪除。 (3)賬號(hào)平衡狀況:可以查看以前的歷史數(shù)據(jù)。如銀行外幣管理中用于記錄特定時(shí)間的匯率。在以前,匯率變更被記錄在一個(gè)歷史表中,現(xiàn)在就可以通過(guò)閃回功能進(jìn)行查詢。 (4)用于趨勢(shì)分析的決策支持系統(tǒng):決策支持系統(tǒng)和聯(lián)機(jī)分析應(yīng)用必須執(zhí)

4、行一個(gè)長(zhǎng)時(shí)間的事務(wù)。使用閃回查詢,這些應(yīng)用可以對(duì)歷史數(shù)據(jù)執(zhí)行分析和建模。例如,特定產(chǎn)品如礦泉水隨季節(jié)變化需求情況的變化。 2、回滾段概述 回滾段用于存放數(shù)據(jù)修改之前的位置和值,回滾段的頭部包含正在使用的該回滾段事務(wù)的信息?;貪L段的作用如下: (1)事務(wù)回滾:當(dāng)事務(wù)修改表中數(shù)據(jù)的時(shí)候,該數(shù)據(jù)修改前的值(即前影像)會(huì)存放在回滾段中,當(dāng)用戶回滾事務(wù)時(shí),Oracle將會(huì)利用回滾段中的數(shù)據(jù)前影像來(lái)將修改的數(shù)據(jù)恢復(fù)到原來(lái)的值。 (2)事務(wù)恢復(fù):當(dāng)事務(wù)正在處理的時(shí)候,例程失敗,回滾段的信息保存在重做日志文件中,Oracle將在下次打開數(shù)據(jù)庫(kù)時(shí)利用回滾來(lái)恢復(fù)未提交的數(shù)據(jù)。 (3)讀一致性:當(dāng)一個(gè)會(huì)話正在修改數(shù)

5、據(jù)時(shí),其它的會(huì)話將看不到該會(huì)話未提交的修改。而且,當(dāng)一個(gè)語(yǔ)句正在執(zhí)行時(shí),該語(yǔ)句將看不到從該語(yǔ)句開始執(zhí)行后的未提交的修改(語(yǔ)句級(jí)讀一致性)。 3、Oracle中Delete和Commit操作的流程分析 (1)刪除(Delete)流程 Oracle讀Block(數(shù)據(jù)塊)到Buffer Cache(緩沖區(qū))(如果該Block在Buffer中不存在); 在Redo Log Buffer(重做日志緩沖區(qū))中記錄Delete操作的細(xì)節(jié); 在相應(yīng)回滾段段頭的事物表中創(chuàng)建一個(gè)Undo(回滾)條目; 把將要?jiǎng)h除的記錄創(chuàng)建前鏡像,存放到Undo Block(回滾塊)中; 在Buffer Cache中的相應(yīng)數(shù)據(jù)塊上

6、刪除記錄,并且標(biāo)記相應(yīng)的數(shù)據(jù)塊為Dirty(臟)。 (2)提交(Commit)流程 Oracle產(chǎn)生一個(gè)SCN; 在回滾段事物表中標(biāo)記該事物狀態(tài)為Commited; LGWR(日志讀寫進(jìn)程) Flush Log Buffer到日志文件; 如果此時(shí)數(shù)據(jù)塊仍然在Buffer Cache中,那么SCN將被記錄到Block Header上,這被稱為快速提交; 如果Dirty Block已經(jīng)被寫回到磁盤,那么下一個(gè)訪問(wèn)這個(gè)Block的進(jìn)程將會(huì)自回滾段中獲取該事物的狀態(tài),確認(rèn)該事物被提交。然后這個(gè)進(jìn)程獲得提交SCN并寫回到Block Header上,這被稱為延遲塊清除。 4、Oracle 9i中閃回查詢操

7、作實(shí)例 進(jìn)行閃回查詢必須設(shè)置自動(dòng)回滾段管理,在init.ora設(shè)置參數(shù)UNDO_MANAGEMENT=AUTO,參數(shù)UNDO_RETENTION=n,決定了能往前閃回的最大時(shí)間,值越大就需要越多Undo空間。 例:Oracle 9i的Flashback Query操作。 (1)創(chuàng)建閃回查詢用戶 SQL create user flashtest identified by flashtest; SQL grant connect, resource to flashtest; SQL grant execute on dbms_flashback to flashtest; SQL conne

8、ct flashtest/flashtest;(2)創(chuàng)建測(cè)試表,插入測(cè)試記錄 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);注意:在執(zhí)行步驟3或者步驟4之前,等待5分鐘。 (3)刪除記錄 SQL execute dbms_flashback.disable; SQL insert into rec_date select sysdate from

9、 dual; SQL commit; SQL delete from test where id=1; SQL commit;通過(guò)以上的操作,我們插入了兩條記錄,并刪除了其中一條記錄。在以下的操作中,我們將通過(guò)flashback query找到刪除的記錄 (4)閃回查詢 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; ID12可以

10、看出,雖然刪除記錄并提交,但是通過(guò)閃回操作,仍能查詢到刪除前的兩條記錄。需要注意Oracle每5分鐘記錄一次SCN,并將SCN和對(duì)應(yīng)時(shí)間的映射進(jìn)行紀(jì)錄。如果原來(lái)插入的記錄到做閃回操作的時(shí)間在5分鐘之內(nèi),用基于時(shí)間的閃回查詢可能得不到記錄,因?yàn)榛跁r(shí)間點(diǎn)的查詢實(shí)際上是轉(zhuǎn)化為最近的一次SCN,然后從這個(gè)SCN開始進(jìn)行恢復(fù)。因此,如果需要精確的查詢可以采用基于SCN的閃回查詢,可精確閃回到需要恢復(fù)的時(shí)間??梢酝ㄟ^(guò)DBMS_FLASHBACK.GET_SYSTEM_CHANGE_NUMBER語(yǔ)句獲取SCN。 Oracle 10g的閃回查詢概述 與Oracle 9i相比Oracle 10g的Flashb

11、ack有了非常大的改進(jìn),從普通的Flashback Query發(fā)展到了多種形式,主要表現(xiàn)在如下幾方面新特性: 1、Flashback Database Oracle Flashback Database特性允許通過(guò)SQL語(yǔ)句Flashback Database語(yǔ)句,讓數(shù)據(jù)庫(kù)前滾到當(dāng)前的前一個(gè)時(shí)間點(diǎn)或者SCN,而不需要做時(shí)間點(diǎn)的恢復(fù)。閃回?cái)?shù)據(jù)庫(kù)可以迅速將數(shù)據(jù)庫(kù)回到誤操作或人為錯(cuò)誤的前一個(gè)時(shí)間點(diǎn),如Word中的撤消操作,可以不利用備份就快速的實(shí)現(xiàn)基于時(shí)間點(diǎn)的恢復(fù)。Oracle通過(guò)創(chuàng)建新的Flashback Logs(閃回日志),記錄數(shù)據(jù)庫(kù)的閃回操作。如果希望能閃回?cái)?shù)據(jù)庫(kù),需要設(shè)置如下參數(shù):DB_R

12、ECOVER_FILE_DEST日志的存放位置,DB_RECOVER_FILE_DEST_SIZE恢復(fù)區(qū)的大小。在創(chuàng)建數(shù)據(jù)庫(kù)的時(shí)候,Oracle將自動(dòng)創(chuàng)建恢復(fù)區(qū),但默認(rèn)是關(guān)閉的,需要執(zhí)行alter database flashback on命令。 例:執(zhí)行Flashback Database命令格式。 SQLflashback database to time to_timestamp(xxx);SQLflashback database to scn xxx2、Flashback Table Oracle Flashback Table特性允許利用Flashback Table語(yǔ)句,確保閃回

13、到表的前一個(gè)時(shí)間點(diǎn)。與Oracle 9i中的Flashback Query相似,利用回滾段信息來(lái)恢復(fù)一個(gè)或一些表到以前的一個(gè)時(shí)間點(diǎn)(一個(gè)快照)。要注意的是,F(xiàn)lashback Table不等于Flashback Query,F(xiàn)lashback Query僅僅是查詢以前的一個(gè)快照點(diǎn)而已,并不改變當(dāng)前表的狀態(tài),而Flashback Table將改變當(dāng)前表及附屬對(duì)象一起回到以前的時(shí)間點(diǎn)。 語(yǔ)法: flashback table tablename to timestamp xxx或flashback table tablename to scn xxx注意:如果需要閃回一個(gè)表,需要以下條件: 需要有

14、flashback any table的系統(tǒng)權(quán)限或者是該表的flashback對(duì)象權(quán)限; 需要有該表的select,insert,delete,alter權(quán)限; 必須保證該表row movement。 例:執(zhí)行將test表閃回到2005年5月7日下午3點(diǎn)。 SQLflashback table test to timestamp to_timestamp(2005-05-07 15:00:00,yyyy-mm-dd hh24:mi:ss);3、Flashback Drop Oracle Flashback Drop特性提供一個(gè)類似回收站的功能,用來(lái)恢復(fù)不小心被刪除的表。當(dāng)刪除表時(shí),Oracle

15、 10g并不立刻釋放被刪除的表所占用的空間,而是將這個(gè)被刪除的表進(jìn)行自動(dòng)重命名(為了避免同類對(duì)象名稱的重復(fù))并放進(jìn)回收站中。所謂的回收站類似于Windows系統(tǒng)中的回收站,是一個(gè)虛擬的容器,用于存放所有被刪除的對(duì)象,在回收站中被刪除的對(duì)象將占用創(chuàng)建時(shí)的同樣的空間。如果這個(gè)被刪除的表需要進(jìn)行恢復(fù),就可利用Flashback Drop功能。 例:進(jìn)行一個(gè)刪除表后恢復(fù)的簡(jiǎn)單測(cè)試。 (1)顯示回收站信息 SQLshow recyclebin;可以看到,回收站中是沒(méi)有任何結(jié)果的,表示沒(méi)有任何表在回收站中。 (2)創(chuàng)建一個(gè)表,并刪除,再次顯示回收站信息 SQLcreate table test_drop(

16、name varchar2(10);SQLdrop table test_drop;SQLshow recyclebin;ORIGINAL NAME RECYCLEBIN NAME OBJECT TYPE DROP TIMETEST_DROP BIN$b+XkkO1RS5K10uKo9BfmuA=$0 TABLE 2005-05-07:14:30:47(3)對(duì)被刪除的表進(jìn)行恢復(fù) SQLflashback table test_drop to before drop;或SQLflashback table BIN$b+XkkO1RS5K10uKo9BfmuA=$0 to before drop;

17、(4)管理回收站 清除回收站中的單個(gè)表:purge table test_drop 清除整個(gè)回收站:purge recyclebin 清除不同的對(duì)象回收站:purge user_recyclebin或purge dba_recyclebin (5)確認(rèn)刪除一個(gè)表 SQLdrop table test_drop purge;如果刪除一個(gè)表且不放到回收站中不能進(jìn)行恢復(fù),在drop語(yǔ)句中可以利用purge選項(xiàng)。 4、Flash Version Query Oracle Flashback Version Query特性,利用保存的回滾信息,可以看到特定的表在時(shí)間段內(nèi)的任何修改,如電影的回放一樣,可以

18、了解表在該期間的任何變化。Flashback version query一樣依賴于AUM,提供了一個(gè)查看行改變的功能,能找到所有已經(jīng)提交了的行的記錄,分析出過(guò)去時(shí)間都執(zhí)行了什么操作。Flashback version query采用VERSIONS BETWEEN語(yǔ)句來(lái)進(jìn)行查詢,常用的方法: VERSIONS_SCN - 系統(tǒng)改變號(hào) VERSIONS_TIMESTAMP - 時(shí)間 例如:在test表中,時(shí)間1插入一條記錄,時(shí)間2刪除了這條記錄,對(duì)于時(shí)間3執(zhí)行select * from test當(dāng)然查詢不到這條記錄,只能看到該表最后的提交記錄。這時(shí)如果利用Flash Table或者是Flash

19、Query,只能看到過(guò)去的某一時(shí)間點(diǎn)的一個(gè)快照,而利用Flashback Version Query,能夠把時(shí)間1、時(shí)間2的操作給記錄下來(lái),并詳細(xì)的查詢出對(duì)表進(jìn)行的任何操作。 SQLselect versions_starttime,versions_endtime, versions_xid,versions_operation,id from test versions between timestamp minvalue and maxvalue order by versions_starttime;在上述查詢中,列 versions_starttime、versions_endtim

20、e、versions_xid、versions_operation是偽列,還有一些偽列,如versions_startscn和versions_endscn顯示了該時(shí)刻的系統(tǒng)更改號(hào)。列versions_xid顯示了更改該行的事務(wù)標(biāo)識(shí)符。 當(dāng)然,除了分析以上所有的變更之外,可以根據(jù)需要指定時(shí)間段,如顯示在2005-05-07時(shí)間在15:30到16:30之間test表的所有變更。 SQLselect id from test versions between timestamp to_date(2005-05-07 15:30:00,yyyy-mm-dd hh24:mi:ss) and to_da

21、te(2005-05-07 16:30:00,yyyy-mm-dd hh24:mi:ss)5、Flashback Transaction Query Oracle Flashback Transaction Query特性確保檢查數(shù)據(jù)庫(kù)的任何改變?cè)谝粋€(gè)事務(wù)級(jí)別,可以利用此功能進(jìn)行診斷問(wèn)題、性能分析和審計(jì)事務(wù)。它其實(shí)是Flashback Version Query查詢的一個(gè)擴(kuò)充,F(xiàn)lashback Version Query說(shuō)明了可以審計(jì)一段時(shí)間內(nèi)表的所有改變,但是也僅僅是能發(fā)現(xiàn)問(wèn)題,對(duì)于錯(cuò)誤的事務(wù),沒(méi)有好的處理辦法。而Flashback Transaction Query提供了從FLASHBACK_TRANSACTION_QUERY視圖中獲得事務(wù)的歷史以及Undo_sql(回滾事務(wù)對(duì)應(yīng)的sql語(yǔ)句),也就是說(shuō)審計(jì)一個(gè)事務(wù)到底做了什么,甚至可以回滾一個(gè)已經(jīng)提交的事務(wù)。 例:Flashback Transaction Query

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論