解決掉電導致的ORA-600(4194)錯誤

yangtingkun發表於2010-03-05

一個朋友的資料庫由於掉電,導致資料庫無法正常開啟。簡單描述一下整個問題的解決過程。

 

 

第一件事情是瞭解情況,Windows環境下的3210201資料庫,非歸檔模式,沒有備份。

檢查alert檔案,發現導致問題的原因是由於掉電導致日誌檔案損壞,在進行CRASH恢復時無法將資料庫恢復到一致性的狀態。

對大致情況有了一定的瞭解後,準備開始著手恢復工作:首先是備份現場,這樣如果恢復失敗,至少保留了出錯是的環境。

然後嘗試利用隱含引數_allow_resetlogs_corruption來開啟資料庫,這個步驟在很多篇文章中都描述過了,這裡就不重複了,可以參考:http://yangtingkun.itpub.net/post/468/464701

資料庫順利開啟,ALTER DATABASE OPEN RESETLOGS操作並沒有報錯,但是由於使用了隱含引數,因此資料庫肯定會丟失資料,而且會處於不一致的狀態,為了避免資料庫的不一致對資料造成進一步的損害,準備將業務使用者執行邏輯匯出:

D:\>exp hc/hc file=hc_20100303.dmp buffer=2048000 compress=n log=hc_20100303.log

Export: Release 10.2.0.1.0 - Production on 星期三 3 3 17:38:01 2010

Copyright (c) 1982, 2005, Oracle.  All rights reserved.


EXP-00056:
遇到 ORACLE 錯誤 1034
ORA-01034: ORACLE not available
ORA-27101: shared memory realm does not exist
EXP-00005:
所有允許的登入嘗試均失敗
EXP-00000:
匯出終止失敗

看錯誤資訊似乎資料庫沒有啟動,檢查發現果然資料庫自動關閉了,查詢alert檔案發現了大量的ORA-600(4194)錯誤。

再次嘗試啟動資料庫報錯:

C:\Documents and Settings\Administrator>sqlplus / as sysdba

SQL*Plus: Release 10.2.0.1.0 - Production on 星期三 3 3 17:35:43 2010

Copyright (c) 1982, 2005, Oracle.  All rights reserved.

已連線到空閒例程。

SQL> STARTUP
ORACLE
例程已經啟動。

Total System Global Area  612368384 bytes
Fixed Size                  1250428 bytes
Variable Size             121637764 bytes
Database Buffers          482344960 bytes
Redo Buffers                7135232 bytes
資料庫裝載完畢。
ORA-00607:
當更改資料塊時出現內部錯誤
ORA-00600:
內部錯誤程式碼, 引數: [4194], [38], [22], [], [], [], [], []

雖然STARTUP命令報錯,但是資料庫已經開啟可以訪問了,但是沒過幾分鐘的時間,資料庫就又自動關閉了,導致資料庫自動關閉的原因仍然是ORA-600(4194)錯誤。

查詢metalink發現,導致這個錯誤是由於UNDO資訊出現了不一致,雖然metalink上沒有給出解決方法,不過根據經驗,利用隱含引數_corrupted_rollback_segments嘗試開啟資料庫。

好在資料庫可以短暫的開啟,這樣可以方便的查詢到系統啟動的回滾段名稱:

SQL> CONN / AS SYSDBA
已連線。
SQL> SELECT SEGMENT_NAME FROM DBA_ROLLBACK_SEGS;

SEGMENT_NAME
------------------------------
SYSTEM
_SYSSMU1$
_SYSSMU2$
_SYSSMU3$
_SYSSMU4$
_SYSSMU5$
_SYSSMU6$
_SYSSMU7$
_SYSSMU8$
_SYSSMU9$
_SYSSMU10$

已選擇11行。

SQL> CREATE PFILE='D:\ORACLE\ADMIN\ORCL\PFILE\INITORCL.ORA' FROM SPFILE;

檔案已建立。

在初始化引數檔案中新增下面的引數:

undo_management='MANUAL'
_corrupted_rollback_segments=(_SYSSMU1&,_SYSSMU2&,_SYSSMU3&,_SYSSMU4&,_SYSSMU5&,_SYSSMU6&,_SYSSMU7&,_SYSSMU8&,_SYSSMU9&,_SYSSMU10&)

下面嘗試開啟資料庫:

SQL> conn / as sysdba
已連線到空閒例程。
SQL> STARTUP PFILE=D:\ORACLE\ADMIN\ORCL\PFILE\INITORCL.ORA MOUNT
ORACLE
例程已經啟動。

Total System Global Area  612368384 bytes
Fixed Size                  1250428 bytes
Variable Size             121637764 bytes
Database Buffers          482344960 bytes
Redo Buffers                7135232 bytes
資料庫裝載完畢。
SQL> RECOVER DATABASE;
完成介質恢復。
SQL> RECOVER DATABASE USING BACKUP CONTROLFILE UNTIL CANCEL
ORA-00279:
更改 19786562 ( 03/03/2010 18:20:31 生成) 對於執行緒 1 是必需的
ORA-00289:
建議: D:\ORACLE\FLASH_RECOVERY_AREA\ORCL\ARCHIVELOG\2010_03_03\O1_MF_
1_3_%U_.ARC
ORA-00280:
更改 19786562 (用於執行緒 1) 在序列 #3


指定日誌: {=suggested | filename | AUTO | CANCEL}
CANCEL
介質恢復已取消。
SQL> ALTER DATABASE OPEN RESETLOGS;

資料庫已更改。

資料庫成功開啟,下面再次利用EXP將資料庫的業務使用者進行匯出:

D:\>exp hc/hc file=hc_20100303.dmp buffer=2048000 direct=y recordlength=65534 compress=n log=hc_20100303.log

Export: Release 10.2.0.1.0 - Production on 星期三 3 3 18:26:57 2010

Copyright (c) 1982, 2005, Oracle.  All rights reserved.


連線到: Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options
已匯出 ZHS16GBK 字符集和 AL16UTF16 NCHAR 字符集
.
正在匯出 pre-schema 過程物件和操作
.
正在匯出使用者 HC 的外部函式庫名
.
匯出 PUBLIC 型別同義詞
.
正在匯出專用型別同義詞
.
正在匯出使用者 HC 的物件型別定義
即將匯出 HC 的物件...
.
正在匯出資料庫連結
.
正在匯出序號
.
正在匯出簇定義
.
即將匯出 HC 的表透過直接路徑...
. .
正在匯出表                         CAT_ORG匯出了        6116
. .
正在匯出表                 CESHI_USER_FUNC匯出了           0
HC_AGENT_ANN 將以常規路徑匯出。
. .
正在匯出表                    HC_AGENT_ANN匯出了         295
. .
正在匯出表               HC_AGENT_ANN_ITEM匯出了           0
. .
正在匯出表                   HC_AGENT_LINK匯出了           5
HC_AGENT_NEWS 將以常規路徑匯出。
. .
正在匯出表                   HC_AGENT_NEWS匯出了        2054
. .
正在匯出表              HC_AGENT_NEWS_ITEM匯出了           0
.
.
.
. .
正在匯出表                HC_USER_MSN_SEND匯出了         122
. .
正在匯出表          HC_VIP_PUBLISH_PRODUCT匯出了        1858
. .
正在匯出表                  HC_VISIT_COUNT匯出了           1
. .
正在匯出表                      PLAN_TABLE匯出了           0
. .
正在匯出表                        T_INVITE匯出了           0
.
正在匯出同義詞
.
正在匯出檢視
.
正在匯出儲存過程
.
正在匯出運算子
.
正在匯出引用完整性約束條件
.
正在匯出觸發器
.
正在匯出索引型別
.
正在匯出點陣圖, 功能性索引和可擴充套件索引
.
正在匯出後期表活動
.
正在匯出實體化檢視
.
正在匯出快照日誌
.
正在匯出作業佇列
.
正在匯出重新整理組和子組
.
正在匯出維
.
正在匯出 post-schema 過程物件和操作
.
正在匯出統計資訊
成功終止匯出, 沒有出現警告。

至此,資料庫的恢復工作完成。雖然資料庫可以開啟,但是丟失資料在所難免,所以關鍵資料一定要做好備份工作。

 

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/4227/viewspace-628764/,如需轉載,請註明出處,否則將追究法律責任。

相關文章