Oracle附加日志概述

一 描述

数据逻辑同步是基于行的同步,逻辑同步的前提是开启附加日志,例如在默认情况下,我们在源端执行UPDATE,目标端是无法知道我们update修改的数据是哪行数据,因此我们需要使用主键来标识我们修改的这行数据,但是主键默认情况下是不存在于我们的redo log中,因此我们需要开启附加日志,开启附加日志的目的就是将主键作为附加信息添加到redo log中,这样在目标端就可以获取到在源端发生修改的行。

优点:
1.可实现数据逻辑同步。
2.可以使用Oracle logminer工具实现DML误删除以及误修改的恢复。

缺点:
1.由于redo log会记录更多的内容,因此会增加少量的归档日志,大约十分之一,如果当前环境下归档保留比较极限,建议调整归档日志保留策略。

二 开启流程

  1. 避免业务高峰期开启
  2. 开启前确保没有大事物进行,语句如下:
set linesize 200
set pagesize 5000
col transaction_duration format a45

with transaction_details as
( select inst_id
  , ses_addr
  , sysdate - start_date as diff
  from 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

  1. 强制日志以及附加日志开启
    (首先确保当前环境归档日志已经开启)

开启强制日志模式:

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;

如果出现多个异常等待时间,将附加日志开启命令中断即可。
hhh6.jpg

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值