dataguard备库的数据文件的迁移(r8笔记第22天)

时间:2022-05-04
本文章向大家介绍dataguard备库的数据文件的迁移(r8笔记第22天),主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

关于移动数据库文件,之前写了一篇博文,http://blog.itpub.net/23718752/viewspace-1127910/ 但是在备库中还是有一些的差别。最近因为对备库做了一些规划,新增加了几个分区,想把数据库的一部分文件放到SSD上。所以这个时候在现有的备库基础上需 要移动备库的数据库文件。这里就不局限于数据文件了,不过目前的测试情况来说,还是数据文件是重点,还是主要以数据文件为例。 在备库中目前尝试了两种方式,可以采用rename datafile的方式或者使用rman的方式,对于日志文件还是直接重建会比较方便。 采用rename datafile的方式。 首先在备库取消日志应用 SQL> recover managed standby database cancel; Media recovery complete. 操作系统级移动数据文件。 SQL> host mv /home/U01/app/oracle/oradata/test04/testdata01.dbf /home/U01/testdata01.dbf 使用rename datafile来移动数据文件,其实就是建立一个映射关系。 SQL> alter database rename file '/home/U01/app/oracle/oradata/test04/testdata01.dbf' to '/home/U01/testdata01.dbf'; Database altered. 修改完毕后,就可以修改备库文件管理模式为auto了。 SQL> alter system set standby_file_management=auto; System altered. 修改完成之后,查看数据文件的情况,发现数据字典层面已经改过来了。 SQL> select name from v$datafile; NAME -------------------------------------------------------------------------------- /home/U01/app/oracle/oradata/test04/system01.dbf /home/U01/app/oracle/oradata/test04/sysaux01.dbf /home/U01/app/oracle/oradata/test04/undotbs01.dbf /home/U01/app/oracle/oradata/test04/users01.dbf /home/U01/testdata01.dbf /home/U01/app/oracle/oradata/test04/testidx01.dbf 6 rows selected. 把备库启动到open,即read only状态 SQL> alter database open; Database altered. 11g的备库还是启用ADG。 SQL> recover managed standby database disconnect from session using current logfile; Media recovery complete. 然后再次查看数据文件的细节。 SQL> col file_name format a50 SQL> select file_name,status,online_status from dba_data_files; FILE_NAME STATUS ONLINE_STATUS -------------------------------------------------- ------------------ -------------- /home/U01/app/oracle/oradata/test04/users01.dbf AVAILABLE ONLINE /home/U01/app/oracle/oradata/test04/undotbs01.dbf AVAILABLE ONLINE /home/U01/app/oracle/oradata/test04/sysaux01.dbf AVAILABLE ONLINE /home/U01/app/oracle/oradata/test04/system01.dbf AVAILABLE SYSTEM /home/U01/testdata01.dbf AVAILABLE ONLINE /home/U01/app/oracle/oradata/test04/testidx01.dbf AVAILABLE ONLINE 6 rows selected. 由此可以看出文件迁移已经成功。 另外一种是使用rman的方式,但是原理还是相通的。 如果在主库中移动数据文件,可以采用如下的方式。 rman target / COPY DATAFILE 5 to '/DATA/app/testdata01.dbf'; sql 'alter database datafile 5 offline'; switch datafile 5 to copy; recover datafile 5; sql 'alter database datafile 5 online'; 在备库中不能这么使用,还是有一些不同之处,首先查看数据文件的情况。 FILE_NAME FILE_ID ------------------------------------------------------------ ---------- /home/U01/app/oracle/oradata/test04/users01.dbf 4 /home/U01/app/oracle/oradata/test04/undotbs01.dbf 3 /home/U01/app/oracle/oradata/test04/sysaux01.dbf 2 /home/U01/app/oracle/oradata/test04/system01.dbf 1 /home/U01/testdata01.dbf 5 /home/U01/app/oracle/oradata/test04/testidx01.dbf 6 6 rows selected. 然后在mount状态下,这个时候备库文件管理模式为auto或者manual就没有直接的影响了。 SQL> show parameter standby NAME TYPE VALUE ------------------------------------ ---------------------- ------------------------------ standby_archive_dest string ?/dbs/arch standby_file_management string AUTO 还是手工声明取消日志应用 SQL> recover managed standby database cancel; Media recovery complete. 然后开始rman中的数据文件迁移,把5号数据文件迁移到某个指定的路径下。 RMAN> COPY DATAFILE 5 to '/home/U01/app/oracle/oradata/test04/testdata01.dbf'; Starting backup at 2016-02-26 16:19:24 using target database control file instead of recovery catalog allocated channel: ORA_DISK_1 channel ORA_DISK_1: SID=102 device type=DISK channel ORA_DISK_1: starting datafile copy input datafile file number=00005 name=/home/U01/testdata01.dbf output file name=/home/U01/app/oracle/oradata/test04/testdata01.dbf tag=TAG20160226T161925 RECID=14 STAMP=904839566 channel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:01 Finished backup at 2016-02-26 16:19:26 上面的日志其实在搭建dataguard的时候会看到,是不是很熟悉。然后声明一个切换结束。 RMAN> switch datafile 5 to copy; using target database control file instead of recovery catalog datafile 5 switched to datafile copy "/home/U01/app/oracle/oradata/test04/testdata01.dbf" 然后声明数据文件为Online状态。 >sql 'alter database datafile 5 online'; --不运行实际上也会是Online 移动完成之后,开始查看迁移的情况,发现已经没有问题了。 FILE_NAME BYTES ONLINE_STATUS -------------------------------------------------- ---------- -------------- /home/U01/app/oracle/oradata/test04/users01.dbf 10485760 ONLINE /home/U01/app/oracle/oradata/test04/undotbs01.dbf 73400320 ONLINE /home/U01/app/oracle/oradata/test04/sysaux01.dbf 796917760 ONLINE /home/U01/app/oracle/oradata/test04/system01.dbf 786432000 SYSTEM /home/U01/app/oracle/oradata/test04/testdata01.dbf 209715200 ONLINE /home/U01/app/oracle/oradata/test04/testidx01.dbf 104857600 ONLINE 6 rows selected. 所以综上的感觉来看,rman的方式还是比较推荐,至少操作方便快捷,而且dataguard的原生支持就是如此,而且限制也少。