本文演示丢失所有控制文件,数据文件恢复全过程。

前提是之前有RMAN备份过控制文件:configure controlfile autobackup on;

或者 alter database backup controlfile to ‘/orabak/controlfile_20151211.bak’

和整个数据库备份:backup databae 这个操作

[root@vmlhx ~]# su - oracle

[oracle@vmlhx ~]$ ls

[oracle@vmlhx ~]$ cd $ORACLE_BASE

[oracle@vmlhx oracle]$ ls

admin  flash_recovery_area  oradata  oraInventory

[oracle@vmlhx oracle]$ cd oradata/

[oracle@vmlhx oradata]$ ls

vmlhx

[oracle@vmlhx oradata]$ cd vmlhx/

[oracle@vmlhx vmlhx]$ ls

control01.ctl  example02.dbf      redo02.log    system01.dbf  undotbs01.dbf

control02.ctl  hygeia01.dbf       redo03.log    system02.dbf  undotbs02.dbf

control03.ctl  hygeia_temp01.dbf  sysaux01.dbf  temp01.dbf    users01.dbf

example01.dbf  redo01.log         sysaux02.dbf  temp02.dbf    users02.dbf

 

[oracle@vmlhx vmlhx]$ rm -rf *.ctl     --说明删除所有控制文件

[oracle@vmlhx vmlhx]$ rm -rf *.dbf    --说明删除所有数据文件

 

oracle自带的RMAN备份恢复管理控制台进行恢复数据库

[oracle@vmlhx vmlhx]$ rman sys/oracle@vmlhx;

 

[oracle@vmlhx vmlhx]$ rman target sys/oracle

 

Recovery Manager: Release 10.2.0.1.0 - Production on Fri Dec 11 21:43:23 2015

 

Copyright (c) 1982, 2005, Oracle.  All rights reserved.

 

connected to target database: vmlhx (not mounted)

 

RMAN> restore controlfile from autobackup; --从自动备份中恢复控制文件或者 from‘/orabak/controlfile_20151211.bak’ 这是我手工备份的控制文件路径。

 

Starting restore at 11-Dec-15

using target database control file instead of recovery catalog

allocated channel: ORA_DISK_1

channel ORA_DISK_1: sid=155 devtype=DISK

 

recovery area destination: /DBSoftware/app/oracle/flash_recovery_area

database name (or database unique name) used for search: VMLHX

channel ORA_DISK_1: autobackup found in the recovery area

channel ORA_DISK_1: autobackup found: /DBSoftware/app/oracle/flash_recovery_area/VMLHX/autobackup/2015_12_11/o1_mf_s_877826344_bml8o6q9_.bkp

channel ORA_DISK_1: control file restore from autobackup complete

output filename=/DBSoftware/app/oracle/oradata/vmlhx/control01.ctl

output filename=/DBSoftware/app/oracle/oradata/vmlhx/control02.ctl

output filename=/DBSoftware/app/oracle/oradata/vmlhx/control03.ctl

Finished restore at 11-Dec-15

 

 

RMAN> alter database mount;

 

database mounted

released channel: ORA_DISK_1

 

RMAN> restore database;

 

Starting restore at 11-Dec-15

Starting implicit crosscheck backup at 11-Dec-15

allocated channel: ORA_DISK_1

channel ORA_DISK_1: sid=155 devtype=DISK

Crosschecked 1 objects

Finished implicit crosscheck backup at 11-Dec-15

 

Starting implicit crosscheck copy at 11-Dec-15

using channel ORA_DISK_1

Crosschecked 1 objects

Finished implicit crosscheck copy at 11-Dec-15

 

searching for all files in the recovery area

cataloging files...

cataloging done

 

List of Cataloged Files

=======================

File Name: /DBSoftware/app/oracle/flash_recovery_area/VMLHX/autobackup/2015_12_11/o1_mf_s_877826344_bml8o6q9_.bkp

 

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 /DBSoftware/app/oracle/oradata/vmlhx/system01.dbf

restoring datafile 00002 to /DBSoftware/app/oracle/oradata/vmlhx/undotbs01.dbf

restoring datafile 00003 to /DBSoftware/app/oracle/oradata/vmlhx/sysaux01.dbf

restoring datafile 00004 to /DBSoftware/app/oracle/oradata/vmlhx/users01.dbf

restoring datafile 00005 to /DBSoftware/app/oracle/oradata/vmlhx/example01.dbf

restoring datafile 00006 to /DBSoftware/app/oracle/oradata/vmlhx/example02.dbf

restoring datafile 00007 to /DBSoftware/app/oracle/oradata/vmlhx/sysaux02.dbf

restoring datafile 00008 to /DBSoftware/app/oracle/oradata/vmlhx/system02.dbf

restoring datafile 00009 to /DBSoftware/app/oracle/oradata/vmlhx/undotbs02.dbf

restoring datafile 00010 to /DBSoftware/app/oracle/oradata/vmlhx/users02.dbf

restoring datafile 00011 to /DBSoftware/app/oracle/oradata/vmlhx/hygeia01.dbf

channel ORA_DISK_1: reading from backup piece /DBSoftware/app/oracle/flash_recovery_area/VMLHX/backupset/2015_12_11/o1_mf_nnndf_TAG20151211T004623_bml8h0rh_.bkp

channel ORA_DISK_1: restored backup piece 1

piece handle=/DBSoftware/app/oracle/flash_recovery_area/VMLHX/backupset/2015_12_11/o1_mf_nnndf_TAG20151211T004623_bml8h0rh_.bkp tag=TAG20151211T004623

channel ORA_DISK_1: restore complete, elapsed time: 00:01:56

Finished restore at 11-Dec-15

 

RMAN> host  

 

[oracle@vmlhx vmlhx]$ sqlplus / as sysdba

 

SQL*Plus: Release 10.2.0.1.0 - Production on Fri Dec 11 21:45:22 2015

 

Copyright (c) 1982, 2005, Oracle.  All rights reserved.

 

 

Connected to:

Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production

With the Partitioning, OLAP and Data Mining options

 

 

下面重点操作:使用控制文件覆盖数据库,用redo日志去恢复

一个一个尝试 redo01.log,redo02.log redo03.log

 

SQL> recover database using backup controlfile;   -

ORA-00279: change 511001 generated at 12/11/2015 00:39:04 needed for thread 1

ORA-00289: suggestion :

/DBSoftware/app/oracle/flash_recovery_area/VMLHX/archivelog/2015_12_11/o1_mf_1_3

_%u_.arc

ORA-00280: change 511001 for thread 1 is in sequence #3

 

 

Specify log: {<RET>=suggested | filename | AUTO | CANCEL}

/DBSoftware/app/oracle/oradata/vmlhx/redo01.log

ORA-00310: archived log contains sequence 2; sequence 3 required

ORA-00334: archived log: '/DBSoftware/app/oracle/oradata/vmlhx/redo01.log'

 

 

 

SQL> recover database using backup controlfile;

ORA-00279: change 511001 generated at 12/11/2015 20:39:04 needed for thread 1

ORA-00289: suggestion :

/DBSoftware/app/oracle/flash_recovery_area/VMLHX/archivelog/2015_12_11/o1_mf_1_3

_%u_.arc

ORA-00280: change 511001 for thread 1 is in sequence #3

 

 

Specify log: {<RET>=suggested | filename | AUTO | CANCEL}

/DBSoftware/app/oracle/oradata/vmlhx/redo02.log

ORA-00279: change 532285 generated at 12/11/2015 20:48:46 needed for thread 1

ORA-00289: suggestion :

/DBSoftware/app/oracle/flash_recovery_area/VMLHX/archivelog/2015_12_11/o1_mf_1_4

_%u_.arc

ORA-00280: change 532285 for thread 1 is in sequence #4

ORA-00278: log file '/DBSoftware/app/oracle/oradata/vmlhx/redo02.log' no longer

needed for this recovery

 

 

Specify log: {<RET>=suggested | filename | AUTO | CANCEL}

/DBSoftware/app/oracle/oradata/vmlhx/redo03.log       这里是使用了redo03.log成功。

Log applied.

Media recovery complete.

 

SQL> alter database open resetlogs; 一定要用resetlogs去打开数据库,操作显示成功打开并恢复数据库。

 

Database altered.

 

SQL> archive log list;

Database log mode              No Archive Mode

Automatic archival             Disabled

Archive destination            USE_DB_RECOVERY_FILE_DEST

Oldest online log sequence     0

Current log sequence           1

SQL> host   

 

 

下面是我备份所有redo日志的操作。

[oracle@vmlhx vmlhx]$ ls

control01.ctl  control03.ctl  example02.dbf  hygeia_temp01.dbf  redo02.log  sysaux01.dbf  system01.dbf  temp01.dbf  undotbs01.dbf  users01.dbf

control02.ctl  example01.dbf  hygeia01.dbf   redo01.log         redo03.log  sysaux02.dbf  system02.dbf  temp02.dbf  undotbs02.dbf  users02.dbf

[oracle@vmlhx vmlhx]$ cp redo01.log /orabak/redo01.bak

[oracle@vmlhx vmlhx]$ cp redo02.log /orabak/redo02.bak

[oracle@vmlhx vmlhx]$ cp redo03.log /orabak/redo03.bak

[oracle@vmlhx vmlhx]$ cd /orabak/

[oracle@vmlhx orabak]$ ls

controlfile_20151211.bak  expdp_vmlhx_full.dmp  exp_vmlhx_full_bak.sh  exp_vmlhx_full.log  redo02.bak  sqlnet.log

expdp_vmlhx_full_bak.sh   expdp_vmlhx_full.log  exp_vmlhx_full.dmp     redo01.bak          redo03.bak

[oracle@vmlhx orabak]$ ls -l

total 294604

-rw-r----- 1 oracle oinstall  7061504 Dec 11 22:35 controlfile_20151211.bak

-rwxr-xr-x 1 oracle oinstall      131 Dec 11 23:32 expdp_vmlhx_full_bak.sh

-rw-r----- 1 oracle oinstall 66621440 Dec 11 22:29 expdp_vmlhx_full.dmp

-rw-r--r-- 1 oracle oinstall    54594 Dec 11 22:29 expdp_vmlhx_full.log

-rwxr-xr-x 1 oracle oinstall      114 Dec 23 22:48 exp_vmlhx_full_bak.sh

-rw-r--r-- 1 oracle oinstall 70180864 Dec 11 22:23 exp_vmlhx_full.dmp

-rw-r--r-- 1 oracle oinstall   105230 Dec 11 22:23 exp_vmlhx_full.log

-rw-r----- 1 oracle oinstall 51129312 Dec 11 21:56 redo01.bak

-rw-r----- 1 oracle oinstall 51129312 Dec 11 21:57 redo02.bak

-rw-r----- 1 oracle oinstall 51129312 Dec 11 21:57 redo03.bak

-rw-r--r-- 1 oracle oinstall      663 Dec 11 21:57 sqlnet.log

 

[oracle@vmlhx orabak]$

备注:这是不完全恢复数据库,只能恢复到备份时的操作,已经提交状态的redo日志所有的数据,redo日志未写入的脏数据或修改的数据无法恢复,这个也跟过去的时间有关,如果是刚刚删除几分钟的数据还是可以通过flashback 闪回的。因为是在非归档模式下的操作。