LOAD是 DB2中的一个数据装载工具,它能够直接将格式化的数据写入数据库,而且只记录很少量的日志,因此比批量INSERT或者IMPORT的效率要高得多。但正是由于只写少量日志等特点,一旦LOAD失败可能会导致严重的问题,使得 LOAD命令变成了一个高风险的操作。在我行多年的数据库运维工作中,很多系统采用 LOAD提升了性能,满足了业务需求,但是也经历了很多惨痛的教训。本文结合我行在运维工作中真实遇到的问题,重点梳理了LOAD操作常见的风险点,分析其原因,并给出相应的解决方法。
风险1:LOAD期间表不可访问
问题现象:访问正在进行LOAD操作的表时报错SQL0911N The current transaction has been rolled back because of a deadlock or timeout. Reason code "68". SQLSTATE=40001。
原因分析:默认的LOAD命令,比如 db2 load from a.del of del insert into a,是会锁表的,在LOAD期间会在目标表上加Z锁(超级排他锁),导致目标表不可访问。
解决方法: LOAD命令可以加上allow read access,这样在LOAD期间对表可以做查询操作。
风险2:LOAD正常完成后表状态异常
问题现象:LOAD操作正常完成,且没有任何