物理DG与逻辑DG的区别与逻辑DG同步异常处理方法
2013-12-11 17:04
447 查看
一、物理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;
官方文档是这样说明的
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;
相关文章推荐
- Java两种处理异常方法的区别
- Java 重写与重载区别 Java父类的Object方法 要重写tostring原因,多个catch处理逻辑
- 一种系统间集成的同步事务异常处理方法和装置
- js中同步与异步处理的方法和区别
- 异常处理方法,同步VS异步
- js中同步与异步处理的方法和区别总结
- js中同步与异步处理的方法和区别总结
- js中同步与异步处理的方法和区别总结
- 异常处理方法,同步VS异步
- 关于逻辑DG表不同步同步异常可以利用 dbms_logstdby 包跳过表
- ASP.NET MVC Json()处理大数据异常解决方法
- Android Timer使用的异常:Timer was canceled 处理方法
- 请描述Java中异常处理机制的简单原理和应用,并说明Error与Exception有什么区别?
- 性能优化的异常与正常逻辑的处理。
- Windows Server 2012 R2 Hyper-V虚拟化常见异常处理方法总结
- 在C#中利用Keep-Alive处理Socket网络异常断开的方法
- 异常一般用于突发情况的处理,而不是用于正常的业务逻辑判断
- 一种动静态结合的Java程序异常处理优化方法
- python中异常报错处理方法汇总
- hadoop 安装出现的几种异常的处理方法