熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Oracle >> 正文

ORA-00600 [2662]錯誤解決過程

2013-11-13 15:43:37  來源: Oracle 

  數據庫版本
  
  背景
  
  客戶那邊數據庫突然出現一個current日志文件壞了導致數據庫crash了然後現場工程師使用_ALLOW_RESETLOGS_CORRUPTION = TRUE這個隱含參數做了不完全恢復後強行將數據庫打開可是打開數據庫後發現只能用internal用戶連接進去別的用戶連接都報錯錯誤信息如下
  
  ORA: internal error code arguments: [] [] [] [] [] [] [] []
  
  查詢不了任何應用的表應用也沒法使用於是想嘗試全庫的exp出來然後重新imp進去建庫結果發現exp數據也不成功也是報同樣的ORA的錯誤用戶當時數據沒有任何的備份過只能想辦法盡量打開數據庫導出數據了
  
  處理過程
  
  先檢查了錯誤產生的trace文件
  
  *** SESSION ID:()
  ksedmp: internal or fatal error
  
  ORA: internal error code arguments: [] [] [] [] [] [] [] []
  
  Current SQL statement for this session:
  
  SELECT * FROM WHSBSB_BSBF
  
  得到的信息有限只能看到是嚴重內部錯誤剩下的都是內存堆棧的一堆信息於是查找了一下這個錯誤的具體相關信息
  
  ORA [] Block SCN is ahead of Current SCN說明當前數據庫的數據塊的SCN早於當前的SCN主要是和存儲在UGA變量中的dependent SCN進行比較如果當前的SCN小於它數據庫就會產生這個ORA []的錯誤了這個錯誤一共有五個參數分別代表不同的含義
  
  ORA [] [a] [b] [c] [d] [e]
  
  Arg [a] Current SCN WRAP
  
  Arg [b] Current SCN BASE
  
  Arg [c] dependent SCN WRAP
  
  Arg [d] dependent SCN BASE
  
  Arg [e] Where present this is the DBA where the dependent SCN came from
  
  我們分析錯誤中的提示它的參數b=d=表明當前的SCN確實是小於dependent SCN所以產生了這個的錯誤
  
  通過查閱文檔發現這個錯誤的產生原因主要有以下幾條
  
  使用隱含參數_ALLOW_RESETLOGS_CORRUPTION後resetlogs打開數據庫
  
  硬件錯誤引起數據庫沒法寫控制文件和重做日志文件
  
  錯誤的部分恢復數據庫
  
  恢復了控制文件但是沒有使用recover database using backup controlfile進行恢復
  
  數據庫crash後設置了_DISABLE_LOGGING隱含參數
  
  在並行服務器環境中DLM存在問題
  
  仔細對比了一下發現問題可能是由於第一條產生的由於設置了_ALLOW_RESETLOGS_CORRUPTION這個隱含參數後雖然強制性的打開數據庫但是數據庫本身存在了corruption仍然存在嚴重的問題
  
  於是想到使用ADJUST_SCN事件來調整當前的SCN使其大於dependent SCN然後保證數據庫可以全庫的導出然後重建數據庫導入數據
  
  用internal用戶登陸數據庫後連接別的用戶還是失敗報錯執行
  
  alter session set events IMMEDIATE trace name ADJUST_SCN level ;
  
  然後嘗試連接別的用戶連接成功
  
  最後exp整個數據庫重建數據庫後導入數據整個數據庫恢復成功!
  
  通過這個實例我們可以看到盡量的不要去使用那些隱含參數這些參數是oracle所不推薦使用的也不是萬能的!如果使用了可能會存在一些遺留的問題如果非要使用建議使用後一定要exp/imp重建建立數據庫
From:http://tw.wingwit.com/Article/program/Oracle/201311/17202.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.