您的位置:首页 > 其它

RMAN 备份集在异机异路径下恢复过程

2012-07-18 11:48 423 查看
RMAN 备份集在异机异路径下恢复过程

http://hi.baidu.com/jason_xux/blog/item/d5f078ed08a34f3126979182.html

RMAN 备份集在异机异路径下恢复过程详解!

这两天对备份与恢复做了点研究,整理成文档如下:

RMAN 备份集在异机异路径下恢复过程

原数据库环境

机器名:yfzx

数据库名:HRP270

归档模式打开

路径: I:ORACLEPRODUCT10.2.0db_1

新数据库环境:

机器名:zhengsh

只安装了数据库ORACLE 10.2G软件,在D盘,没有建数据库,该机器没有I盘

1.通过网络拷贝RMAN备份文件到zhengsh机器下E:ora_bak,包括数据备份、控制文件备份、SPFILE文件备份

2.建立数据库服务

C:Documents and Settingszhengsh>oradim -NEW -SID HRP270 -INTPWD bsoft -pfile

"E:ora_bakpfilehrp270.ora"

结果: 成功!

注意

用此方法建的ORACLE服务只是个壳,windows服务启动不代表ORACLE的实例启动,需要在安装完ORACLE后在注册表中设置

加在HKEY_LOCAL_MACHINEORACLEHOME下加上

ORA_SID_auto_old=TURE

ORA_SID_SHUTDOWN=TURE

ORA_SID_SHUTDOWNTYPE=i

3.配置监听与网络连接

结果:

监听配置成功

网络连接配置失败

4.在CMD中设置环境变量

Set oracle_sid=hrp270

手工建立相应子目录

5.通过登录RMAN获取原数库DBID=79382924

在RMAN中设置DBID

set DBID=79382924

6.恢复控制文件

在sqlplus中启动到NOMOUNT状态

Sql>Startup nomount

Sql>exit

进入RMAN

C:>rman target sys/bsoft

执行命令

run{

set controlfile autobackup format for device type disk to 'E:ora_bak %d_%s_%p.bak';

restore controlfile from autobackup;

}

结果: 失败!

改用以下方式来替代

declare

devtype varchar2(256);

done boolean;

begin

devtype:=dbms_backup_restore.deviceallocate(NULL);

dbms_backup_restore.restoresetdatafile;

dbms_backup_restore.restorecontrolfileto('D:oracleproduct10.2.0oradatahrp270control01.ctl');

dbms_backup_restore.restorebackuppiece('E:ora_bakC-79382924-20070330-00',DONE=>done);

end;

结果: 成功!

然后拷贝二个一样的文件(control01,control02)到同一目录下

7.修改数据文件路径在RMAN中到新机器安装路径,然后RESTORE DATABASE

Rman sys/bsoft

Startup mount

Run{

Set newname for datafile 1 to 'D:ORACLEPRODUCT10.2.0ORADATAHRP270SYSTEM01.DBF';

Set newname for datafile 2 to 'D:ORACLEPRODUCT10.2.0ORADATAHRP270UNDOTBS01.DBF';

Set newname for datafile 3 to 'D:ORACLEPRODUCT10.2.0ORADATAHRP270SYSAUX01.DBF';

Set newname for datafile 4 to 'D:ORACLEPRODUCT10.2.0ORADATAHRP270USERS01.DBF';

Set newname for datafile 5 to 'D:ORACLEPRODUCT10.2.0ORADATAHRP270EXAMPLE01.DBF';

Set newname for datafile 6 to 'D:ORACLEPRODUCT10.2.0ORADATAHRP270HIS01';

Set newname for datafile 7 to 'D:ORACLEPRODUCT10.2.0ORADATAHRP270TEST01';

Set newname for datafile 8 to 'D:ORACLEPRODUCT10.2.0ORADATAHRP270STREAMS_TBS.DBF';

}

Rman>restore databased;

结果: 还是提示找不到恢复文件位置,恢复失败

8采用DBMS_BACKUP_RESTORE包进行恢复数据库

以下恢复数据文件

Startup nomount

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.restoreDatafileTo(dfnumber=>01,toname=>'D:ORACLEPRODUCT10.2.0ORADATAHRP270SYSTEM01.DBF');

sys.dbms_backup_restore.restoreDatafileTo(dfnumber=>02,toname=>'D:ORACLEPRODUCT10.2.0ORADATAHRP270UNDOTBS01.DBF');

sys.dbms_backup_restore.restoreDatafileTo(dfnumber=>03,toname=>'D:ORACLEPRODUCT10.2.0ORADATAHRP270SYSAUX01.DBF');

sys.dbms_backup_restore.restoreDatafileTo(dfnumber=>04,toname=>'D:ORACLEPRODUCT10.2.0ORADATAHRP270USERS01.DBF');

sys.dbms_backup_restore.restoreDatafileTo(dfnumber=>05,toname=>'D:ORACLEPRODUCT10.2.0ORADATAHRP270EXAMPLE01.DBF');

sys.dbms_backup_restore.restoreDatafileTo(dfnumber=>06,toname=>'D:ORACLEPRODUCT10.2.0ORADATAHRP270HIS01');

sys.dbms_backup_restore.restoreDatafileTo(dfnumber=>07,toname=>'D:ORACLEPRODUCT10.2.0ORADATAHRP270TEST01');

sys.dbms_backup_restore.restoreDatafileTo(dfnumber=>08,toname=>'D:ORACLEPRODUCT10.2.0ORADATAHRP270STREAMS_TBS.DBF');

sys.dbms_backup_restore.restoreBackupPiece(done=>done,handle=>'E:ora_bakHRP270_18_1.BAK', params=>null);

sys.dbms_backup_restore.deviceDeallocate;

END;

/

结果: 恢复成功!

以下恢复归档日志

SQL> DECLARE

devtype varchar2(256);

done boolean;

BEGIN

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

sys.dbms_backup_restore.restoreSetArchivedLog(destination=>' D:oracleproduct10.2.0flash_recovery_areaHRP270ARCHIVELOG');

sys.dbms_backup_restore.restoreArchivedLog(thread=>1,sequence=>6);

sys.dbms_backup_restore.restoreBackupPiece(done=>done,handle=>'E:ora_bakHRP270_17_1.BAK',params=>null);

sys.dbms_backup_restore.deviceDeallocate;

END;

/

结果: 无法打开归档日志,恢复失败!,估计sequence值需要正确设置,但怎么找还不知道。

下面就用无归档日志来恢复数据库

9.修改数据文件在控制文件中路径

Alter database rename file 'I:ORACLEPRODUCT10.2.0ORADATAHRP270SYSTEM01.DBF' to 'D:ORACLEPRODUCT10.2.0ORADATAHRP270SYSTEM01.DBF';

Alter database rename file 'I:ORACLEPRODUCT10.2.0ORADATAHRP270UNDOTBS01.DBF' to 'D:ORACLEPRODUCT10.2.0ORADATAHRP270UNDOTBS01.DBF';

Alter database rename file 'I:ORACLEPRODUCT10.2.0ORADATAHRP270SYSAUX01.DBF' to 'D:ORACLEPRODUCT10.2.0ORADATAHRP270SYSAUX01.DBF';

Alter database rename file 'I:ORACLEPRODUCT10.2.0ORADATAHRP270USERS01.DBF' to 'D:ORACLEPRODUCT10.2.0ORADATAHRP270USERS01.DBF';

Alter database rename file 'I:ORACLEPRODUCT10.2.0ORADATAHRP270EXAMPLE01.DBF' to 'D:ORACLEPRODUCT10.2.0ORADATAHRP270EXAMPLE01.DBF';

Alter database rename file 'I:ORACLEPRODUCT10.2.0ORADATAHRP270HIS01' to 'D:ORACLEPRODUCT10.2.0ORADATAHRP270HIS01';

Alter database rename file 'I:ORACLEPRODUCT10.2.0ORADATAHRP270TEST01' to 'D:ORACLEPRODUCT10.2.0ORADATAHRP270TEST01';

Alter database rename file 'I:ORACLEPRODUCT10.2.0ORADATAHRP270STREAMS_TBS.DBF' to 'D:ORACLEPRODUCT10.2.0ORADATAHRP270STREAMS_TBS.DBF';

10.重新指定REDO Log路径

删除以前的REDO LOG,由于GROUP 2是当前日志组,所以先删除GROUP 1 与GROUP 3,然后重建日志文件,再切换日志,再删除GROUP 2;

SQL>ALTER DATABASE DROP LOGFILE GROUP 1;

SQL>ALTER DATABASE DROP LOGFILE GROUP 2;

SQL> ALTER DATABASE ADD LOGFILE ('D:ORACLEPRODUCT10.2.0ORADATAHRP270REDO01.LOG') SIZE 30M;

EM

SQL> ALTER DATABASE ADD LOGFILE ('D:ORACLEPRODUCT10.2.0ORADATAHRP270REDO01

.LOG') SIZE 30M;

数据库已更改。

SQL> ALTER DATABASE ADD LOGFILE ('D:ORACLEPRODUCT10.2.0ORADATAHRP270REDO03

.LOG') SIZE 30M;

数据库已更改。

SQL> ALTER SYSTEM SWITCH LOGFILE;

ALTER SYSTEM SWITCH LOGFILE

*

第 1 行出现错误:

ORA-01109: 数据库未打开

SQL> RECOVER DATABASE UNTIL CANCEL;

ORA-00283: 恢复会话因错误而取消

ORA-01610: 使用 BACKUP CONTROLFILE 选项的恢复必须已完成

结果: 失败!

改用以下11步骤来做

11.用重建控制文件的方法来重建数据库(一定要使用导出文件的后一部分来建)

CREATE CONTROLFILE REUSE DATABASE "HRP270" RESETLOGS ARCHIVELOG

MAXLOGFILES 16

MAXLOGMEMBERS 3

MAXDATAFILES 100

MAXINSTANCES 8

MAXLOGHISTORY 292

LOGFILE

GROUP 1 'D:ORACLEPRODUCT10.2.0ORADATAHRP270REDO01.LOG' SIZE 50M,

GROUP 2 'D:ORACLEPRODUCT10.2.0ORADATAHRP270REDO02.LOG' SIZE 50M,

GROUP 3 'D:ORACLEPRODUCT10.2.0ORADATAHRP270REDO03.LOG' SIZE 50M,

GROUP 4 'D:ORACLEPRODUCT10.2.0ORADATAHRP270REDO4.LOG' SIZE 200M

-- STANDBY LOGFILE

DATAFILE

'D:ORACLEPRODUCT10.2.0ORADATAHRP270SYSTEM01.DBF',

'D:ORACLEPRODUCT10.2.0ORADATAHRP270UNDOTBS01.DBF',

'D:ORACLEPRODUCT10.2.0ORADATAHRP270SYSAUX01.DBF',

'D:ORACLEPRODUCT10.2.0ORADATAHRP270USERS01.DBF',

'D:ORACLEPRODUCT10.2.0ORADATAHRP270EXAMPLE01.DBF',

'D:ORACLEPRODUCT10.2.0ORADATAHRP270HIS01',

'D:ORACLEPRODUCT10.2.0ORADATAHRP270TEST01',

'D:ORACLEPRODUCT10.2.0ORADATAHRP270STREAMS_TBS.DBF'

CHARACTER SET ZHS16GBK

;

结果: 成功!

12.恢复及打开数据库

SQL> recover database using backup controlfile until cancel;

SQL> alter database open resetlogs;

结果: 成功!

到此为止已可以完全打开数据库!

13.创建web访问em服务

设置环境变量 set ORACLE_HOSTNAME=zhengsh (为机器名)

重建密码文件

orapwd file=D:oracleproduct10.2.0db_1databasePWDhrp270.ora password=bsoft entries=10

建立临时表空间,因为建完数据库后临时表空间为0,需要重新增加表空间

SQL> alter tablespace temp add tempfile 'D:oracleproduct10.2.0oradatahrp270

temp1.dbf' size 100m;

删除原资料库

emca -deconfig all db -repos drop

建立资料库

emca -config dbcontrol db -repos create

结果: 成功!

到目前为止可以使用EM,全部工作成功完成
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: