[20171221]利用rman实现2台机器文件拷贝.txt
--//昨天使用rman duplicate建立dg,我看到执行如下代码:RMAN> duplicate target database for standby from active database nofilenamecheck;...contents of Memory Script:{ backup as copy reuse targetfile '/u01/app/oracle/product/11.2.0.4/dbhome_1/dbs/orapwbook' auxiliary format '/u01/app/oracle/product/11.2.0.4/dbhome_1/dbs/orapwbookdg' ;}--//是否通过这样的方式可以实现2台服务器之间文件拷贝呢?1.环境:SYS@book> @ &r/ver1PORT_STRING VERSION BANNER------------------------------ -------------- --------------------------------------------------------------------------------x86_64/Linux 2.4.xx 11.2.0.4.0 Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production2.先测试oracle的口令文件是否可以传输:$ rlwrap rman target sys/oracle@book auxiliary sys/oracle@bookdgRecovery Manager: Release 11.2.0.4.0 - Production on Thu Dec 21 10:35:47 2017Copyright (c) 1982, 2011, Oracle and/or its affiliates. All rights reserved.connected to target database: BOOK (DBID=1337401710)connected to auxiliary database: BOOK (DBID=1337401710)RMAN> backup as copy reuse targetfile '/u01/app/oracle/product/11.2.0.4/dbhome_1/dbs/orapwbook' auxiliary format '/tmp/orapwbookdg' ;Starting backup at 2017-12-21 10:36:16using target database control file instead of recovery catalogallocated channel: ORA_DISK_1channel ORA_DISK_1: SID=106 device type=DISKallocated channel: ORA_DISK_2channel ORA_DISK_2: SID=119 device type=DISKallocated channel: ORA_DISK_3channel ORA_DISK_3: SID=132 device type=DISKFinished backup at 2017-12-21 10:36:18--//在备库检查发现$ ls -l /tmp/orapwbookdg-rw-r----- 1 oracle oinstall 1536 2017-12-21 10:36:17 /tmp/orapwbookdg3.测试其它用户文件:--//检查主库存在如下文件在/home/oracle,继续测试看看:$ ls -l aaa.txt-rw-r--r-- 1 oracle oinstall 54 2017-11-16 11:42:50 aaa.txtRMAN> backup as copy reuse targetfile '/home/oracle/aaa.txt' auxiliary format '/tmp/aaa.txt.bookdg' ;Starting backup at 2017-12-21 10:40:14using target database control file instead of recovery catalogallocated channel: ORA_DISK_1channel ORA_DISK_1: SID=106 device type=DISKallocated channel: ORA_DISK_2channel ORA_DISK_2: SID=119 device type=DISKallocated channel: ORA_DISK_3channel ORA_DISK_3: SID=132 device type=DISKRMAN-00571: ===========================================================RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============RMAN-00571: ===========================================================RMAN-03009: failure of backup command on ORA_DISK_1 channel at 12/21/2017 10:40:17ORA-19505: failed to identify file "/home/oracle/aaa.txt"ORA-27046: file size is not a multiple of logical block sizeAdditional information: 1--//可以发现不行,文件大小必须是logical block size的整数倍.换一句话文件大小必须是512的倍数.--//一些发行版本有fallocate可以给文件分配空间.$ fallocate -l 512 aaa.txt--//我的测试机器没有,我使用dd,需要加入512-54 = 458字节$ dd if=/dev/zero of=aaa.txt seek=54 count=458 bs=1 conv=notrunc458+0 records in458+0 records out458 bytes (458 B) copied, 0.00208456 seconds, 220 kB/s--//再次提醒加入输入输出不要写反.写入onv=notrunc不管怎样都不会错,这样避免被切断,我个人每次使用dd都心存敬畏..因为1次差错....--//注意这样写效率不高bs=1.(意味每次写1个字节,写458次),因为前面的seek参数对应54*1,--//如果你反过来写count=1 bs=458 ,相当于在54*458偏移开始写入.利用这个特性实际上这样执行:$ ls -l aaa.txt-rw-r--r-- 1 oracle oinstall 54 2017-12-21 10:55:17 aaa.txt$ dd if=/dev/zero of=aaa.txt seek=511 count=1 bs=1 conv=notrunc1+0 records in1+0 records out1 byte (1 B) copied, 5.2118e-05 seconds, 19.2 kB/s$ ls -l aaa.txt-rw-r--r-- 1 oracle oinstall 512 2017-12-21 10:56:52 aaa.txtRMAN> backup as copy reuse targetfile '/home/oracle/aaa.txt' auxiliary format '/tmp/aaa.txt.bookdg' ;Starting backup at 2017-12-21 10:58:05using channel ORA_DISK_1using channel ORA_DISK_2using channel ORA_DISK_3Finished backup at 2017-12-21 10:58:06--//OK,现在拷贝过去了.--//主库:$ md5sum /home/oracle/aaa.txt94a6edaabd20f62185e62037f2dbcb21 /home/oracle/aaa.txt--//备库:$ md5sum /tmp/aaa.txt.bookdg94a6edaabd20f62185e62037f2dbcb21 /tmp/aaa.txt.bookdg--//md5一样,说明没有问题.另外我的测试不使用reuse参数也会覆盖对面的文件.这点要特别注意!!RMAN> backup as copy targetfile '/home/oracle/aaa.txt' auxiliary format '/tmp/aaa.txt.bookdg' ;Starting backup at 2017-12-21 11:05:48using channel ORA_DISK_1using channel ORA_DISK_2using channel ORA_DISK_3Finished backup at 2017-12-21 11:05:494.延伸测试:--//是否这样可以实现备份:RMAN> backup as backupset datafile 6 auxiliary format '/data/testtest/datafile6_%U' ;Starting backup at 2017-12-21 11:21:00using channel ORA_DISK_1using channel ORA_DISK_2using channel ORA_DISK_3RMAN-00571: ===========================================================RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============RMAN-00571: ===========================================================RMAN-03002: failure of backup command at 12/21/2017 11:21:00RMAN-06955: Network copies are only supported for image copies.--//^_^,oracle不支持,报RMAN-06955: Network copies are only supported for image copies.--//也就是做image copy应该没有问题.RMAN> backup as copy datafile 6 auxiliary format '/data/backuptest/datafile6_%U' ;Starting backup at 2017-12-21 11:28:22using channel ORA_DISK_1using channel ORA_DISK_2using channel ORA_DISK_3channel ORA_DISK_1: starting datafile copyinput datafile file number=00006 name=/mnt/ramdisk/book/tea01.dbfoutput file name=/data/backuptest/datafile6_data_D-BOOK_I-1337401710_TS-TEA_FNO-6_fpsmm16m tag=TAG20171221T112822channel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:01Finished backup at 2017-12-21 11:28:23RMAN> backup as copy datafile 6 auxiliary format '/data/backuptest/%b' ;Starting backup at 2017-12-21 11:29:01using channel ORA_DISK_1using channel ORA_DISK_2using channel ORA_DISK_3channel ORA_DISK_1: starting datafile copyinput datafile file number=00006 name=/mnt/ramdisk/book/tea01.dbfoutput file name=/data/backuptest/tea01.dbf tag=TAG20171221T112901channel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:01Finished backup at 2017-12-21 11:29:02--//OK没有问题.$ ls -l /data/backuptesttotal 12328-rw-r----- 1 oracle oinstall 6299648 2017-12-21 11:28:22 datafile6_data_D-BOOK_I-1337401710_TS-TEA_FNO-6_fpsmm16m-rw-r----- 1 oracle oinstall 6299648 2017-12-21 11:29:01 tea01.dbf$ dbv file=/data/backuptest/tea01.dbfDBVERIFY: Release 11.2.0.4.0 - Production on Thu Dec 21 11:31:29 2017Copyright (c) 1982, 2011, Oracle and/or its affiliates. All rights reserved.DBVERIFY - Verification starting : FILE = /data/backuptest/tea01.dbfDBVERIFY - Verification completeTotal Pages Examined : 768Total Pages Processed (Data) : 594Total Pages Failing (Data) : 0Total Pages Processed (Index): 0Total Pages Failing (Index): 0Total Pages Processed (Other): 128Total Pages Processed (Seg) : 0Total Pages Failing (Seg) : 0Total Pages Empty : 46Total Pages Marked Corrupt : 0Total Pages Influx : 0Total Pages Encrypted : 0Highest block SCN : 392434057 (3.392434057)--//说明没有问题.注意这样备份在控制文件没有记录.--//主库:RMAN> list copy of datafile 6;specification does not match any datafile copy in the repository--//有点可惜的是11g不支持copy section size,也就是分段拷贝.12c支持,这样可以加快copy的速度.--//参考链接:http://blog.itpub.net/267265/viewspace-1310778/总结:1.这样方式拷贝文件大小存在限制,必须是512的倍数.2.提供另外一种手工方式建立备库的方式.3.另外注意这样拷贝方式在控制文件没有记录.4.注意文件覆盖问题.似乎数据文件copy不会覆盖,除非指定resue参数,参考后面测试:5.补充测试:RMAN> backup as copy database auxiliary format '/data/backuptest/%b' ;Starting backup at 2017-12-21 11:39:12using channel ORA_DISK_1using channel ORA_DISK_2using channel ORA_DISK_3channel ORA_DISK_1: starting datafile copyinput datafile file number=00002 name=/mnt/ramdisk/book/sysaux01.dbfchannel ORA_DISK_2: starting datafile copyinput datafile file number=00003 name=/mnt/ramdisk/book/undotbs01.dbfchannel ORA_DISK_3: starting datafile copyinput datafile file number=00001 name=/mnt/ramdisk/book/system01.dbfoutput file name=/data/backuptest/system01.dbf tag=TAG20171221T113912channel ORA_DISK_3: datafile copy complete, elapsed time: 00:00:55channel ORA_DISK_3: starting datafile copyinput datafile file number=00005 name=/mnt/ramdisk/book/example01.dbfoutput file name=/data/backuptest/sysaux01.dbf tag=TAG20171221T113912channel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:58channel ORA_DISK_1: starting datafile copyinput datafile file number=00004 name=/mnt/ramdisk/book/users01.dbfoutput file name=/data/backuptest/undotbs01.dbf tag=TAG20171221T113912channel ORA_DISK_2: datafile copy complete, elapsed time: 00:00:58channel ORA_DISK_2: starting datafile copyinput datafile file number=00006 name=/mnt/ramdisk/book/tea01.dbf--//视乎文件存在不会覆盖..RMAN-03009: failure of backup command on ORA_DISK_2 channel at 12/21/2017 11:40:12ORA-17628: Oracle error 19505 returned by remote Oracle servercontinuing other job steps, job failed will not be re-runoutput file name=/data/backuptest/users01.dbf tag=TAG20171221T113912channel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:17output file name=/data/backuptest/example01.dbf tag=TAG20171221T113912channel ORA_DISK_3: datafile copy complete, elapsed time: 00:00:20RMAN-00571: ===========================================================RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============RMAN-00571: ===========================================================RMAN-03009: failure of backup command on ORA_DISK_2 channel at 12/21/2017 11:40:12ORA-17628: Oracle error 19505 returned by remote Oracle server--//删除前面的备份在重新执行:RMAN> backup as copy database auxiliary format '/data/backuptest/%b' ;Starting backup at 2017-12-21 11:43:09using channel ORA_DISK_1using channel ORA_DISK_2using channel ORA_DISK_3channel ORA_DISK_1: starting datafile copyinput datafile file number=00002 name=/mnt/ramdisk/book/sysaux01.dbfchannel ORA_DISK_2: starting datafile copyinput datafile file number=00003 name=/mnt/ramdisk/book/undotbs01.dbfchannel ORA_DISK_3: starting datafile copyinput datafile file number=00001 name=/mnt/ramdisk/book/system01.dbfoutput file name=/data/backuptest/sysaux01.dbf tag=TAG20171221T114309channel ORA_DISK_1: datafile copy complete, elapsed time: 00:01:05channel ORA_DISK_1: starting datafile copyinput datafile file number=00005 name=/mnt/ramdisk/book/example01.dbfoutput file name=/data/backuptest/undotbs01.dbf tag=TAG20171221T114309channel ORA_DISK_2: datafile copy complete, elapsed time: 00:01:06channel ORA_DISK_2: starting datafile copyinput datafile file number=00004 name=/mnt/ramdisk/book/users01.dbfoutput file name=/data/backuptest/system01.dbf tag=TAG20171221T114309channel ORA_DISK_3: datafile copy complete, elapsed time: 00:01:06channel ORA_DISK_3: starting datafile copyinput datafile file number=00006 name=/mnt/ramdisk/book/tea01.dbfoutput file name=/data/backuptest/tea01.dbf tag=TAG20171221T114309channel ORA_DISK_3: datafile copy complete, elapsed time: 00:00:03output file name=/data/backuptest/example01.dbf tag=TAG20171221T114309channel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:15output file name=/data/backuptest/users01.dbf tag=TAG20171221T114309channel ORA_DISK_2: datafile copy complete, elapsed time: 00:00:15Finished backup at 2017-12-21 11:44:30--//ok!!RMAN> backup as copy datafile 6 auxiliary format '/data/backuptest/%b' ;Starting backup at 2017-12-21 11:45:32using channel ORA_DISK_1using channel ORA_DISK_2using channel ORA_DISK_3channel ORA_DISK_1: starting datafile copyinput datafile file number=00006 name=/mnt/ramdisk/book/tea01.dbfRMAN-00571: ===========================================================RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============RMAN-00571: ===========================================================RMAN-03009: failure of backup command on ORA_DISK_1 channel at 12/21/2017 11:45:33ORA-17628: Oracle error 19505 returned by remote Oracle server--//视乎不能覆盖.加入resue看看.RMAN> backup reuse as copy datafile 6 auxiliary format '/data/backuptest/%b' ;Starting backup at 2017-12-21 11:46:19using channel ORA_DISK_1using channel ORA_DISK_2using channel ORA_DISK_3channel ORA_DISK_1: starting datafile copyinput datafile file number=00006 name=/mnt/ramdisk/book/tea01.dbfoutput file name=/data/backuptest/tea01.dbf tag=TAG20171221T114619channel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:01Finished backup at 2017-12-21 11:46:20