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

Oracle數(shù)據(jù)庫無備份強制恢復(fù)的實戰(zhàn)指南

 更新時間:2026年05月15日 08:43:05   作者:許彰午  
這不是教程,這是一次真實恢復(fù)過程記錄,海關(guān)項目的Oracle數(shù)據(jù)庫,沒有備份,控制文件損壞,日志文件損壞,數(shù)據(jù)文件有損壞,最終雖然沒有完全恢復(fù)成功,但過程中積累的SCN機制、oradebug修改SCN、隱藏參數(shù)等知識,值得記錄,需要的朋友可以參考下

背景

某項目Oracle數(shù)據(jù)庫掛了。現(xiàn)象:

  • 登錄不了(重置了密碼,orapwd命令)
  • 啟動提示控制文件不一致(復(fù)制了備份的控制文件,但這步有問題)
  • 控制文件損壞(發(fā)現(xiàn)有數(shù)據(jù)文件也有損壞,去除后能夠建立控制文件)
  • 清理了日志文件
  • 恢復(fù)了數(shù)據(jù)文件
  • 修改了_allow開頭的隱藏參數(shù)
  • 打開數(shù)據(jù)報ORA-00600 [2662]錯誤

沒有RMAN備份,沒有expdp導(dǎo)出。只能硬著頭皮強制恢復(fù)。

一、強制打開數(shù)據(jù)庫的關(guān)鍵步驟

如果實在要強制打開數(shù)據(jù)庫,參考如下關(guān)鍵點,再有其他錯誤就要一個一個看了,很麻煩。

步驟1:允許resetlogs時有臟數(shù)據(jù)

_alter system set "_allow_resetlogs_corruption"=true scope=spfile;

這個參數(shù)允許在open resetlogs時數(shù)據(jù)文件中有不一致數(shù)據(jù)。Oracle官方不建議使用,但沒備份的時候,這就是最后一根稻草。

步驟2:處理ORA-01555錯誤

如果出現(xiàn)ORA-01555錯誤導(dǎo)致數(shù)據(jù)庫無法open,設(shè)置:

_CORRUPTED_ROLLBACK_SEGMENTS
undo_management = 'MANUAL'

把回滾段標(biāo)記為損壞,用MANUAL模式繞過自動undo管理。

步驟3:處理ORA-600 [2662]——SCN不一致

ORA-600 [2662]是SCN不一致的典型錯誤。參數(shù)含義:

參數(shù)含義
Arg [a]Current SCN WRAP:當(dāng)前(控制文件)的SCN WRAP
Arg [b]Current SCN BASE:當(dāng)前(控制文件)的SCN BASE
Arg [c]dependent SCN WRAP:目標(biāo)SCN WRAP
Arg [d]dependent SCN BASE:目標(biāo)SCN BASE

SCN的計算公式:

SCN = (SCN_WRAP × 4294967296) + SCN_BASE

其中4294967296 = 2^32。SCN_WRAP是高位,SCN_BASE是低位。當(dāng)SCN_BASE足夠大時,SCN_WRAP就會加1。

處理方法:先通過多次重啟open的方法來觀察Current SCN BASE增長速度。如果Current SCN BASE和dependent SCN BASE相差不遠(yuǎn),重啟幾次數(shù)據(jù)庫就可能打開。

步驟4:用10015事件加速SCN增長

如果差距較遠(yuǎn),mount之后執(zhí)行:

alter session set events '10015 trace name adjust_scn level 10';

然后嘗試open。這個事件會加速Current SCN BASE的增長。

步驟5:啟用錯誤模擬讓10015事件生效

如果加入10015事件adjust_scn之后,Current SCN BASE增長還是很慢,某些版本必須加入:

_allow_error_simulation = TRUE

才能使10015事件生效。

步驟6:用_smu_debug_mode加速SCN WRAP增長

如果Current SCN BASE增長還是很慢:

_smu_debug_mode = 268435456

這個參數(shù)直接增長SCN WRAP,需要和_allow_error_simulation=true同時使用。

步驟7:用_minimum_giga_scn大步推進(jìn)

_minimum_giga_scn = n

把SCN向前推進(jìn)nG。只有Current SCN和dependent SCN相差nG時這個參數(shù)才起作用,否則無效。

步驟8:處理ORA-600[6006]和ORA-600[4137]

如果SCN號一致以后報ORA-600[6006]或ORA-600[4137],需要添加:

*.event="10513 trace name context forever,level 2"
*.db_block_checking=false

步驟9:open resetlogs后的建議

對于open resetlogs打開以后的數(shù)據(jù)庫,最好將業(yè)務(wù)用戶導(dǎo)出以后重建數(shù)據(jù)庫,以防止數(shù)據(jù)庫出現(xiàn)不可預(yù)知的錯誤。Oracle官方建議是open resetlogs之后需要重建數(shù)據(jù)庫。

二、Oracle 11.2.0.4的SCN改法——oradebug實戰(zhàn)

上面的參數(shù)方法在某些版本不夠直接。Oracle 11.2.0.4可以用oradebug直接修改SGA中的SCN值。

第一步:計算目標(biāo)SCN的十六進(jìn)制值

SQL> select to_char(2723797,'XXXXXXXXXXXXXXXX') from dual;

TO_CHAR(2723797,'
-----------------
           298FD5

2723797的十六進(jìn)制是0x298FD5。

第二步:設(shè)置oradebug跟蹤自己的進(jìn)程

SQL> oradebug setmypid
Statement processed.

第三步:查看當(dāng)前SGA中的SCN值

SQL> oradebug dumpvar sga kcsgscn_
kcslf kcsgscn_ [06001AE70, 06001AEA0) = 00000000 00000000 00000000 ...

當(dāng)前SCN是0,數(shù)據(jù)庫處于mount狀態(tài)。

第四步:用oradebug poke直接修改SCN

SQL> oradebug poke 0x06001AE70 8 0x0000000000298FD5
BEFORE: [06001AE70, 06001AE78) = 00000000 00000000
AFTER:  [06001AE70, 06001AE78) = 00298FD5 00000000

poke命令的參數(shù):地址、長度、新值。8表示8字節(jié)。

第五步:驗證修改后的SCN

SQL> oradebug dumpvar sga kcsgscn_
kcslf kcsgscn_ [06001AE70, 06001AEA0) = 00298FD5 00000000 ...

SCN已經(jīng)從0變成了0x298FD5(即2723797)。

第六步:打開數(shù)據(jù)庫

SQL> alter database open;

Database altered.

第七步:驗證checkpoint SCN

SQL> select checkpoint_change#, checkpoint_change#/1024/1024/1024 SCN_WARP
     from v$database;

CHECKPOINT_CHANGE#   SCN_WARP
------------------ ----------
           2723798 .002536735

數(shù)據(jù)庫成功打開,checkpoint SCN已經(jīng)更新。

參數(shù)速查表

參數(shù)/事件作用備注
_allow_resetlogs_corruption=TRUE允許resetlogs時有臟數(shù)據(jù)強制打開的最后手段
_allow_terminal_recovery_corruption=TRUE允許終端恢復(fù)時有損壞配合上面一起用
_CORRUPTED_ROLLBACK_SEGMENTS標(biāo)記損壞的回滾段處理ORA-01555
undo_management=MANUAL手動undo管理繞過損壞的undo表空間
event 10015 adjust_scn加速SCN BASE增長需要配合_allow_error_simulation
_allow_error_simulation=TRUE允許內(nèi)部錯誤模擬讓10015事件生效
_smu_debug_mode=268435456直接增長SCN WRAP配合_allow_error_simulation
_minimum_giga_scn=nSCN向前推進(jìn)nG差距大時使用
event 10513 level 2禁止事務(wù)恢復(fù)處理ORA-600[6006]
oradebug poke直接修改SGA中的SCN11.2.0.4可用

反思

這次恢復(fù)最終沒有完全成功。但過程中學(xué)到的教訓(xùn):

  1. 沒有備份就不要碰生產(chǎn)數(shù)據(jù)庫——這次是從"沒備份"開始的災(zāi)難鏈
  2. SCN是Oracle的心跳——理解SCN的WRAP/BASE結(jié)構(gòu)是處理ORA-600[2662]的前提
  3. oradebug poke是核武器——直接修改SGA內(nèi)存,用錯了數(shù)據(jù)庫就徹底廢了
  4. 強制恢復(fù)后的數(shù)據(jù)庫不可信——Oracle官方建議重建,這不是建議,是忠告

結(jié)果:未完全恢復(fù),但積累了寶貴的強制恢復(fù)經(jīng)驗

以上就是Oracle數(shù)據(jù)庫無備份強制恢復(fù)的實戰(zhàn)指南的詳細(xì)內(nèi)容,更多關(guān)于Oracle無備份強制恢復(fù)的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Oracle如何通過執(zhí)行計劃查看查詢語句是否使用索引

    Oracle如何通過執(zhí)行計劃查看查詢語句是否使用索引

    這篇文章主要介紹了Oracle如何通過執(zhí)行計劃查看查詢語句是否使用索引問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • Oracle數(shù)據(jù)塊損壞之10231內(nèi)部事件不完全恢復(fù)

    Oracle數(shù)據(jù)塊損壞之10231內(nèi)部事件不完全恢復(fù)

    其實對于壞塊來說,修復(fù)的辦法還是很多的,下面這篇文章主要給大家介紹了關(guān)于Oracle數(shù)據(jù)塊損壞之10231內(nèi)部事件不完全恢復(fù)的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起看看吧。
    2017-07-07
  • oracle定義常用函數(shù)的過程

    oracle定義常用函數(shù)的過程

    這篇文章主要介紹了oracle定義常用函數(shù)的過程,本文通過實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-08-08
  • Oracle通過procedure調(diào)用webservice接口的全過程

    Oracle通過procedure調(diào)用webservice接口的全過程

    存儲過程是一組為了完成特定功能的sql語句集合,經(jīng)過編譯后存儲在數(shù)據(jù)庫中,用戶通過制定存儲過程的名字并給出參數(shù)(如果該過程帶有參數(shù))來執(zhí)行他,本文介紹了Oracle通過procedure調(diào)用webservice接口的全過程,需要的朋友可以參考下
    2024-07-07
  • Oracle存儲過程與函數(shù)的詳細(xì)使用教程

    Oracle存儲過程與函數(shù)的詳細(xì)使用教程

    存儲過程和函數(shù)在Oracle中被稱為子程序,是指被命名的PL/SQL塊,這種塊可以帶有參數(shù),可以被多次調(diào)用,下面這篇文章主要給大家介紹了關(guān)于Oracle存儲過程與函數(shù)的詳細(xì)使用,文中通過實例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-07-07
  • Oracle游標(biāo)的使用實例詳解

    Oracle游標(biāo)的使用實例詳解

    這篇文章主要給大家介紹了關(guān)于Oracle游標(biāo)使用的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或著工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2018-09-09
  • Oracle數(shù)據(jù)塊實現(xiàn)原理深入解讀

    Oracle數(shù)據(jù)塊實現(xiàn)原理深入解讀

    Oracle對數(shù)據(jù)庫數(shù)據(jù)文件(datafile)中的存儲空間進(jìn)行管理的單位是數(shù)據(jù)塊(data block),本文將詳細(xì)介紹
    2012-11-11
  • oracle 層次化查詢(行政區(qū)劃三級級聯(lián))

    oracle 層次化查詢(行政區(qū)劃三級級聯(lián))

    現(xiàn)在將上面的行政區(qū)劃按代碼分為三個級別:?。ê笏奈粸?)/市(后兩位為0)/縣,同時分別標(biāo)出他們的級別,這樣的話,便于后期根據(jù)不同的級別查詢。
    2009-07-07
  • Oracle賬戶被鎖錯誤:the?account?is?locked解決方法

    Oracle賬戶被鎖錯誤:the?account?is?locked解決方法

    the?account?is?locked意思是賬戶被鎖定了,這種情況需要大家去解鎖,這篇文章主要給大家介紹了關(guān)于Oracle賬戶被鎖錯誤:the?account?is?locked的解決方法,需要的朋友可以參考下
    2023-12-12
  • Oracle數(shù)據(jù)庫的安全策略

    Oracle數(shù)據(jù)庫的安全策略

    Oracle數(shù)據(jù)庫的安全策略...
    2007-03-03

最新評論

合江县| 舟曲县| 稻城县| 罗甸县| 莱西市| 东海县| 丹寨县| 厦门市| 尼木县| 德州市| 长白| 闻喜县| 客服| 诸城市| 康平县| 宜都市| 绥德县| 和林格尔县| 虹口区| 凤凰县| 开江县| 龙胜| 浦县| 景洪市| 湟源县| 湟中县| 喀喇沁旗| 晴隆县| 杂多县| 满洲里市| 临澧县| 西城区| 时尚| 托克托县| 潞城市| 临西县| 西吉县| 凯里市| 梓潼县| 苍山县| 二连浩特市|