Oracle控制文件损坏处理
文件说明:控制文件记录数据库文件的信息和日志的信息等 查看控制文件 SQL> show parameter control_files NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ control_files string /u01/app/oracle/oradata/orclte st/control01.ctl 模拟故障:将该文件清空 echo ‘’ > /u01/app/oracle/oradata/orcltest/control01.ctl 现象:前台正常的增删改查不受影响,但一旦出现切换日志或产生检查点时数据库宕机 SQL> alter system switch logfile; alter system switch logfile * ERROR at line 1: ORA-03113: end-of-file on communication channel Process ID: 3433 Session ID: 1 Serial number: 5 数据库alert日志 Tue Mar 17 17:39:06 2020 Errors in file /u01/app/oracle/diag/rdbms/orcltest/orcltest/trace/orcltest_ckpt_3415.trc: ORA-00202: control file: '/u01/app/oracle/oradata/orcltest/control01.ctl' ORA-27072: File I/O error ... LGWR (ospid: 3413): terminating the instance due to error 227 Tue Mar 17 17:40:37 2020 System state dump requested by (instance=1, osid=3413 (LGWR)), summary=[abnormal instance termination]. System State dumped to trace file /u01/app/oracle/diag/rdbms/orcltest/orcltest/trace/orcltest_diag_3403_20200317174037.trc Dumping diagnostic data in directory=[cdmp_20200317174037], requested by (instance=1, osid=3413 (LGWR)), summary=[abnormal instance termination]. Instance terminated by LGWR, pid = 3413 可以看到ckpt这个进程最先发现控制文件损坏了,实例之后被lgwr进程杀掉。可能大家在做实验的时候发现实例是被ckpt杀掉,这也是有可能的,反正可以肯定的一点是,实例最后肯定会挂掉 修复:使用rman还原控制文件 rman target / RMAN> startup nomount RMAN> restore controlfile from ‘/home/oracle/backupdir/c-2750922031-20200317-00’; RMAN> alter database mount; RMAN> recover database; // 这一步其实是使用archivedlog + redolog对控制文件进行恢复 RMAN> alter database open resetlogs; 说明:a. 不要使用删控制文件的方式去模拟该实验,这是由于ckpt、lgwr进程已经打开了控制文件,内存中已经有了这个控制文件的镜像,而rm命令并不能把这些进程已经打开的控制文件的句柄删掉。所以你会发现实例并没有挂掉。 b. 对数据库resetlogs之后,之前的备份就作废了,所以应该第一时间对数据库做一个全备。 c. 可能大家也注意到了,该实验中只有一个controlfile,当controlfile被破坏了之后,实例就挂了。如果是controlfile的多路复用,其中一个controlfile坏了数据库又是什么影响?我这里先说下我的结论:controlfile只要有一个坏了,实例就会奔溃,同时在alert日志中会提示具体是哪个controlfile损坏,解决办法就是复制一份好的controlfile去替换损坏的controlfile,重新启库即可。实验就留给大家自己做吧。附一段我实验的alert日志(ORA-00227: corrupt block detected in control file: (block 1, # blocks 1) ORA-00202: control file: ‘/u01/app/oracle/oradata/orcltest/control02.ctl’) 总结:1. 控制文件恢复不会丢失任何事务,但会要求数据库resetlogs,这将会导致之前的备份片无效,所以恢复控制文件后最好做一个全库备份。 2. 对控制文件最好设置两个,一个坏了还能利用另一个恢复,对数据库的影响和恢复的时间都是最小的。
分类:
Oracle
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· .NET10 - 预览版1新功能体验(一)
2024-01-27 MySQL联合索引面试题详解?