控制文件:控制文件同时更新,第一个控制文件读写,其他控制文件同步写,任何一个控制文件损坏数据库不能工作
控制文件SCN<datafile SCN |
Control file too old |
Restore a newer control file |
控制文件SCN>datafile SCN |
Media recovery required |
Recover datafile |
查SCN号
其中v$datafile 从控制文件中获取,v$datafile_header从datafile中获取SCN信息
场景:
所有的控制文件丢失
1、备份到故障时间内数据库结构没有发生变化
备份控制文件:SQL> alter database backup controlfile to trace as ‘/opt/app/oracle/oradata/sqllab/20150515.ctl’;
备份出来的文件实际上是create control file的2个脚本,一个是noresetlogs 做完全恢复(redo信息完整),一个是resetlogs 在redo信息损坏的情况下做不完全恢复。
修改保留一个脚本后运行即可恢复控制文件
SQL> @/opt/app/oracle/oradata/sqllab/20150515.ctl
2、备份后数据库发生过结构变化(新建过tablespacedatafile)
实验设计:1、备份控制文件(二进制)
SQL> alter database backup controlfile to ‘/opt/app/oracle/oradata/backup/20150515.bin’;
2、添加表空间和数据
控制文件已经更新了
3、删除控制文件
4、恢复控制文件
此时还原回来的控制文件没有新建的表空间信息
5、恢复数据库
5.1利用旧的控制文件mount数据库
5.2 尝试open
5.3、recover database
此时发现需要1_37****的归档日志,但是实际上这个日志还没有生成,信息还在redo信息
指定redo01.log进行恢复,发现datafile 8 出现问题
此时查询v$datafile信息,数据库对比控制文件(旧)和redo信息发现有不识别的datafile并且将其放入默认的dbs目录,需要将其重命名
SQL> alter database rename file ‘/opt/app/oracle/db/dbs/UNNAMED00008’ to ‘/opt/app/oracle/oradata/sqllab/test002.dbf’;
修改控制文件中的datafile信息
继续恢复(如果redo01没有信息就到02,一直恢复为止,此时命令可加上一个
SQL> recover database using backup controlfile untile cancel)
恢复完成打开数据库,验证数据恢复成功
修改数据库名字
控制文件的信息修改
未经允许不得转载:SRE空间 » Control file 损坏(一)
评论前必须登录!
注册