我们试图从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.
注意:我故意删除了DB日志中的表名等
请帮助我解决这个问题。
1条答案
按热度按时间vhipe2zx1#
正如注解中提到的,您必须删除并重建目标表。
这是在事务中遇到回滚的表上使用“NOT LOGGED INITIALLY”的预期结果,也是文档记录的结果。
在您的例子中,插入事务失败,因为ETL试图将NULL放入目标表中定义为NOT NULL的列(给出sqlcode -407),导致回滚(-1476),并且因为目标表已被置于“最初未记录”模式(未记录),该表在回滚后被置于不可用/不可访问状态。这是预期和记录的行为。
你必须删除并重新创建你的目标表(没有其他操作是可能的)。如果它是一个包含大量其他数据的重要表,则需要从备份中恢复。
您必须修复ETL,以验证数据库中所有非NULL的目标列是否具有默认值或非NULL值。
如果您必须使用“NOT LOGGED INITIALLY”(它是快速和无日志的,但因为它是无日志的目标表变得不可用后,任何错误),所以只使用NLI(初始无日志)的临时表或staging表,或者如果你已经采取了其内容的副本之前,NLI激活,您可以快速恢复。
在此阅读更多信息:
SQL1476N https://www.ibm.com/docs/en/db2/11.5?topic=messages-sql1250-sql1499#sql1476n
https://www.ibm.com/docs/en/db2/11.5?topic=messages-sql0250-sql0499#sql0407n