ITPub博客

首页 > 数据库 > Oracle > RMAN异机恢复

RMAN异机恢复

原创 Oracle 作者:gxlineji 时间:2016-09-13 15:00:44 0 删除 编辑



前期准备

在源库备份的时候,可以产生一个checkpoint,触发写数据库文件,并记录当前checkpoint

alter system checkpoint;

select t.CHECKPOINT_CHANGE#,t.CURRENT_SCN from v$database t;

recover database until time "to_date('2015-12-04 06:41:11','yyyy-mm-dd hh24:mi:ss')";

recover database until scn 11490541742112;

大体步骤:

(1)恢复spfile

(2)恢复控制文件

(3)restore数据库文件

(4)recover数据库


开始恢复

安装一个数据库名称一样的数据库

(也可以不安装数据库,但要手工创建参数文件里的一些目录)

删掉新数据库的文件(datafile、logfile、cronfile)

删掉spfile文件

ASMCMD> cd DATAFILE

ASMCMD> rm ./*


spfile   +DATA/mm100/spfilemm100.ora

create spfile='/home/oracle/spfilemm100.ora' from pfile='$ORACLE_HOME/dbs/initmm1001.ora'


恢复spfile

restore spfile to '$ORACLE_HOME/dbs/spfilebiostime1.ora' from '/u02/backup/lev"2"_mm100x_101763_1_20151204';

shutdown immediate


创建pfile

export ORACLE_SID=mm1001

Create pfile='$ORACLE_HOME/dbs/initbiostime1.ora' from spfile='$ORACLE_HOME/dbs/spfilebiostime1.ora';


修改pfile(如果安装了个一样名称的数据库,可以使用当前pfile,只修改控制文件路径)

vim $ORACLE_HOME/dbs/initmm1001.ora

mm1001.__oracle_base='/u01/app/oracle'#ORACLE_BASE set from environment

mm1002.__oracle_base='/u01/app/oracle'#ORACLE_BASE set from environment

*.audit_file_dest='/u01/app/oracle/admin/mm100/adump'

*.db_file_name_convert='/u01/app/oracle/oradata/mm100/','+DATA/mm100/datafile/'

*.diagnostic_dest='/u01/app/oracle'

*.log_archive_dest_1='location=/u02/archivelog valid_for=(all_logfiles,all_roles) db_unique_name=mm100'

*.log_file_name_convert='/u02/archivelog','/u02/archivelog'

.remote_listener='bstrac-scan:1521'

*.control_files='+DATA/mm100/controlfile/current.01','+DATA/mm100/controlfile/current.02'


删除*.log_archive_start=TRUE (废弃参数)


以pfile启动数据库

startup nomount pfile='$ORACLE_HOME/dbs/initmm1001.ora'


恢复控制文件

rman target /

restore controlfile to '+DATA/mm100/controlfile/current.01' from '/u02/backup/lev"2"_mm100x_101762_1_20151204';

restore controlfile to '+DATA/mm100/controlfile/current.02' from '/u02/backup/lev"2"_mm100x_101762_1_20151204';


启动数据库

startup mount

注册备份目录下所有备份文件:

catalog start with '/u02/backup/';

#注册单个备份文件:

CATALOG backuppiece '/u02/rman_backup/ctlmm100x_101926_1_20151222';

如果恢复的目标数据库路径不同,需要转换路径

select '"'||FILE#||'","'||name||'"' from v$datafile;

恢复数据库(目标路径不同)

run

{

set newname for datafile  1 to "/u01/app/oracle/oradata/biostime/datafile/system.293.882705495";

set newname for datafile  2 to "/u01/app/oracle/oradata/biostime/datafile/sysaux.294.882705495";

set newname for datafile  3 to "/u01/app/oracle/oradata/biostime/datafile/undotbs1.295.882705497"

restore database;

switch datafile all;

}


恢复数据库(目标路径相同)

restore database;


复制归档日志

cp /u02/backup/bst/arc799866443_1* /u02/archivelog/

cp ../backup/bst/arc799866443_2_143* /u02/archivelog/

scp /u02/backup/bst/arc799866443_2_143* s009pm:/u02/archivelog/


RAC2:

scp $ORACLE_HOME/dbs/initmm1001.ora  s009pm:$ORACLE_HOME/dbs/initmm1002.ora

startup nomount pfile='$ORACLE_HOME/dbs/initmm1002.ora'


show parameter control

alter database mount;

#注册归档日志

catalog start with '/u02/rman_backup/arch/';

recover database until scn 11492757742007;

Run

{

Set until time "to_date('2015-12-22 07:30:00','yyyy-mm-dd hh24:mi:ss')";

Restore database;

Recover database;

}


#注册归档日志备份集

CATALOG backuppiece '/u02/rman_backup/tlmm100x_101926_1_20151222';

#注册归档日志文件

CATALOG archivelog  '/u02/rman_backup/arch/arc799866443_1_179460.arc';

CATALOG archivelog '/u02/rman_backup/arch/arc799866443_1_179461.arc';

CATALOG archivelog '/u02/rman_backup/arch/arc799866443_1_179462.arc';


Run

{

Set until time "to_date('2015-12-22 08:00:00','yyyy-mm-dd hh24:mi:ss')";

Recover database;

}


遇到的问题

问题:

RMAN> alter database open RESETLOGS;

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

RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============

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

RMAN-03002: failure of alter db command at 12/24/2015 16:26:33

ORA-19809: limit exceeded for recovery files

ORA-19804: cannot reclaim 537919488 bytes disk space from 53687091200 limit

解决办法:

alter system set db_recovery_file_dest_size =200g  scope=both;


[grid@s008pm: ~]$ asmcmd

ASMCMD> cd +DATA/mm100/onlinelog/

ASMCMD> ls

group_1.261.898898995

group_1.652.899310391

group_2.262.898898995

group_3.265.898899113

group_4.266.898899113


select group#,bytes/1024/1024||'M',status from v$log;

shutdown immediate

startup mount

alter database open resetlogs;

alter database clear logfile group 1;

alter database clear logfile group 2;

alter database clear logfile group 3;

alter database clear logfile group 4;

alter database clear logfile group 5;

alter database clear logfile group 6;


升级数据库

(根据实际需要)

由于源数据库是11.2.0.3的版本,而新数据库是11.2.0.4的版本,因此需要升级

(rac1  rac2)

ALTER SYSTEM SET CLUSTER_DATABASE=FALSE scope=spfile ;

SHUTDOWN IMMEDIATE;

startup UPGRADE;


在其中一个节点执行:

@?/rdbms/admin/utlu112i.sql

@?/rdbms/admin/catupgrd.sql

@?/rdbms/admin/utlu112s.sql

@?/rdbms/admin/catuppst.sql

@?/rdbms/admin/utlrp


ALTER SYSTEM SET CLUSTER_DATABASE=TRUE scope=spfile ;


srvctl stop database -d [db_name]

srvctl stop asm -n [node_name]

crsctl stop crs

/etc/init.d/init.crs stop


RAC的停止和启动

停止RAC:

emctl stop dbconsole

srvctl stop instance -d mm100 -i mm1001

srvctl stop instance -d mm100 -i mm1002

srvctl stop database -d mm100

srvctl stop asm -n s008pm

srvctl stop asm -n s009pm

srvctl stop nodeapps -n s008pm

srvctl stop nodeapps -n s009pm

启动RAC:     

和上面的步骤正好相反即

srvctl start nodeapps -n s008pm

srvctl start nodeapps -n s009pm

srvctl start asm -n s008pm

srvctl start asm -n s009pm

srvctl start instance -d mm100 -i mm1001

srvctl start instance -d mm100 -i mm1002


来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/10995764/viewspace-2124889/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2008-09-11

  • 博文量
    48
  • 访问量
    76656