Oracle 日誌文件錯誤的處理。

轉自:http://hi.baidu.com/dashuaiwang/blog/item/47cc680ec35055c37acbe1f8.html

 

打開oracle 數據庫時出現了錯誤:

ORA-00313: 無法打開日誌組 1 (線程 1) 的成員
ORA-00312: 聯機日誌 1 線程 1: 'D:/ORACLE/ORADATA/GOCOM/REDO01.LOG'

SQL> connect / as sysdba;
已連接。
SQL> shutdown immediate;
ORA-01109: 數據庫未打開

已經卸載數據庫。
ORACLE 例程已經關閉。
SQL> startup;
ORACLE 例程已經啓動。
Total System Global Area 135338868 bytes
Fixed Size 453492 bytes
Variable Size 109051904 bytes
Database Buffers 25165824 bytes
Redo Buffers 667648 bytes
數據庫裝載完畢。
ORA-00313: 無法打開日誌組 1 (線程 1) 的成員
ORA-00312: 聯機日誌 1 線程 1: D:/ORACLE/ORADATA/ORCL/REDO01.LOG'
查看D:/ORACLE/ORADATA/myoracle/REDO01.LOG還在,但是REDO02.LOG,REDO03.LOG被誤刪了.
趕緊換個例程OEMREP試試,結果還是一樣的錯誤!
蒙了,難道要重裝數據庫不成?有什麼辦法可以解決這個問題呢?

解決辦法:
SQL> shutdown immediate;
ORA-01109: 數據庫未打開
已經卸載數據庫。
SQL> startup mount;
ORACLE 例程已經啓動。
SQL>select * from v$log;
GROUP# THREAD# SEQUENCE# BYTES MEMBERS ARC STATUS FIRST_CHANGE# FIRST_TIME
---------- ---------- ---------- ---------- ---------- --- ---------------- ------------- ----------
1 1 0 104857600 1 NO UNCURRENT 670680 07-12月-07
2 1 15 104857600 1 NO unactive 696119 07-12月-07
3 1 0 104857600 1 NO Unactive 650182 07-12月-07
已選擇3行。
alter database clear unarchived logfile group 1; /*重建日誌文件*/
數據庫已經更改.
alter database clear unarchived logfile group 2;
數據庫已經更改.
alter database clear unarchived logfile group 3;
數據庫已經更改.
SQL>shutdown;
已經卸載數據庫。
ORACLE 例程已經關閉。
SQL>startup;
ORACLE 例程已經啓動。
Total System Global Area 135338868 bytes
Fixed Size 453492 bytes
Variable Size 109051904 bytes
Database Buffers 25165824 bytes
Redo Buffers 667648 bytes
數據庫裝載完畢。
數據庫已經打開。
問題解決!
但是,在對myoracle 例程進行同樣的操作後,也不知道是哪裏出了問題,
SQL>startup;
ORACLE 例程已經啓動。
Total System Global Area 135338868 bytes
Fixed Size 453492 bytes
Variable Size 109051904 bytes
Database Buffers 25165824 bytes
Redo Buffers 667648 bytes
數據庫裝載完畢。
ORA-03113: 通信通道的文件結束
在網上查找資料,出現這樣的問題原因很多,一般是網絡不通,或者是init.ora、C:/oracle/ora92/network/admin/sqlnet.ora或tnsnames.ora有問題.顯然這些不適合我.我的兩個例程,一個可以正常使用,另外一個有問題的!
在我關閉數據庫後,重新打開,執行:
SQL>connect "/as sysdba";
SQL>select * from scott.emp;
ORA-27101 shared memory realm does not exist -
出現這個錯誤也有很多解釋,一般要檢查init.ora文件的內存配置是否有問題,但是在沒有打開數據庫的時候執行命令,也會出現這樣的錯誤提示,我的屬於後者,是由於沒有掛載數據庫造成的,這裏提醒一下.
後來又亂琢磨了一回,還出現了錯誤:
ORA-24324: 未初始化服務句柄
ORA-01041: 內部錯誤,hostdef 擴展名不存在
這是越來越亂了,無奈之下,只好重頭再來整理一遍,從重新配置日誌文件開始,操作一樣,但是奇蹟出現了,錯誤消失了,也不提示通信通道文件結束了,數據庫正常了,呵呵,但是很暈!

解決問題知識整理:
首先,執行下面的語句看看group1是不是current日誌組
select * from v$log;
如果被刪除的日誌不是當前日誌組的成員,比較簡單
alter database clear logfile group 1;
如果你的庫是非歸檔的,或許要用下面的語句
alter database clear unarchived logfile group 1;
如果是當前日誌組損壞,但是數據庫是正常關閉的,上面的辦法也可以使用
如果日誌組中有活動的事務,那麼可能需要利用備份來恢復了:過程如下:
解決過程:Microsoft Windows XP [版本 5.1.2600](C) 版權所有 1985-2001 Microsoft Corp.
C:/Documents and Settings/5201314>sqlplus /nolog
SQL*Plus: Release 10.2.0.1.0 - Production on 星期六 6月 20 11:19:52 2008Copyright (c) 1982, 2005, Oracle. All rights
reserved.
SQL> conn sys/dd as sysdba
已連接。
SQL> startup mount
ORA-01081: 無法啓動已在運行的 ORACLE - 請首先關閉它
SQL> recover database until time '2008-06-19 13:45:02'; /*恢復*/
/*(recover database until cancel;alter database resetlogs;重建日誌文件),另外的寫法,不知哪個對.*/
完成介質恢復。
SQL> alter database open resetlogs;
數據庫已更改。
SQL> shutdown immediate;
數據庫已經關閉。
已經卸載數據庫。
ORACLE 例程已經關閉。
SQL> startup
ORACLE 例程已經啓動。
Total System Global Area 205520896 bytes
Fixed Size 1248092 bytes
Variable Size 79692964 bytes
Database Buffers 117440512 bytes
Redo Buffers 7139328 bytes
數據庫裝載完畢。
數據庫已經打開。
SQL>

Redo 損壞徹底解決
爲了打開數據庫,首先想到的是將壞的日誌清除掉,但是:
SQL> alter database clear unarchived logfile group 3 ;
alter database clear unarchived logfile group 3
*
ERROR 位於第 1 行:
ORA-01624: 線程3的緊急恢復需要日誌1
ORA-00312: 聯機日誌 3 線程 1: 'D:/ORACLE/ORADATA/RMAN/REDO03.LOG'

SQL> alter database clear unarchived logfile group 3 unrecoverable datafile;
alter database clear unarchived logfile group 3 unrecoverable datafile
*
ERROR 位於第 1 行:
ORA-01624: 線程3的緊急恢復需要日誌1
ORA-00312: 聯機日誌 3 線程 1: 'D:/ORACLE/ORADATA/RMAN/REDO03.LOG'

清理日誌文件行不通了,只有加入隱含參數,進行不完全恢復了。

不完全恢復
先加入隱含參數

SQL> alter system set "_allow_resetlogs_corruption"=true scope=spfile ;

系統已更改。

SQL> alter system set "_allow_terminal_recovery_corruption"=true scope=spfile ;

系統已更改。

SQL> shutdown abort ;
ORACLE 例程已經關閉。

SQL>startup
.....
數據庫裝載完畢。
ORA-00354: 損壞重做日誌塊標題
ORA-00353: 日誌損壞接近塊 51328 更改 1029419 時間
ORA-00312: 聯機日誌 3 線程 1: 'D:/ORACLE/ORADATA/RMAN/REDO03.LOG'

現在開始不完全恢復:
SQL> recover database until cancel;
ORA-00279: 更改 1029419 (在 05/15/2005 01:21:08 生成) 對於線程 1 是必需的
ORA-00289: 建議: D:/ORACLE/ORA92/RDBMS/ARC00078.001
ORA-00280: 更改 1029419 對於線程 1 是按序列 # 78 進行的


指定日誌: {<RET>=suggested | filename | AUTO | CANCEL}
auto
ORA-00308: 無法打開存檔日誌 'D:/ORACLE/ORA92/RDBMS/ARC00078.001'
ORA-27041: 無法打開文件
OSD-04002: 無法打開文件
O/S-Error: (OS 2) 系統找不到指定的文件。


ORA-00308: 無法打開存檔日誌 'D:/ORACLE/ORA92/RDBMS/ARC00078.001'
ORA-27041: 無法打開文件
OSD-04002: 無法打開文件
O/S-Error: (OS 2) 系統找不到指定的文件。


ORA-01547: 警告: RECOVER 成功但 OPEN RESETLOGS 將出現如下錯誤
ORA-01194: 文件1需要更多的恢復來保持一致性
ORA-01110: 數據文件 1: 'F:/RMAN/SYSTEM01.DBF'

恢復完成。再用resetlogs打開數據庫:

SQL> alter database open resetlogs ;
ERROR 位於第 1 行:
ORA-03113: 通信通道的文件結束

等待很久,居然報這個錯!其實不用怕,恢復已經完成,只要重新打開就可以了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章