您的位置:首页 > 其它

只有rman的备份文件(数据文件)恢复过程

2012-01-03 16:52 288 查看
通过rman备份文件恢复spfile

通过rman备份文件恢复controlfile

通过rman备份文件恢复datafile

利用恢复回来的controlfile和datafile生成redolog

我系统环境所有的文件如下:

[oracle@test dbs]$ pwd

/opt/oracle/10g/dbs

[oracle@test dbs]$ ls

initdw.ora init.ora

ls /opt/oracle/flash_recovery_area/ORCL/backupset/2008_07_18/

o1_mf_ncsnf_TAG20080718T203240_482fls2h_.bkp

o1_mf_nnndf_TAG20080718T203240_482fkb0k_.bkp

在我这台电脑上, ,系统中所有的ORCL相关的数据文件,参数文件,日志文件,控制文件全部不在了, 没有其他可用的备份文件了,只有rman备份的文件在,这可怎么办呢?

restore必须在mount or open状态下.参数文件,控制文件都没有怎么mount?

要mount必须有参数文件,控制文件,为此我们必须解决这2个难题了.参数文件,控制文件

在解决难题前先准备ORCL的必须的目录:

[oracle@test dbs]mkdir /opt/oracle/oradata/orcl

[oracle@test dbs]mkdir /opt/oracle/admin/orcl/adump –p

[oracle@test dbs]mkdir /opt/oracle/admin/orcl/cdump

[oracle@test dbs]mkdir /opt/oracle/admin/orcl/bdump

[oracle@test dbs]mkdir /opt/oracle/admin/orcl/udump

[oracle@test dbs]mkdir /opt/oracle/admin/orcl/dpdump

[oracle@test dbs]mkdir /opt/oracle/admin/orcl/pfile

难题1:spfile参数文件恢复

有人说没参数文件我新建立一个pfile,当然这个办法是可行的,不过在10g中rman备份是自动备份了spfile的,所以我们可以利用rman来恢复spfile了.

[oracle@test dbs]rman target / nocatalog

RMAN> list backup;

RMAN-00571: ================================================

RMAN-03002: failure of list command at 07/18/2008 21:24:37

RMAN-06403: could not obtain a fully authorized session

ORA-01034: ORACLE not available

ORA-27101: shared memory realm does not exist

看到上面的是正常的,因为数据库没有启动呢.

于是我们先启动数据库到nomout下

RMAN>startup nomount

startup failed: ORA-01078: failure in processing system parameters

LRM-00109: could not open parameter file '/opt/oracle/10g/dbs/initorcl.ora'

starting Oracle instance without parameter file for retrival of spfile

Oracle instance started

RMAN>list backup;

将与上次执行看到的一样,此时也是正常的,不必担心,下面就是利用rman备份文件来解决难题1了.

RMAN>

restore spfile from

'/opt/oracle/flash_recovery_area/ORCL/backupset/2008_07_18/o1_mf_ncsnf_TAG20080718T203240_482fls2h_.bkp';

下面是来验证spfileorcl.ora文件是否已存在:

[oracle@test dbs]$ ls

initdw.ora init.ora spfileorcl.ora

有了参数文件,就需要解决控制文件恢复了

难题2. 控制文件恢复

有分为两种方法来处理:

1是有在configure中设定autobackup controlfile

2在configure中没有设定autobackup controlfile;

平时可以通过在RMAN中输入CONFIGURE CONTROLFILE AUTOBACKUP ON;就会自动备份了

是有在configure中设定autobackup controlfile的解决方法

启动到startup nomount;

RMAN>restore controlfile from

'/opt/oracle/flash_recovery_area/ORCL/backupset/2008_07_18/o1_mf_ncsnf_TAG20080718T203240_482fls2h_.bkp';

2.在configure中沒有设定autobackup controlfile 就可以通过下面的package从backupset中來提取controlfile

利用dbms_backup_restore提取controlfile恢复控制文件

步骤:

[oracle@test dbs]$sqlplus /nolog

SQL> conn /as sysdba

由于在刚才使用rman时执行了startup nomount,所以这里是connected,下面我们到nomount状态

SQL> startup force nomount

SQL>DECLARE

devtype varchar2(256);

done boolean;

BEGIN

devtype:=sys.dbms_backup_restore.deviceAllocate(type=>'',ident=>'T1');

sys.dbms_backup_restore.restoreSetDatafile;

sys.dbms_backup_restore.restoreControlfileTo(cfname=>'/opt/oracle/oradata/orcl/control01.ctl');

sys.dbms_backup_restore.restoreBackupPiece(done=>done,handle=>'/opt/oracle/flash_recovery_area/ORCL/backupset/2008_07_18/o1_mf_ncsnf_TAG20080718T203240_482fls2h_.bkp',params=>null);

sys.dbms_backup_restore.deviceDeallocate;

end;

/

下面验证control01.ctl是否恢复:

[oracle@test dbs]$ ls /opt/oracle/oradata/orcl/

control01.ctl

于是我们可以启动数据库到mount状态了.

[oracle@test dbs]$sqlplus /nolog

SQL> conn /as sysdba

SQL> startup force mount

ORA-00205: error in identifying control file, check alert log for more info

我们已经恢复了控制文件了,怎么还是有错误呢,其实不用担心,看看spfile中的记录先

SQL> show parameter control_files

NAME TYPE VALUE

------------------------------------ ----------- ------------------------------

control_files string

/opt/oracle/oradata/orcl/control01.ctl, /control02.ctl, control03.ctl

既然如此,我们就把控制文件同步下好了.

SQL> ho cp /opt/oracle/oradata/orcl/control01.ctl

/opt/oracle/oradata/orcl/control02.ctl

SQL> ho cp /opt/oracle/oradata/orcl/control01.ctl /opt/oracle/oradata/orcl/control03.ctl

SQL> alter database mount;

SQL> ho ls /opt/oracle/oradata/orcl/

control01.ctl control02.ctl control03.ctl

3、恢复数据文件

有了恢复后的控制文件,我们就可以使用rman查看与使用以前的rman备份了.

恢复datafile 步骤:

rman target / nocatalog

connected to target database: ORCL (DBID=1188209463, not open)

看到了 红色部分了吗,太好了终于看到了正常的rman登陆信息了.

那就RMAN> list backup; 看看能找到我们的

o1_mf_ncsnf_TAG20080718T203240_482fls2h_.bkp

o1_mf_nnndf_TAG20080718T203240_482fkb0k_.bkp

太好了,总于可以使用restore,recover来恢复datafile了.

RMAN> restore database;

此时可以在$ORACLE_BASE/oradata/orcl/下看到期望已久的datafile了.

[oracle@test dbs] ls /opt/oracle/oradata/orcl/

control01.ctl sysaux01.dbf system01.dbf undotbs01.dbf users01.dbf

不过此时还没有完哈,需要在接在励.

由于没有redo log日志文件所以我们不能应用日志恢复:

4、恢复redo日志文件、日志文件、密码文件

RMAN> recover database noredo;

到目前我们已经拥有了参数文件,控制文件,数据文件了:

[oracle@test dbs] ls /opt/oracle/oradata/orcl/

[oracle@test dbs] ls /opt/oracle/10g/dbs/

alert_orcl.log hc_orcl.dat initdw.ora init.ora lkORCL spfileorcl.ora

还差一个密码文件,以及相关的日志文件了.

先解决密码文件:

[oracle@test dbs] orapwd file=/opt/oracle/10g/dbs/orapworcl password=uplooking entries=5

[oracle@test dbs] ls /opt/oracle/10g/dbs/

alert_orcl.log initdw.ora lkORCL spfileorcl.ora hc_orcl.dat init.ora orapworcl

下面需要大家坚持不懈的完成最后一个工作了.

那就是通过已经恢复的controlfile and datafile 来演算出redo log file了.

步骤:

[oracle@test dbs]sqlplus /nolog

SQL> conn /as sysdba

SQL>startup mount;

SQL> alter system set "_allow_resetlogs_corruption"=TRUE scope=spfile;

SQL>ho ls /opt/oracle/oradata/orcl/

control01.ctl control03.ctl sysaux01.dbf undotbs01.dbf

control02.ctl orapworcl system01.dbf users01.dbf

下面没有redo log file ,下面我将演算出redo log

SQL>startup force

ORA-01589: must use RESETLOGS or NORESETLOGS option for database open

SQL>alter database open resetlogs;

SQL> ho ls /opt/oracle/oradata/orcl/

好了到这里,非常高兴了,你已经成功的从只有rman备份文件中恢复了参数文件,控制文件,所有数据文件,日志文件了.

最好在做个数据库全备份
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐