首页 » ORACLE 9i-23ai » rman之丢失controlfile 控制文件恢复

rman之丢失controlfile 控制文件恢复

如果controlfile 丢失对数据库来说也是灾难性的,下面说说如何恢复controlfile的几种方法

1.    RMAN设置自动备份的情况

RMAN参数选项”CONFIGURE CONTROLFILE AUTOBACKUP ON/OFF”

  • 定义为”ON”,则任意一次RMAN备份都会自动备份controlfile,比如备份tablespace;
  • 定义为”OFF”,则不会自动备份controlfile,需要手动备份。

使用RMAN工具备份controflile的命令如下

#rman target /

RMAN>backup current controlfile;

使用RMAN备份集恢复controlfile的步骤如下

#rman target /

RMAN>startup nomount
RMAN>set dbid=******

RMAN>restore controlfile from autobackup;
RMAN>alter database mount;
RMAN>recover database;

RMAn>alter database open open resetlogs;

如果restore controlfile from autobackup; 失败找不到文件,或不记的dbid,当然直接批定全路径也是可以的如

RMAN> restore controlfile from autobackup;

Starting restore at 24-2月 -11
using target database control file instead of recovery catalog
allocated channel: ORA_DISK_1
channel ORA_DISK_1: sid=156 devtype=DISK

recovery area destination: /u01/app/oracle/flash_recovery_area
database name (or database unique name) used for search: ORCL
channel ORA_DISK_1: no autobackups found in the recovery area
autobackup search outside recovery area not attempted because DBID was not set
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: failure of restore command at 02/24/2011 16:24:11
RMAN-06172: no autobackup found or specified handle is not a valid copy or piece

RMAN> restore controlfile from '/home/oracle/c-1246063822-20110224-00.ctl';

Starting restore at 24-2月 -11
using channel ORA_DISK_1

channel ORA_DISK_1: restoring control file
channel ORA_DISK_1: restore complete, elapsed time: 00:00:02
output filename=/u01/app/oracle/oradata/ORCL/controlfile/control01.ctl
output filename=/u01/app/oracle/flash_recovery_area/ORCL/controlfile/control01.ctl
Finished restore at 24-2月 -11

2,如果你前期做了多路径,丢失一个的情况下,可以复制一份过去,或修改pfile 去掉那个丢失的controlfile;

 

3,使用SQL*PLUS命令备份至指定文件

SQLPLUS命令备份controlfile有两种方式,这里先介绍备份为具体文件的方法。使用SQL命令备份controlfile,步骤如下:

#sqlplus “/as sysdba”

SQL> alter database backup controlfile to 'd:\backup.ctl';

使用SQL命令恢复controlfile,步骤如下:

1>     使用备份文件”backup.ctl”直接copy。

注意:拷贝文件的名称、路径、份数与原controlfile完全一致。

2>     使用下列命令进行恢复

SQL> startup mount;

ORA-32004: obsolete and/or deprecated parameter(s) specified

ORACLE例程已经启动。

Total System Global Area 452984832 bytes
Fixed Size                 1249512 bytes
Variable Size            155193112 bytes
Database Buffers         289406976 bytes
Redo Buffers               7135232 bytes
数据库装载完毕。

SQL> recover database using backup controlfile;

ORA-00279:更改718494 (在07/31/2008 22:21:53生成)对于线程1是必需的

ORA-00289:建议: D:\ORACLE\PRODUCT\10.2.0\ARCHIVE\LOG1_2_661388974.ARC

ORA-00280:更改718494 (用于线程1)在序列#2中

指定日志: {<RET>=suggested | filename | AUTO | CANCEL}

注意:提示输入redolog,但一般情况下输入建议的archivelog会报错

在此处输入的redolog为状态为current的online redolog

通过v$log,v$logfile视图确定当前状态为CURRENT的redolog文件

D:\ORACLE\PRODUCT\10.2.0\ORADATA\ZP\REDO01.LOG

已应用的日志。

完成介质恢复。

SQL> alter database open resetlogs;

数据库已更改。

SQL>

4,使用SQL*PLUS命令备份至trace文件

备份控制文件步骤如下:

#sqlplus “/as sysdba”

SQL> alter database backup controlfile to trace;

注意:

备份完毕后会在$ORACLE_HOME/admin/*sid*/udump目录下生成对应的trace文件

使用trace备份集恢复controlfile的步骤如下:

  •     打开备份controlfile时生成的trace文件
  •     找到标记”Set #1. NORESETLOGS case”部分。

注意:一般情况下trace文件里都会有2部分相关内容,恢复时先执行”Set #1. NORESETLOGS case”部分

  •    运行上述标记部分的sql语句
SQL>STARTUP NOMOUNT

SQL>CREATE CONTROLFILE REUSE DATABASE "ZP" NORESETLOGS ARCHIVELOG
MAXLOGFILES 16
MAXLOGMEMBERS 3
MAXDATAFILES 100
MAXINSTANCES 8
MAXLOGHISTORY 292
LOGFILE
GROUP 1 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\ZP\REDO01.LOG' SIZE 50M,
GROUP 2 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\ZP\REDO02.LOG' SIZE 50M,
GROUP 3 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\ZP\REDO03.LOG' SIZE 50M
DATAFILE
'D:\ORACLE\PRODUCT\10.2.0\ORADATA\ZP\SYSTEM01.DBF',
'D:\ORACLE\PRODUCT\10.2.0\ORADATA\ZP\UNDOTBS01.DBF',
'D:\ORACLE\PRODUCT\10.2.0\ORADATA\ZP\SYSAUX01.DBF',
'D:\ORACLE\PRODUCT\10.2.0\ORADATA\ZP\USERS01.DBF',
'D:\ORACLE\PRODUCT\10.2.0\ORADATA\ZP\TBS1.DBF'
CHARACTER SET ZHS16GBK
;

SQL>VARIABLE RECNO NUMBER;

SQL>EXECUTE :RECNO := SYS.DBMS_BACKUP_RESTORE.SETCONFIG('CONTROLFILE AUTOBACKUP','ON');

RECOVER DATABASE;

SQL>ALTER SYSTEM ARCHIVE LOG ALL;

SQL>ALTER DATABASE OPEN;

SQL>ALTER TABLESPACE TEMP ADD TEMPFILE 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\ZP\TEMP01.DBF'

SIZE 20971520 REUSE AUTOEXTEND ON NEXT 655360 MAXSIZE 32767M;

5, 使用controlfile snapshot

当然还有上遍日志中提到的在$ORACLE_HOME/dbs/下的snapcf_sid.f 的文件

RMAN> restore controlfile from ‘xxxxxxx/snapcf_sid.f’

6, 从数据库备份集恢复

当不设置自动备份的时候,控制文件会在全备时,自动被备份在datafile 1所在的备份集中

7, 手动生成重建脚本

从db alert log 获取redo和字符集, 遍历数据文件目录下的所有数据文件,(根据修改时间可以判断文件是否在使用), 就可以拼出创建控制文件的语句。

打赏

,

对不起,这篇文章暂时关闭评论。