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的原生支持就是如此,而且限制也少。
- JS魔法堂:深究JS异步编程模型
- 前端魔法堂:屏蔽Backspace导致页面回退
- “表情包”火爆全球,域名emojis.com小六位易主
- 前端魔法堂:onsubmit和submit事件处理函数怎么不生效呢?
- (cljs/run-at (JSVM. :all) "Metadata就这样哦")
- (cljs/run-at (JSVM. :all) "细说函数")
- 动手写个数字输入框2:起手式——拦截非法字符
- Linux安装DNSmasq搭建自己的公共DNS
- (cljs/run-at (JSVM. :all) "一次说白DataType、Record和Protocol")
- 虚拟主机多域名转向
- .top域名名声大噪,这枚单字符10天建站上线!
- 编译期类型检查 in ClojureScript
- Chrome Extension in CLJS —— 搭建开发环境
- 双拼域名lanben.com以三万元成交
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Cypress系列(52)- fixture() 命令详解
- Docker学习笔记---Dockerfile
- Java面试高频知识点汇总 JVM专题
- Java面试高频知识点汇总 网络协议专题
- 「Mysql优化大师一」mysql服务性能剖析工具
- FPGA设计心得(12)如何正确使用 in_system_ibert ?
- Java面试高频知识点汇总 垃圾回收(GC)机制专题
- Celery-分布式任务队列学习笔记
- Java面试高频知识点汇总 数据库专题
- Java面试高频知识点总结 Redis
- Java面试高频知识点总结 Spring
- 杂谈小程序
- pytest封神之路第四步 内置和自定义marker
- (译)SDL编程入门(3)事件驱动编程
- 一个简单的Angular search UI实现