oracle9i scn bug,Oracle9i, 10g RAC中管理SCN算法不同导致的数据问题

SCN概念

SCN 是Oracle 用来跟踪数据库内部变化发生的先后顺序的机制,可以把它想象成一

个高精度的时钟,每个Redo日志条目,Undo Data Block,Data Block 都会有SCN

号。 Oracle的Consistent-Read, Current-Read, Multiversion-Block都是依赖

SCN 实现。SCN是顺序递增的一个数字,它的最大值是0xffff.ffffffff 。

对SCN的管理,可以分为单实例和RAC :

单节点的instance中,SCN值存在SGA区,由system commit number latch保护。

任何进程想要得到当前的SCN值,都要先得到这个latch。

RAC环境中,Oracle通过排队机制(Enqueue)实现SCN在各并行节点之间的顺序增长。

具体有两种方法:

Lamport算法: 在所有节点间的通信内容中都携带SCN, 每个节点把接收到的SCN和本

机的SCN对比,如果本机的SCN 小,则调整本机的SCN和接收的一致,如果节点间通信

不多,还会主动地定期相互通报。 故即使节点处于Idle 状态,还是会有一些Redo

log 产生。Oracle9i及10.1 RAC默认采用这种方式。

Commit广播(Broadcast)算法: 在每个Commit操作之后,节点要向其他节点广播SCN,

虽然这种方式会对系统造成一定的负载,但是确保每个节点在Commit之后都能立即查

看到SCN. Oracle10g r2 RAC默认采用这种方式。

上述两种算法可以通过调整初始化参数max_commit_propagation_delay来切换。在

Oracle9iRAC中 , 该参数的默认值都是700厘秒(centisecond),采用Lamport算法。

如果该值小于100厘秒,Oracle就采用广播算法,并且记录在alert.log文件中,

Oracle10g R2 RAC默认为 0,采用commit广播算法,10g R2 RAC的alert log 类似:

Sun Nov  7 02:07:56 2010

ALTER DATABASE OPEN

This instance was first to open

Picked broadcast on commit scheme to generate SCNs

Sun Nov  7 02:08:01 2010

LGWR: STARTING ARCH PROCESSES

这两种算法各有优缺点,Lamport算法虽然负载小,但是节点间会有延迟(提交了但

是还没有传递给其他节点),commit广播算法虽然有负载,但是没有延迟。 Oracle

10g R2 RAC 缺省选用的是BroadCast算法。

网络资料:

--------------------------------------------------------------------

这几天我有一个客户的数据库出现了这样的情况,在一个3节点的RAC上,其中一

个节点上修改的数据,马上在另外一个节点上查,发现有千分之5左右的数据没有

更新,要过一会才能查到正确的结果。这造成了应用软件的业务逻辑错误。

通过分析,发现是SCN的传播机制导致。由于Oracle 9i缺省的传播模式是lamport

算法,SCN在实例间传递是通过GCS MESSAGE来传递的,因此就会造成一定的延时。

LAMPORT算法可以减少实例间同步SCN所造成的性能问题,但是在变更十分频繁的系

统中,可能出现上述的问题。因此在这种情况下,客户首先把这个应用全部部署

在一个节点上,以避免业务逻辑的问题。如果无法通过应用调整来解决,那么就

必须调整MAX_COMMIT_PROPAGATION_DELAY来改变传播算法了。

一般来说这个参数在9i和10.1的缺省值是700(TRU64除外)也就是7秒钟,实际上

这是一个上限了,因为lck每隔3秒钟会有一个例行的信息包交换,一般情况下,

3秒钟肯定会完成一次scn传播。这个参数,如果设置为0-99,那么数据库会选择

Broadcast-On-Commit算法,由LGWR来传播SCN。一般来说我们可以设置为0-99或

者保留原有的值不懂,没有十分可靠的分析证据的情况下,建议不要设置100-700

之间的值。

10.2开始,lgwr传播SCN的算法有了很大的改进,因此10.2缺省使用

Broadcast-On-Commit,这个参数的缺省值也变为0.

--------------------------------------------------------------------

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值