以编程方式添加新列时的DB2错误代码-670

以编程方式添加新列时的DB2错误代码-670,db2,Db2,我正在开发一个DB2数据库,在尝试添加一个新列时,在某个时刻我得到一个错误代码“-670”。 错误代码表明表空间页面大小不足,无论如何,我只是去运行了一个descripe命令,我估计表的宽度不超过17K(我只是添加了“Length”列中包含的数值),无论如何,我不确定这个估计,因为我有很多BLOB列。有一个SQL命令(或DB2命令行实用程序)我可以用来检索关于表宽度的确切信息?如果不计算BLOB、CLOB或LONG VARCHAR列,DESCRIBE table命令输出中的长度值之和是一个相当准

我正在开发一个DB2数据库,在尝试添加一个新列时,在某个时刻我得到一个错误代码“-670”。
错误代码表明表空间页面大小不足,无论如何,我只是去运行了一个descripe命令,我估计表的宽度不超过17K(我只是添加了“Length”列中包含的数值),无论如何,我不确定这个估计,因为我有很多BLOB列。有一个SQL命令(或DB2命令行实用程序)我可以用来检索关于表宽度的确切信息?

如果不计算BLOB、CLOB或LONG VARCHAR列,DESCRIBE table命令输出中的长度值之和是一个相当准确的行宽度度量,不会与其余列内联存储。报告中没有显示少量开销字节,但它通常不是表中的重要部分。DB2历来单独存储大型对象,以提高表中其余数据的可管理性和性能。DB2最近支持内联存储大型对象以利用压缩和缓冲,但我还没有看到它被广泛使用,我怀疑它是否会成为一种流行的方法


听起来是时候将表重新定位到页面大小更大的表空间了。除非已经达到32K页面的最大值,否则您可以选择将表迁移到更大的缓冲池和表空间,使页面大小加倍,这将为您提供更多的空间来容纳更多的列。如果需要保留旧表中的数据,从游标加载是一种将大量数据从一个表复制到同一数据库中另一个表的快速方法。您的另一个选择是将表的内容导出到平面文件,这样您就可以在更宽的表空间中删除并重新创建表,然后重新加载数据。

回答我自己的问题,此脚本可以非常有用地为您提供关于所用表宽度大小的非常好的估计(因此,您可以了解剩余的可用空间):


事实上,我们已经达到了32K的极限(这是我们现在猜测的)。根据我在DB2文档中看到的情况,BLOB描述符的最大大小约为300字节,考虑到这个大小,我们应该小于20K,但我们不确定情况是否如此,因为该列是由第三方应用程序根据特定的API调用创建的,所以可能是“内联”添加了内容这可能会扼杀我们的表宽限制,你知道有没有办法知道内容是否是内联添加的吗?你之前的回答很好,谢谢!
select SUM(300) from sysibm.syscolumns where tbname = 'MY_TABLE' and (typename = 'BLOB' or typename = 'DBCLOB')
select 2 * SUM(length) from sysibm.syscolumns where tbname = 'MY_TABLE' and typename = 'VARGRAPHIC'
select SUM(length) from sysibm.syscolumns where tbname = 'MY_TABLE' and typename != 'BLOB' and typename != 'DBCLOB' and typename != 'VARGRAPHIC'