DataGuard之Apply Services(redo应用和SQL应用)
应用服务 Apply Services
根据oracle官方文档整理
http://docs.oracle.com/cd/E11882_01/server.112/e25608/log_apply.htm#i1027052
Apply Services在从库上自动应用redo,实现Primary和Standby的数据同步。
1.Apply Services的两种方式:
Redo Apply(物理standby)
SQL Apply(逻辑standby)
2.Apply Services 配置选项
<1>实时应用redo
实时应用要求:
standby库是归档模式
standby库建有standby
redo log(用来接收Primary传来的redo条目)
如果已经打开了实时应用特性,那么standby库上的apply
service能够应用它收到的redo条目,而不用等待standby库上的standby redo log归档,然后才能应用redo。
这种方式下,switchover和failover都能够快速完成,因为在switchover和failover之前,所有standby redo log都已经被应用了(不用实时方式的话,
切换之前要把所有standby redo log的归档都应用一遍,很耗时间)。
打开实时应用redo特性:
物理standby: ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT
LOGFILE;
逻辑standby:ALTER DATABASE START LOGICAL STANDBY APPLY IMMEDIATE;
联机文档中的图Figure 7-1很清晰的解释了实时应用。
http://docs.oracle.com/cd/E11882_01/server.112/e25608/log_apply.htm#i1023371
<2>延时应用归档日志
在某些情景中,我们需要standby库延时应用已经归档的日志,也就是standby库已经收到了主库传来的redo log,并且已经在standby库归档,但暂时不应用归档日志。
通过设定延迟时间(以分钟为单位),standby库暂时避免了由于primary库误操作或者损坏造成的数据丢失。
为什么用这种方式:
实际工作中可能存在这种情况,primary库误操作删除了数据。如果standby库是实时应用日志模式,standby库的相应数据也会被删除。
而用延时应用归档日志模式,就能避免这种情况发生。Primary库误删数据了,standby库在设定的延时时间内不会应用归档日志,肯定不会删除数据。
利用延时时间,完全可以找回误删除数据。
设定延迟时间:
在primary和standby库的参数文件中的LOG_ARCHIVE_DEST_n参数加上DELAY选项,如果只指定了DELAY参数,但是没有指定具体的值,默认是30分钟。
如果已经启用了实时日志应用,delay这个参数会被忽略,因此不糊iqidong实时延迟日志应用。
如果想让standby库延迟360分钟应用日志,那么就在primary中设置延迟参数。
如:
--延迟360分钟
SQL〉alter
system set log_archive_dest_2='SERVICE=standby LGWR SYNC AFFIRM DELAY=360
VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=standby';
--如果是全新的库,也可以在参数文件中直接设置
log_archive_dest_2='service=standby
LGWR SYNC AFFIRM DELAY=360 VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE)
DB_UNIQUE_NAME=standby'
取消延迟时间设定:
物理standby:
ALTER
DATABASE RECOVER MANAGED STANDBY DATABASE NODELAY;
逻辑standby:
SQL>
ALTER DATABASE START LOGICAL STANDBY APPLY NODELAY;
3.物理standby库的redo日志应用
默认情况,日志应用使用的是归档日志。但是,物理standby用实时日志应用时,RFS进程把primary库的redo条目写入到standby库的standby redo log中;
这时日志应用进程可以直接读取standby redo log进行日志应用。
<1>开始日志应用(starting redo apply)
物理standby库上开始日志应用,要确保物理standby库处于mount状态(??open状态也可以吧??)。
使用ALTER DATABASE RECOVER MANAGED STANDBY DATABASE语句开始日志应用。
在前台开始日志应用:
SQL> ALTER
DATABASE RECOVER MANAGED STANDBY DATABASE; --这种方式执行过程中,在命令行做什么操作都无用,直到其他session把该session杀掉。
在后台开始日志应用:
SQL> ALTER
DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT;
实时日志应用:加上using current logfile
SQL> ALTER
DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE; --前台
SQL> ALTER
DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT FROM
SESSION; --后台
<2>停止日志应用
SQL> ALTER DATABASE RECOVER MANAGED STANDBY
DATABASE CANCEL;
<3>物理standby库监控日志应用情况
--显示保护模式、保护级别、数据库角色、切换状态
SQL> SELECT PROTECTION_MODE,PROTECTION_LEVEL,DATABASE_ROLE
ROLE, SWITCHOVER_STATUS FROM V$DATABASE;
PROTECTION_MODE
PROTECTION_LEVEL ROLE SWITCHOVER_STATUS
-------------------- --------------------
---------------- --------------------
MAXIMUM PERFORMANCE
MAXIMUM PERFORMANCE PHYSICAL
STANDBY NOT ALLOWED
--fast-start failover状态
SQL> SELECT FS_FAILOVER_STATUS "FSFO
STATUS",FS_FAILOVER_CURRENT_TARGET TARGET,FS_FAILOVER_THRESHOLD THRESHOLD,
FS_FAILOVER_OBSERVER_PRESENT "OBSERVER
PRESENT" FROM V$DATABASE;
FSFO STATUS
TARGET
THRESHOLD OBSERVE
---------------------- ------------------------------
---------- -------
DISABLED
0
--物理standby库中日志应用、日志传输状态
SQL> SELECT PROCESS, STATUS, THREAD#,
SEQUENCE#,BLOCK#,BLOCKS,PID FROM V$MANAGED_STANDBY;
PROCESS
STATUS THREAD# SEQUENCE#
BLOCK# BLOCKS PID
--------- ------------ ---------- ----------
---------- ---------- ----------
ARCH
CLOSING 1 34 1 3 9742
ARCH
CONNECTED 0 0 0 0 9746
ARCH
CLOSING 1 30 1 3 9750
ARCH
CLOSING 1 31
1 31 9754
ARCH
CLOSING 1 26 1 77 9758
ARCH
CLOSING 1 32 1 11 9762
ARCH
CLOSING 1 27 1
1 9766
ARCH
CLOSING 1 33 1 2 9770
RFS
IDLE 0 0 0 0
10986
RFS
IDLE 1 37 688 1 9797
RFS
IDLE 0 0 0 0 9801
RFS
IDLE 0 0 0 0 9805
MRP0
APPLYING_LOG 1 37 688
1024000 10916
RFS
IDLE 0 0 0 0
10995
RFS
IDLE 0 0 0 0
10999
--主要看RFS和MRP0
--RFS(Remote File Server)进程:接收primary数据库的redo,保存在standby
redo log(arch模式不写standby,直接保存归档)
状态值有:
WRITING:进程活跃,正在把redo写到归档日志中
IDLE:空闲,没有日志同步
RECEIVING:收听网络通信
OPENING:正在打开归档日志
--MRP0(Manager Recover Process):负责日志应用个,只要启用到日志应用才会有这个服务。在物理standby中是MRP,在逻辑standby中是LSP。
状态值:
WAIT_FOR_LOG:等待日志完成
APPLYING_LOG:正在应用日志
--物理standby收到的primary库传输过来的归档
SQL> SELECT THREAD#,
SEQUENCE#,FIRST_CHANGE#,NEXT_CHANGE# FROM V$ARCHIVED_LOG;
--datagruad信息
SQL> SELECT MESSAGE FROM V$DATAGUARD_STATUS;
MESSAGE
--------------------------------------------------------------------------------
LNS: Beginning to archive log 1 thread 1 sequence 37
LNS: Completed archiving log 1 thread 1 sequence 37
ARC2: Beginning to archive thread 1 sequence 37
(1051112-1053910)
ARC2: Completed archiving thread 1 sequence 37
(1051112-1053910)
LNS: Standby redo logfile selected for thread 1
sequence 38 for destination LOG_
ARCHIVE_DEST_2
--在备库中查看存档目录是否正常
SQL> select DEST_NAME,STATUS,ERROR,TARGET,PROCESS
from v$archive_dest where rownum<4;
--裂缝:standby库和primary库差多少redo文件
SELECT * FROM V$ARCHIVE_GAP;
4.逻辑standby库的redo日志应用
SQL应用把归档日志或者standby redo log通过logmnr转换成SQL语句,然后在逻辑standby数据上执行SQL。SQL应用时standby库处于open状态,
这时在standby库也可以做其他操作,如报表、查询等。
<1>开始SQL应用
SQL> ALTER DATABASE START LOGICAL STANDBY APPLY;
SQL> ALTER DATABASE START LOGICAL STANDBY APPLY
IMMEDIATE; --逻辑standby数据库实时SQL应用
<2>停止SQL应用
SQL> ALTER DATABASE STOP LOGICAL STANDBY APPLY;
<3>监控SQL应用情况
--SQL应用过程中发生的事件。默认这个视图最多记录10000个事件。可以通过DBMS_LOGSTDBY.APPLY_SET() 修改。
SQL> ALTER SESSION SET NLS_DATE_FORMAT = 'DD-MON-YY HH24:MI:SS';
SQL> COLUMN STATUS FORMAT A60
SQL> SELECT EVENT_TIME, STATUS, EVENT FROM
DBA_LOGSTDBY_EVENTS ORDER BY EVENT_TIMESTAMP, COMMIT_SCN, CURRENT_SCN;
--SQL应用过程中,归档日志的动态信息
SQL> COLUMN DICT_BEGIN FORMAT A10;
SQL> SET NUMF 99999999;
SQL> SELECT FILE_NAME, SEQUENCE# AS SEQ#,
FIRST_CHANGE# AS F_SCN#,NEXT_CHANGE# AS N_SCN#, TIMESTAMP,DICT_BEGIN AS BEG,
DICT_END AS END,
THREAD# AS THR#, APPLIED FROM DBA_LOGSTDBY_LOG ORDER
BY SEQUENCE#;
FILE_NAME SEQ# F_SCN N_SCN TIMESTAM BEG END THR# APPLIED
------------------------- ---- ------- -------
-------- --- --- --- ---------
/oracle/dbs/hq_nyc_2.log 2
101579 101588 11:02:58 NO NO 1 YES
/oracle/dbs/hq_nyc_3.log 3
101588 142065 11:02:02 NO NO 1 YES
/oracle/dbs/hq_nyc_4.log 4
142065 142307 11:02:10 NO NO 1 YES
/oracle/dbs/hq_nyc_5.log 5
142307 142739 11:02:48 YES YES
1 YES
/oracle/dbs/hq_nyc_6.log 6
142739 143973 12:02:10 NO NO 1 YES
/oracle/dbs/hq_nyc_7.log 7 143973 144042 01:02:11 NO NO
1 YES
/oracle/dbs/hq_nyc_8.log 8
144042 144051 01:02:01 NO NO 1 YES
/oracle/dbs/hq_nyc_9.log 9
144051 144054 01:02:16 NO NO 1 YES
/oracle/dbs/hq_nyc_10.log 10 144054
144057 01:02:21 NO NO 1
YES
/oracle/dbs/hq_nyc_11.log 11 144057
144060 01:02:26 NO NO 1
CURRENT
/oracle/dbs/hq_nyc_12.log 12 144060
144089 01:02:30 NO NO 1
CURRENT
/oracle/dbs/hq_nyc_13.log 13 144089
144147 01:02:41 NO NO 1
NO
--???
SQL> COL NAME FORMAT A20
SQL> COL VALUE FORMAT A12
SQL> COL UNIT FORMAT A30
SQL> SELECT NAME, VALUE, UNIT FROM
V$DATAGUARD_STATS;
NAME
VALUE UNIT
-------------------- ------------
------------------------------
apply finish time
+00 00:00:00 day(2) to second(1)
interval
apply lag
+00 00:00:00 day(2) to second(0) interval
transport lag
+00 00:00:00 day(2) to second(0) interval
本文转自:http://blog.chinaunix.net/uid-26844646-id-5602383.html
DataGuard之Apply Services(redo应用和SQL应用)的更多相关文章
- Analysis Services features supported by SQL Server editions
Analysis Services (servers) Feature Enterprise Standard Web Express with Advanced Services Express w ...
- oracle dataguard (一)
一.什么是data guard及data guard的工作原理 Data Guard 是一个集合,由一个primary数据库(生产数据库)及一个或多个standby数据库(最多9个)组成.组成Data ...
- Oracle Dataguard Standby Redo Log的两个实验
在Data Guard环境中,Standby Redo Log是一个比较特殊的日志类型.从最新的DG安装指导中,都推荐在Primary和Standby端,都配置Standby Redo Log. 简单 ...
- 你真的会玩SQL吗?冷落的Top和Apply
你真的会玩SQL吗?系列目录 你真的会玩SQL吗?之逻辑查询处理阶段 你真的会玩SQL吗?和平大使 内连接.外连接 你真的会玩SQL吗?三范式.数据完整性 你真的会玩SQL吗?查询指定节点及其所有父节 ...
- sql的OUTER APPLY
今天写一个查询sql,其中涉及到一个银行卡绑定表(表名:BankBind),我要将这个表的开户行字段的值进行分割出省份.支行, 这个开户行字段存储的值如“广东省广东省分行江门市分行恩平市支行”.“招商 ...
- 如何定位那些SQL产生了大量的redo日志
在ORACLE数据库的管理.维护过程中,偶尔会遇到归档日志暴增的情况,也就是说一些SQL语句产生了大量的redo log,那么如何跟踪.定位哪些SQL语句生成了大量的redo log日志呢? 下面这篇 ...
- SQL Server连接查询之Cross Apply和Outer Apply的区别及用法(转载)
先简单了解下cross apply的语法以及会产生什么样的结果集吧!示例表: SELECT * FROM tableA CROSS APPLY tableB 两张表直接连接,不需要任何的关联条件,产生 ...
- 为何使用Microsoft SQL Server Management Studio连接Integration Services服务失败
检查是否满足以下各项: 1. 首先你要确保当前你使用的Windows账号是有管理员权限的 2. 其次请在打开Microsoft SQL Server Management Studio时,通过右键Ru ...
- SQL Server 中日志的的作用(Redo和Undo)
简介 之前我已经写了一个关于SQL Server日志的简单系列文章.本篇文章会进一步挖掘日志背后的一些概念,原理以及作用. 数据库的可靠性 在关系数据库系统中,我们需要数据库可靠,所谓的可靠就是当遇见 ...
随机推荐
- 编程输出杨辉三角的前10行---多维数组的应用---java实现
import java.util.Scanner;public class yanghui{ public static void main(String[] args){ Scanner sc=n ...
- Java - "JUC" ReentrantReadWriteLock
Java多线程系列--“JUC锁”08之 共享锁和ReentrantReadWriteLock ReadWriteLock 和 ReentrantReadWriteLock介绍 ReadWriteLo ...
- oracle 中如何查询当前用户可以看到的表名、表对应的所有字段
前言:利用 oracle 的视图来查询表的相关信息. oracle 查询当前用户下的表名 + 表注释 select t.table_name tableName, f.comments comment ...
- Three.js开发指南---使用高级几何体和二元操作(第六章)
本章的主要内容: 一,高级几何体-凸面体ConvexGeometry,扫描体LatheGeometry,管状几何体TubeGeometry: 二,使用拉伸几何体ExtrudeGeometry将一个二维 ...
- python并发编程-线程和锁
什么是线程 进程:资源分配单位 线程:cpu执行单位(实体),每一个py文件中就是一个进程,一个进程中至少有一个线程 线程的两种创建方式: from multiprocessing import Pr ...
- 【代码笔记】iOS-4个可以单独点击的button
一,效果图. 二,工程图. 三,代码. ViewController.m #import "ViewController.h" @interface ViewController ...
- eclipse导入web项目报错
主要是用svn Checkout一个web项目,然后导入eclipse中运行.正常情况应该是没什么问题的,但是有时候也会有点题.是看了别人的博客之后,确实解决了问题,就记录一下.因为很多坑,要自己掉过 ...
- 多个Portal for ArcGIS 间的协作实操
原理 协作Colabartion 通过类似握手协议的方式在多个Portal之间建立信任关系.一个协作由一个宿主Portal和多个受邀Portal组成. 工作空间Workspace 一个协作可包含多个工 ...
- 树莓派 温度监控 PWM 控制风扇 shell python c 语言
Mine: 图中圈出来的是三极管 和滤波电容 依赖库: wiringPi sudo apt-get install wiringpi Shell脚本 本文介绍使用Shell脚本在树莓派上启用软件PWM ...
- php 实现简单购物车功能(2)
上一篇的时候只是写了简单的加入购物车功能,购物车中产品的删除.提交订单后,库存的减少 以及客户账户的余额都没有完善, 这一篇是接着完善上一篇的,上一篇写到了购物车中删除的功能了,为了使删除的代码少敲一 ...