Oracle RMAN 异机恢复到不同路径
(2012-11-06 14:00:07)
标签:
杂谈 |
分类: oracle数据恢复 |
Oracle
要求:将备份恢复到异机不同路径
(一 )数据库源端操作
1. 置于归档模式
[oracle@AS5 ~]$ sqlplus /nolog
SQL*Plus: Release 10.2.0.4.0 - Production on Sun Oct 10 00:45:39 2010
Copyright (c) 1982, 2007, Oracle. All Rights Reserved.
SQL> connect /as sysdba;
Connected to an idle instance.
SQL> startup mount;
ORACLE instance started.
Total System Global Area 251658240 bytes
Fixed Size 2083104 bytes
Variable Size 109053664 bytes
Database Buffers 134217728 bytes
Redo Buffers 6303744 bytes
Database mounted.
SQL> alter database archivelog;
Database altered.
SQL> alter system set log_archive_dest='/opt/archive' scope=both;
System altered.
SQL> alter database open;
Database altered.
SQL> archive log list;
Database log mode Archive Mode
Automatic archival Enabled
Archive destination /opt/archive
Oldest online log sequence 1
Next log sequence to archive 2
Current log sequence 2
2.RMAN 备份 (注意观察DBID)
[oracle@AS5 opt]$ rman target /
Recovery Manager: Release 10.2.0.4.0 - Production on Sun Oct 10 00:47:22 2010
Copyright (c) 1982, 2007, Oracle. All rights reserved.
connected to target database: 10G (DBID=3437766694)
3. 显示参数信息,确认自动备份spfile 和 controlfile
RMAN> show all;
using target database control file instead of recovery catalog
RMAN configuration parameters are:
CONFIGURE RETENTION POLICY TO REDUNDANCY 1; # default
CONFIGURE BACKUP OPTIMIZATION OFF; # default
CONFIGURE DEFAULT DEVICE TYPE TO DISK; # default
CONFIGURE CONTROLFILE AUTOBACKUP OFF; # default
CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '%F'; # default
CONFIGURE DEVICE TYPE DISK PARALLELISM 1 BACKUP TYPE TO BACKUPSET; # default
CONFIGURE DATAFILE BACKUP COPIES FOR DEVICE TYPE DISK TO 1; # default
CONFIGURE ARCHIVELOG BACKUP COPIES FOR DEVICE TYPE DISK TO 1; # default
CONFIGURE MAXSETSIZE TO UNLIMITED; # default
CONFIGURE ENCRYPTION FOR DATABASE OFF; # default
CONFIGURE ENCRYPTION ALGORITHM 'AES128'; # default
CONFIGURE ARCHIVELOG DELETION POLICY TO NONE; # default
CONFIGURE SNAPSHOT CONTROLFILE NAME TO '/opt/ora10/product/oracle/dbs/snapcf_10g.f'; # default
4. 修改自动备份spfile 和 controlfile
RMAN> CONFIGURE CONTROLFILE AUTOBACKUP ON;
new RMAN configuration parameters:
CONFIGURE CONTROLFILE AUTOBACKUP ON;
new RMAN configuration parameters are successfully stored
5. rman 备份
RMAN> backup database format '/tmp/backup/back_%t' tag 'Full_backup';
Starting backup at 10-OCT-10
allocated channel: ORA_DISK_1
channel ORA_DISK_1: sid=131 devtype=DISK
channel ORA_DISK_1: starting full datafile backupset
channel ORA_DISK_1: specifying datafile(s) in backupset
input datafile fno=00001 name=/opt/ora10/product/oradata/10g/system01.dbf
input datafile fno=00003 name=/opt/ora10/product/oradata/10g/sysaux01.dbf
input datafile fno=00002 name=/opt/ora10/product/oradata/10g/undotbs01.dbf
input datafile fno=00004 name=/opt/ora10/product/oradata/10g/users01.dbf
channel ORA_DISK_1: starting piece 1 at 10-OCT-10
channel ORA_DISK_1: finished piece 1 at 10-OCT-10
piece handle=/tmp/backup/back_731983716 tag=FULL_BACKUP comment=NONE
channel ORA_DISK_1: backup set complete, elapsed time: 00:00:35
Finished backup at 10-OCT-10
Starting Control File and SPFILE Autobackup at 10-OCT-10
piece handle=/opt/ora10/product/oracle/dbs/c-3437766694-20101010-00 comment=NONE
Finished Control File and SPFILE Autobackup at 10-OCT-10
6. 复制spfile和control file的备份文件到数据库备份目录
[oracle@AS5 opt]$ cp /opt/ora10/product/oracle/dbs/c-3437766694-20101010-00 /tmp/backup/
[oracle@AS5 opt]$ cd /tmp/backup/
[oracle@AS5 backup]$ ls -l
total 555784
-rw-r----- 1 oracle oinstall 561414144 Oct 10 00:49 back_731983716
-rw-r----- 1 oracle oinstall 7143424 Oct 10 00:51 c-3437766694-20101010-00
7.复制文件到目标端
[oracle@AS5 tmp]$ scp backup.tar oracle@192.168.1.12:/tmp
(二)目标服务器端操作
1.安装Oracle 软件, 并安装相同版本的补丁,安装路径保持和源端一致
2. netca配置监听,并启动它
3. 在G:\oracle\product\10.2.0\db_1\database(Linux 是在 dbs目录)下建立一文件
SPFILE=G:\oracle\product\10.2.0\db_1/dbs/spfiletest.ora
4.使用命令为Windows 添加相同的服务,并启动它
C:\>oradim -NEW -SID test
5. 在目标端建立密码文件
C:\>orapwd file=G:\oracle\product\10.2.0\db_1\database\PWDtest.ora
6. 源将数据库的RMAN备份文件包括pfile和control, 以及生成的pfile 都复制到目标服务器
所有文件仍然复制到目标的 d:\back 目录下
7. 根据以前的spfile中定义的admin目录,建立相应目录
建立G:\oracle\product\10.2.0\admin\ adump,bdump,cdump,udump, D:\oracle\product\10.2.0\ORADATA\TEST
8. RMAN 恢复spfile
D:\>set ORACLE_SID=test
D:\>echo %ORACLE_SID%
D:\>rman target /
恢复管理器: Release 10.2.0.4.0 - Production on 星期五 7月 15 22:35:44 2011
Copyright (c) 1982, 2007, Oracle.
已连接到目标数据库 (未启动)
9. 设置DBID
RMAN>set dbid=2054617943
10. 通过rman 启动到nomount
RMAN> startup nomount;
##以下报告正常,因为当前还没有spfile
启动失败: ORA-01078: failure in processing system parameters
ORA-01565: error in identifying file 'D:\oracle\product\10.2.0\db_1/dbs/spfiletest.ora'
ORA-27041: unable to open file
OSD-04002: ????????????
O/S-Error: (OS 2) ??????????????????????
在没有参数文件的情况下启动 Oracle 实例以检索 spfile
Oracle 实例已启动
系统全局区域总计
Fixed Size
Variable Size
Database Buffers
Redo Buffers
RMAN> restore spfile from 'g:\back\C-2054617943-20110715-00';
启动 restore 于 16-7月 -11
使用目标数据库控制文件替代恢复目录
分配的通道: ORA_DISK_1
通道 ORA_DISK_1: sid=37 devtype=DISK
通道 ORA_DISK_1: 已找到的自动备份: g:\back\C-2054617943-20110715-00
通道 ORA_DISK_1: 从自动备份复原 SPFILE 已完成
完成 restore 于 16-7月 -11
注意spfile 已恢复到 新的目录 G:\oracle\product\10.2.0\db_1\dbs\
11.spfile恢复成功后,关闭oracle
RMAN> shutdown immediate;
9. PLSQL中根据spfile将数据库启动到 mount 状态
C:\>set ORACLE_SID=test
D:\>sqlplus /nolog
SQL*Plus: Release 10.2.0.4.0 - Production on 星期五 7月 15 22:49:50 2011
Copyright (c) 1982, 2010, Oracle.
10. 根据 SPFILE 生成 pfile
SQL> create pfile='g:\p.ora' from spfile='G:\oracle\product\10.2.0\db_1\dbs\SPFILETEST.ORA';
文件已创建。
11. 修改pfile 配置datafile logfile 的位置转换,以及其它文件的位置信息
LOG_FILE_NAME_CONVERT 和DB_FILE_NAME_CONVERT 参数说明
a)
b)
*.DB_FILE_NAME_CONVERT='D:\oracle\product\10.2.0\oradata\nail','G:\oracle\product\10.2.0\oradata\nail'
*.LOG_FILE_NAME_CONVERT='D:\oracle\product\10.2.0\oradata\nail','G:\oracle\product\10.2.0\oradata\nail'
12. 生成新的spfile (建立在生成前,先备份最开始的spfile)
SQL> create spfile='G:\oracle\product\10.2.0\db_1\dbs\SPFILETEST.ORA' from pfile='G:\p.ora';
文件已创建。
13. PLSQL 中启动到nomount 状态
C:\>set ORACLE_SID=nail
C:\>sqlplus /nolog
SQL>connect /as sysdba;
SQL> connect /as sysdba;
已连接到空闲例程。
SQL> startup nomount;
ORACLE 例程已经启动。
Total System Global Area 1216348160 bytes
Fixed Size
Variable Size
Database Buffers
Redo Buffers
SQL> select name from v$datafile;
NAME
------------------------------------------------------------------
D:\ORACLE\PRODUCT\10.2.0\ORADATA\TEST\SYSTEM01.DBF
D:\ORACLE\PRODUCT\10.2.0\ORADATA\TEST\UNDOTBS01.DBF
D:\ORACLE\PRODUCT\10.2.0\ORADATA\TEST\SYSAUX01.DBF
D:\ORACLE\PRODUCT\10.2.0\ORADATA\TEST\USERS01.DBF
14. RMAN 中恢复 Control 文件
退出当前RMAN,然后再次进入,进行control 文件恢复
RMN>exit
D:\>rman target /
恢复管理器: Release 10.2.0.4.0 - Production on 星期六 7月 16 00:58:20 2011
Copyright (c) 1982, 2007, Oracle.
连接到目标数据库: TEST (未装载)
RMAN> restore controlfile from 'g:\back\C-2054617943-20110715-00';
启动 restore 于 16-7月 -11
使用目标数据库控制文件替代恢复目录
分配的通道: ORA_DISK_1
通道 ORA_DISK_1: sid=156 devtype=DISK
通道 ORA_DISK_1: 正在还原控制文件
通道 ORA_DISK_1: 还原完成, 用时: 00:00:02
输出文件名=G:\ORACLE\PRODUCT\10.2.0\ORADATA\TEST\CONTROL01.CTL
输出文件名=G:\ORACLE\PRODUCT\10.2.0\ORADATA\TEST\CONTROL02.CTL
输出文件名=G:\ORACLE\PRODUCT\10.2.0\ORADATA\TEST\CONTROL03.CTL
完成 restore 于 16-7月 -11
完成 restore 于 15-7月 -11
注意管制文件,已恢复到了新的目录位置 G 盘
15. PLSQL 中将Oracle 改变到mount 状态
SQL> alter database mount;
数据库已更改。
SQL> select name from v$datafile;
NAME
------------------------------------------------------------------
D:\ORACLE\PRODUCT\10.2.0\ORADATA\TEST\SYSTEM01.DBF
D:\ORACLE\PRODUCT\10.2.0\ORADATA\TEST\UNDOTBS01.DBF
D:\ORACLE\PRODUCT\10.2.0\ORADATA\TEST\SYSAUX01.DBF
D:\ORACLE\PRODUCT\10.2.0\ORADATA\TEST\USERS01.DBF
12. RMAN 进行数据文件的恢复
D:\>rman target /
恢复管理器: Release 10.2.0.4.0 - Production on 星期六 7月 16 01:27:35 2011
Copyright (c) 1982, 2007, Oracle.
已连接到目标数据库: TEST (DBID=2054617943, 未打开)
run
set newname for datafile 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\TEST\SYSTEM01.DBF' to 'G:\ORACLE\PRODUCT\10.2.0\ORADATA\TEST\SYSTEM01.DBF';
set newname for datafile 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\TEST\UNDOTBS01.DBF' to 'G:\ORACLE\PRODUCT\10.2.0\ORADATA\TEST\UNDOTBS01.DBF';
set newname for datafile 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\TEST\SYSAUX01.DBF' to 'G:\ORACLE\PRODUCT\10.2.0\ORADATA\TEST\SYSAUX01.DBF';
set newname for datafile 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\TEST\USERS01.DBF' to 'G:\ORACLE\PRODUCT\10.2.0\ORADATA\TEST\USERS01.DBF';
restore database;
switch datafile all;
}
正在执行命令: SET NEWNAME
正在执行命令: SET NEWNAME
正在执行命令: SET NEWNAME
正在执行命令: SET NEWNAME
启动 restore 于 16-7月 -11
使用通道 ORA_DISK_1
通道 ORA_DISK_1: 正在开始恢复数据文件备份集
通道 ORA_DISK_1: 正在指定从备份集还原的数据文件
正将数据文件00001还原到G:\ORACLE\PRODUCT\10.2.0\ORADATA\TEST\SYSTEM01.DBF
正将数据文件00002还原到G:\ORACLE\PRODUCT\10.2.0\ORADATA\TEST\UNDOTBS01.DBF
正将数据文件00003还原到G:\ORACLE\PRODUCT\10.2.0\ORADATA\TEST\SYSAUX01.DBF
正将数据文件00004还原到G:\ORACLE\PRODUCT\10.2.0\ORADATA\TEST\USERS01.DBF
通道 ORA_DISK_1: 正在读取备份片段 D:\BACK\ORA_756576508
通道 ORA_DISK_1: 已还原备份片段 1
段句柄 = D:\BACK\ORA_756576508 标记 = FULL_BACKUP
通道 ORA_DISK_1: 还原完成, 用时: 00:00:25
完成 restore 于 16-7月 -11
数据文件 1 已转换成数据文件副本
输入数据文件副本 recid=5 stamp=756609818 文件名=G:\ORACLE\PRODUCT\10.2.0\ORADATA\TEST\SYSTEM01.DBF
数据文件 2 已转换成数据文件副本
输入数据文件副本 recid=6 stamp=756609818 文件名=G:\ORACLE\PRODUCT\10.2.0\ORADATA\TEST\UNDOTBS01.DBF
数据文件 3 已转换成数据文件副本
输入数据文件副本 recid=7 stamp=756609818 文件名=G:\ORACLE\PRODUCT\10.2.0\ORADATA\TEST\SYSAUX01.DBF
数据文件 4 已转换成数据文件副本
输入数据文件副本 recid=8 stamp=756609818 文件名=G:\ORACLE\PRODUCT\10.2.0\ORADATA\TEST\USERS01.DBF
数据文件成功恢复
在sqlplus中修改联机日志的路径和名称,以免在后面的open resetlogs报错:具体命令如下:
查询当前数据库的Redo Log 参数信息
SQL> select member from v$Logfile;
MEMBER
--------------------------------------------------------------------------------
D:\ORACLE\PRODUCT\10.2.0\ORADATA\TEST\REDO03.LOG
D:\ORACLE\PRODUCT\10.2.0\ORADATA\TEST\REDO02.LOG
D:\ORACLE\PRODUCT\10.2.0\ORADATA\TEST\REDO01.LOG
SQL> select name from v$tempfile;
NAME
-----------------------------------------------------------
D:\ORACLE\PRODUCT\10.2.0\ORADATA\TEST\TEMP01.DBF
sqlplus中使用命令将以源库的路径修改为当前路径
alter database rename file 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\TEST\REDO01.LOG' to 'G:\ORACLE\PRODUCT\10.2.0\ORADATA\TEST\REDO01.LOG';
alter database rename file 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\TEST\REDO02.LOG' to 'G:\ORACLE\PRODUCT\10.2.0\ORADATA\TEST\REDO02.LOG';
alter database rename file 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\TEST\REDO03.LOG' to 'G:\ORACLE\PRODUCT\10.2.0\ORADATA\TEST\REDO03.LOG';
alter database rename file 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\TEST\TEMP01.DBF' to 'G:\ORACLE\PRODUCT\10.2.0\ORADATA\TEST\TEMP01.DBF';
RMAN中做
13. RMAN 中 recover database 报错是正常,忽略
##可能会报错,因为没有archivelog 正常,忽略
RMAN> recover database;
启动 recover 于 16-7月 -11
使用目标数据库控制文件替代恢复目录
分配的通道: ORA_DISK_1
通道 ORA_DISK_1: sid=157 devtype=DISK
正在开始介质的恢复
无法找到存档日志
存档日志线程 =1 序列=2
14. PLSQL 中使用resetlogs 方式打开数据库,完成恢复
SQL> alter database open resetlogs;
数据库已更改。
前一篇:用RMAN迁移数据库
后一篇:Linux下scp的用法