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

cx6n0qe3  于 2023-10-18  发布在  DB2
关注(0)|答案(1)|浏览(272)

我们试图从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日志中的表名等
请帮助我解决这个问题。

vhipe2zx

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

相关问题