Duplicating a Database with Recovery Manager
用途:
1 测试备份与恢复的过程
2 如果误删除一个表,可以复制一个库,然后在复制库上做恢复,恢复后的正确数据导入到生产库上。
[@more@]经过多次失败,最后完成。结果记录如下:
系统结构描述
目标库:
主机 host1 aix5.3
IP: 10.10.10.72
SID: millet
net: trgt
参数文件 initmillet.ora spfilemillet.ora
数据文件主目录 /netapp/oradata/millet/
跟踪文件目录 /opt/oracle/admin/millet/bdump cdump udump
RMAN备份文件目录 /ww
复制库:
主机 host2 aix5.3
IP: 10.10.10.34
db_name: dupdb
net: aux
参数文件initaux2.ora spfileaux2.ora
数据文件主目录 /u01/oradata/dupdb
跟踪文件目录 /u01/admin/dupdb/bdump cdump udump
备份RMAN文件目录 /ww (新建了一个目录,与目标库保持一致,并将目标库的RMAN备份文件FTP过来)
大致操作过程
1 构建复制库的环境
1.1 创建目录
在复制库上创建必需的目录,如
mkdir /u01/oradata/dupdb
mkdir -p /u01/admin/dupdb/bdump
mkdir -p /u01/admin/dupdb/cdump
mkdir -p /u01/admin/dupdb/udump
1.2 创建口令文件
在复制库上建dupdb 的口令文件 如
orapwd file=/u01/product/9.2.0/dbs/orapwaux2 password=oracle
1.3 创建init.ora
可以从trgt库上复制过来,然后加上以下内容,并修改所有涉及到目录变动的地方;
DB_NAME=dupdb
CONTROL_FILES=/u01/oradata/dupdb/control01.ctl
DB_FILE_NAME_CONVERT=('/netapp/oradata/millet/','/u01/oradata/dupdb/')
LOG_FILE_NAME_CONVERT=('/netapp/oradata/millet/','/u01/oradata/dupdb/')
这两个convert加上也没有用,还是需要set newname !
修改以_dest为后缀的参数值到新的路径
修改instance_name=dupdb
两个参数文件比较,只显示不一样的地方
trgt原来的参数文件
*.background_dump_dest='/opt/oracle/admin/millet/bdump'
*.control_files='/netapp/oradata/millet/control01.ctl','/netapp/oradata/millet/control02.ctl','/netapp/oradata/millet/control03.ctl'
*.core_dump_dest='/opt/oracle/admin/millet/cdump'
*.db_name='millet'
*.instance_name='millet'
*.user_dump_dest='/opt/oracle/admin/millet/udump'
新建的复制库上的参数文件
db_name=dupdb
control_files=/u01/oradata/dupdb/control01.ctl
db_file_name_convert=('/netapp/oradata/millet/','/u01/oradata/dupdb/')
log_file_name_convert=('/netapp/oradata/millet/','/u01/oradata/dupdb/')
*.background_dump_dest='/u01/admin/dupdb/bdump'
*.core_dump_dest='/u01/admin/dupdb/cdump'
*.instance_name='dupdb'
*.user_dump_dest='/u01/admin/dupdb/udump'
1.4 修改listener.ora and tnsnames.ora
我打算在主机1(TRGT)将数据库复制到主机2上,因此,需要在主机1上连接AUX2服务;
在主机2上(AUX2),修改listener.ora文件,添加aux2,以便在主机1上能够访问。
(SID_DESC =
(GLOBAL_DBNAME = aux2)
(ORACLE_HOME = /u01/product/9.2.0)
(SID_NAME = aux2)
)
在主机1上(TRGT),修改tnsnames.ora文件,添加对复制库的访问,名称aux,
用在rman TARGET SYS/oracle@trgt AUXILIARY SYS/oracle@aux这个地方
在主机2上(AUX2),同样修改tnsnames.ora,内容如下
trgt =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.10.10.72)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = millet)
)
)
aux =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.10.10.34)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = aux2)
)
)
1.4 启动复制库到nomount
在哪个机器上都可以启,过程略
2 TRGT库的准备工作
2.1 检查TRGT库是否有完整的RMAN备份集
如果没有,全备一把,过程略
但必需让AUX库的主机,也能访问这个备份集
我是FTP过去,在AUX库上建了个相同目录,放进去,等候RMAN使用。
2.2 生成set newname语句
select 'set newname for datafile '||file#||' to '''||name|| ''' ;' from v$datafile;
3 连接trgt和aux库,准备复制数据库
在目标库上启动RMAN(在复制库上应该一样,没试)
run {
set newname for datafile 1 to '/u01/oradata/dupdb/system01.dbf' ;
set newname for datafile 2 to '/u01/oradata/dupdb/undotbs01.dbf' ;
set newname for datafile 3 to '/u01/oradata/dupdb/drsys01.dbf' ;
set newname for datafile 4 to '/u01/oradata/dupdb/example01.dbf' ;
set newname for datafile 5 to '/u01/oradata/dupdb/indx01.dbf' ;
set newname for datafile 6 to '/u01/oradata/dupdb/tools01.dbf' ;
set newname for datafile 7 to '/u01/oradata/dupdb/users01.dbf' ;
set newname for datafile 8 to '/u01/oradata/dupdb/fpgl_data01.dbf' ;
set newname for datafile 9 to '/u01/oradata/dupdb/fpgl_ind01.dbf' ;
set newname for datafile 10 to '/u01/oradata/dupdb/gs12366_data01.dbf' ;
set newname for datafile 11 to '/u01/oradata/dupdb/hlwsb_data01.dbf' ;
set newname for datafile 12 to '/u01/oradata/dupdb/ncp_data01.dbf' ;
set newname for datafile 13 to '/u01/oradata/dupdb/ncp_ind01.dbf' ;
set newname for datafile 14 to '/u01/oradata/dupdb/tbs_dat_par_0101.dbf' ;
set newname for datafile 15 to '/u01/oradata/dupdb/tbs_dat_par_0201.dbf' ;
set newname for datafile 16 to '/u01/oradata/dupdb/tbs_dat_par_0301.dbf' ;
set newname for datafile 17 to '/u01/oradata/dupdb/tbs_dat_par_0401.dbf' ;
set newname for datafile 18 to '/u01/oradata/dupdb/xtjg_data01.dbf' ;
set newname for datafile 19 to '/u01/oradata/dupdb/qxgl01.dbf' ;
set newname for datafile 20 to '/u01/oradata/dupdb/xz_ztry_hist01.dbf' ;
DUPLICATE TARGET DATABASE TO dupdb nofilenamecheck
LOGFILE group 1 ('/u01/oradata/dupdb/redo01.log') size 200k,
GROUP 2 ('/u01/oradata/dupdb/redo02.log') SIZE 200K,
GROUP 3 ('/u01/oradata/dupdb/redo03.log') SIZE 200K;
}
到此为止,已经在2号机上,复制了一个新数据库,数据库名称为 dupdb 并且更改了数据文件路径.
小结:看文档有点晕,因为文档上没有画出结构图,看别人的总结更晕,还是自己动手做上十来次,遇到十几个错误之后,才明白这个过程的来龙去脉。心里才算踏实。
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/271063/viewspace-1016344/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/271063/viewspace-1016344/