在实际使用中,db2空间消耗完毕,会造成业务的延迟,造成不好的影响.
db2 出现问题:SQL Error: -289
在db2命令行中使用db2 ? sql289查看问题
SQL0289N 未能在表空间 "<表空间名>"
中分配新页面。
解释:
在一个或多个数据库分区上,下列其中一个条件为真:
1 分配给此 SMS表空间的其中一个容器已达到最大文件大小。这可能是导致该错误的原因。
2 分配给此 DMS表空间的所有容器已满。这可能是导致该错误的原因。
3 正在进行重新平衡,但其进度还不足以能使用新添加的空间。
4 正在对太小的容器进行重定向复原。
5 重定向复原后正在进行前滚且分配给此表空间的所有容器已满。
6 正在进行跳越添加容器的前滚且分配给此表空间的所有容器已满。
7 尝试创建带有小于 5个可用扩展数据块的表空间。
8 自动调整大小表空间已达到其最大大小且所有容器都已满。或者,容器的当前大小与最大大小之间没有足够的空间可扩展或添加,因此不可能自动增加空间。
9 创建自动存储器表空间时,使用了不会导致容器空间平均分配的值作为初始值。因此,使用了较高值但是此值大于指定的最大大小。
10 启用了自动调整大小的 DMS表空间未达到其最大大小,但容器所在的其中一个文件系统已满,容器不能增大。
11 启用了自动调整大小的 DMS表空间未达到其最大大小,且表空间所在的文件系统未满。但是,正在进行容器操作(或后续的重新平衡)且自动调整大小功能被暂挂,直至操作完成为止。
用户响应:
执行与引起错误的原因对应的操作:
1 切换至 DMS
TABLESPACE,或重新创建具有更多目录(PATH)的 SMS
TABLESPACE,以使:
(目录数)>=(最大表大小/最大文件大小)。注意,最大文件大小与操作系统有关。
2 将新容器添加至 DMS
表空间,并当重新平衡程序使新页可用后,再次尝
试该操作。
3 等待重新平衡程序完成。
4 再次对较大的容器执行重定向复原。
5 再次对较大的容器执行重定向复原。
6 再次执行允许添加容器的前滚,或对较大的容器执行重定向复原。
7 重新提交 CREATE TABLESPACE
语句,确保表空间具有至少 5
个可用的扩展数据块。
8 增大表空间的最大大小。
9 减小表空间的初始大小或增大表空间的最大大小。
10 将新的容器分割集添加至表空间。现有容器不会再增大,当进行自动调整大小时,只扩展表空间的最后范围中的那些新容器。
11 等待操作和后续的重新平衡完成。
sqlcode : -289
sqlstate : 57011
确定是表空间满了,我想问下如何调整表空间的大小,有点紧急,没时间去网上查资料了,麻烦两位老师指点一下
解答:
DB2现有表空间扩容方法
1)直接添加一个容器的例子:
db2 " ALTER TABLESPACE PAYROLL ADD (DEVICE '/dev/rhdisk9' 10000) "
加容器之后DB2会有一个自动balance的过程,可能会持续几个小时!!! 一定要注意该选项,修改前确认该选项是否能满足业务需求!
2)改变现有容器的大小(该方法不会触发balance,但如果表空间建立在裸设备上,则要扩冲裸设备空间):
db2 " ALTER TABLESPACE TS1 RESIZE (FILE '/conts/cont0' 2000, DEVICE '/dev/rcont1' 2000, FILE 'cont2' 2000) "
注意这种方式就是将原有的相应容器都改成大小是2000页
db2 "ALTER TABLESPACE TS1 RESIZE (ALL 2000)"
这种方式就是把表空间中所有的容器大小都改成2000页
db2 " ALTER TABLESPACE TS1 EXTEND (FILE '/conts/cont0' 1000, DEVICE '/dev/rcont1' 1000, FILE 'cont2' 1000) "
这种方式就是将相应的容器都扩大1000页,也就是增加1000页。
db2 " ALTER TABLESPACE DATA_TS EXTEND (ALL 1000)"
这种方式就是将所有的容器都增加1000页。