ITPub博客

首页 > 数据库 > Oracle > 物理DG与逻辑DG的区别与逻辑DG同步异常处理方法

物理DG与逻辑DG的区别与逻辑DG同步异常处理方法

原创 Oracle 作者:wzhalal 时间:2013-12-12 09:40:29 0 删除 编辑
一、物理DG与逻辑DG的区别
官方文档是这样说明的

The main difference between physical and logical standby databases is the manner
in which log apply services apply the archived redo logs:
    For physical standby databases, Data Guard uses redo apply technology, which
applies redo data on the standby database using standard recovery techniques
of the Oracle database server.
     For logical standby databases, Data Guard uses SQL apply technology, which
first transforms the received redo data into SQL statements and then executes
the generated SQL statements on the logical standby database.

实现机制不同,一个是基于block的,一个是基于SQL statement.
物理dg是通过传日志的形式block对block的完全把主库复制,复制出来的从库和主库完全一样
10g的物理dg只能只读打开,但11g可以读写打开
从库名必须和主库名相同

逻辑dg是通过传日志,再应用logmin的技术将日志中的sql挖出,处理,并重新执行
主库和从库可以不完全相同
逻辑dg从库可以读写打开
逻辑dg有些表和数据是不能同步的,从库名可以和主库名不同
另外逻辑dg出现问题的时候比较多,bug比较多

物理备数据库通过重做应用与主数据库保持同步.
逻辑备数据库通过SQL应用与主数据库保持同步.
物理备数据库与主数据库SCN保持一致.逻辑备数据库只需要数据保持一致.

二、关于逻辑DG表不同步同步异常可以利用 dbms_logstdby 包跳过表
1> 检查逻辑DG事件,确认是否存在异常
   select * from dba_logstdby_events  order by event_time desc;
   说明:如果status报错,event列有详细的触发操作语句,常见的多数是主库有新的DDL语句
2> 同步进程是否存在,一般异常终止,同步进程是不存在的
   SELECT * FROM v$logstdby_process;
3> 查看日志是否都已经同步完成
   select sequence#,applied from dba_logstdby_log order by sequence# desc ;


1> 同步进程不存在,主库数据没有同步到备库
   select * from dba_logstdby_events  order by event_time desc;
   说明:查看报错信息和导致报错的事件,进行跳过处理
   --停止数据库日志应用
   alter database stop logical standby apply;
   --跳过DML操作 
   begin
        DBMS_LOGSTDBY.SKIP('DML','CXF','TMP_SAME_FILE');  --注意,表名要大写哦,否则还会报错的
   end;
   --跳过DDL 
   begin
        DBMS_LOGSTDBY.SKIP('SCHEMA_DDL','CUECM','TMP_1024');--注意,表名要大写哦,否则还会报错的
   end;
   --在主库端对索引做ANALYZE,如果索引在备库不存在,也会导致DG同步异常中断,这个时候就不能用DDL和
     DML两种跳过了,必须用下面这种方法跳过
   --跳过ANALYZE TABLE操作
   begin
        DBMS_LOGSTDBY.SKIP('ANALYZE TABLE','%','%',NULL);
   end;
   --跳过ANALYZE INDEX操作
   begin

       DBMS_LOGSTDBY.SKIP('ANALYZE INDEX','%','%', NULL);
   end;
   --启动应用日志
   alter database start logical standby apply immediate;
2> 同步进程存在,其它表都能同步,个别表无法同步
   这种情况,很可能是设置了表级别的对像跳过,可以通过以查查询确认是否手动设置跳过同步
   select * from DBA_LOGSTDBY_SKIP; 
   然后通过DBMS_LOGSTDBY.UNSKIP()重新同步

三、无法在逻辑DG端进行DDL和DML操作


--进行DML操作前
   alter session disable guard;
   --操作过后
   alter session enable guard;

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/28894640/viewspace-1063044/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2013-06-06

  • 博文量
    60
  • 访问量
    249779