我有一个记录到DB2数据库的应用程序。每个日志都存储在一个日常表中,这意味着我有几个表,每天一个。
由于应用程序运行了一段时间,我删除了一些较旧的日常表,但没有回收磁盘空间。
我理解这在DB2中是正常的,所以我发现并发现可以使用以下命令来回收空间:
db2 alter tablespace <table space> reduce max
由于存储每日日志表的表空间名为 USERSPACE1 ,因此我成功执行了以下命令:
db2 alter tablespace userspace1 reduce max
不幸的是,DB2实例使用的磁盘空间仍然相同......
我已经读过某个地方可以执行 REORG 命令,但是我看到它用于重新组织表。由于我放弃了表格,我如何使用 REORG ?
还有其他办法吗?
由于
答案 0 :(得分:1)
减小表空间的大小非常复杂。表的扩展区(连续页的集合;表空间分配的单位)不是按顺序分布的。重新组织表时,行将按页组织,新页将正常写入表空间的末尾。有时,高水印会增加,而你的表空间会更大。
您需要从表空间重新编译所有表,以便对所有表进行“整理”。然后,您必须执行新的重组才能使用前一个空格,因为它应该是表空间中的空白区域。
但是,有许多标准会影响表空间中表的组织:创建新的扩展区(新行,由于更新而溢出的行);重组后可以激活压缩。
你可以做的是为每个表空间分配几个或只有一个表;但是,你会浪费很多空间(头顶,空页等)
您正在使用的命令是一种自动执行此操作的方法,但它并不总是按预期工作:http://www-01.ibm.com/support/knowledgecenter/SSEPGG_10.5.0/com.ibm.db2.luw.admin.dbobj.doc/doc/c0055392.html
如果要查看表空间中表的分布,可以使用db2dart。然后,您可以了解要重组(移动)的表。
答案 1 :(得分:0)
对不起伙计们,
我在原帖上提到的命令毕竟是有效的,但是检索的空间非常慢。
感谢您的帮助