db2 回滚 UOW 后表标记为不可用

问题描述 投票:0回答:1

我们尝试从 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.

注意:我故意删除了数据库日志中的表名称等

请帮我解决这个问题。

database db2 etl
1个回答
0
投票

正如评论中提到的,您必须删除并重建目标表。

这是在事务中遭受回滚的表上使用“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

© www.soinside.com 2019 - 2024. All rights reserved.