DB2 BLOB字段的not logged属性

最近一个客户因为机房停电,造成DB2数据库无法启动。用在线备份恢复数据库后前滚数据,发现数据是正常的,唯独一些大字段的值被置成了二进制0。对此问题研究并反复测试后,最终确认是BLOB字段设置成not logged而造成的。

 

这个属性的意思就是在更新和新增BLOB字段值时,不会将修改和新增的BLOB的数据的值写入归档日志。归档日志中只会记录字段被更新了,但更新的具体内容不记录。

 

数据库崩溃后,用在线备份来恢复数据库,然后前滚数据到一个时间点,那么从备份时间,到这个时间点之间,修改和新增的大字段数据被置成二进制0。因为在前滚的时候,数据库是按照归档日志来恢复数据库的,归档日志库中只记录了字段被修改,没有记录修改成什么,那数据库只好把他们都置0了。如果前滚到最小时间点,那应该是不会有数据被置0,因为备份时间到最小时间点之间,不会有大字段更新。

 

默认情况下,这个属性是logged的。如果表已经新建,又想改为not logged的话,比较麻烦,需要将数据导出,drop掉表,新建表,然后把数据导回去。

 

IBM这样设计主要考虑到性能问题,因为大字段可能会有好几G大小,在更新的数据文件的同时,在把这些数据写入归档日志,一方面归档日志会增长的很快,另一方面对IO也是个巨大的压力。所以,如果大字段很大的话,最好设置成not logged的。

 

解决这个问题的办法:

方法一、修改属性为logged,记录内容。这个方法的前提是,评估对系统形成造成的影响,并合理的配置IO。IBM专家的建议是,将数据,归档日志,活动日志放在不同的卷组上,使用不同的IO

方法二、使用离线备份的方法,离线备份恢复时不需要前滚,自然也用不上归档日志了。但这样会把备份后的数据丢掉了,只能通过重做数据来做了。但这也比数据被置0好。看用户是否能接受了。

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值