解決ORA_600[2662]和[4194]錯誤辦法

描述:因爲是初學oralce 特意製作出故障進行恢復的,生產環境也可以借鑑,也算是爲了自己的學習做複習,本實驗都是親自實驗過的。

環境:
     服務器:CentOS release 4.4 (Final)
     數據庫:Database 10g Release 10.2.0.1.0


實驗目的: 解決ORA_600[2662]和ORA_600[4194]


錯誤產生:
刪除所有控制文件和日誌文件
rm -rf /u01/app/oracle/oradata/orcl/control01.ctl
rm -rf /u01/app/oracle/oradata/orcl/control02.ctl
rm -rf /u01/app/oracle/oradata/orcl/redo01.log
rm -rf /u01/app/oracle/oradata/orcl/redo02.log
rm -rf /u01/app/oracle/oradata/orcl/redo03.log
rm -rf /u01/app/oracle/oradata/orcl/redo04.log


        模擬斷電
shutdown abort

啓動時出現報錯,查看警報日誌顯示ORA_600[2662]
vim /u01/app/oracle/admin/orcl/bdump/alert_orcl.log

解決辦法:

1 啓動到nomount狀態
       startup  nomount

2 修改隱藏參數(這個隱藏參數的功能大致知道是忽略一些錯誤,但是具體原理的我也不清楚
      alter system set "_allow_error_simulation"=true scope=spfile;


3 創建控制文件(根據實際情況填寫)
          create controlfile reuse database orcl resetlogs
 datafile
 '/u01/app/oracle/oradata/orcl/system01.dbf',
 '/u01/app/oracle/oradata/orcl/sysaux01.dbf',
          '/u01/app/oracle/oradata/orcl/users01.dbf',
          '/u01/app/oracle/oradata/orcl/example01.dbf',
          '/u01/app/oracle/oradata/orcl/undotbs01.dbf'
  logfile
   group 1 '/u01/app/oracle/oradata/orcl/redo01.log' size 50m,
   group 2 '/u01/app/oracle/oradata/orcl/redo02.log' size 50m,
   group 3 '/u01/app/oracle/oradata/orcl/redo03.log' size 50m;

4 查看當前數據文件的scn號
    select checkpoint_change# from v$datafile;

5 修改level級別(level 級別的原理不是很明白
超過10億 用 2


6 查看是否可以進行open resetlogs 如果結果爲NOT ALLOWED 退出sql 然後創新創建控制文件,設置level級別,反覆執行
    select open_resetlogs from v$database;

7 執行 resetlogs  
    alter database open resetlogs;

8 如果resetlogs報錯
   exit
   startup force nomount;  
   alter session set events  '10015 trace name adjust_scn level 1';
   alter database open resetlogs;

到這裏就可以把數據庫open起來了。實在不好意思,上面的操作是晚上做實驗到1點了,忘了做記錄了,所以輸出內容沒有寫,以後會寫的更好,更詳細。


但是我庫open了以後新的問題又來了,當我隨便創建了一個表時,實例自己就蹦掉了,查看警報日誌發現ORA_600[4194]
   查看警報日誌
   vim /u01/app/oracle/admin/orcl/bdump/alert_orcl.log

Completed: alter database open
Tue Feb 25 00:16:57 2014
Errors in file /u01/app/oracle/admin/orcl/bdump/orcl_j000_15099.trc:
ORA-00600: internal error code, arguments: [4194], [58], [55], [], [], [], [], []
Tue Feb 25 00:16:57 2014
DEBUG: Replaying xcb 0x43a07dc4, pmd 0x43b99958 for failed op 8
Doing block recovery for file 2 block 437
Block recovery from logseq 4, block 67 to scn 2147544346
Tue Feb 25 00:16:57 2014
Recovery of Online Redo Log: Thread 1 Group 3 Seq 4 Reading mem 0
Mem# 0 errs 0: /u01/app/oracle/oradata/orcl/redo03.log
Block recovery completed at rba 4.79.16, scn 0.2147544348
Tue Feb 25 00:16:58 2014
Errors in file /u01/app/oracle/admin/orcl/bdump/orcl_j000_15099.trc:
ORA-00600: internal error code, arguments: [4194], [58], [55], [], [], [], [], []
ORA-00600: internal error code, arguments: [4194], [58], [55], [], [], [], [], []
Tue Feb 25 00:17:00 2014
Errors in file /u01/app/oracle/admin/orcl/bdump/orcl_j000_15099.trc:
ORA-00600: internal error code, arguments: [4194], [58], [55], [], [], [], [], []
ORA-00600: internal error code, arguments: [4194], [58], [55], [], [], [

2號文件爲undo 表空間,需要重建undo
   elect * from dba_data_files where file_id=2;


解決ORA_600[4194]錯誤辦法:

9 設置undo表空間的管理方式爲:手工,缺省undotbs 爲空,實際上市使用了 system 回滾段。
   SQL>  alter system set undo_management = manual scope=spfile;
   System altered.
   SQL>  alter system set undo_tablespace='' scope=spfile;
   System altered.


   SQL> startup force
   ORACLE instance started.
   Total System Global Area  583008256 bytes
   Fixed Size                  2022504 bytes
   Variable Size             184550296 bytes
   Database Buffers          394264576 bytes
   Redo Buffers                2170880 bytes
   Database mounted.
   Database opened.

10 創建新的undo表空間:


   SQL>  create undo tablespace undotbs2  
         2  datafile '/oracle/oradata/lixora/undotbs2.dbf' size 100M;
             Tablespace created.


11 設置undo管理方式爲 ’自動‘:
   SQL> alter system set undo_management =auto scope=spfile;
   System altered.


12 設置undotbs 爲新建的undotbs2:
   SQL> alter system set undo_tablespace = undotbs2 scope=spfile;
   System altered.


13 刪除原來損壞的undo表空間,然後在重新啓動。
   SQL>  drop tablespace undotbs02 including contents and datafiles;
   Tablespace dropped.
   SQL> startup force;
   ORACLE instance started.
   Total System Global Area  583008256 bytes
   Fixed Size                  2022504 bytes
   Variable Size             234881944 bytes
   Database Buffers          343932928 bytes
   Redo Buffers                2170880 bytes
   Database mounted.
   Database opened.


本人疑惑:
1   修改隱藏參數 alter system set "_allow_error_simulation"=true scope=spfile; 其原理?
2  修改level級別   alter session set events  '10015 trace name adjust_scn level 1'; 其原理?
最後我有一個疑惑是,刪除了日誌文件和控制文件 爲什麼undo會損壞呢? 和undo有什麼關係,雖然我做成功了,但是目前還是沒有搞明白,希望大家賜教一下。

到這裏就可以完全修復了,在文章裏有一些我不明白的地方,我確實現在不知道,希望知道的可以解答一下互相學習,大神們不要見笑,以後會更好的。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章