首页 > 数据库 > Oracle > 控制文件的恢复方法(一)
控制文件的通常恢复方法有:
1、从控制文件自动或二进制备份中恢复
2、从控制文件快照备份中恢复
3、控制文件trace文件备份中恢复
4、Oracle自动生成的控制文件脚本恢复
如下对相关的步骤及语法进行介绍:
1、从控制文件自动备份中恢复
对数据库进行一些改动:
SQL> create table t as select * from dba_users;
Table created.
SQL> alter system switch logfile;
System altered.
SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> exit
关闭数据库后将控制文件通过OS的mv 或rm命令进行移动或删除;
$ control01.ctl control02.ctl control03.ctl /opt/oracle/backups/
[@more@]RMAN> sql 'alter session set nls_language="american"'; --该语句是因为我的cmd界面乱码才执行的;
RMAN> set DBID=2083742440
executing command: SET DBID
RMAN> restore controlfile from autobackup;
Starting restore at 15-JUN-12
using channel ORA_DISK_1
channel ORA_DISK_1: looking for autobackup on day: 20120615
channel ORA_DISK_1: looking for autobackup on day: 20120614
channel ORA_DISK_1: looking for autobackup on day: 20120613
channel ORA_DISK_1: looking for autobackup on day: 20120612
channel ORA_DISK_1: looking for autobackup on day: 20120611
channel ORA_DISK_1: looking for autobackup on day: 20120610
channel ORA_DISK_1: autobackup found: c-2083742440-20120610-00
channel ORA_DISK_1: control file restore from autobackup complete
output filename=/opt/oracle/oradata/test/control01.ctl
output filename=/opt/oracle/oradata/test/control02.ctl
output filename=/opt/oracle/oradata/test/control03.ctl
Finished restore at 15-JUN-12
RMAN> alter database mount;
database mounted
released channel: ORA_DISK_1
RMAN> RECOVER DATABASE;
Starting recover at 15-JUN-12
allocated channel: ORA_DISK_1
channel ORA_DISK_1: sid=154 devtype=DISK
starting media recovery
archive log thread 1 sequence 24 is already on disk as file /opt/oracle/oradata/test/redo03.log
archive log thread 1 sequence 25 is already on disk as file /opt/oracle/oradata/test/redo01.log
archive log thread 1 sequence 26 is already on disk as file /opt/oracle/oradata/test/redo02.log
unable to find archive log
archive log thread=1 sequence=21
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: failure of recover command at 06/15/2012 17:56:04
RMAN-06054: media recovery requesting unknown log: thread 1 seq 21 lowscn 232333
RMAN> alter database open resetlogs;
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: failure of alter db command at 06/15/2012 17:57:48
ORA-01152: file 1 was not restored from a sufficiently old backup
ORA-01110: data file 1: '/opt/oracle/oradata/test/system01.dbf'
以上过程还是不成功,是不是没有restore database的缘故呢?因此执行如下执行令:
RMAN> SQL 'ALTER SESSION SET NLS_DATE_FORMAT="YYYY-MM-DD HH24:MI:SS"';
RMAN> run
2> {set until time '2012-06-15 17:30:00';
3> restore database;
4> recover database;
5> }
executing command: SET until clause
省略部分内容...
RMAN-00571: ===========================================================
RMAN-03002: failure of restore command at 06/15/2012 18:08:53
ORA-01180: can not create datafile 1
ORA-01110: data file 1: '/opt/oracle/oradata/test/system01.dbf'
因为控制文件完全丢失,再说rman备份时用format命令指定'/opt/backup'目录,restore后的控制文件是无法找到备份集的具体位置,因此通过如下命令指定备份集所在目录:
RMAN> catalog start with '/opt/backup/';
searching for all files that match the pattern /opt/backup/
List of Files Unknown to the Database
=====================================
File Name: /opt/backup/testarch_TEST_20120610_8
File Name: /opt/backup/testarch_TEST_20120610_1
File Name: /opt/backup/testfull_TEST_20120610_2
File Name: /opt/backup/testarch_TEST_20120610_4
File Name: /opt/backup/1_24_785596008.dbf
File Name: /opt/backup/1_23_785596008.dbf
File Name: /opt/backup/testfull_TEST_20120610_6
File Name: /opt/backup/testfull_TEST_20120610_3
File Name: /opt/backup/testarch_TEST_20120610_5
File Name: /opt/backup/full/testfull_TEST_20120610_11
File Name: /opt/backup/full/testfull_TEST_20120610_12
File Name: /opt/backup/full/testarch_TEST_20120610_10
File Name: /opt/backup/full/testarch_TEST_20120610_13
File Name: /opt/backup/1_25_785596008.dbf
File Name: /opt/backup/testfull_TEST_20120610_7
Do you really want to catalog the above files (enter YES or NO)? yes
cataloging files...
cataloging done
List of Cataloged Files
=======================
File Name: /opt/backup/testarch_TEST_20120610_8
File Name: /opt/backup/testarch_TEST_20120610_1
File Name: /opt/backup/testfull_TEST_20120610_2
File Name: /opt/backup/testarch_TEST_20120610_4
File Name: /opt/backup/1_24_785596008.dbf
File Name: /opt/backup/1_23_785596008.dbf
File Name: /opt/backup/testfull_TEST_20120610_6
File Name: /opt/backup/testfull_TEST_20120610_3
File Name: /opt/backup/testarch_TEST_20120610_5
File Name: /opt/backup/full/testfull_TEST_20120610_11
File Name: /opt/backup/full/testfull_TEST_20120610_12
File Name: /opt/backup/full/testarch_TEST_20120610_10
File Name: /opt/backup/full/testarch_TEST_20120610_13
File Name: /opt/backup/1_25_785596008.dbf
File Name: /opt/backup/testfull_TEST_20120610_7
RMAN> restore database;
Starting restore at 15-JUN-12
using channel ORA_DISK_1
channel ORA_DISK_1: starting datafile backupset restore
channel ORA_DISK_1: specifying datafile(s) to restore from backup set
restoring datafile 00001 to /opt/oracle/oradata/test/system01.dbf
restoring datafile 00002 to /opt/oracle/oradata/test/undotbs01.dbf
restoring datafile 00003 to /opt/oracle/oradata/test/sysaux01.dbf
restoring datafile 00004 to /opt/oracle/oradata/test/users01.dbf
channel ORA_DISK_1: reading from backup piece /opt/backup/full/testfull_TEST_20120610_11
channel ORA_DISK_1: restored backup piece 1
piece handle=/opt/backup/full/testfull_TEST_20120610_11 tag=TESTDB
channel ORA_DISK_1: restore complete, elapsed time: 00:00:16
Finished restore at 15-JUN-12
RMAN> recover database;
Starting recover at 15-JUN-12
using channel ORA_DISK_1
starting media recovery
archive log thread 1 sequence 23 is already on disk as file /opt/backup/1_23_785596008.dbf
archive log thread 1 sequence 24 is already on disk as file /opt/oracle/oradata/test/redo03.log
archive log thread 1 sequence 25 is already on disk as file /opt/oracle/oradata/test/redo01.log
archive log thread 1 sequence 26 is already on disk as file /opt/oracle/oradata/test/redo02.log
channel ORA_DISK_1: starting archive log restore to default destination
channel ORA_DISK_1: restoring archive log
archive log thread=1 sequence=21
channel ORA_DISK_1: reading from backup piece /opt/backup/full/testarch_TEST_20120610_10
channel ORA_DISK_1: restored backup piece 1
piece handle=/opt/backup/full/testarch_TEST_20120610_10 tag=TESTDB
channel ORA_DISK_1: restore complete, elapsed time: 00:00:02
archive log filename=/opt/backup/1_21_785596008.dbf thread=1 sequence=21
channel ORA_DISK_1: starting archive log restore to default destination
channel ORA_DISK_1: restoring archive log
archive log thread=1 sequence=22
channel ORA_DISK_1: reading from backup piece /opt/backup/full/testarch_TEST_20120610_13
channel ORA_DISK_1: restored backup piece 1
piece handle=/opt/backup/full/testarch_TEST_20120610_13 tag=TESTDB
channel ORA_DISK_1: restore complete, elapsed time: 00:00:02
archive log filename=/opt/backup/1_22_785596008.dbf thread=1 sequence=22
archive log filename=/opt/backup/1_23_785596008.dbf thread=1 sequence=23
archive log filename=/opt/oracle/oradata/test/redo03.log thread=1 sequence=24
archive log filename=/opt/oracle/oradata/test/redo01.log thread=1 sequence=25
archive log filename=/opt/oracle/oradata/test/redo02.log thread=1 sequence=26
media recovery complete, elapsed time: 00:00:33
Finished recover at 15-JUN-12
RMAN> alter database open resetlogs;
database opened
RMAN> exit
SQL> select count(*) from t;
COUNT(*)
----------
8
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/18841027/viewspace-1058542/ ,如需转载,请注明出处,否则将追究法律责任。