今天算是博客正式开张了
今天看了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