佳木斯湛栽影视文化发展公司

主頁(yè) > 知識(shí)庫(kù) > Oracle 閃回技術(shù)詳細(xì)介紹及總結(jié)

Oracle 閃回技術(shù)詳細(xì)介紹及總結(jié)

熱門(mén)標(biāo)簽:地方門(mén)戶(hù)網(wǎng)站 服務(wù)外包 鐵路電話(huà)系統(tǒng) AI電銷(xiāo) 呼叫中心市場(chǎng)需求 網(wǎng)站排名優(yōu)化 Linux服務(wù)器 百度競(jìng)價(jià)排名

Oracle閃回技術(shù)詳解,這里整理了4種閃回技術(shù),對(duì)Oracle 閃回技術(shù)做一個(gè)整理總結(jié)。

 概述:

  閃回技術(shù)是Oracle強(qiáng)大數(shù)據(jù)庫(kù)備份恢復(fù)機(jī)制的一部分,在數(shù)據(jù)庫(kù)發(fā)生邏輯錯(cuò)誤的時(shí)候,閃回技術(shù)能提供快速且最小損失的恢復(fù)(多數(shù)閃回功能都能在數(shù)據(jù)庫(kù)聯(lián)機(jī)狀態(tài)下完成)。需要注意的是,閃回技術(shù)旨在快速恢復(fù)邏輯錯(cuò)誤,對(duì)于物理?yè)p壞或是介質(zhì)丟失的錯(cuò)誤,閃回技術(shù)就回天乏術(shù)了,還是得借助于Oracle一些高級(jí)的備份恢復(fù)工具如RAMN去完成(這才是Oracle強(qiáng)大備份恢復(fù)機(jī)制的精髓所在?。?/p>

 撤銷(xiāo)段(UNDO SEGMENT)

  在講閃回技術(shù)前,需要先了解Oracle中一個(gè)邏輯結(jié)構(gòu)--撤銷(xiāo)段。因?yàn)榇蟛糠珠W回技術(shù)都需要依賴(lài)撤銷(xiāo)段中的撤銷(xiāo)數(shù)據(jù)。撤銷(xiāo)數(shù)據(jù)是反轉(zhuǎn)DML語(yǔ)句結(jié)果所需的信息,只要某個(gè)事務(wù)修改了數(shù)據(jù),那么更新前的原有數(shù)據(jù)就會(huì)被寫(xiě)入一個(gè)撤銷(xiāo)段。(事務(wù)回滾也會(huì)用到撤銷(xiāo)段中的數(shù)據(jù))。事務(wù)啟動(dòng)時(shí),Oracle 會(huì)為其分配一個(gè)撤銷(xiāo)段,事務(wù)和撤銷(xiāo)段存在多對(duì)一的關(guān)系,即一個(gè)事務(wù)只能對(duì)應(yīng)一個(gè)撤銷(xiāo)段,多個(gè)事務(wù)可以共享一個(gè)撤銷(xiāo)段(不過(guò)在數(shù)據(jù)庫(kù)正常運(yùn)行時(shí)一般不會(huì)發(fā)生這種情況)。

 閃回技術(shù)

  Oracle提供了四種可供使用的閃回技術(shù)(閃回查詢(xún),閃回刪除,閃回歸檔,閃回?cái)?shù)據(jù)庫(kù)),每種都有不同的底層體系結(jié)構(gòu)支撐,但其實(shí)這四種不同的閃回技術(shù)部分功能是有重疊的,使用時(shí)也需要根據(jù)實(shí)際場(chǎng)景合理選擇最合適的閃回功能。

   閃回查詢(xún)(Flashback Query)

    a.基本閃回查詢(xún)

    功能描述:可以查詢(xún)過(guò)去某個(gè)時(shí)間段的數(shù)據(jù)庫(kù)狀態(tài)。

    工作原理:Oracle 會(huì)提取所需要的撤銷(xiāo)數(shù)據(jù)(前提是撤銷(xiāo)是可用的,即撤銷(xiāo)數(shù)據(jù)還沒(méi)被覆蓋)進(jìn)行回滾,但這種回滾是臨時(shí)的,僅針對(duì)當(dāng)前session可見(jiàn)。

    SQL> select * from  dept as of timestamp to_timestamp('2016-09-10 11:00:00','yyyy-mm-dd hh24:mi:ss');

    b.閃回表

    功能描述:可將某個(gè)表回退到過(guò)去某個(gè)時(shí)間點(diǎn)

    工作原理:同樣,Oracle會(huì)先去查詢(xún)撤銷(xiāo)段,提取過(guò)去某個(gè)時(shí)間點(diǎn)之后的所有變更,構(gòu)造反轉(zhuǎn)這些變更的SQL語(yǔ)句進(jìn)行回退,閃回操作是一個(gè)單獨(dú)的事務(wù),所以若由于撤銷(xiāo)數(shù)據(jù)過(guò)期之類(lèi)的原因?qū)е聼o(wú)法閃回,整個(gè)操作會(huì)回滾,不會(huì)存在不一致的狀態(tài)。

    步驟:

    1.啟用表閃回首先要在表上支持行移動(dòng)(在數(shù)據(jù)字典中設(shè)置標(biāo)識(shí)來(lái)標(biāo)識(shí)該操作可能會(huì)改變行ID,即同一條數(shù)據(jù)閃回成功后主鍵都一樣,但行ID其實(shí)已經(jīng)發(fā)生變化了)   

    SQL> alter table emp enable row movement;

    2.閃回表操作      

    SQL> flashback table dept to timestamp to_timestamp('2016-09-10 11:00:00','yyyy-mm-dd hh24:mi:ss');

    閃回表可能會(huì)失敗,有可能有以下幾種情況:

      違反了數(shù)據(jù)庫(kù)約束,比如用戶(hù)不小心刪除了子表中的數(shù)據(jù),現(xiàn)在想利用閃回表技術(shù)進(jìn)行回退,恰好在這中間,父表中與該數(shù)據(jù)對(duì)應(yīng)的那條記錄也被刪除了,在這種情況下,由于違反了外鍵約束,導(dǎo)致閃回表操作失敗了;

      撤銷(xiāo)數(shù)據(jù)失效,比如用于支撐閃回操作的撤銷(xiāo)數(shù)據(jù)被覆蓋了,這種情況閃回表操作自然會(huì)失?。?/p>

      閃回不能跨越DDL,即在閃回點(diǎn)和當(dāng)前點(diǎn)之間,表結(jié)構(gòu)有過(guò)變更,這種情況閃回操作也會(huì)失敗。

    注意:上述閃回功能都是基于撤銷(xiāo)數(shù)據(jù)的,而撤銷(xiāo)數(shù)據(jù)是會(huì)被重寫(xiě)的(Expired會(huì)被重寫(xiě),Active不會(huì)被重寫(xiě)),所以,在需要使用這幾種閃回功能去恢復(fù)數(shù)據(jù)的時(shí)候(確切地說(shuō),是需要使用基于撤銷(xiāo)數(shù)據(jù)的閃回功能時(shí)),最短時(shí)間發(fā)現(xiàn)錯(cuò)誤,第一時(shí)間執(zhí)行閃回操作,才能最大程度地保證閃回功能的成功。

   閃回刪除(Flashback Drop)

  功能描述:閃回刪除可以輕松將一個(gè)已經(jīng)被Drop的表還原回來(lái)。相應(yīng)的索引,數(shù)據(jù)庫(kù)約束也會(huì)被還原(除了外鍵約束)

  原理描述:Drop命令其實(shí)是Rename命令,早期的Oracle版本(10g之前),閃回刪除意味著從數(shù)據(jù)字典中刪除了該表的所有引用,雖然表中數(shù)據(jù)可能還存在,但已成了孤魂野鬼,沒(méi)法進(jìn)行恢復(fù)了,10g版本之后,Drop命令則僅僅是一個(gè)Rename操作,所以恢復(fù)就很容易了。

    閃回刪除操作執(zhí)行命令很簡(jiǎn)單

    SQL> flashback table emp to before

  如果要還原的表名在當(dāng)前系統(tǒng)中已經(jīng)被占用,也可以在閃回刪除的時(shí)候?qū)Ρ碇孛?/p>

    SQL> flashback table emp to before drop rename to emp_new

  也可以通過(guò)回收站查看當(dāng)前用戶(hù)那些表被刪除了,每個(gè)用戶(hù)都有一個(gè)回收站,這個(gè)回收站是個(gè)邏輯結(jié)構(gòu),它不是一塊獨(dú)立的存儲(chǔ)空間,它存在在當(dāng)前表空間內(nèi),所以如果有別的操作需要空間,比如現(xiàn)在需要?jiǎng)?chuàng)建一張表,沒(méi)有足夠空間可用,回收站中的數(shù)據(jù)就會(huì)被清理,這也是導(dǎo)致閃回刪除失敗的原因。

    SQL> SHOW RECYCLEBIN;

  徹底刪除表,閃回刪除也無(wú)能為力

    SQL> DROP TABLE EMP PURGE;

  清空回收站

    SQL> PURGE RECYCLEBIN;

  注意:閃回刪除只針對(duì)Drop命令,注意區(qū)分truncate操作和drop操作,truncate稱(chēng)為表截?cái)?,?huì)清空表中數(shù)據(jù)(調(diào)節(jié)Oracle高水位線(xiàn)實(shí)現(xiàn)),表結(jié)構(gòu)不受影響,速度很快,弊端是此過(guò)程不會(huì)產(chǎn)生任何撤銷(xiāo)數(shù)據(jù)或是重做日志,如果誤刪,恢復(fù)異常麻煩,要慎重使用。而Drop則會(huì)刪除數(shù)據(jù)+表結(jié)構(gòu),閃回刪除僅針對(duì)Drop操作。

   閃回?cái)?shù)據(jù)歸檔(Flashback Data Archive )

   功能描述:閃回?cái)?shù)據(jù)歸檔可使表具有回退到過(guò)去任何時(shí)間點(diǎn)的能力,前面提到的閃回查詢(xún),閃回表都會(huì)受限于撤銷(xiāo)數(shù)據(jù)是否失效,如果撤銷(xiāo)數(shù)據(jù)被覆蓋重寫(xiě)了,閃回操作自然會(huì)失敗,閃回刪除則受限于表空間是否有足夠可用空間,而閃回?cái)?shù)據(jù)歸檔,則沒(méi)有這些限制。

   創(chuàng)建閃回歸檔

   1.創(chuàng)建一個(gè)用戶(hù)閃回?cái)?shù)據(jù)歸檔的表空間,當(dāng)然,也可以使用已經(jīng)存在的表空間。

    SQL> create tablespace test_tb datafile 'test.dbf' size 20m;

   2.創(chuàng)建一個(gè)保留時(shí)間為2年的閃回歸檔

     SQL> create flashback archive test_fa tablespace test_tb retention 2 year;   

    為scott用戶(hù)下的emp表啟用閃回歸檔

   1.賦予用戶(hù)歸檔的權(quán)限

     SQL> grant flashback archive on test_fa to scott;

    2.連接用戶(hù)

     SQL> conn scott/tiger;

    3.為emp表啟用閃回歸檔

     SQL> alter table emp flashback archive test_fa;

  至此,emp表就擁有了可以查詢(xún)或回退到過(guò)去2年任意時(shí)間點(diǎn)的能力!

   閃回?cái)?shù)據(jù)庫(kù)(Flashback Database)

   功能描述:閃回?cái)?shù)據(jù)庫(kù)可將整個(gè)數(shù)據(jù)庫(kù)回退到過(guò)去某個(gè)時(shí)間點(diǎn),閃回表是某張表的時(shí)空穿梭,閃回?cái)?shù)據(jù)庫(kù)則是整個(gè)數(shù)據(jù)庫(kù)的時(shí)空穿梭。當(dāng)然,閃回點(diǎn)之后的所有工作就丟失了,其實(shí)就相當(dāng)于數(shù)據(jù)庫(kù)的不完整恢復(fù),所以只能以resetlogs模式打開(kāi)數(shù)據(jù)庫(kù)。閃回?cái)?shù)據(jù)庫(kù)會(huì)造成停機(jī)時(shí)間,當(dāng)然相比于傳統(tǒng)備份恢復(fù)機(jī)制,恢復(fù)過(guò)程會(huì)快很多。

   工作原理:閃回?cái)?shù)據(jù)庫(kù)不使用撤銷(xiāo)數(shù)據(jù),使用另外一種機(jī)制來(lái)保留回退所需要的恢復(fù)數(shù)據(jù),當(dāng)啟用閃回?cái)?shù)據(jù)庫(kù),發(fā)生變化的數(shù)據(jù)塊會(huì)不斷從數(shù)據(jù)庫(kù)緩沖區(qū)緩存中復(fù)制到閃回緩沖區(qū),然后,稱(chēng)為恢復(fù)寫(xiě)入器(Recovery Writer)的后臺(tái)進(jìn)程會(huì)將這些數(shù)據(jù)刷新到磁盤(pán)中的閃回日志文件中。閃回的過(guò)程,則是一個(gè) 提取閃回日志-->將塊映像復(fù)制回?cái)?shù)據(jù)文件 的過(guò)程。

   配置閃回?cái)?shù)據(jù)庫(kù)(閃回?cái)?shù)據(jù)庫(kù)要求數(shù)據(jù)庫(kù)為歸檔模式)

    1.指定閃回恢復(fù)區(qū),也就是存放閃回日志的位置,但閃回恢復(fù)區(qū)不僅僅是為了存放閃回日志,Oracle的很多備份恢復(fù)技術(shù)都用到這個(gè)區(qū)域,比如控制文件的自動(dòng)備份等都會(huì)存放到此區(qū)域。

   SQL> alter system set db_recovery_file_dest ='/flash_recovery_area';

     2.指定恢復(fù)區(qū)大小

   SQL> alter system set db_recovery_file_dest_size=4G;

    3.指定閃回日志保留時(shí)間為2小時(shí),即通過(guò)閃回操作,可以將數(shù)據(jù)庫(kù)回退到前兩小時(shí)內(nèi)的任意時(shí)間點(diǎn)

   SQL> alter system set db_flashback_retention_target=120;

    4.有序關(guān)閉數(shù)據(jù)庫(kù)--mount模式下啟用閃回?cái)?shù)據(jù)庫(kù)--打開(kāi)數(shù)據(jù)庫(kù)  

 SQL> shutdown immediate;

   SQL> startup mount;

   SQL> alter database flashback on;

   SQL> alter database open;

  至此,閃回?cái)?shù)據(jù)庫(kù)配置完成!

     使用閃回?cái)?shù)據(jù)庫(kù)功能  

 SQL> shutdown immediate;

   SQL> startup mount;

   SQL> flashback database to timestamp sysdate-60/1440;

   SQL> alter database open resetlogs;


 總結(jié)

  本文列舉了四類(lèi)閃回技術(shù),其中,閃回查詢(xún),包括基本閃回查詢(xún),閃回表等技術(shù)都依賴(lài)于撤銷(xiāo)數(shù)據(jù)(還有一類(lèi)閃回技術(shù)為閃回事務(wù),可以對(duì)指定事務(wù)進(jìn)行閃回操作,原理類(lèi)似,借助于撤銷(xiāo)數(shù)據(jù)來(lái)構(gòu)建用于反轉(zhuǎn)事務(wù)的SQL語(yǔ)句),依賴(lài)于撤銷(xiāo)數(shù)據(jù),則自然受限于撤銷(xiāo)數(shù)據(jù)的保留時(shí)間,可能會(huì)由于撤銷(xiāo)數(shù)據(jù)被覆寫(xiě)而導(dǎo)致閃回失敗。閃回刪除,則是由于10g版本后對(duì)表的刪除僅表現(xiàn)為一個(gè)rename操作,引入回收站的概念,但此回收站僅是當(dāng)前表空間的一塊邏輯劃分,所以會(huì)受限于當(dāng)前表空間的可用空間的限制;閃回歸檔可提供查詢(xún)或回退到過(guò)去任意時(shí)間點(diǎn)的功能,閃回?cái)?shù)據(jù)庫(kù)則是一中更極端的數(shù)據(jù)庫(kù)恢復(fù)功能,相當(dāng)于不完整恢復(fù),依賴(lài)于閃回日志。

感謝閱讀,希望能幫助到大家,謝謝大家對(duì)本站的支持!

您可能感興趣的文章:
  • oracle 9i使用閃回查詢(xún)恢復(fù)數(shù)據(jù)庫(kù)誤刪問(wèn)題
  • oracle 數(shù)據(jù)庫(kù)閃回相關(guān)語(yǔ)句介紹
  • Oracle 查看表空間的大小及使用情況sql語(yǔ)句
  • ORACLE 10g 安裝教程[圖文]
  • Oracle數(shù)據(jù)庫(kù)下載及安裝圖文操作步驟
  • Linux系統(tǒng)(X64)安裝Oracle11g完整安裝圖文教程另附基本操作
  • oracle常用sql語(yǔ)句
  • ORACLE 如何查詢(xún)被鎖定表及如何解鎖釋放session
  • oracle sqlplus 常用命令大全
  • Oracle新建用戶(hù)、角色,授權(quán),建表空間的sql語(yǔ)句
  • ORACLE數(shù)據(jù)庫(kù)查看執(zhí)行計(jì)劃的方法
  • oracle 查詢(xún)表名以及表的列名

標(biāo)簽:崇左 湖南 黃山 蘭州 湘潭 衡水 銅川 仙桃

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《Oracle 閃回技術(shù)詳細(xì)介紹及總結(jié)》,本文關(guān)鍵詞  ;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 收縮
    • 微信客服
    • 微信二維碼
    • 電話(huà)咨詢(xún)

    • 400-1100-266
    汽车| 深圳市| 丽水市| 吴江市| 新和县| 凉山| 盐池县| 读书| 德格县| 宣汉县| 叙永县| 长泰县| 台中县| 上犹县| 巴青县| 怀柔区| 金门县| 新邵县| 疏勒县| 瓦房店市| 南城县| 钦州市| 大兴区| 阿尔山市| 青田县| 九江县| 原平市| 偃师市| 常熟市| 阿勒泰市| 盐城市| 抚顺市| 安新县| 红河县| 金山区| 临高县| 大城县| 二连浩特市| 泽普县| 鄂托克前旗| 会泽县|