SQL 7008-DB2为什么以及如何要求用户在创建文件之前就记录日志?

4urapxun  于 2023-10-18  发布在  DB2
关注(0)|答案(1)|浏览(194)
CREATE OR REPLACE TABLE QTEMP/TESTF0( 
 ID         NUM(3) PRIMARY KEY,       
 STRID      CHAR(3),                  
 NUMSI      SMALLINT,                 
 NUMI       INT,                      
 NUMBI      BIGINT                    
 ) RCDFMT TESTF0R;

我试图在QTEMP中创建一个表,但RUNSQLSTM命令失败,并显示以下ERRMSG

SQL7008  30       1  Position 1 TESTF0 in QTEMP not valid for operation.

我从DDL中取出合格的模式QTEMP并重试,这次我得到一个新的错误,但使用的是QGPL中的文件对象(不确定它的可用性如何)。

SQL7905  20       1  Position 1 Table TESTF0 in QGPL created but was not 
                     journaled.

我知道命令RUNSQLSTM的一些细微差别,因此我在我的测试库中尝试了CHGCURLIB,并重新尝试了该命令,它工作得很好。
我读了一些关于SQL 7008分辨率的帖子,他们都建议记录PF。但是在我们有file对象之前这是不可能的。这让我想到,这是可能的,因为用户库默认情况下可能是日志记录的,而上面的ERRMSG是由于QGPL是这里的一个例外,显然QTEMP可能永远不会被日志记录???我很好奇。QTEMP表的解决方法是什么?
在处理这个问题时出现的另一个想法,它可能是IBM i Support Query/RFE,但让我先听听大家的意见。- 由于IBM正在努力使IBM i更现代化、更易于访问,并推动DDL的使用超过DDS,为什么RUNSQLSTM还不支持 *FILE对象?或者是一个更好的系统命令,可以提示用户在其中创建SQL对象的对象库?

fykwrbwg

fykwrbwg1#

SQL 7008最常见的原因是表没有日志记录,但还有其他原因,您正面临着一个。SQL 7008和许多消息一样,提供了有关错误和如何恢复的更多详细信息。
你可能有原因代码10
10 -将约束或触发器添加到无效类型的表中,或已达到触发器的最大数量,或分布式表的所有节点不在同一版本级别。
您可以在QTEMP中创建表,但不能向QTEMP中的表添加约束(任何类型)或触发器,因此不能创建具有主键的表。作为解决方案,您可以在QTEMP中创建一个唯一的索引来“约束”您的表。
有两种方法可以判断表必须在哪个模式中使用SQL创建,在RUNSQLSTM或任何其他工具中:

  • 像使用QTEMP一样限定名称
  • 设置当前模式

但是,告诉它必须在哪里创建是不够的。QTEMP中没有对象可以被日志记录,这是真的,但在其他模式中,当使用SQL创建表时,在QGPL不填充的条件下,可以自动日志记录表:

  • 库中有一个名为QSQJRN的日志,CREATE TABLE会将表附加到此日志。CREATESCHEMA创建一个库,其中包含一个名为QSQJRN的日志以及其他对象
  • 命令STRJRNLIB已在库上运行,并带有相应的选项。

相关问题