Oracle附加日志概述
一 描述
数据逻辑同步是基于行的同步,逻辑同步的前提是开启附加日志,例如在默认情况下,我们在源端执行UPDATE,目标端是无法知道我们update修改的数据是哪行数据,因此我们需要使用主键来标识我们修改的这行数据,但是主键默认情况下是不存在于我们的redo log中,因此我们需要开启附加日志,开启附加日志的目的就是将主键作为附加信息添加到redo log中,这样在目标端就可以获取到在源端发生修改的行。
优点:
1.可实现数据逻辑同步。
2.可以使用Oracle logminer工具实现DML误删除以及误修改的恢复。
缺点:
1.由于redo log会记录更多的内容,因此会增加少量的归档日志,大约十分之一,如果当前环境下归档保留比较极限,建议调整归档日志保留策略。
二 开启流程
- 避免业务高峰期开启
- 开启前确保没有大事物进行,语句如下:
set linesize 200
set pagesize 5000
col transaction_duration format a45with transaction_details as
( select inst_id, ses_addr, sysdate - start_date as difffrom gv$transaction
)
select s.username
, to_char(trunc(t.diff))|| ' days, '|| to_char(trunc(mod(t.diff * 24,24)))|| ' hours, '|| to_char(trunc(mod(t.diff * 24 * 60,24)))|| ' minutes, '|| to_char(trunc(mod(t.diff * 24 * 60 * 60,60)))|| ' seconds' as transaction_duration
, s.program
, s.terminal
, s.status
, s.sid
, s.serial#
from gv$session s
, transaction_details t
where s.inst_id = t.inst_id
and s.saddr = t.ses_addr
order by t.diff desc
- 强制日志以及附加日志开启
(首先确保当前环境归档日志已经开启)
开启强制日志模式:
alter database force logging;
(由于Oracle中具有nologging插入选项,开启force logging后,nologging选项将失效,可以确保数据同步,如果不开启,源端执行nologging不记录日志的数据插入,那么将影响数据同步)
开启数据库层面最小附加日志记录:
alter database add supplemental log data;
开启需要同步的具体表的列附加日志。
alter table xxx.xxx add supplemental log data(all) columns;
4.等待事件监控
select event,count(*) from gv$session where wait_class<>’Idle’ group by event;
如果出现多个异常等待时间,将附加日志开启命令中断即可。