我们尝试从 Pentaho ETL 工具处理 CSV 文件,但是当我们处理新的 CSV 文件时,DB2 表进入不可访问状态,并在 ETL 日志中出现以下错误。
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.
注意:我故意删除了数据库日志中的表名称等
请帮我解决这个问题。
正如评论中提到的,您必须删除并重建目标表。
这是在事务中遭受回滚的表上使用“NOT LOGGED INITIALLY”的预期结果和记录结果。
在您的情况下,插入事务失败,因为 ETL 试图将 NULL 放入定义为 NOT NULL 的目标表列中(给出 sqlcode -407),导致回滚(-1476)并且因为目标表表已被置于“最初未记录”模式(未记录),然后在回滚后该表被置于不可用/不可访问状态。这是预期且有记录的行为。
您必须删除并重新创建目标表(无法执行其他操作)。 如果它是一个包含大量其他数据的重要表,则需要从备份中恢复它。
您必须修复 ETL 以验证数据库中所有不为 NULL 的目标列是否具有默认值或非空值。
如果必须使用“NOT LOGGED INITIALLY”(它速度快且未记录,但由于未记录目标表在出现任何错误后将变得不可用),因此仅在临时表或临时表上使用 NLI(初始未记录),或者如果您在 NLI 激活之前已获取其内容的副本,您可以从中快速恢复。
在这里阅读更多内容:
SQL1476N https://www.ibm.com/docs/en/db2/11.5?topic=messages-sql1250-sql1499#sql1476n
SQL0407N https://www.ibm.com/docs/en/db2/11.5?topic=messages-sql0250-sql0499#sql0407n