RMAN 创建物理standby到新主机
时间:2010-09-23 来源:anranran
上篇采用RMAN duplicate database,同样也可以用rman duplicate创建physical
standby,步骤完全一样,只是脚本稍有不同。
metalink[[ 374069.1]]给出了duplicate创建physical standby的相关步骤:
1. Backup of the primary database.
2. Determine how much disk space will be required.
3. Ensuring you have enough space on your target server.
4. Making the backup available for the duplicate process.
5. Creating the init.ora & administration directories for the duplicate database.
6. Ensuring SQL*NET connections to primary database and RMAN catalog are working.
7. Prepare RMAN duplicate script.
8. Execute the RMAN script.
1. 因为duplicate database 是一个备份与恢复的过程,备份是必须的。当然也要备份归档日志.
简单脚本如下:
run {
allocate channel dup type disk;
backup format '/opt/guo/backup/df_t%t_s%s_p%p' database;
backup current controlfile for standby format '/opt/guo/backup/df_t%t_s%s_p%p';
sql 'alter system archive log current';
backup format '/opt/guo/backup/al_t%t_s%s_p%p' archivelog all;
release channel dup;
}
在primary database上执行:
Rman target / cmdfile=/opt/guo/dup.rmv
生成了数据文悠件备份,controlfile+spfile备份(这个不需要,因为我们备份了datafile 1,
所以RMAN自动备份了controlfile+spfile),归档日志备份,这比上一篇多了:
backup current controlfile for standby,因为standby controlfile 对于创建physical standby
是必须的.
2,3 两步是确认the duplicate database数据库的空间是否足够,与上一篇没有变化 脚本类似如下:
select DF.TOTAL/1048576 "DataFile Size Mb",
LOG.TOTAL/1048576 "Redo Log Size Mb",
CONTROL.TOTAL/1048576 "Control File Size Mb",
(DF.TOTAL + LOG.TOTAL + CONTROL.TOTAL)/1048576 "Total Size Mb"
from dual,
(select sum(a.bytes) TOTAL from dba_data_files a) DF,
(select sum(b.bytes) TOTAL from v$log b) LOG,
(select sum((cffsz+1)*cfbsz) TOTAL from x$kcccf c) CONTROL
4. 与上一篇没有变化, 我们要把数据备份,包括归档备份拷到新主机的相同目录上,使得duplicate process进程
可以访问得到. 我想过用catalog命令修改备份集的路径,但duplicate数据库此时还没有
控制文件, 所以行不通,只能拷贝到相同路径上。
如:scp -r [email protected]:/opt/guo/backup /opt/guo/backup
5. 为duplicate数据库创建init.ora文件,以及相应的目录.启动duplicate数据库到nomout状态。
duplicate命令需要duplicate数据库处于nomount状态。
SQL>create spfile from pfile='init.ora'
SQL>startup nomount
这一步主要是添加一些初始化参数:
log_archive_config='dg_config=(guostandby,guoprimary)'
log_archive_dest_1='service=standby db_unique_name=guostandby'
log_archive_dest_state_1=enable
FAL_CLIENT=standby
FAL_SERVER=primary
...
6. 确认两台主机SQL.net是畅通的. duplicate target database 可以任何一台可以SQL.net到
目标主机与新主机的主机上执行。
$ sqlplus sys/system@primary
这里两点需要注意的1.主备数据库sys用户的密码要一样,这个通过orapwd来完成
2.主备数据库最好都采用静态注册的方式,因为备库只启动到mount状态,
不能完成动态注册
7. 创建duplicate script如下:
duplicate target database for standby nofilenamecheck dorecover;
因为target数据库与duplicate数据库的目录结构是一样的,虽然他们位于不面的主机. 所以
加nofilenamecheck参数,否则会报ora-050001错误。我们可以用init.ora文件中添加
db_file_name_convert,log_file_name_convert参数更改duplicate数据库的目录结构.oracle
document 有详细的描述
8. 执行相关命令.
$ rman target sys/system@primary;
rman> connect auxiliary /
rman>duplicate target database for standby nofilenamecheck dorecover;
即完成了physical standby。