You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

DB2表回滚UOW后标记不可用(Pentaho ETL场景)求助

问题分析与解决方案

问题核心现象

DB2表在回滚UOW后被标记为不可用,通过Pentaho ETL处理CSV文件时触发该问题,关键错误信息如下:

  • ETL报错:DB2 SQL Error: SQLCODE=-1476, SQLSTATE=40506, SQLERRMC=-407
  • DB2日志提示:ADM5530W(NLI表提交处理启动)、ADM5571W(表数据对象被标记为不可用)、SQLCODE=-407(指定列不能为NULL,对应COLNO=2)

完整日志:

Could not insert SQL :
DB2 SQL Error: SQLCODE=-1476, SQLSTATE=40506, SQLERRMC=-407, DRIVER=3.69.24

2023-08-30-02.53.08.702450+120 E709905392E671        LEVEL: Warning
PID     : 29183                TID : 140232523507456 PROC : db2sysc 0
INSTANCE:                      NODE : 000            DB   : 
APPHDL  : 0-56243              APPID: 10.1.198.57.38305.230830005314
AUTHID  :                    HOSTNAME: 
EDUID   : 6442                 EDUNAME: db2agent  0
FUNCTION: DB2 UDB, data management, sqldEndNoLogList, probe:1
MESSAGE : ADM5530W  The COMMIT processing of table "  "
          that used NOT LOGGED INITIALLY has been initiated.  It is recommended
          that you take a backup of this table's table space(s).

2023-08-30-02.53.10.218215+120 I709906064E598        LEVEL: Warning
PID     : 29183                TID : 140231772727040 PROC : db2sysc 0
INSTANCE:                      NODE : 000            DB   : 
APPHDL  : 0-56247              APPID: 10.1.198.57.38310.230830005312
AUTHID  :                     HOSTNAME: 
EDUID   : 6440                 EDUNAME: db2agent  0
FUNCTION: DB2 UDB, relation data serv, sqlrr_rollback_with_sqlcode, probe:100
MESSAGE : NLI or DMS force ROLLBACK
DATA #1 : Hexdump, 8 bytes
0x00007F8A1B29FDB8 : 2000 0000 0000 0000                         .......

2023-08-30-02.53.10.225134+120 I709906663E916        LEVEL: Warning
PID     : 29183                TID : 140231772727040 PROC : db2sysc 0
INSTANCE:                     NODE : 000            DB   : 
APPHDL  : 0-56247              APPID: 10.1.198.57.38310.230830005312
AUTHID  :                    HOSTNAME: 
EDUID   : 6440                 EDUNAME: db2agent 0
FUNCTION: DB2 UDB, relation data serv, sqlrr_rollback_with_sqlcode, probe:220
DATA #1 : SQLCA, PD_DB2_TYPE_SQLCA, 136 bytes
sqlcaid : SQLCA     sqlcabc: 136   sqlcode: -407   sqlerrml: 35
sqlerrmc: TBSPACEID=37, TABLEID=1350, COLNO=2
sqlerrp : sqldFmt1
sqlerrd : (1) 0x8016001C      (2) 0x0000001C      (3) 0x00000000
           (4) 0x00000000      (5) 0xFFFFFB1F      (6) 0x00000000
sqlwarn : (1)      (2)      (3)      (4)        (5)       (6)
           (7)      (8)      (9)      (10)        (11)
sqlstate:

2023-08-30-02.53.10.228076+120 E709907580E599        LEVEL: Warning
PID     : 29183                TID : 140231772727040 PROC : db2sysc 0
INSTANCE:                      NODE : 000            DB   :
APPHDL  : 0-56247              APPID: 10.1.198.57.38310.230830005312
AUTHID  :                       HOSTNAME: 
EDUID   : 6440                 EDUNAME: db2agent  0
FUNCTION: DB2 UDB, data management, sqldMarkObjInErr, probe:1
MESSAGE : ADM5571W  The "DATA" object with ID "1350" in table space "37" for
          table "   " is being marked as unavailable.

根本原因

  1. 目标表启用了NOT LOGGED INITIALLY (NLI)模式,该模式下DB2不记录事务日志以提升性能,但若事务回滚,DB2无法恢复到一致状态,只能将表标记为不可用。
  2. 插入操作触发SQLCODE=-407错误:对应表的第2列被设置为NOT NULL,但CSV数据中存在NULL值,导致事务回滚,进而触发NLI表的不可用标记。

紧急恢复步骤

要恢复表的可用性,执行以下SQL命令(此操作会清空表中所有数据):

ALTER TABLE <你的表名> ACTIVATE NOT LOGGED INITIALLY WITH EMPTY TABLE;
  • 执行完成后,立即对该表所在的表空间进行备份,避免后续故障无法恢复:
BACKUP TABLESPACE <表空间名> TO <备份路径>;
  • 若有最近的表备份,也可通过备份恢复表数据,无需执行清空命令。

预防措施

  • 校验ETL数据:在Pentaho ETL流程中添加数据校验步骤,过滤掉第2列的NULL值,或为NULL值设置符合业务规则的默认值,避免插入失败导致回滚。
  • 调整表结构:若业务允许,可修改表结构允许第2列存储NULL值:
ALTER TABLE <你的表名> ALTER COLUMN <列名> SET NULL;
  • 谨慎使用NLI:若业务场景存在事务回滚风险,建议禁用NLI模式,改用常规日志模式(牺牲部分性能换取数据安全性)。
  • 规范NLI使用:若必须使用NLI,确保事务能成功提交,且提交后立即备份表空间,遵循ADM5530W的提示要求。

内容的提问来源于stack exchange,提问作者Krishna Murthy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 23:09:59