11g 逻辑备库简单故障处理

模拟同步失败

备库创建唯一性索引

SQL> create unique index idx_scott_t_1 on scott.t(user_id);

Index created.

主库插入重复数据

SQL> insert into scott.t select * from scott.t;

36 rows created.

SQL> commit;

Commit complete.

备库自动停止同步

Mon Sep 29 17:22:32 2014
LOGSTDBY: SQL Apply about to stop with ORA-1
LOGSTDBY: SQL Apply finished logging error information
LOGSTDBY Apply process AS02 server id=2 pid=41 OS id=2535 stopped
Errors in file /u01/app/oracle/diag/rdbms/orcl2/orcl/trace/orcl_as02_2535.trc:
ORA-00001: unique constraint (SYS.IDX_SCOTT_T_1) violated
Mon Sep 29 17:22:36 2014
Errors in file /u01/app/oracle/diag/rdbms/orcl2/orcl/trace/orcl_lsp0_2507.trc:
ORA-26808: Apply process AS02 died unexpectedly.
ORA-00001: unique constraint (SYS.IDX_SCOTT_T_1) violated
Mon Sep 29 17:22:36 2014
LOGSTDBY Analyzer process AS00 server id=0 pid=39 OS id=2531 stopped
Mon Sep 29 17:22:36 2014
LOGSTDBY Apply process AS01 server id=1 pid=40 OS id=2533 stopped
Mon Sep 29 17:22:36 2014
LOGSTDBY Apply process AS03 server id=3 pid=42 OS id=2537 stopped
Mon Sep 29 17:22:36 2014
LOGSTDBY Apply process AS04 server id=4 pid=43 OS id=2539 stopped
Mon Sep 29 17:22:36 2014
LOGSTDBY Apply process AS05 server id=5 pid=44 OS id=2541 stopped
Mon Sep 29 17:22:40 2014
LOGMINER: session#=1 (Logical_Standby$), preparer MS02 pid=36 OS id=2518 sid=46 stopped
Mon Sep 29 17:22:40 2014
LOGMINER: session#=1 (Logical_Standby$), reader MS00 pid=34 OS id=2514 sid=44 stopped
Mon Sep 29 17:22:40 2014
LOGMINER: session#=1 (Logical_Standby$), builder MS01 pid=35 OS id=2516 sid=34 stopped
LOGSTDBY status: ORA-16222: automatic Logical Standby retry of last action
LOGMINER: Parameters summary for session# = 1
LOGMINER: Number of processes = 3, Transaction Chunk Size = 201
LOGMINER: Memory Size = 30M, Checkpoint interval = 150M
LOGMINER: SpillScn 1114702, ResetLogScn 995548
LOGMINER: summary for session# = 1
LOGMINER: StartScn: 0 (0x0000.00000000)
LOGMINER: EndScn: 0 (0x0000.00000000)
LOGMINER: HighConsumedScn: 1114646 (0x0000.00110216)
LOGMINER: session_flag: 0x1
LOGMINER: Read buffers: 16
Mon Sep 29 17:22:43 2014
LOGMINER: session#=1 (Logical_Standby$), reader MS00 pid=34 OS id=2554 sid=34 started
Mon Sep 29 17:22:43 2014
LOGMINER: session#=1 (Logical_Standby$), builder MS01 pid=35 OS id=2556 sid=44 started
Mon Sep 29 17:22:43 2014
LOGMINER: session#=1 (Logical_Standby$), preparer MS02 pid=36 OS id=2558 sid=45 started
LOGMINER: Turning ON Log Auto Delete
Mon Sep 29 17:22:45 2014
LOGSTDBY Analyzer process AS00 started with server id=0 pid=40 OS id=2560
Mon Sep 29 17:22:45 2014
LOGSTDBY Apply process AS01 started with server id=1 pid=41 OS id=2562
Mon Sep 29 17:22:45 2014
LOGSTDBY Apply process AS04 started with server id=4 pid=44 OS id=2568
Mon Sep 29 17:22:45 2014
Mon Sep 29 17:22:45 2014
LOGSTDBY Apply process AS05 started with server id=5 pid=45 OS id=2570
Mon Sep 29 17:22:45 2014
LOGSTDBY Apply process AS03 started with server id=3 pid=43 OS id=2566
LOGSTDBY Apply process AS02 started with server id=2 pid=42 OS id=2564
LOGMINER: Begin mining logfile for session 1 thread 1 sequence 42, /u01/app/oracle/fast_recovery_area/ORCL2/onlinelog/o1_mf_4_b2l8vov0_.log
LOGSTDBY: SQL Apply about to stop with ORA-1
LOGSTDBY: SQL Apply finished logging error information
LOGSTDBY Apply process AS01 server id=1 pid=41 OS id=2562 stopped
Errors in file /u01/app/oracle/diag/rdbms/orcl2/orcl/trace/orcl_lsp0_2507.trc:
ORA-26808: Apply process AS01 died unexpectedly.
ORA-00001: unique constraint (SYS.IDX_SCOTT_T_1) violated
LOGSTDBY Analyzer process AS00 server id=0 pid=40 OS id=2560 stopped
LOGSTDBY Apply process AS02 server id=2 pid=42 OS id=2564 stopped
LOGSTDBY Apply process AS03 server id=3 pid=43 OS id=2566 stopped
LOGSTDBY Apply process AS04 server id=4 pid=44 OS id=2568 stopped
LOGSTDBY Apply process AS05 server id=5 pid=45 OS id=2570 stopped
Errors in file /u01/app/oracle/diag/rdbms/orcl2/orcl/trace/orcl_as01_2562.trc:
ORA-00001: unique constraint (SYS.IDX_SCOTT_T_1) violated
LOGMINER: session#=1 (Logical_Standby$), reader MS00 pid=34 OS id=2554 sid=34 stopped
LOGMINER: session#=1 (Logical_Standby$), preparer MS02 pid=36 OS id=2558 sid=45 stopped
LOGMINER: session#=1 (Logical_Standby$), builder MS01 pid=35 OS id=2556 sid=44 stopped

trace文件/u01/app/oracle/diag/rdbms/orcl2/orcl/trace/orcl_as02_2535.trc里有这个事务相关信息

ERROR INFORMATION:
PRIMARY TXN xid: 0x0003.003.0000033b (XIDUSN = 3, XIDSLT = 3, XIDSQN = 827)
start scn: 0x0000.0011024e (1114702) commit scn: 0x0000.00110250 (1114704)

视图里有可读性强的错误信息

SQL> select event, status from DBA_LOGSTDBY_EVENTS;

EVENT                            STATUS
-------------------------------- -----------------------------------------------------------
insert into "SCOTT"."T"          ORA-00001: unique constraint (SYS.IDX_SCOTT_T_1) violated
values
    "USERNAME" = 'SYS',
    "USER_ID" = 0,
    "CREATED" = '17-SEP-11'

。。。。。。。。。。。

根据上面的xidusn,xidslt,xidsqn跳过事务

SQL> exec dbms_logstdby.skip_transaction (33827);

PL/SQL procedure successfully completed.

SQL> ALTER DATABASE START LOGICAL STANDBY APPLY IMMEDIATE;

Database altered.

或者直接从视图里拼出语句

SQL> select event, status,'exec dbms_logstdby.skip_transaction ('||XIDUSN||', '||XIDSLT||', '||XIDSQN||');' from dba_logstdby_events where XIDUSN is not null;

EVENT              STATUS
-------------------------------------------------- ----------------------------------------------------------------------------------------------------
'EXECDBMS_LOGSTDBY.SKIP_TRANSACTION('||XIDUSN||','||XIDSLT||','||XIDSQN||');'
-------------------------------------------------------------------------------------------------------------------------------------------------------------------
insert into "SCOTT"."T"          ORA-00001: unique constraint (SYS.IDX_SCOTT_T_1) violated
values
    "USERNAME" = 'SYS',
    "USER_ID" = 0,
    "CREATED" = '17-SEP-11'
exec dbms_logstdby.skip_transaction (3, 3, 827);

。。。。。。。。。。。。。

还有一个办法,就是全同步单表

1 在备库上创建到主库的dblink,要求dblink在主库那边的用户能够读表、锁表及SELECT_CATALOG_ROLE

create database link dg_orcl connect to system identified by oracle using 'dg_orcl';   

2 调用存储过程

exec dbms_logstdby.instantiate_table('SCOTT', 'T', 'DG_ORCL');

时间: 2024-10-26 23:30:02

11g 逻辑备库简单故障处理的相关文章

【DATAGUARD】 将11g物理备库转换为Snapshot Standby

[DATAGUARD] 将11g物理备库转换为Snapshot Standby BLOG文档结构图         [DATAGUARD] 基于同一个主机建立物理备库和逻辑备库(一): http://blog.itpub.net/26736162/viewspace-1448197/[DATAGUARD] 基于同一个主机建立物理备库和逻辑备库(二 ):  http://blog.itpub.net/26736162/viewspace-1448207/[DATAGUARD] 基于同一个主机建立物

逻辑备库的Swichover和Failover

逻辑备库的Switchover  检查Primary数据库状态 查看当前Primary数据库状态:SQL>  SELECT SWITCHOVER_STATUS FROM V$DATABASE; SWITCHOVER_STATUS -------------------- TO STANDBY  如果该查询返回TO STANDBY 或SESSIONS ACTIVE则表示状态正常,可以执行转换操作,如果是其他值,你就需要重新检查一下Data Guard配置,如看看LOG_ARCHIVE_DEST_n

【DATAGUARD】 基于同一个主机建立物理备库和逻辑备库(一)

[DATAGUARD] 基于同一个主机建立物理备库和逻辑备库(一)      之前发布过一步一步搭建 oracle 11gR2 rac + dg,这里的dg为物理dg,但是实际自己使用过程中发现需要开3个虚拟机,机器特卡,所以决定在同一台机器上再搭建一台物理和逻辑dg. 一步一步搭建 oracle 11gR2 rac + dg 之前传(一) http://blog.itpub.net/26736162/viewspace-1290405/  一步一步搭建oracle 11gR2 rac+dg之环

Oracle Data Guard学习(5) 创建逻辑备库

在创建逻辑备库之前,必须得先创建物理备库,关于如何创建物理备库,请参考<Data Guard 系列 (4) - 在不停主库的情况下创建物理备库>. 1. 在物理备库上停止日志应用服务 SYS@jkka> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL; Database altered. 2. 重新设置主库为将来的角色转换做准备(switchover) 逻辑备库和物理备库不一样,在进行SQL应用的时候还会产生日志,即逻辑备库的

DataGuard逻辑备库创建(原创)

本文主要介绍将DataGuard的物理standby转换至逻辑standby,有关于物理standby的搭建可以参见 http://czmmiao.iteye.com/blog/911083搭建逻辑备库前的注意事项  初始化参数配置 初始化参数的修改并不仅仅只是在待创建的Standby数据库端创建,当前的Primary数据库甚至同一个Data Guard配置中的其他Standby数据库的初始化参数都有可能需要进行修改. 对于Primary数据库,至少需要新增一个LOG_ARCHIVE_DEST_

【DATAGUARD】 基于同一个主机建立物理备库和逻辑备库 (三)

[DATAGUARD] 基于同一个主机建立物理备库和逻辑备库 (三) blog文档结构图:         需求: 在同一台机器配置10g单实例+物理dg+逻辑dg,即一个主库上挂2个备库,一个物理备库,一个逻辑备库,总体思路为:先搭建2台物理dg,然后将其中的一台转换为逻辑dg   之前发布过一步一步搭建 oracle 11gR2 rac + dg,这里的dg为物理dg,但是实际自己使用过程中发现需要开3个虚拟机,机器特卡,所以决定在同一台机器上再搭建一台物理和逻辑dg. 一步一步搭建 ora

DG3.2——逻辑备库搭建

原文转自:http://blog.csdn.net/tianlesoftware/article/details/5564179 操作系统:linux redhat 4.7 Oracle: 10.2.0.1 主库:orcl_pd 备库:LGDG   一.  逻辑Standby创建过程   1  创建物理Standby 参考之前的博客 简单的做如下几点提示: 1).初始化参数配置 初始化参数的修改并不仅仅只是在待创建的Standby数据库端创建,当前的Primary数据库甚至同一个Data Gua

DG3.1——逻辑备库说明

一.逻辑Standby的准备工作   1  确认操作的对象和语句是否能被逻辑Standby支持 由于逻辑Standby是通过SQL应用来保持与Primary数据库的同步.SQL应用与REDO应用是有很大的区别,REDO应用实际上是在物理Standby端进行RECOVER:SQL应用则是分析重做日志文件中的REDO信息,并将其转换为SQL语句,在逻辑Standby端执行,因此,需要注意以下几点:   (1)并非所有的数据类型都能被逻辑Standby支持, 逻辑Standby支持的数据类型有: BI

如何搭建阿里云RDS PostgreSQL数据库的逻辑备库

适用于PostgreSQL数据库之间的逻辑增量同步.对PostgreSQL的版本要求,8.3以上即可.最小的同步单位为行,用户可以选择表为同步对象,并且可以对表进行分组(有事务关联的表作为一个分组).不同的分组,可以并行订阅,消费消息.如图:A,B,C三个表有事务关联,放到一个消息队列.D,E,F三个表有事务关联,放到另一个消息队列.在数据库中跟踪表的变更,记录到数据库的MQ中.订阅者将MQ翻译成SQL,按照事务的提交顺序,在目标端回放这些SQL.从而达到逻辑复制的目的. 与MySQL的binl