仙道彰
作者仙道彰·2019-09-12 10:02
数据库开发工程师·花旗集团

Oracle怎样用Controlfile的镜像恢复数据库

字数 3256阅读 3799评论 0赞 2

本次实验将模拟Oracle Control文件丢失场景,利用之前备份的景象Control file 对数据库进行恢复;

1.查询控制文件的名称和位置;

SQL> show parameter control_file ;

NAME  TYPE  VALUE
------------------------------------ ----------- ------------------------------
control_file_record_keep_time  integer  7
control_files string  /u01/oracle/oradata/TESTDB/controlfile/o1_mf_gqgcxtfb_.ctl,                                                                                            /u01/oracle/fast_recovery_area/testdb/TESTDB/controlfile/o1_mf_gqgcxtgf_.ctl

2.对控制文件镜像备份

[oracle@rhel7 ~]$   cp /u01/oracle/oradata/TESTDB/controlfile/o1_mf_gqgcxtfb_.ctl /home/oracle/
  • PS:步骤1中查询出来的控制文件中的任意一个;

3.关闭数据库

SQL> shutdown immediate ;

4.删除所有控制文件

 步骤1中查询出来的所有控制文件;

5.启动实例,观察错误信息

startup ;
ORACLE instance started.
Total System Global Area 2466250752 bytes
Fixed Size  8623688 bytes
Variable Size  671091128 bytes
Database Buffers  1778384896 bytes
 Redo Buffers  8151040 bytes
ORA-00205: error in identifying control file, check alert log for more info

6,关闭数据库并重新启动到nomount状态

SQL> shutdown immediate ;
SQL> startup nomount ;

7,将备份的控制文件copy回原来的控制文件位置,且名称与之前保持一致;

[oracle@rhel7 ~]$ cp o1_mf_gqgcxtfb_.ctl /u01/oracle/oradata/TESTDB/controlfile/o1_mf_gqgcxtfb_.ctl
[oracle@rhel7 ~]$ cp o1_mf_gqgcxtfb_.ctl /u01/oracle/fast_recovery_area/testdb/TESTDB/controlfile/o1_mf_gqgcxtgf_.ctl

8.数据库切换实例到MOUNT

SQL> alter database mount ;
Database altered.

9.利用重做日志把控制文件更新到最新状态

 recover database using backup controlfile until cancel

观察出错信息,搜索sequence以及数字

SQL> recover database using backup controlfile until cancel ;
ORA-00279: change 1440371 generated at 09/12/2019 09:11:47 needed for thread 1
ORA-00289: suggestion :
/u01/oracle/fast_recovery_area/testdb/TESTDB/archivelog/2019_09_12/o1_mf_1_1_%u_.arc
ORA-00280: change 1440371 for thread 1 is in sequence #1

10.根据sequence (sequence #1)查询视图v$log

select group#,sequence# from v$log ;
select group#,member from v$logfile ;

SQL> select group#,sequence# from v$log ;
GROUP# SEQUENCE#

---------- ----------

 1  1
 3  0
 2  0
SQL> select group#,member from v$logfile ;
GROUP# MEMBER
--------------------------------------------------------------------------------
3 /u01/oracle/oradata/TESTDB/onlinelog/o1_mf_3_gqgcygnw_.log
3 /u01/oracle/fast_recovery_area/testdb/TESTDB/onlinelog/o1_mf_3_gqgcypjf_.log
2 /u01/oracle/oradata/TESTDB/onlinelog/o1_mf_2_gqgcxwn8_.log
GROUP# MEMBER
--------------------------------------------------------------------------------
2 /u01/oracle/fast_recovery_area/testdb/TESTDB/onlinelog/o1_mf_2_gqgcy4xq_.log
1 /u01/oracle/oradata/TESTDB/onlinelog/o1_mf_1_gqgcxwmk_.log
1 /u01/oracle/fast_recovery_area/testdb/TESTDB/onlinelog/o1_mf_1_gqgcy3jq_.log
6 rows selected.

11.重新指定recover命令

recover database using backup controlfile until cancel

输入上一步查询得到重做日志文件,恢复结束

SQL> recover database using backup controlfile until cancel ;
ORA-00279: change 1440371 generated at 09/12/2019 09:11:47 needed for thread 1
ORA-00289: suggestion :
/u01/oracle/fast_recovery_area/testdb/TESTDB/archivelog/2019_09_12/o1_mf_1_1_%u_.arc
ORA-00280: change 1440371 for thread 1 is in sequence #1
Specify log: {=suggested | filename | AUTO | CANCEL}
/u01/oracle/fast_recovery_area/testdb/TESTDB/onlinelog/o1_mf_1_gqgcy3jq_.log
Log applied.
Media recovery complete.

12.打开数据库

SQL > alter database open RESETLOGS ;

如果觉得我的文章对您有用,请点赞。您的支持将鼓励我继续创作!

2

添加新评论0 条评论

Ctrl+Enter 发表

作者其他文章

相关文章

相关问题

相关资料

X社区推广