Oracle恢復一例--ORA-03113、ORA-24324,ORA-01041錯誤

lhrbest發表於2019-08-01

Oracle恢復一例--ORA-03113ORA-24324,ORA-01041錯誤

背景:


    今天晚上上完OCM的課程後,有個OCP和高可用學員求助於麥老師。他的庫是Windows 10.2.0.1的資料庫,然後因為病毒問題,學員對資料庫做了冷備,然後做了恢復操作,結果啟動的時候不能啟動,報錯ORA-03113、ORA-24324,ORA-01041錯誤。經過微信簡單指導後還是不能啟動,於是只能TEAMVIEWER或向日葵來遠端協助解決了。TV用了一段時間後斷開了,只能用向日葵了。


首先發現第一個問題,就是資料庫服務估計是用的以前的,所以需要用oradim重建服務:

Microsoft Windows [版本 5.2.3790]
(C) 版權所有 1985-2003 Microsoft Corp.
C:\Documents and Settings\Administrator>sqlplus / as sysdba
SQL*Plus: Release 10.2.0.1.0 - Production on 星期四 8月 1 22:21:19 2019
Copyright (c) 1982, 2005, Oracle.  All rights reserved.
已連線。
SQL> select open_mode from v$database;
select open_mode from v$database
*
第 1 行出現錯誤:
ORA-01012: not logged on
SQL> conn / as sysdba
已連線到空閒例程。
SQL> startup nomount
ORA-01081: cannot start already-running ORACLE - shut it down first
SQL> shutdown abort
ORA-03113: 通訊通道的檔案結束
SQL> startup nomount
ORA-24324: 未初始化服務控制程式碼
ORA-01041: 內部錯誤, hostdef 副檔名不存在
SQL>
SQL> shutdown abort
ORA-24324: 未初始化服務控制程式碼
ORA-01041: 內部錯誤, hostdef 副檔名不存在
SQL>
SQL> exit
已斷開連線
C:\Documents and Settings\Administrator>
C:\Documents and Settings\Administrator>sqlplus / as sysdba
SQL*Plus: Release 10.2.0.1.0 - Production on 星期四 8月 1 22:22:42 2019
Copyright (c) 1982, 2005, Oracle.  All rights reserved.
ERROR:
ORA-12560: TNS: 協議介面卡錯誤
請輸入使用者名稱:
ERROR:
ORA-12560: TNS: 協議介面卡錯誤
請輸入使用者名稱:
ERROR:
ORA-12560: TNS: 協議介面卡錯誤
SP2-0157: 在 3 次嘗試之後無法連線到 ORACLE, 退出 SQL*Plus
C:\Documents and Settings\Administrator>sc delete oracleserviceorcl
[SC] DeleteService 成功
C:\Documents and Settings\Administrator>oradim
ORADIM: <command> [options]。請參閱手冊。
輸入以下命令之一:
通過指定以下選項建立例項:
     -NEW -SID sid | -SRVC srvc | -ASMSID sid | -ASMSRVC srvc [-SYSPWD pass]
 [-STARTMODE auto|manual] [-SRVCSTART system|demand] [-PFILE file | -SPFILE]
 [-SHUTMODE normal|immediate|abort] [-TIMEOUT secs] [-RUNAS osusr/ospass]
通過指定以下選項編輯例項:
     -EDIT -SID sid | -ASMSID sid [-SYSPWD pass]
 [-STARTMODE auto|manual] [-SRVCSTART system|demand] [-PFILE file | -SPFILE]
 [-SHUTMODE normal|immediate|abort] [-SHUTTYPE srvc|inst] [-RUNAS osusr/ospass]
通過指定以下選項刪除例項:
     -DELETE -SID sid | -ASMSID sid | -SRVC srvc | -ASMSRVC srvc
通過指定以下選項啟動服務和例項:
     -STARTUP -SID sid | -ASMSID sid [-SYSPWD pass]
 [-STARTTYPE srvc|inst|srvc,inst] [-PFILE filename | -SPFILE]
通過指定以下選項關閉服務和例項:
     -SHUTDOWN -SID sid | -ASMSID sid [-SYSPWD pass]
 [-SHUTTYPE srvc|inst|srvc,inst] [-SHUTMODE normal|immediate|abort]
 通過指定以下引數查詢幫助: -? | -h | -help
C:\Documents and Settings\Administrator>oradim -new -sid ORCL -pfile E:\oracle\p
roduct\10.2.0\db_1\database\initorcl.ora
例項已建立。
C:\Documents and Settings\Administrator>sqlplus / as sysdba
SQL*Plus: Release 10.2.0.1.0 - Production on 星期四 8月 1 22:32:21 2019
Copyright (c) 1982, 2005, Oracle.  All rights reserved.
已連線到空閒例程。
SQL> startup nomount
ORACLE 例程已經啟動。
Total System Global Area  612368384 bytes
Fixed Size                  1332348 bytes
Variable Size             174762884 bytes
Database Buffers          432013312 bytes
Redo Buffers                4259840 bytes
SQL> alter database mount;
資料庫已更改。
SQL> alter database open;
alter database open
*
第 1 行出現錯誤:
ORA-03113: 通訊通道的檔案結束
SQL>

  終於可以使用startup命令了,但是open時還是報錯,然後通過告警日誌發現了pfile裡很多的路徑錯誤,還有redo日誌也報錯:

orcl.__db_cache_size=432013312
orcl.__java_pool_size=4194304
orcl.__large_pool_size=4194304
orcl.__shared_pool_size=163577856
orcl.__streams_pool_size=0
*.audit_file_dest='E:\oracle\product\10.2.0/admin/orcl/adump'
*.background_dump_dest='E:\oracle\product\10.2.0/admin/orcl/bdump'
*.compatible='10.2.0.1.0'
*.control_files='E:\oracle\product\10.2.0/oradata/orcl/\control01.ctl','E:\oracle\product\10.2.0/oradata/orcl/\control02.ctl','E:\oracle\product\10.2.0/oradata/orcl/\control03.ctl'
*.core_dump_dest='E:\oracle\product\10.2.0/admin/orcl/cdump'
*.db_block_size=8192
*.db_domain=''
*.db_file_multiblock_read_count=16
*.db_name='orcl'
*.db_recovery_file_dest='E:\oracle\product\10.2.0/flash_recovery_area'
*.db_recovery_file_dest_size=2147483648
*.dispatchers='(PROTOCOL=TCP) (SERVICE=orclXDB)'
*.job_queue_processes=10
*.nls_language='SIMPLIFIED CHINESE'
*.nls_territory='CHINA'
*.open_cursors=300
*.pga_aggregate_target=203423744
*.processes=1000
*.remote_login_passwordfile='EXCLUSIVE'
*.sessions=1105
*.sga_target=612368384
*.undo_management='AUTO'
*.undo_tablespace='UNDOTBS1'
*.user_dump_dest='E:\oracle\product\10.2.0/admin/orcl/udump'

於是,我修改為如下模式:

orcl.__db_cache_size=432013312
orcl.__java_pool_size=4194304
orcl.__large_pool_size=4194304
orcl.__shared_pool_size=163577856
orcl.__streams_pool_size=0
*.audit_file_dest='E:\oracle\product\10.2.0\admin\orcl\adump'
*.background_dump_dest='E:\oracle\product\10.2.0\admin\orcl\bdump'
*.compatible='10.2.0.1.0'
*.control_files='E:\oracle\product\10.2.0\oradata\orcl\control01.ctl','E:\oracle\product\10.2.0\oradata\orcl\control02.ctl','E:\oracle\product\10.2.0\oradata\orcl\control03.ctl'
*.core_dump_dest='E:\oracle\product\10.2.0\admin\orcl\cdump'
*.db_block_size=8192
*.db_domain=''
*.db_file_multiblock_read_count=16
*.db_name='orcl'
*.db_recovery_file_dest='E:\oracle\product\10.2.0\flash_recovery_area'
*.db_recovery_file_dest_size=2147483648
*.dispatchers='(PROTOCOL=TCP) (SERVICE=orclXDB)'
*.job_queue_processes=10
*.nls_language='SIMPLIFIED CHINESE'
*.nls_territory='CHINA'
*.open_cursors=300
*.pga_aggregate_target=203423744
*.processes=1000
*.remote_login_passwordfile='EXCLUSIVE'
*.sessions=1105
*.sga_target=612368384
*.undo_management='AUTO'
*.undo_tablespace='UNDOTBS1'
*.user_dump_dest='E:\oracle\product\10.2.0\admin\orcl\udump'

然後重啟資料庫,啟動到mount階段,繼續檢視redo日誌檔案:

SQL> select * from v$log;
    GROUP#    THREAD#  SEQUENCE#      BYTES    MEMBERS ARC STATUS
---------- ---------- ---------- ---------- ---------- --- ----------
FIRST_CHANGE# FIRST_TIME
------------- --------------
         1          1      19103   52428800          1 NO  INACTIVE
    471044279 07-6月 -19
         3          1      19102   52428800          1 NO  INACTIVE
    471009748 06-6月 -19
         2          1      19104   52428800          1 NO  CURRENT
    471095223 07-6月 -19

我嘗試清空損壞的日誌檔案,但是成功執行前提:一致性關閉,很顯然這個命令不行,而且嘗試rman也不行:

SQL> startup force mount
ORACLE 例程已經啟動。
Total System Global Area  612368384 bytes
Fixed Size                  1332348 bytes
Variable Size             174762884 bytes
Database Buffers          432013312 bytes
Redo Buffers                4259840 bytes
資料庫裝載完畢。
SQL> ALTER DATABASE CLEAR UNARCHIVED LOGFILE GROUP 2;
ALTER DATABASE CLEAR UNARCHIVED LOGFILE GROUP 2
*
第 1 行出現錯誤:
ORA-01624: 日誌 2 是緊急恢復例項 orcl (執行緒 1) 所必需的
ORA-00312: 聯機日誌 2 執行緒 1:
'E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\REDO02.LOG'
SQL> ALTER DATABASE CLEAR  LOGFILE GROUP 2;
ALTER DATABASE CLEAR  LOGFILE GROUP 2
*
第 1 行出現錯誤:
ORA-01624: 日誌 2 是緊急恢復例項 orcl (執行緒 1) 所必需的
ORA-00312: 聯機日誌 2 執行緒 1:
'E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\REDO02.LOG'
SQL> alter system switch logfile;
alter system switch logfile
*
第 1 行出現錯誤:
ORA-01109: 資料庫未開啟
 
SQL> recover database until cancel;
ORA-00279: 更改 471095223 (在 06/07/2019 20:22:28 生成) 對於執行緒 1 是必需的
ORA-00289: 建議:
E:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORCL\ARCHIVELOG\2019_08_01\O1_MF_1_
19104_%U_.ARC
ORA-00280: 更改 471095223 (用於執行緒 1) 在序列 #19104 中
指定日誌: {<RET>=suggested | filename | AUTO | CANCEL}
auto
ORA-00308: 無法開啟歸檔日誌
'E:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORCL\ARCHIVELOG\2019_08_01\O1_MF_1
_19104_%U_.ARC'
ORA-27041: 無法開啟檔案
OSD-04002: 無法開啟檔案
O/S-Error: (OS 2) 系統找不到指定的檔案。
ORA-00308: 無法開啟歸檔日誌
'E:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORCL\ARCHIVELOG\2019_08_01\O1_MF_1
_19104_%U_.ARC'
ORA-27041: 無法開啟檔案
OSD-04002: 無法開啟檔案
O/S-Error: (OS 2) 系統找不到指定的檔案。
ORA-01547: 警告: RECOVER 成功但 OPEN RESETLOGS 將出現如下錯誤
ORA-01194: 檔案 1 需要更多的恢復來保持一致性
ORA-01110: 資料檔案 1: 'E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\SYSTEM01.DBF'
SQL> alter database open noresetlogs;
alter database open noresetlogs
*
第 1 行出現錯誤:
ORA-03113: 通訊通道的檔案結束
SQL> startup force
ORA-24324: 未初始化服務控制程式碼
ORA-01041: 內部錯誤, hostdef 副檔名不存在
SQL> exit
從 Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options 斷開
C:\Documents and Settings\Administrator>
C:\Documents and Settings\Administrator>
C:\Documents and Settings\Administrator>sqlplus / as sysdba
SQL*Plus: Release 10.2.0.1.0 - Production on 星期四 8月 1 22:58:16 2019
Copyright (c) 1982, 2005, Oracle.  All rights reserved.
已連線到空閒例程。
SQL> create spfile from pfile;
檔案已建立。
SQL> startup mount
ORACLE 例程已經啟動。
Total System Global Area  612368384 bytes
Fixed Size                  1332348 bytes
Variable Size             174762884 bytes
Database Buffers          432013312 bytes
Redo Buffers                4259840 bytes
資料庫裝載完畢。
SQL> alter database open;
alter database open
*
第 1 行出現錯誤:
ORA-03113: 通訊通道的檔案結束
SQL> startup foree mount
SP2-0714: 無效的        STARTUP 選項組合
SQL> startup force mount
ORA-24324: 未初始化服務控制程式碼
ORA-01041: 內部錯誤, hostdef 副檔名不存在
SQL> exit
從 Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options 斷開
C:\Documents and Settings\Administrator>
C:\Documents and Settings\Administrator>
C:\Documents and Settings\Administrator>
C:\Documents and Settings\Administrator>sqlplus / as sysdba
SQL*Plus: Release 10.2.0.1.0 - Production on 星期四 8月 1 22:59:52 2019
Copyright (c) 1982, 2005, Oracle.  All rights reserved.
已連線到空閒例程。
SQL> startup force mount
ORACLE 例程已經啟動。
Total System Global Area  612368384 bytes
Fixed Size                  1332348 bytes
Variable Size             174762884 bytes
Database Buffers          432013312 bytes
Redo Buffers                4259840 bytes
資料庫裝載完畢。
SQL> exit
從 Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options 斷開
C:\Documents and Settings\Administrator>
C:\Documents and Settings\Administrator>rman target /
恢復管理器: Release 10.2.0.1.0 - Production on 星期四 8月 1 23:00:08 2019
Copyright (c) 1982, 2005, Oracle.  All rights reserved.
已連線到目標資料庫: ORCL (DBID=1313825522, 未開啟)
RMAN> list backupset;
使用目標資料庫控制檔案替代恢復目錄
RMAN> list archivelog all;
說明與恢復目錄中的任何存檔日誌均不匹配
RMAN> exit
恢復管理器完成。

最後嘗試用recover database until cancel;來解決:

C:\Documents and Settings\Administrator>sqlplus / as sysdba
SQL*Plus: Release 10.2.0.1.0 - Production on 星期四 8月 1 23:00:58 2019
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
SQL> archive log list;
資料庫日誌模式             非存檔模式
自動存檔             禁用
存檔終點            USE_DB_RECOVERY_FILE_DEST
最早的聯機日誌序列     19102
當前日誌序列           19104
SQL>
SQL> recover database until cancel;
ORA-00279: 更改 471095223 (在 06/07/2019 20:22:28 生成) 對於執行緒 1 是必需的
ORA-00289: 建議:
E:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORCL\ARCHIVELOG\2019_08_01\O1_MF_1_
19104_%U_.ARC
ORA-00280: 更改 471095223 (用於執行緒 1) 在序列 #19104 中
指定日誌: {<RET>=suggested | filename | AUTO | CANCEL}
E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\REDO02.LOG
已應用的日誌。
完成介質恢復。
SQL>
SQL> select * from v$log;
    GROUP#    THREAD#  SEQUENCE#      BYTES    MEMBERS ARC STATUS
---------- ---------- ---------- ---------- ---------- --- ----------------
FIRST_CHANGE# FIRST_TIME
------------- --------------
         1          1      19103   52428800          1 NO  INACTIVE
    471044279 07-6月 -19
         3          1      19102   52428800          1 NO  INACTIVE
    471009748 06-6月 -19
         2          1      19104   52428800          1 NO  CURRENT
    471095223 07-6月 -19
SQL> alter database open;
alter database open
*
第 1 行出現錯誤:
ORA-01589: 要開啟資料庫則必須使用 RESETLOGS 或 NORESETLOGS 選項
SQL> alter database open noresetlogs;
資料庫已更改。
SQL> select open_mode from v$database;
OPEN_MODE
----------
READ WRITE
C:\Documents and Settings\Administrator>sqlplus / as sysdba
SQL*Plus: Release 10.2.0.1.0 - Production on 星期四 8月 1 23:18:30 2019
Copyright (c) 1982, 2005, Oracle.  All rights reserved.
已連線到空閒例程。
SQL> startup
ORACLE 例程已經啟動。
Total System Global Area  612368384 bytes
Fixed Size                  1332348 bytes
Variable Size             174762884 bytes
Database Buffers          432013312 bytes
Redo Buffers                4259840 bytes
資料庫裝載完畢。
資料庫已經開啟。
SQL> select open_mode from v$database;
OPEN_MODE
----------
READ WRITE

最後再重啟一次資料庫:

C:\Documents and Settings\Administrator>sqlplus / as sysdba
SQL*Plus: Release 10.2.0.1.0 - Production on 星期四 8月 1 23:18:30 2019
Copyright (c) 1982, 2005, Oracle.  All rights reserved.
已連線到空閒例程。
SQL> startup
ORACLE 例程已經啟動。
Total System Global Area  612368384 bytes
Fixed Size                  1332348 bytes
Variable Size             174762884 bytes
Database Buffers          432013312 bytes
Redo Buffers                4259840 bytes
資料庫裝載完畢。
資料庫已經開啟。
SQL> select open_mode from v$database;
OPEN_MODE
----------
READ WRITE



總結:

    1、開啟告警日誌,從告警日誌中會獲取很多有用的資訊

    2、pfile和spfile裡的內容不能出錯

    3、oradim用於建立windows下的oracle服務,至少要保證在sqlplus中可以使用startup或shutdown命令

    4、redo損壞的話可以嘗試在SQL下進行恢復,使用命令: recover database until cancel;


---最後的建議:

1、修改為歸檔模式

2、及時做RMAN備份









About Me

........................................................................................................................

● 本文作者:小麥苗,部分內容整理自網路,若有侵權請聯絡小麥苗刪除

● 本文在itpub、部落格園、CSDN和個人微 信公眾號( xiaomaimiaolhr )上有同步更新

● 本文itpub地址: http://blog.itpub.net/26736162

● 本文部落格園地址: http://www.cnblogs.com/lhrbest

● 本文CSDN地址: https://blog.csdn.net/lihuarongaini

● 本文pdf版、個人簡介及小麥苗雲盤地址: http://blog.itpub.net/26736162/viewspace-1624453/

● 資料庫筆試面試題庫及解答: http://blog.itpub.net/26736162/viewspace-2134706/

● DBA寶典今日頭條號地址: http://www.toutiao.com/c/user/6401772890/#mid=1564638659405826

........................................................................................................................

● QQ群號: 230161599 (滿) 、618766405

● 微 信群:可加我微 信,我拉大家進群,非誠勿擾

● 聯絡我請加QQ好友 646634621 ,註明新增緣由

● 於 2019-08-01 06:00 ~ 2019-08-31 24:00 在西安完成

● 最新修改時間:2019-08-01 06:00 ~ 2019-08-31 24:00

● 文章內容來源於小麥苗的學習筆記,部分整理自網路,若有侵權或不當之處還請諒解

● 版權所有,歡迎分享本文,轉載請保留出處

........................................................................................................................

小麥苗的微店 https://weidian.com/s/793741433?wfr=c&ifr=shopdetail

小麥苗出版的資料庫類叢書 http://blog.itpub.net/26736162/viewspace-2142121/

小麥苗OCP、OCM、高可用網路班 http://blog.itpub.net/26736162/viewspace-2148098/

小麥苗騰訊課堂主頁 https://lhr.ke.qq.com/

........................................................................................................................

使用 微 信客戶端 掃描下面的二維碼來關注小麥苗的微 信公眾號( xiaomaimiaolhr )及QQ群(DBA寶典)、新增小麥苗微 信, 學習最實用的資料庫技術。

........................................................................................................................

歡迎與我聯絡

 

 



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

相關文章