ITPub博客

首页 > 数据库 > Oracle > dataguard备库的数据文件的迁移

dataguard备库的数据文件的迁移

原创 Oracle 作者:jeanron100 时间:2016-02-27 22:47:38 0 删除 编辑
关于移动数据库文件,之前写了一篇博文,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的原生支持就是如此,而且限制也少。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/23718752/viewspace-2006111/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
技术文章每天更新,阵地已转移到微信公众号端。 公众号:jianrong-notes

注册时间:2012-05-14

  • 博文量
    1498
  • 访问量
    14393515