我们正在为使用DB2数据库的客户实现一些系统,之前我们没有表空间免费页面的问题!但是现在在实现阶段我可以看到低级别的数据库空闲页面。我们有56304页,现在我们只有288页免费。有人可以告诉我它是否有害且危险?怎么解决?我试着制作一些表的属性以减小它们的大小(例如ALN从250我设置为100)但是不是增长我的表空间变得更小?怎么解决这个?我会非常感激
答案 0 :(得分:2)
在Linux,UNIX和Windows平台上,DB2会自动增加其表空间,除非明确定义它们。以下查询将显示哪些表空间需要通过ALTER TABLESPACE命令手动调整大小:
SELECT VARCHAR( RTRIM( tbsp_name ) || ' does not have AUTORESIZE enabled', 60 )
FROM sysibmadm.snaptbsp WHERE tbsp_type = 'DMS' AND tbsp_auto_resize_enabled <> 1
;
如果上述查询未返回任何行,则数据库中的所有表空间将根据需要自动增长,直到数据库用于存储的驱动器,卷或文件系统上没有剩余空间。
当您更改表以减少其中一列的最大大小时,该更改不会影响表中的现有行,直到它们被UPDATE语句或REORG TABLE命令修改为止。
答案 1 :(得分:1)
是的,如果你的可用页面用完了,那么DB2将无法再向表中写入数据。
有几种方法可以增加免费页面的数量。您需要知道为表空间分配了多少文件容器,以及使用以下查询(或命令行中的db2 list tablespaces show detail
)有多少空闲和已用页面:
SELECT SUBSTR(TBSP_NAME,1,15) NAME
,TBSP_TYPE TYPE
,TBSP_AUTO_RESIZE_ENABLED AUTO_RESIZE
,TBSP_NUM_CONTAINERS CONTAINERS
,TBSP_TOTAL_PAGES TOTAL_PGS
,TBSP_USED_PAGES USED_PGS
,TBSP_FREE_PAGES FREE_PGS
,TBSP_MAX_SIZE MAX_SZ
,TBSP_PAGE_SIZE PG_SZ
FROM SYSIBMADM.TBSP_UTILIZATION
WHERE TBSP_CONTENT_TYPE IN ('ANY','SYSTEMP')
然后,您可以使用以下公式计算要增加的页数:
numPages = (usedPages - freePages) / numberOfContainersInTS
然后,您将获取结果并使用ALTER TABLESPACE
扩展表空间:
ALTER TABLESPACE <yourTS> EXTEND (ALL <numPages>)
此外,您可以REORG
表格,这可能会释放一些未使用的页面。