Oracle 12cR2中的ADG会话保留特性
Oracle 12cR2中有一个不错的特性,那就是Active Data Guard会话保留,原本的叫法是Preserving Active Data Guard Application Connections
怎么理解呢,比如在Active Data Guard上的连接会话,在switchover的过程中会话连接会始终保持不会中断。这一点听起来就很有特点,能够提高用户体验度,而且是一种相对透明的方式。
到底怎么样呢,我们来简单测试一下,先看看默认情况下的ADG会话情况,切换的过程就直接使用DG Broker来做了,快。
这是一个12cR2的环境,也使用了Far Sync。
DGMGRL>show configuration
Configuration - dg_test12cs
Protection Mode: MaxPerformance
Members:
test12cs - Primary database
test_sync - Far sync instance
test12css - Physical standby database
Fast-Start Failover: DISABLED
Configuration Status:
SUCCESS (status updated 10 seconds ago)
我们连接到备库,备库现在是ADG模式。
SQL> select open_mode from v$database;
OPEN_MODE
----------------------------------------
READ ONLY WITH APPLY
如果这个时候我们就使用一条语句在备库端查询,使用TNS连接,然后DG Broker来切换,切换的情况如下,也是一气呵成。
DGMGRL> switchover to test12css
Performing switchover NOW, please wait...
Operation requires a connection to database "test12css"
Connecting ...
Connected to "test12css"
Connected as SYSDBA.
New primary database "test12css" is opening...
Operation requires start up of instance "test12cs" on database "test12cs"
Starting instance "test12cs"...
for RDBMS instance
ORACLE instance started.
Database mounted.
Database opened.
Connected to "test12cs"
Switchover succeeded, new primary is "test12css"
DGMGRL>
在客户端反复测试连接的情况如下:
SQL> select count(*) from cat;
COUNT(*)
----------
153
SQL> /
COUNT(*)
----------
153
SQL> /
select count(*) from cat
*
ERROR at line 1:
ORA-03113: end-of-file on communication channel
Process ID: 94489
Session ID: 419 Serial number: 62932
可以看到在切换的过程中,连接被中断了,而接下来就会彻底断开连接。
SQL> /
ERROR:
ORA-03114: not connected to ORACLE
这里就需要说一下这个特性的情况,其实还涉及到一个参数standby_db_preserve_states,默认是NONE
SQL> show parameter standby_db_preserve_states
NAME TYPE VALUE
------------------------------------ ---------------------- ------
standby_db_preserve_states string NONE
我们设置为ALL,这个修改需要重启备库,我们设置好之后,再来做switchover
步骤和上面的类似,我们直接来看看效果,始终在这一个会话内查看数据查询的情况,整个过程相对平滑,在切换过程中会有一个大约两秒的停顿,但是连接始终是保持的。
COUNT(*)
----------
153
SQL> /
COUNT(*)
----------
153
SQL> /
COUNT(*)
----------
153
SQL> /
COUNT(*)
----------
153
SQL> /
COUNT(*)
----------
153
整体来看这个特性确实达到了预期的效果,还是蛮不错的。
- Android新手之旅(11) 在现有页面中插入新的view
- Docker容器学习梳理--容器间网络通信设置(Pipework和Open vSwitch)
- 温故而知新:Asp.Net中如何正确使用Session
- Android新手之旅(13) listview中数据重复的问题
- 温故而知新:HttpApplication,HttpModule,HttpContext及Asp.Net页生命周期
- proxy_pass反向代理配置中url后面加不加/的说明
- Android新手之旅(10) 嵌套布局
- C#代码也VB
- Docker容器学习梳理--SSH方式登陆容器
- Docker网络解决方案-Flannel部署记录
- Nginx的location配置规则梳理
- 统计代码行数的方法梳理
- 如何在不影响asp.net默认安全性的前提下使用ckeditor/fckeditor?
- Linux下防御DDOS攻击的操作梳理
- 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 数组属性和方法
- CodePen vue SFC 、flutter 在线玩耍来袭
- [重拾CSS]一道面试题来看伪元素、包含块和高度坍塌
- webpack 拍了拍你,给了你一份图解指南(模块化部分)
- 深入探究Immutable.js的实现机制(一)
- 深入探究immutable.js的实现机制(二)
- ES6 Promise 的最佳实践
- 「 Map最佳实践」什么时候适合使用 Map 而不是 Object
- ES2017 异步函数的最佳实践(`async` /`await`)
- React Hooks中这样写HTTP请求可以避免内存泄漏
- 用了这 7 个 VS Code 插件,想写一辈子代码
- 听说你还不知道Promise的allSettled()和all()的区别?
- React 条件渲染最佳实践(7 种方法)
- 一文带你层层解锁「文件下载」的奥秘
- Android实现简单C/S聊天室应用
- Android仿IOS回弹效果 支持任何控件