11g Active DataGuard初探(r5笔记第54天)
原本dataguard中日志应用和数据库只读查询是一个互斥的关系,两者不能并存。如果需要应用日志,则数据库只能在Mount状态下 使用recover managed standby database disconnect from session来不断地从后台进行日志应用。
如果想查看备库中的数据情况,则只能使用recover managed standby database cancel来取消日志应用,然后把数据库启动到read only 状态下。这种情况从道理上也讲也是有理有据,但是终归还是感觉不够方便,毕竟我们希望备库能够起到一些作用,不只是应用日志,一些大查询可以直接在备库上执行,能够分担主库的压力。11g的active dataguard就做到了这一点,重点就在于所说的active,所以这个时候数据库启动到了read only状态下,而且可以同时应用日志。如果配置备库的模式级别较高,甚至感觉和主库是一致的。
我们来简单看看这个特性。
我们来看看备库的信息。
idle> select name,database_role from v$database;
NAME DATABASE_ROLE
--------- ----------------
TEST11G PHYSICAL STANDBY
1 row selected.
对应的Instance信息。此时在Mount状态。
idle> select instance_name,status from v$instance;
INSTANCE_NAME STATUS
---------------- ------------
DG11G MOUNTED
1 row selected.
查看日志的应用情况,发现最新的记录中日志应用的需要为 78
idle> select *from v$dataguard_status
Remote File Server Warning 0 28 0 NO 01-JUN-15 RFS[2]: No standby redo logfiles of size 84490 blocks available
Log Apply Services Informational 0 29 0 NO 01-JUN-15 Media Recovery Log /u02/dg11g/flash_recovery_area/DG11G/archivelog/1_77_880742847.dbf
Log Apply Services Warning 0 30 0 NO 01-JUN-15 Media Recovery Waiting for thread 1 sequence 78
30 rows selected.
我们在主库切换一下日志。
#### primary database
alter system switch logfile;
备库这边很快得到相应,可见dataguard的日志应用是没有问题的。这些部分和在10g中是一致的。
########## standby alert log
Mon Jun 01 22:46:51 2015
RFS[2]: No standby redo logfiles of size 57697 blocks available
RFS[2]: Opened log for thread 1 sequence 78 dbid 1028247664 branch 880742847
Archived Log entry 110 added for thread 1 sequence 78 rlc 880742847 ID 0x3d942dcb dest 2:
Mon Jun 01 22:46:54 2015
Media Recovery Log /u02/dg11g/flash_recovery_area/DG11G/archivelog/1_78_880742847.dbf
Media Recovery Waiting for thread 1 sequence 79
这个时候我们取消日志应用,把数据库启动起来。
idle> recover managed standby database cancel;
Media recovery complete.
idle> alter database open;
Database altered.
这个时候查看数据库的状态是read only.
idle> select open_mode from v$database;
OPEN_MODE
--------------------
READ ONLY
1 row selected.
这个时候我们来启用日志应用,这个也是在11g中的特色了。
idle> recover managed standby database using current logfile disconnect from session;
Media recovery complete.
这个时候查看状态就发生了细微的变化。
idle> select open_mode from v$database;
OPEN_MODE
--------------------
READ ONLY WITH APPLY
1 row selected.
这个时候为了验证,我们从主库做点什么,比如创建一个小表看看备库能够在open状态也能应用日志。
主库中执行。
sys@TEST11G> conn n1/n1
Connected.
n1@TEST11G> create table aaa as select *from cat;
Table created.
n1@TEST11G> select count(*)from aaa;
COUNT(*)
----------
19
1 row selected.
这个时候在备库中马上查看是没有效果的。
##### standby datababse
n1@TEST11G> select *from aaa;
select *from aaa
*
ERROR at line 1:
ORA-00942: table or view does not exist
n1@TEST11G> show user
USER is "N1"
n1@TEST11G>
这个时候我们尝试切一下主库的日志,看看备库有啥反应。
#### primary
alter system switch logfile;
备库中的alert日志显示如下:
### standby log
Mon Jun 01 22:59:57 2015
RFS[2]: Selected log 8 for thread 1 sequence 79 dbid 1028247664 branch 880742847
Mon Jun 01 22:59:57 2015
Archived Log entry 111 added for thread 1 sequence 79 ID 0x3d942dcb dest 1:
Archived Log entry 112 added for thread 1 sequence 79 ID 0x3d942dcb dest 3:
Mon Jun 01 22:59:57 2015
Media Recovery Log /u02/dg11g/switchover/DG11G/archivelog/1_79_880742847.dbf
Media Recovery Waiting for thread 1 sequence 80
这个时候再次在备库查看,就发现数据变更都同步过来了。
n1@TEST11G> select count(*) from aaa;
COUNT(*)
----------
19
1 row selected.
n1@TEST11G> show user
USER is "N1"
- 【死磕Java并发】—–深入分析volatile的实现原理
- phalcon-入门篇3(优美的URL与Config)
- 数据库中间件 Sharding-JDBC 源码分析 —— 事务(一)之BED
- 熔断器 Hystrix 源码解析 —— 命令执行(二)之执行隔离策略
- phalapi-入门篇4(国际化高可用和自动生成文档)
- 用JavaScript动态输出的JS脚本不能执行
- Dubbo源码解析 —— 服务暴露原理
- [Golang软件推荐] RSA公私钥加解密(解决Golang私钥加密公钥解密问题)
- [喵咪大数据]Hive+Hbase关联
- 再战子域共享Cookie问题
- [喵咪大数据]Presto查询引擎
- 如何在5分钟内做出你的第一个开源贡献
- [喵咪大数据]HUE大数据管理工具
- Dubbo源码解析 —— Zookeeper 订阅
- 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 数组属性和方法
- JavaScript中的compose函数和pipe函数
- 常用JS函数-数组扁平化,缓存函数,柯里化函数,防抖和节流函数
- JavaScript单元测试及原理
- 前端进阶知识汇总
- 前端也能学算法:由浅入深讲解动态规划
- 轻松理解JS中的面向对象,顺便搞懂prototype和__proto__
- 前端也能学算法:由浅入深讲解贪心算法
- web.py指南性说明
- this到底指向啥?看完这篇就知道了!
- 学以致用:手把手教你撸一个工具库并打包发布,顺便解决JS小数计算不准问题
- python 实现 php 的 var_dump 功能
- RSA初探,聊聊怎么破解HTTPS
- 深入解析Underscore.js源码架构
- python正向连接后门
- setTimeout和setImmediate到底谁先执行,本文让你彻底理解Event Loop