RMAN duplicate database是一个备份与恢复的过程。
duplicate database有一个优点,它会为duplicated database生成新的DBID。
在metalink[ID 388431.1]给出了duplicate database的大致步骤:
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 c1 type disk;
backup format '/u02/backup/df_t%t_s%s_p%p' database;
sql 'alter system archive log current';
backup format '/u02/backup/al_t%t_s%s_p%p' archivelog all;
release channel cl;
}
在primary database上执行:
rman target / cmdfile=/usr/local/admin/scripts/dup.rmv
生成了数据文件备份,controlfile+spfile备份(这个不需要,因为我们备份了datafile 1, 所以RMAN自动备份了controlfile+spfile),归档日志备份。
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. Making the backup available for the duplicate process,the duplicate process
我们要把数据备份,包括归档备份拷到新主机的相同目录上,使得duplicate process进程
可以访问得到,这个很简单,拷贝到相同路径上即可。
如:scp -r oracle /@172.30.2.100:/u02/backupu02/backup
5. 为duplicate数据库创建init.ora文件,以及相应的目录。启动duplicate数据库到nomout状态。
duplicate命令需要duplicate数据库处于nomount状态。
SQL>create spfile from pfile='init.ora'
SQL>startup nomount
6. 确认两台主机SQL.NET是畅通的。duplicate target database 可以任何一台可以SQL.NET到目标主机与新主机的主机上执行。
$ sqlplus sys/oracle@primary
7. 创建duplicate script如下:
duplicate target database to guoprima nofilenamecheck;
因为target数据库与duplicate数据库的目录结构是一样的,虽然它们位于不同的主机. 所以加nofilenamecheck参数,去除Data文件检查,否则会报ORA-050001错误。我们也可以用init.ora文件中添加
db_file_name_convert,log_file_name_convert参数更改duplicate数据库的目录结构。这在Oracle Document 有详细的描述。
8. 执行复制.
$ rman target sys/oracle@primary;
rman> connect auxiliary /
rman>duplicate target database to guoprima nofilenamecheck;
这样即完成了数据库的复制。