ITPub博客

首页 > 数据库 > Oracle > 控制文件的恢复方法(一)

控制文件的恢复方法(一)

原创 Oracle 作者:kuqlan 时间:2012-06-16 02:30:28 0 删除 编辑

控制文件的通常恢复方法有:
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/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
Oracle技术爱好者,Oracle10g OCM,网名 KUQLAN ,具有7的年Oracle数据库管理实践,曾经参加过BOSS、ERP、云计算(OpenStack+kvm)等项目的一线工作。以前写博客是为了自己,而现在是为了自己和别人。因为领会了帮助别人和分享、沉淀和积累会创造快乐和价值...

注册时间:2009-01-26

  • 博文量
    183
  • 访问量
    1681002