控制文件丢失,但online redo log文件依然可用情况下的控制文件的恢复

以前做过控制文件的恢复,但没能成功。今天算是成功了一次。

在模拟控制文件损坏前,冷备了整个数据库。害怕啊!!

控制文件的重建脚本其实在控制文件的备份文件中可以找到,不用自己写。

实验开始:

1,安全关闭数据库。删除控制文件。

2,备份控制文件

   SQL> alter database backup controlfile to trace;

  至于控制文件被备份到哪?这个问题可以在oracle的alert_SID.log中找到。当然也可以指定控制文件应该备份到哪,及叫什么名字:

   SQL> alter database backup controlfile to trace as 'u01/123';

这里是把控制文件备份到u01目录下,备份结果叫123。

3,备份控制文件中提供了两种恢复控制文件的脚本:RESETLOGS / NORESETLOGS。

   如何选择哪个脚本来恢复控制文件的关键就在于:

   1.Set NORESETLOGS case

     The following commands will create a new control file and use it                                

     to open the database.

     Data used by Recovery Manager will be lost.

     Additional logs may be required for media recovery of offline.

     Use this only if the current versions of all online logs are available.

  2.Set RESETLOGS case

     The following commands will create a new control file and use it to open the database.

     Data used by Recovery Manager will be lost.

     The contents of online logs will be lost and all backups will be invalidated.

     Use this only if online logs are damaged.

4,由于我的online logs没有损坏。所以就用NORESETLOGS来恢复了

5,用SYS用户执行脚本createctl.sql。createctl.sql脚本如下:

STARTUP NOMOUNT

CREATE CONTROLFILE REUSE DATABASE "SAM" NORESETLOGS  ARCHIVELOG

    MAXLOGFILES 16

    MAXLOGMEMBERS 3

    MAXDATAFILES 100

    MAXINSTANCES 8

    MAXLOGHISTORY 292

LOGFILE

  GROUP 1 '/u01/oradata/sam/redo01.log'  SIZE 50M BLOCKSIZE 512,

  GROUP 2 '/u01/oradata/sam/redo02.log'  SIZE 50M BLOCKSIZE 512,

  GROUP 3 '/u01/oradata/sam/redo03.log'  SIZE 50M BLOCKSIZE 512

-- STANDBY LOGFILE

DATAFILE

  '/u01/oradata/sam/system01.dbf',

  '/u01/oradata/sam/sysaux01.dbf',

  '/u01/oradata/sam/undotbs01.dbf',

  '/u01/oradata/sam/users01.dbf',

  '/u01/oradata/sam/example01.dbf',

  '/u01/oradata/sam/tbs1_01.dbf',

  '/u01/oradata/sam/ts0_01.dbf',

  '/u01/oradata/sam/ts1_01.dbf',

  '/u01/oradata/sam/ts2_01.dbf',

  '/u01/oradata/sam/ts3_01.dbf',

  '/u01/oradata/sam/perfstat01.dbf'

CHARACTER SET WE8MSWIN1252

;

RECOVER DATABASE

ALTER SYSTEM ARCHIVE LOG ALL;

ALTER DATABASE OPEN;

ALTER TABLESPACE TEMP ADD TEMPFILE '/u01/oradata/sam/temp01.dbf'

     SIZE 20971520  REUSE AUTOEXTEND ON NEXT 655360  MAXSIZE 32767M;

ALTER TABLESPACE TEMP1 ADD TEMPFILE '/u01/oradata/sam/temp0_01.dbf'

     SIZE 104857600  REUSE AUTOEXTEND OFF;

6,执行过程如下:


至此,控制文件恢复完成。会在u01/oradata/sam目录下看到新恢复的控制文件。

猜你喜欢

转载自zzwssfd.iteye.com/blog/1613312