「这是我参与11月更文挑战的第14天,活动详情查看:2021最后一次更文挑战」
一、查看控制文件路径和内容
1 | sql复制代码SQL> show parameter control_files |
当前数据库存在两份控制文件,分别位于数据文件路径和快速闪回区路径。
二、模拟控制文件丢失情况:
1、未丢失全部控制文件
删除快闪区中的控制文件,强制关闭数据库。
1 | sql复制代码[oracle@orcl:/oradata/orcl]$ rm -rf /u01/app/oracle/fast_recovery_area/orcl/control02.ctl |
从数据文件路径复制一份控制文件到快闪区中,尝试再次关闭是否报错。
1 | sql复制代码--复制控制文件 |
2、全部丢失,控制文件存在备份
有两种方式:
1、通过备份的文件进行重建控制文件
2、通过rman恢复控制文件,需要通过resetlogs方式打开数据库
一、通过备份文件重建控制文件
1 | bash复制代码--通过备份控制文件获取创建控制文件脚本 |
成功恢复控制文件。
二、通过rman恢复控制文件
rman备份控制文件
1 | bash复制代码RMAN> backup current controlfile format '/home/oracle/ctrl.ora'; |
rm删除所有控制文件,尝试添加数据文件,强制关闭数据库,尝试开启到mount状态。
1 | bash复制代码[oracle@orcl:/u01/app/oracle/fast_recovery_area/orcl]$ rm control02.ctl |
开启数据库到nomount状态,rman恢复控制文件,恢复数据库
1 | bash复制代码--开启到nomount状态 |
通过resetlogs方式打开数据库
1 | bash复制代码SQL> alter database open resetlogs; |
3、全部丢失,没有备份
删除全部控制文件,并且没有备份控制文件
1 | sql复制代码SQL> select open_mode from v$database; |
手动创建控制文件
1 | bash复制代码--通过spfile或者pfile文件获取信息 |
打开数据库,成功恢复控制文件
1 | sql复制代码SQL> ALTER DATABASE OPEN; |
三、建议
1、创建多份控制文件,建议分别存放在多个存储的多个文件夹上,防止文件被误删或者存储损坏。
2、打开归档模式。
3、保存当前库的控制文件生成脚本(包括重要信息:dbname,字符集,文件路径)。
4、定期备份数据库文件,防止丢失,建议将备份放置到源端进行保存。
本文转载自: 掘金