关于oracle controlfile 恢复的实验,以及思考

今天算是博客正式开张了


今天看了itpub上的一个帖子,关于控制文件恢复的,刚做下实验,现在再做一次,把结果贴出来,同时进行下思考。

首先,对controlfile 进行一下备份。

SQL> alter database backup controlfile to '/oracle/backup/conrtrolbak1.bak';

找到所有的控制文件,

SQL> select name from v$controlfile;


NAME
--------------------------------------------------------------------------------
/oracle/oradata/orcl/control01.ctl
/oracle/oradata/orcl/control02.ctl
/oracle/oradata/orcl/control03.ctl



删除所有的控制文件

[oracle@orahost ~]$ cd /oracle/oradata/orcl/

[oracle@orahost orcl]$ rm -fr control0*


强制关闭数据库

SQL> shutdown abort
ORACLE instance shut down.



启动数据库


SQL> startup
ORACLE instance started.


Total System Global Area  285212672 bytes
Fixed Size    1218968 bytes
Variable Size   71304808 bytes
Database Buffers  205520896 bytes
Redo Buffers    7168000 bytes
ORA-00205: error in identifying control file, check alert log for more info




SQL> 


控制文件被删除了,所以需要进行还原。


SQL> show parameter control


NAME     TYPE VALUE
------------------------------------ ----------- ------------------------------
control_file_record_keep_time     integer 7
control_files     string /oracle/oradata/orcl/control01
.ctl, /oracle/oradata/orcl/con
trol02.ctl, /oracle/oradata/or
cl/control03.ctl
SQL> 



将备份出来的控制文件,进行操作。

[oracle@orahost backup]$ cp conrtrolbak1.bak /oracle/oradata/orcl/control01.ctl
[oracle@orahost backup]$ cp conrtrolbak1.bak /oracle/oradata/orcl/control02.ctl
[oracle@orahost backup]$ cp conrtrolbak1.bak /oracle/oradata/orcl/control03.ctl


然后将控制文件挂载上。

SQL> alter database mount;


Database altered.


启动数据库:

SQL> alter database open;
alter database open
*
ERROR at line 1:
ORA-01589: must use RESETLOGS or NORESETLOGS option for database open




SQL> alter database open resetlogs;
alter database open resetlogs
*
ERROR at line 1:
ORA-01194: file 1 needs more recovery to be consistent
ORA-01110: data file 1: '/oracle/oradata/orcl/system01.dbf'

数据库报错,对数据库进行恢复操作,


SQL> recover database using backup controlfile;
ORA-00279: change 686392 generated at 06/05/2013 10:20:20 needed for thread 1
ORA-00289: suggestion :
/oracle/flash_recovery_area/ORCL/archivelog/2013_06_05/o1_mf_1_1_%u_.arc
ORA-00280: change 686392 for thread 1 is in sequence #1




Specify log: {<RET>=suggested | filename | AUTO | CANCEL}
/oracle/oradata/orcl/redo02.log
Log applied.
Media recovery complete.

用到了redo log 才完成的恢复。


SQL> 
SQL> 
SQL> select status from v$instance;


STATUS
------------
MOUNTED


SQL> alter database open;
alter database open
*
ERROR at line 1:
ORA-01589: must use RESETLOGS or NORESETLOGS option for database open




SQL> alter database open resetlogs;


Database altered.


SQL> 





完成恢复后,要对数据库进行resetlogs 


控制文件恢复后,为什么一定要用resetlogs才能打开数据库呢?


查看concept关于控制文件的介绍。


Every time an instance of an Oracle database is started, its control file 
identifies the database and redo log files that must be opened for database 
operation to proceed. If the physical makeup of the database is altered 
(for example, if a new datafile or redo log file is created), then the 
control file is automatically modified by Oracle to reflect the change. 
A control file is also used in database recovery. 


可以理解,控制文件记录了数据库必须的redo log的信息,在以上的试验中,用控制文件恢复database的使用,用到了redo log文件,这个文件是控制文件在备份的时候,正在使用的,而redo log一直在不停的循环使用中,所以在执行数据库恢复后,这个redo log后面的redo log 都不被使用了,所以需要重置数据库的redo log。



以上是我通过对concept的思考,自己理解出来的。    思考下,如果备份的时间过久呢,如果当时的redo log被删除了呢,还可以用这个方法吗? 




to be continued





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值