- 浏览: 1022868 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (529)
- 服务器 (8)
- jsp (1)
- java (6)
- AIX (1)
- solaris (3)
- linux学习 (53)
- javaScript (2)
- hibernate (1)
- 数据库 (74)
- sql语句 (8)
- oracle 学习 (75)
- oracle 案例 (42)
- oracle 管理 (42)
- Oracle RAC (27)
- oracle data guard (12)
- oracle 参数讲解 (14)
- Oracle 字符集 (8)
- oracle性能调优 (24)
- oracle备份与恢复 (12)
- oracle Tablespace (9)
- oracle性能诊断艺术 (1)
- oracle 11g学习 (5)
- oracle streams (1)
- oracle upgrade and downgrade (4)
- db2学习 (13)
- db2命令学习 (2)
- mysql (28)
- sql server (30)
- sql server 2008 (0)
- 工具 (10)
- 操作系统 (3)
- c++ (1)
- stock (1)
- 生活 (5)
- HADOOP (2)
最新评论
-
massjcy:
...
如何将ubuntu文件夹中文名改为英文 -
skypiea:
谢谢。。。
终于解决了。。。
Oracle 10.2.0.4(5)EM不能启动的解决方案(Patch 8350262) -
qwe_rt:
引用vi /etc/sysconfig/network 请问 ...
Linux操作系统下配置静态IP上网 -
liuqiang:
sudo killall -9 apache2
ps 和 kill 命令详解 -
dazuiba:
引用*绝杀 kill -9 PID 当使用此命令时,一定要通过 ...
ps 和 kill 命令详解
Active Data Guard 是 Oracle 11g 的亮点特性之一,而在11G release 2中对Active Data Guard引入了更多诱人的新特性,这些特性将Active Data Guard打造成Oracle 读写分离或报表查询的理想方案之一。
STANDBY_MAX_DATA_DELAY是11gr2中对Active Data Guard的最大增强(buffer)之一,这是一个可以在会话级别指定的参数(session parameter),该参数指定了在Primary Database已commit提交的变化与standby Database数据库上涉及相关变化的查询之间所允许的时间延迟,单位为second 秒(Specifies a limit for the amount of time (in seconds) allowed to elapse between when changes are committed on the primary and when those same changes can be queries on the standby database)。
使用该STANDBY_MAX_DATA_DELAY参数的语法如下:
ALTER SESSION SET STANDBY_MAX_DATA_DELAY ={ NONE | INTEGER }
注意事项
- 该参数无法为SYS用户所用,在SYS用户的SESSION下设置该参数将被忽略
- 若没有指定STANDBY_MAX_DATA_DELAY,即使用其默认值NONE,那么无论主备库之间有多大的延迟,在Physical Standby上的查询都会被执行
- 若查询延迟超过STANDBY_MAX_DATA_DELAY所指定的值那么,将报ORA-03172错误:
03172, 00000, "STANDBY_MAX_DATA_DELAY of %s seconds exceeded" // *Cause: Standby recovery fell behind the STANDBY_MAX_DATA_DELAY // requirement. // *Action: Tune recovery and retry the query later, or switch to another // standby database within the data delay requirement.
在实际运用中STANDBY_MAX_DATA_DELAY保证了在Standby数据库上所作的报表查询不会得到过于陈旧的结果(stale result),通过该参数我们可以指定一个报表应用所容许的数据时间延迟。
当然也可以指定不容许任何数据延迟,即设置STANDBY_MAX_DATA_DELAY为零,以便做到实时数据查询。
配置Primary 与 Standby 数据库之间的实时查询或者说零延迟查询有以下注意事项:
- 只有特定的应用程序才会对数据延迟有零容忍的需求,注意你的应用程序是否有如此苛刻的要求
- 在Standby数据库上执行的查询语句必须返回和主库上查询的完全一致的结果
- 必须设置STANDBY_MAX_DATA_DELAY 为0
- 在查询开始的那一刻,Standby数据库必须同步到与Primary数据库一致的Current Scn
- 若结果没有在200ms内返回,则查询会因ORA-03172而终止
- Primary数据库必须采用最大可用(max availability)或最大保护(maximum protection)模式
- redo 传输必须使用SYNC 选项
- 必须启用 Real-Time Query 特性
实际使用
以下我们通过演示来了解该STANDBY_MAX_DATA_DELAY的效果:
SQL> select * from v$version; BANNER -------------------------------------------------------------------------------- Oracle Database 11g Enterprise Edition Release 11.2.0.2.0 - 64bit Production PL/SQL Release 11.2.0.2.0 - Production CORE 11.2.0.2.0 Production TNS for Linux: Version 11.2.0.2.0 - Production NLSRTL Version 11.2.0.2.0 - Production SQL> select * from global_name; GLOBAL_NAME -------------------------------------------------------------------------------- www.oracledatabase12g.com & www.askmaclean.com Primary Database SQL> conn maclean/maclean Connected. Primary Database SQL> select database_role,protection_mode from v$database; DATABASE_ROLE PROTECTION_MODE ---------------- -------------------- PRIMARY MAXIMUM AVAILABILITY Primary Database SQL> create table TSMDD tablespace users as select * From dba_objects; Table created. Standby Database SQL> conn maclean/maclean Connected. Standby Database SQL> select database_role,protection_mode from v$database; DATABASE_ROLE PROTECTION_MODE ---------------- -------------------- PHYSICAL STANDBY MAXIMUM AVAILABILITY 注意STANDBY_MAX_DATA_DELAY是一个会话参数session parameter,而非实例参数instance parameter Standby Database SQL> select name from v$system_parameter where name='standby_max_data_delay'; no rows selected Standby Database SQL> alter session set STANDBY_MAX_DATA_DELAY=0; Session altered. Standby Database SQL> select count(*) from TSMDD; COUNT(*) ---------- 13378
实际测试可以发现当STANDBY_MAX_DATA_DELAY=0时,并不是查询语句执行时间超过200ms就返回ORA-03172错误,而是指从查询开始的200ms内,若备库没有追上主库的Current SCN时出现ORA-03172。
Standby Database SQL> alter session set STANDBY_MAX_DATA_DELAY=0; Session altered. Standby Database SQL> set timing on; Standby Database SQL> select count(1) from TSMDD a, TSMDD b; COUNT(1) ---------- 178970884 Elapsed: 00:00:05.34 Standby Database SQL> alter session set events '10046 trace name context forever,level 12'; Session altered. 在主库上执行大数据量的insert操作,但是不提交commit; Primary Database SQL> insert into /*+ append */ tsmdd select * from tsmdd; 此时在Standby 数据库 上执行查询语句将触发ORA-3172错误 Standby Database SQL> select count(*) from tsmdd * ERROR at line 1: ORA-03172: STANDBY_MAX_DATA_DELAY of 0 seconds exceeded Standby Database SQL> / select count(*) from tsmdd * ERROR at line 1: ORA-03172: STANDBY_MAX_DATA_DELAY of 0 seconds exceeded
以上查询语句执行过程中的10046 trace如下:
PARSING IN CURSOR #47828795969456 len=26 dep=0 uid=34 oct=3 lid=34 tim=1316692536000853 hv=2314050071 ad='7115e798' sqlid='3smn48y4yv6hr' select count(*) from tsmdd END OF STMT PARSE #47828795969456:c=0,e=61,p=0,cr=0,cu=0,mis=0,r=0,dep=0,og=1,plh=1739041831,tim=1316692536000852 WAIT #47828795969456: nam='standby query scn advance' ela= 201440 p1=770798 p2=0 p3=20 obj#=13873 tim=1316692536202337 WAIT #47828795969456: nam='SQL*Net break/reset to client' ela= 25 driver id=1650815232 break?=1 p3=0 obj#=13873 tim=1316692536202528 WAIT #47828795969456: nam='SQL*Net break/reset to client' ela= 144 driver id=1650815232 break?=0 p3=0 obj#=13873 tim=1316692536202694 WAIT #47828795969456: nam='SQL*Net message to client' ela= 1 driver id=1650815232 #bytes=1 p3=0 obj#=13873 tim=1316692536202715 *** 2011-09-22 19:55:37.983 WAIT #47828795969456: nam='SQL*Net message from client' ela= 1781108 driver id=1650815232 #bytes=1 p3=0 obj#=13873 tim=1316692537983884 CLOSE #47828795969456:c=0,e=24,dep=0,type=0,tim=1316692537984068 =============================================================================================== PARSING IN CURSOR #47828795969456 len=26 dep=0 uid=34 oct=3 lid=34 tim=1316692537984172 hv=2314050071 ad='7115e798' sqlid='3smn48y4yv6hr' select count(*) from tsmdd END OF STMT PARSE #47828795969456:c=0,e=53,p=0,cr=0,cu=0,mis=0,r=0,dep=0,og=1,plh=1739041831,tim=1316692537984171 WAIT #47828795969456: nam='standby query scn advance' ela= 200546 p1=770914 p2=0 p3=20 obj#=13873 tim=1316692538184822 WAIT #47828795969456: nam='SQL*Net break/reset to client' ela= 10 driver id=1650815232 break?=1 p3=0 obj#=13873 tim=1316692538184998 WAIT #47828795969456: nam='SQL*Net break/reset to client' ela= 103 driver id=1650815232 break?=0 p3=0 obj#=13873 tim=1316692538185154 WAIT #47828795969456: nam='SQL*Net message to client' ela= 1 driver id=1650815232 #bytes=1 p3=0 obj#=13873 tim=1316692538185182
注意这里出现的standby query scn advance等待事件,显然该等待事件是为了确认Primary与Standby之间的Scn差距,但这又是一个Internal的undocumented 等待事件。我猜测是P1是Standby数据库的Current Scn,而p3可能是Primary 与 Standby之间的Scn 差距。OBJ#是查询对象的object_id:
SQL> col owner for a20 SQL> col object_name for a20 SQL> select owner,object_name from dba_objects where object_id=13873; OWNER OBJECT_NAME -------------------- -------------------- MACLEAN TSMDD
使用技巧
在实际的使用过程中我们没有必要每次登录会话查询都去指定STANDBY_MAX_DATA_DELAY参数,可以通过创建AFTER LOGON触发器来简化工作。
在11 g Release 2中引入了USERENV Context的一种新属性DATABASE_ROLE,使用该属性可以便捷地定位用户所登录数据库的角色是Primary 还是 Standby,11g的SQL 和 PL/SQL客户端程序均可以通过 SYS_CONTEXT 函数获取该数据库角色信息。
通过创建以下登陆后触发器可以做到当应用程序登录到启用实时查询的Standby数据库上后即自动设置合适的STANDBY_MAX_DATA_DELAY参数。这样即避免了修改应用程序的代码,有做到了配置合理的最大数据延迟。
CREATE OR REPLACE TRIGGER AUTO_SMDD AFTER LOGON ON USER.SCHEMA BEGIN IF (SYS_CONTEXT('USERENV', 'DATABASE_ROLE') IN ('PHYSICAL STANDBY')) THEN execute immediate 'alter session set standby_max_data_delay=5'; END IF; END;
注意以上trigger 只需要在Primary Database上以应用相关用户身份建立即可,会同步到Standby上:
Primary Database SQL> conn maclean/maclean Connected. Primary Database SQL> CREATE OR REPLACE TRIGGER AUTO_SMDD 2 AFTER LOGON ON MACLEAN.SCHEMA 3 BEGIN 4 IF (SYS_CONTEXT('USERENV', 'DATABASE_ROLE') IN ('PHYSICAL STANDBY')) THEN 5 execute immediate 'alter session set standby_max_data_delay=0'; 6 END IF; 7 END; 8 / Trigger created.
发表评论
-
sqlldr总结参数介绍
2012-06-28 14:29 22831有效的关键字: userid -- ORACLE use ... -
Linux下用OCCI或OCI连接Oracle
2011-07-26 12:00 2905首先,去oracle官网下载C ... -
Oracle Mutex实现机制
2011-05-18 23:43 1071我们都知道Latch是Oracle ... -
local_listener参数作用
2011-05-10 17:19 1931pmon只会动态注册port等于1521的监听,否则 ... -
oracle伪列 rowid和rownum
2011-03-23 10:00 3540整理ROWID一 一,什么是伪列RowID?1,首先是一种数 ... -
Oracle10gR2 主备自动切换之客户端Failover配置
2011-01-20 10:32 9521. 主库检查和设置假设新增的服务名为ORCL_TAF.LK. ... -
Oracle10g配置Dataguard的相关参数解释
2011-01-20 10:24 1271参考自 http://space.itpub.ne ... -
wrap加密oracle包
2011-01-19 11:52 1298大家都知道oracle的很多系统包是没法看它的源码的,orac ... -
利用hcheck检查数据字典一致性状态
2011-01-17 17:42 1820利用hcheck可以检查oracle数据字典的一致性状态,主要 ... -
插入相同的数据量普通表和临时表产生的redo对比
2011-01-17 16:08 988往临时表里插入相同量 ... -
Database Link与GLOBAL_NAMES参数
2011-01-12 13:36 1032当GLOBAL_NAMES参数设置为TRUE时,使用DATAB ... -
Oracle Streams学习二(清除流配置)
2011-01-09 23:34 1182在完成streams部署之后,如果需要重新配置或舍弃配置,可以 ... -
red hat enterprise 下完全删除oracle 数据库
2011-01-05 01:28 1758步骤 1 以oracle用户登录主、备节点。步骤 2 ... -
Oracle常用dump命令
2010-12-20 00:31 834Oracle常用dump命令,记录一下备查。 一.M ... -
oracle执行DML(事物过程)的深入研究(二)
2010-12-14 15:02 1541接上一节的 oracle执行DML(事物过程)的深入研究(一) ... -
oracle执行DML(事物过程)的深入研究(一)
2010-12-14 10:26 2804用户所执行 DML (即执行事务)操作在 Oracle 内部按 ... -
Oracle基本数据类型存储格式研究(二)—数字类型
2010-12-14 00:35 1473数字类型包含number,intege ... -
Oracle基本数据类型存储格式研究(一)—字符类型
2010-12-13 23:32 11731.char char是定长字符型,内部代码是:96,最多可 ... -
关于oracle rowid的一些内容 -- 转载
2010-12-13 15:47 782本文讨论的是关于oracle ... -
oracle 进制转换
2010-12-13 14:24 12661.16进制转换为10进制 ...
相关推荐
在"Oracle RAC系列之_10gR2 RAC(ASM) Data Guard容灾配置手册"中,你可能会学习到以下关键知识点: 1. **RAC安装与配置**:如何在多台服务器上安装和配置RAC实例,包括网络设置、OCR(Oracle Cluster Registry)和...
D1 Linux Standby 模块开发指南 本文档旨在介绍 Standby 模块的配置和调试方法,旨在帮助 Standby 模块开发、维护人员快速掌握 Standby 模块的开发和调试技术。 一、模块介绍 Standby 模块是 Linux 操作系统中的...
### Oracle 11g 中 log_archive_dest, log_archive_dest_n 和 standby_archive_dest 参数详解 #### 一、引言 在Oracle数据库中,归档日志是实现数据恢复的关键组件之一。为了确保系统的高可用性和灾难恢复能力,...
在Oracle 10g Release 2(10gR2)中,Data Guard的功能进一步增强,为管理员提供了更精细的控制和更高的数据安全性。 一、Data Guard基础概念 1. 主数据库(Primary Database):正常运行并处理事务的数据库。 2. ...
Oracle 11gR2 RAC (Real Application Clusters) 和 Data Guard 是企业级数据库解决方案的重要组成部分,用于构建高可用性和灾难恢复环境。在DELL R910服务器上使用Red Hat Enterprise Linux 6.5操作系统进行安装和...
Oracle 11gR2数据库是一个重要的版本更新,引入了许多新特性和改进,极大地提升了数据库的性能、可管理和安全性。以下是一些主要的新特性详细解释: 1. 自动内存管理: Oracle 11gR2引入了自动内存管理功能,通过`...
02.PDF和08.PDF可能探讨了Cisco的冗余和高可用性解决方案,如HSRP(Hot Standby Router Protocol,热备份路由协议)和VRRP(Virtual Router Redundancy Protocol,虚拟路由器冗余协议),它们用于在网络设备故障时...
2. **唤醒事件**:STM32可以配置多种唤醒事件,如外部中断(EXTI线)、内部RTC闹钟或者外部时钟输入。在`main.c`和`stm32f10x_it.c`中,需要处理这些事件并设定适当的中断服务程序。 3. **进入standby模式**:通过...
2. Standby 实现机制: - Standby 系统框架:主数据库和备用数据库之间通过网络进行redo日志的传输。redo日志由LGWR进程写入到主数据库的redo log files,然后通过网络发送到备用数据库,由备用数据库的LGWR进程...
标题“testzp05_standby_F2812_”暗示了这是一个关于F2812微控制器在STANDBY低功耗模式下利用看门狗中断唤醒CPU的测试项目。F2812是TI公司生产的C28x系列浮点数字信号处理器(DSP),常用于实时控制应用。在这个场景中...
Oracle_Standby_Database
在Oracle 11gR2中,这些新特性共同提升了数据库的性能、可用性和可维护性,为DBA和企业提供了更强大、更灵活的数据库管理工具。同时,对于数据库的升级路径,Oracle也提供了清晰的指导,确保平稳过渡到新的版本。
标题中的"Example_PWR_Standby_RTC.7z"暗示了一个关于电源管理(Power Management)和实时时钟(RTC,Real-Time Clock)的示例项目。这个压缩包可能包含了一个用于演示如何在硬件或软件系统中实现电源节能模式,特别...
- **VLLS模式(Very Low Leakage Standby Mode)**:最低功耗模式,仅保留少数时钟。 #### 12.1.3 SIM引脚说明 SIM模块通过特定的引脚与外部设备进行交互。 - **EZP_CS**:EzPort模式选择引脚,通过此引脚可以选择...
完成时间:2017/6/26 11:01 版本:V1.0 本文参照: 《A33 wifi移植说明书.pdf》 还有就是全志R16的parrotv1.1的官方SDK(Android4.4.2) 1、打开AP6212的BT,关闭rtl8723bs的BT: [ 3.141273] Bluetooth: HCI ...
本文将基于“11GR2创建dataguard.docx”文档中的信息,深入解析如何在Oracle 11gR2环境下搭建Data Guard,特别针对在Linux AS5操作系统上进行配置的过程。 ### 一、环境配置 #### 操作系统与数据库版本 - **操作...
* 电流:IDD_MAX VDD引脚最大电源电流15mA * 功耗:SOP8封装的最大功耗0.75W * 温度:TJ结温范围-20°C到125°C QX6102的电气特性包括: * 电源电压:工作电压5V * 启动电压阈值:VDD_ON 4.8V到5.2V * 欠压保护...
本文档是"D1-H Linux Standby开发指南"的版本1.0,发布于2021年2月4日,主要针对D1-H平台上的Linux Standby模块的开发和维护人员。文档的密级为秘密,由珠海全志科技股份有限公司版权所有。 在开始之前,我们先对...
Oracle 11g DataGuard是Oracle数据库系统中的一个强大特性,用于实现高可用性和灾难恢复。DataGuard通过创建和维护一个或多个备用数据库,确保在主数据库出现问题时,业务能够迅速切换到备用数据库,减少数据丢失和...