dataguard备库的数据文件的迁移

简介: 关于移动数据库文件,之前写了一篇博文,http://blog.itpub.net/23718752/viewspace-1127910/ 但是在备库中还是有一些的差别。
关于移动数据库文件,之前写了一篇博文,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的原生支持就是如此,而且限制也少。
相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
目录
相关文章
|
12月前
|
数据库
在备库上进行热备份--10G之前
切换主库日志的脚本 logswitch.sh
|
12月前
|
数据库
在备库上进行热备份--11.2.0.4之后
一个经典的备份语句:backup database plus archivelog;
|
12月前
|
数据库
在备库上进行冷备份的三个步骤
数据库处于mount状态不一定是一致的,要看mrp进程是否存在!
|
SQL 存储 数据库
在DG环境中,主库丢失归档,对主库进行基于SCN的增量备份来恢复物理DG环境
在DG环境中,主库丢失归档,对主库进行基于SCN的增量备份来恢复物理DG环境
362 0
|
数据库
备库数据文件异常,物理DG如何恢复?
备库数据文件异常,物理DG如何恢复?
183 0
|
Oracle 关系型数据库 数据库
|
Oracle 关系型数据库 数据库
Oracle DataGuard 备库配置闪回模式
Oracle 数据库闪回通常设置在 DataGuard 备库,如果主库误删数据,可用备库闪回至删除点之前,获取丢失数据,然后再自动同步回来!