我正在针对DB2数据库进行开发,并且在尝试添加新列时,我在某些时候收到错误代码“-670”。 错误代码表示表空间页面大小不够大,无论如何,我只是去运行DESCRIBE命令,我估计表宽度不超过17K(我只是添加了“长度”列中包含的数值),无论如何我不确定这个估计,因为我有很多BLOB列。我可以用一个SQL命令(或DB2命令行实用程序)来检索有关表宽的确切信息吗?
答案 0 :(得分:1)
如果不计算BLOB,CLOB或LONG VARCHAR列,那么DESCRIBE TABLE命令输出中LENGTH值的总和是一个相当准确的行宽度量,它们不与其余列一起存储。列。该报告中没有显示少量开销字节,但它通常不是表的重要部分。 DB2历来存储大型对象,以提高表中其余数据的可管理性和性能。 DB2最近支持在线存储大型对象以便使用压缩和缓冲,但我还没有看到它被广泛使用,我怀疑它会成为一种流行的方法。
听起来好像是时候将表重新定位到页面大小较大的表空间了。除非您已经在32K页面上达到最大值,否则您可以选择通过将表迁移到更大的缓冲池和表空间来将页面大小加倍,这将为您提供更多空间来容纳其他列。如果需要保留旧表中的数据,则从游标加载是将大量数据从一个表复制到同一数据库中的另一个表的快速方法。您的另一个选择是将表的内容导出到flatfile,以便您可以删除并在更宽的表空间中重新创建表并重新加载数据。
答案 1 :(得分:0)
回答我自己的问题,这个脚本非常有用,可以很好地估计使用的表宽度大小(因此,您可以了解剩余的可用空间):
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'