最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Oracle數(shù)據(jù)庫數(shù)據(jù)丟失恢復(fù)的幾種方法總結(jié)

 更新時間:2016年12月08日 09:51:17   投稿:daisy  
相信大家無論是開發(fā)、測試還是運維過程中,都可能會因為誤操作、連錯數(shù)據(jù)庫、用錯用戶、語句條件有誤等原因,導(dǎo)致錯誤刪除、錯誤更新等問題。當(dāng)你捶胸頓足或嚇得腿軟時,肯定希望有辦法來恢復(fù)這些數(shù)據(jù)。oracle就提供了一些強大的方法或機制,可以幫到有需要的你。

根據(jù)oracle數(shù)據(jù)庫的特點和提供的工具,主要方法有以下幾種方法:

  1.      利用邏輯備份使用import工具丟失數(shù)據(jù)的表
  2.      利用物理備份來通過還原數(shù)據(jù)文件并進行不完全恢復(fù)
  3.      利用dbms_logmnr包從redo log文件中恢復(fù)
  4.      利用flashback特性恢復(fù)數(shù)據(jù)

前提

為了方便使用方法的介紹,上述恢復(fù)方法都將基于以下場景進行:系統(tǒng)管理員在前一天晚上11點用export對數(shù)據(jù)庫做了全庫邏輯備份,然后對所有數(shù)據(jù)文件進行了熱備份。第二天上午10點,系統(tǒng)管理員在修改表TFUNDASSET的數(shù)據(jù)時,由于修改語句的條件寫錯了,導(dǎo)致一批記錄(幾千條)的ztm字段被修改成了錯誤的值,而且已經(jīng)提交。這個表是資產(chǎn)表,相對而言數(shù)據(jù)變化不頻繁。

一、利用邏輯備份使用import工具恢復(fù)丟失的數(shù)據(jù)

export/import是oracle提供的用于對數(shù)據(jù)庫進行邏輯備份的工具。該工具適用于備份那些數(shù)據(jù)量不大、業(yè)務(wù)量不多的數(shù)據(jù)庫系統(tǒng)。因為如果在前一天晚上11點用export做了邏輯備份,那么當(dāng)今天上午10點數(shù)據(jù)庫意外崩潰時,從備份起到數(shù)據(jù)庫崩潰的這段時間里的數(shù)據(jù)修改操作(包括DDL和DML)都會丟失。如果丟失數(shù)據(jù)內(nèi)的表上的數(shù)據(jù)是相對比較穩(wěn)定,也就是說該表上基本沒有DML操作,例如標(biāo)準(zhǔn)代碼表、分區(qū)表里的歷史數(shù)據(jù),那么采用import來導(dǎo)入該表可以比較完整的恢復(fù)數(shù)據(jù)。如果該表是經(jīng)常變化的業(yè)務(wù)表,那么這些丟失的數(shù)據(jù)只能根據(jù)業(yè)務(wù)情況從紙質(zhì)記錄恢復(fù),或者其他途徑恢復(fù)。

▲示例如下:這個表是一個資產(chǎn)表。相對來說,今天系統(tǒng)運行中修改的數(shù)據(jù)較少,丟失的數(shù)據(jù)量可以承受或者可以從別的途徑恢復(fù)。那就可以用import來恢復(fù)。

方法一:

1、把這個表的數(shù)據(jù)備份到另一個表:

2、刪除該表的記錄:

3、執(zhí)行下面的命令:

這個命令中在關(guān)鍵字tables中指定需要導(dǎo)入的表名字,ignore=y表示忽略表已經(jīng)存在的錯誤。

4、導(dǎo)入結(jié)束后,檢查表中的記錄,并用適當(dāng)?shù)姆椒ɑ謴?fù)當(dāng)天的修改。

方法二:

1、 把需要恢復(fù)的表導(dǎo)入到另一個用戶下面:

2、檢查數(shù)據(jù)以后,把原表記錄刪除:

3、然后從另一用戶表中插入回去:

4、 數(shù)據(jù)量比較大時可以采用如下方法:

二、利用物理備份來通過還原數(shù)據(jù)文件并進行不完全恢復(fù)

如果數(shù)據(jù)庫運行在歸檔模式下,那么可以通過使用以前的數(shù)據(jù)文件備份進行還原,然后利用歸檔日志進行前滾,直到回滾到錯誤操作的時間點前,然后重置日志文件打開數(shù)據(jù)庫。

可以通過下列方法確認(rèn)是否是運行在歸檔模式:

如果是如上所示,那么就是運行在歸檔模式了。

▲假定在前一天晚上11點做了全庫物理備份,那么可以考慮如下恢復(fù):

1、關(guān)閉數(shù)據(jù)庫:

由于數(shù)據(jù)庫的不完全恢復(fù)必須在一個關(guān)閉的數(shù)據(jù)庫上實施,利用一個舊的數(shù)據(jù)庫的備份還原,然后用日志根據(jù)需要逐步前滾,而不能還原一個新的備份,再回退到某個時間點。

通知各客戶端數(shù)據(jù)庫將關(guān)閉,然后發(fā)出:

數(shù)據(jù)庫已經(jīng)關(guān)閉。

已經(jīng)卸載數(shù)據(jù)庫。

ORACLE 例程已經(jīng)關(guān)閉。

2、確定錯誤操作的時間:

可以根據(jù)操作員的估計來確定不完全恢復(fù)需要前滾停止的時間,也可以利用LogMiner來分析日志文件(這個工具將在后面介紹),找出錯誤操作的準(zhǔn)確時間。

3、還原數(shù)據(jù)文件:

先對當(dāng)前的數(shù)據(jù)庫文件進行備份,然后再用以前的最近一次備份覆蓋現(xiàn)有數(shù)據(jù)文件。注意:不覆蓋現(xiàn)有的控制文件。

4、基于時間點恢復(fù),啟動數(shù)據(jù)庫到裝配狀態(tài):

這樣數(shù)據(jù)庫就恢復(fù)到了2015年10月20日的9點58分零秒。

然后再利用業(yè)務(wù)資料補充這段時間內(nèi)的數(shù)據(jù)。

三、利用dbms_logmnr包從log文件中恢復(fù)

這個包是由Oracle提供,與dbms_logmnr_d包配合使用可以方便地分析聯(lián)機日志文件和歸檔日志文件,從這些日志文件中提取出所有對數(shù)據(jù)庫的更改操作。

在使用這個包之前,需要先做一些設(shè)置和修改:

1、打開initorcl.ora,修改初始化參數(shù)utl_file_dir,設(shè)置dbms_logmnr_d包將要使用的數(shù)據(jù)字典文件的放置目錄。

然后重啟數(shù)據(jù)庫使參數(shù)生效。

2、以sys用戶連接到數(shù)據(jù)庫執(zhí)行dbmslmd.sql腳本重建dbms_logmnr_d這個包。

應(yīng)用Logminer分析重做日志文件的操作主要有以下步驟:

      ● 使用dbms_logmnr_d里的存儲過程build創(chuàng)建一個外部數(shù)據(jù)字典文件;

      ● 使用dbms_logmnr里的存儲過程add_logfile添加要分析的日志文件;

      ● 使用dbms_logmnr里的存儲過程start_logmnr啟動分析;

      ● 查詢與dbms_logmnr相關(guān)的幾個視圖來獲取日志文件內(nèi)容;

      ● 使用dbms_logmnr里的存儲過程end_logmnr結(jié)束分析。

▲下面詳細(xì)講述使用的過程

1、使用dbms_logmnr_d里的存儲過程build創(chuàng)建一個外部數(shù)據(jù)字典文件:

2、使用dbms_logmnr里的存儲過程add_logfile添加要分析的日志文件到待分析文件列表:

如果沒有運行在歸檔模式,那么由于重做日志文件的循環(huán)使用可能導(dǎo)致日志文件被覆蓋而無法獲取到所要尋找的恢復(fù)條目。如果運行在歸檔模式,則可以通過查看$ORACLE_HOME\admin\orcl\bdump目錄下的alert_orcl.log里日志文件歸檔的時間和錯誤操作的時間來確定加入哪些歸檔日志文件到待分析的文件列表中去。

注意:執(zhí)行以上過程時logfilename參數(shù)需要寫日志文件的全路徑,否則會報錯。重復(fù)以上操作直到把所有需要分析的文件都加到列表中去。這樣就可以啟動進行分析。

3、使用dbms_logmnr里的存儲過程start_logmnr啟動分析;

這樣就可以通過下面的查詢來獲取日志文件的內(nèi)容了。

4、查詢與dbms_logmnr相關(guān)的幾個視圖來獲取日志文件內(nèi)容;

這樣就可以找出要恢復(fù)所需的語句。注意:v$logmnr_contents只對執(zhí)行dbms_logmnr.start_logmnr的會話有效,如果通過其他會話或者使用dbms_logmnr.end_logmnr終止了分析,都將不能訪問v$logmnr_contents的數(shù)據(jù)。如果要使其他會話也能獲取到這些數(shù)據(jù),可以通過另外建表來實現(xiàn),如:

create table undo_sql as select * from v$logmnr_contents。

再對undo_sql進行授權(quán),其他用戶就可以訪問v$logmnr_contents的數(shù)據(jù)了。

5、使用dbms_logmnr里的存儲過程end_logmnr結(jié)束分析。

使用完成以后用下面的命令來結(jié)束分析活動:exec dbms_logmnr.end_logmnr;

這樣就釋放了分配給logminer的資源(內(nèi)存和數(shù)據(jù)結(jié)構(gòu))。

從上面的過程可知,如果是更新的數(shù)據(jù)量比較大,而日志文件比較小,就可能會導(dǎo)致日志文件的切換。如果沒有及時去挖掘日志文件(沒有運行在歸檔模式),那么可能會由于日志文件的循環(huán)使用而導(dǎo)致數(shù)據(jù)不可恢復(fù)。如果運行在歸檔模式,也可能由于需要分析的日志文件比較多而時間較長。

四、利用flashback新特性恢復(fù)數(shù)據(jù)

Oracle9i 開始提供了閃回查詢(Flashback Query)功能,對于誤刪除或者誤更新并且已經(jīng)commit了的情況提供了簡便快捷的恢復(fù)方法;而在Oracle 提供閃回查詢之前,碰到這種情況只能通過備份來進行基于時間點的恢復(fù)或者使用logmnr挖掘日志來恢復(fù),無疑這比閃回查詢要麻煩而且費時。

使用這個Flashback Query特性的前提條件:

1. 數(shù)據(jù)庫必須處于Automatic Undo Management 狀態(tài)。

2. 最大可以閃回查詢的時間段由UNDO_RETENTION 初始化參數(shù)(單位為秒)指定

可以通過ALTER SYSTEM SET UNDO_RETENTION = <seconds>;來動態(tài)修改參數(shù)值。

▲如何使用Flashback Query來恢復(fù)數(shù)據(jù)呢?

1. 通過SQL

使用SELECT 語句的AS OF 來進行閃回查詢,語法如下:

使用AS OF 關(guān)鍵字來對表,視圖或者物化視圖進行Flashback Query,如果指定了SCN,那么expr 部分必須是一個數(shù)字,如果指定了TIMESTAMP,那么expr 必須是一個timestamp類型的值。查詢結(jié)果將返回在指定的SCN 或者時間點上的數(shù)據(jù)。

下面我們使用scott 方案來作一個實驗。

如果想在update 的子查詢部分使用AS OF,那么該查詢只能返回一條記錄,否則將會報錯。

可以通過添加一個臨時表作為中轉(zhuǎn),然后再作更新,如下:

2.通過DBMS_FLASHBACK包來恢復(fù)

DBMS_FLASHBACK 包提供了以下幾個函數(shù):

ENABLE_AT_TIME:設(shè)置當(dāng)前SESSION 的閃回查詢時間

ENABLE_AT_SYSTEM_CHANGE_NUMBER:設(shè)置當(dāng)前SESSION 的閃回查詢SCN

GET_SYSTEM_CHANGE_NUMBER:取得當(dāng)前數(shù)據(jù)庫的SCN

DISABLE:關(guān)閉當(dāng)前SESSION 的閃回查詢

當(dāng)將一個SESSION 設(shè)置為閃回查詢模式之后,后續(xù)的查詢都會基于那個時間點或者SCN 的數(shù)據(jù)庫狀態(tài),如果SESSION 結(jié)束,那么即使沒有明確指定DISABLE,閃回查詢也會自動失效。

當(dāng)SESSION 運行在閃回查詢狀態(tài)時,不允許進行任何DML 和DDL 操作。如果要用DML操作來進行數(shù)據(jù)恢復(fù)就必須使用PL/SQL 游標(biāo)。

▲示例:

通過上面的例子可以看出,只要這個修改的時間不早于sysdate- (UNDO_RETENTION指定的秒數(shù)),就可通過這種方式來恢復(fù)數(shù)據(jù)。

對于問題中的批量數(shù)據(jù),可以寫個過程來完成獲取到更改前的數(shù)據(jù):

然后再用這個臨時表里的數(shù)據(jù)來更新TFUNDASSET就可以了。

五、總結(jié)

比較以上幾種恢復(fù)數(shù)據(jù)的方法的使用過程,我們可以看出:

      ● exp/imp只適合于數(shù)據(jù)變化不大的表的數(shù)據(jù)丟失的情況,即使用這種方法處理后也需要從業(yè)務(wù)辦理資料中修正數(shù)據(jù),否則導(dǎo)致數(shù)據(jù)丟失;

      ● 采用基于時間點的不完全恢復(fù)可以恢復(fù)丟失的數(shù)據(jù),但是需要關(guān)關(guān)閉數(shù)據(jù)庫,減少系統(tǒng)可用時間,而且也會丟失恢復(fù)時間點以后的數(shù)據(jù);

      ● 使用LogMiner可以較好的恢復(fù)數(shù)據(jù),但是要求數(shù)據(jù)庫盡可能運行在歸檔模式,否則也可能導(dǎo)致數(shù)據(jù)丟失。好處是不用關(guān)閉系統(tǒng),能夠從日志文件中得到所有的數(shù)據(jù)。

      ● 使用Flashback最方便和簡潔,可以直接得到修改前的數(shù)據(jù),但是需要依賴系統(tǒng)設(shè)置,并且需要占用大量的回滾表空間。

因此選擇什么樣的方法來恢復(fù)數(shù)據(jù),取決于你的系統(tǒng)環(huán)境和具體情況,不能生搬硬套。采用正確的方法才能最大程度的減少數(shù)據(jù)的丟失。

當(dāng)然,最好是不需要用到這些恢復(fù)的辦法。前提是,你必須做好以下的工作:

1、 為不同環(huán)境創(chuàng)建不同的數(shù)據(jù)庫用戶、不同密碼(如果不能用戶不同,一定要密碼不同);

2、 將owner和應(yīng)用用戶分開,并做適度授權(quán);

3、 在做DML前,先用同樣的條件做查詢,看根據(jù)結(jié)果集是否符合預(yù)期。

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作能帶來一定的幫助,如果有疑問大家可以留言交流。

相關(guān)文章

  • SQL?Developer遷移第三方數(shù)據(jù)庫單表到Oracle的全過程

    SQL?Developer遷移第三方數(shù)據(jù)庫單表到Oracle的全過程

    這篇文章主要介紹了SQL?Developer遷移第三方數(shù)據(jù)庫單表到Oracle的全過程,文章通過圖文結(jié)合的方式給大家講解的非常詳細(xì),具有一定的參考價值,需要的朋友可以參考下
    2024-06-06
  • oracle遠(yuǎn)程連接服務(wù)器數(shù)據(jù)庫圖文教程

    oracle遠(yuǎn)程連接服務(wù)器數(shù)據(jù)庫圖文教程

    這篇文章主要為大家詳細(xì)介紹了oracle遠(yuǎn)程連接服務(wù)器數(shù)據(jù)庫的圖文教程,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-09-09
  • Oracle創(chuàng)建新undo表空間最佳實踐(包含段檢查)

    Oracle創(chuàng)建新undo表空間最佳實踐(包含段檢查)

    這篇文章主要介紹了Oracle創(chuàng)建新undo表空間最佳實踐(包含段檢查),非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-04-04
  • oracle數(shù)據(jù)庫查看鎖表的sql語句整理

    oracle數(shù)據(jù)庫查看鎖表的sql語句整理

    Oracle數(shù)據(jù)庫操作中,我們有時會用到鎖表查詢以及解鎖和kill進程等操作,這篇文章主要給大家介紹了關(guān)于oracle數(shù)據(jù)庫查看鎖表的sql語句的相關(guān)資料,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-10-10
  • Oracle數(shù)據(jù)庫實現(xiàn)遠(yuǎn)程訪問方法

    Oracle數(shù)據(jù)庫實現(xiàn)遠(yuǎn)程訪問方法

    Oracle數(shù)據(jù)庫的遠(yuǎn)程連接可以通過多種方式來實現(xiàn),下面這篇文章主要給大家介紹了關(guān)于Oracle數(shù)據(jù)庫實現(xiàn)遠(yuǎn)程訪問的相關(guān)資料,文中通過實例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-06-06
  • Oracle數(shù)據(jù)庫表被鎖如何查詢和解鎖詳解

    Oracle數(shù)據(jù)庫表被鎖如何查詢和解鎖詳解

    作為一個IT技術(shù)人員,可能經(jīng)常遇到在使用Oracle數(shù)據(jù)時,由于操作不當(dāng)導(dǎo)致數(shù)據(jù)庫鎖表,從而影響項目正常使用,下面這篇文章主要給大家介紹了關(guān)于Oracle數(shù)據(jù)庫表被鎖如何查詢和解鎖的相關(guān)資料,需要的朋友可以參考下
    2023-03-03
  • Oracle中返回結(jié)果集的存儲過程分享

    Oracle中返回結(jié)果集的存儲過程分享

    Oracle不像SQLServer那樣在存儲過程中用Select就可以返回結(jié)果集,而是通過Out型的參數(shù)進行結(jié)果集返回的
    2012-07-07
  • oracle與mysql的視頻教程下載地址分享

    oracle與mysql的視頻教程下載地址分享

    這是某培訓(xùn)機構(gòu)的oracle跟mysql視頻教程,現(xiàn)在分享給大家,想要學(xué)習(xí)mysql和oracle的同學(xué)不要錯過哦
    2013-03-03
  • Oracle數(shù)據(jù)庫分析函數(shù)用法

    Oracle數(shù)據(jù)庫分析函數(shù)用法

    大家好,本篇文章主要講的是Oracle數(shù)據(jù)庫分析函數(shù)用法,感興趣的同學(xué)趕快來看一看吧,對你有幫助的話記得收藏一下,方便下次瀏覽
    2021-12-12
  • Oracle存儲過程的幾種調(diào)用方式圖文詳解

    Oracle存儲過程的幾種調(diào)用方式圖文詳解

    存儲過程是一個預(yù)編譯的SQL語句,優(yōu)點是允許模塊化的設(shè)計,就是說只需創(chuàng)建一次,以后在程序中就可以調(diào)用多次,下面這篇文章主要給大家介紹了關(guān)于Oracle存儲過程的幾種調(diào)用方式,需要的朋友可以參考下
    2023-04-04

最新評論

科技| 通辽市| 沙河市| 红河县| 阿鲁科尔沁旗| 库车县| 平谷区| 抚顺县| 临汾市| 五原县| 安康市| 临沧市| 蒲江县| 安徽省| 延寿县| 大城县| 旬邑县| 平罗县| 太原市| 乌鲁木齐县| 青州市| 平和县| 九台市| 清远市| 孙吴县| 昌吉市| 当阳市| 论坛| 潮州市| 荥阳市| 依安县| 上林县| 乐东| 大邑县| 泽州县| 马山县| 措美县| 滨州市| 凌海市| 正阳县| 文山县|