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()重新同步
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;