DB2如何调整表空间大小
刚刚接到客户那边打的电话,程序一直报错,所有的业务都做不了,拷贝了一份应用服务器(weblogic)的日志,日志里显示:
WARN : 2009-06-18 16:24:32,421: JDBCExceptionReporter[line:77}: SQL Error: -99999, SQLState: null
ERROR: 2009-06-18 16:24:32,422: JDBCExceptionReporter[line:78}: [ibm][db2][jcc][102][10040] 非自动批处理出现故障。虽然已经提交了批处理,但是该批处理的某个成员至少发生了一个异常。
使用 getNextException() 来检索已经过批处理的特定元素的异常。
WARN : 2009-06-18 16:24:32,422: JDBCExceptionReporter[line:77}: SQL Error: -289, SQLState: 57011
ERROR: 2009-06-18 16:24:32,422: JDBCExceptionReporter[line:78}: Error for batch element #1: DB2 SQL error: SQLCODE: -289, SQLSTATE: 57011, SQLERRMC: SMK
WARN : 2009-06-18 16:24:32,423: JDBCExceptionReporter[line:77}: SQL Error: -99999, SQLState: null
ERROR: 2009-06-18 16:24:32,423: JDBCExceptionReporter[line:78}: Error for batch element #2: [ibm][db2][jcc][t4][1026][11339] 错误检查:
WARN : 2009-06-18 16:24:32,423: JDBCExceptionReporter[line:77}: SQL Error: -289, SQLState: 57011
ERROR: 2009-06-18 16:24:32,424: JDBCExceptionReporter[line:78}: Error for batch element #2: DB2 SQL error: SQLCODE: -289, SQLSTATE: 57011, SQLERRMC: SMK
ERROR: 2009-06-18 16:24:32,424: AbstractFlushingEventListener[line:301}: Could not synchronize database state with session
org.hibernate.exception.GenericJDBCException: Could not execute JDBC batch update
at org.hibernate.exception.SQLStateConverter.handledNonSpecificException(SQLStateConverter.java:103)
at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:91)
at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43)
at org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:253)
at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:235)
at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:139)
at org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:298)
at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:27)
at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1000)
at org.hibernate.impl.SessionImpl.managedFlush(SessionImpl.java:338)
at org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:106)
at org.springframework.orm.hibernate3.HibernateTransactionManager.doCommit(HibernateTransactionManager.java:575)
at org.springframework.transaction.support.AbstractPlatformTransactionManager.processCommit(AbstractPlatformTransactionManager.java:662)
at org.springframework.transaction.support.AbstractPlatformTransactionManager.commit(AbstractPlatformTransactionManager.java:632)
at org.springframework.transaction.interceptor.TransactionAspectSupport.commitTransactionAfterReturning(TransactionAspectSupport.java:314)
at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:117)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:166)
at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204)
at $Proxy803.saveApply(Unknown Source)
at com.cnnct.mp.counterservice.service.CounterServiceService.applySave(CounterServiceService.java:135)
at com.cnnct.mp.counterservice.ejbAction.ApplySaveEjbAction.perform(ApplySaveEjbAction.java:32)
at com.lbs.sieaf.webcontroller.RequestProcessor.processRequest(RequestProcessor.java:245)
at com.lbs.sieaf.webcontroller.MainServlet.doProcess(MainServlet.java:65)
at com.lbs.sieaf.webcontroller.MainServlet.doPost(MainServlet.java:49)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:763)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:856)
at weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.java:225)
at weblogic.servlet.internal.StubSecurityHelper.invokeServlet(StubSecurityHelper.java:127)
at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:283)
at weblogic.servlet.internal.TailFilter.doFilter(TailFilter.java:26)
at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:42)
at com.lbs.sieaf.webcontroller.CSSaftyFilter.doFilter(CSSaftyFilter.java:167)
at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:42)
at com.cnnct.cp.webcontroller.EncodingFilter.doFilter(EncodingFilter.java:66)
at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:42)
at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run(WebAppServletContext.java:3212)
at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321)
at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:121)
at weblogic.servlet.internal.WebAppServletContext.securedExecute(WebAppServletContext.java:1983)
at weblogic.servlet.internal.WebAppServletContext.execute(WebAppServletContext.java:1890)
at weblogic.servlet.internal.ServletRequestImpl.run(ServletRequestImpl.java:1344)
at weblogic.work.ExecuteThread.execute(ExecuteThread.java:209)
at weblogic.work.ExecuteThread.run(ExecuteThread.java:181)
Caused by:
com.ibm.db2.jcc.b.ni: [ibm][db2][jcc][102][10040] 非自动批处理出现故障。虽然已经提交了批处理,但是该批处理的某个成员至少发生了一个异常。
使用 getNextException() 来检索已经过批处理的特定元素的异常。
at com.ibm.db2.jcc.b.p.a(p.java:414)
at com.ibm.db2.jcc.b.ih.a(ih.java:2876)
at com.ibm.db2.jcc.b.ih.b(ih.java:2710)
at com.ibm.db2.jcc.b.ih.executeBatch(ih.java:1554)
at org.hibernate.jdbc.BatchingBatcher.doExecuteBatch(BatchingBatcher.java:48)
at org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:246)
... 39 more
ERROR: 2009-06-18 16:24:32,426: LogHelper[line:174}: 100201000|CounterServiceService.applySave的总控方法发生未知异常错误 Hibernate flushing: Could not execute JDBC batch update; uncategorized SQLException for SQL [insert into SMK.MP_YEARCARDPHOTO (CERTNUMBER, PHOTO, PHOTOTYPE, USEMAKE, CLIENTID, AUTONO) values (?, ?, ?, ?, ?, ?)]; SQL state [null]; error code [-99999]; [ibm][db2][jcc][102][10040] 非自动批处理出现故障。虽然已经提交了批处理,但是该批处理的某个成员至少发生了一个异常。
使用 getNextException() 来检索已经过批处理的特定元素的异常。; nested exception is com.ibm.db2.jcc.b.ni: [ibm][db2][jcc][102][10040] 非自动批处理出现故障。虽然已经提交了批处理,但是该批处理的某个成员至少发生了一个异常。
使用 getNextException() 来检索已经过批处理的特定元素的异常。
通过
C:\Documents and Settings\Administrator>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页。
增加表空间为
1、增加的是裸设备
ALTER TABLESPACE TS1
ADD (DEVICE '/dev/rhdisk9' 10000)
2,增加的是文件系统
ALTER TABLESPACE TS1
ADD (FILE '/adsasdf/aasdfasd' 10000)
3,删除某个容器
ALTER TABLESPACE TS1
drop (FILE '/adsasdf/aasdfasd',DEVICE '/dev/rhdisk9' )
DB2 报 SQLSTATE=57011错误的解决办法
SQLSTATE=57011 为数据库中表空间已满的异常(错误)
可以用命令查看表空间
db2 => list tablespaces show detail
有两种类型表空间:
第一种类型表空间为:SYSCATSPACE,类型为系统管理表空间(SMS)
第二种类型表空间为:用户自己的表空间(比如xjhspaces11),类型为数据库管理表空间(DMS)
查看表空间中总的表空间(Total pages)和 剩余表空间(Free pages)
如果是系统管理表空间(SMS)不够,则是由于磁盘空间不够,需要增加磁盘空间
如果是数据库管理表空间(DMS)不够,则需要扩展表空间
扩展表空间的命令为:
db2 alter tablespace extend (all )
例如:db2 => alter tabblespace xjhspces11 extend(all 2560M)
扩展了数据库表空间2.5G
注意:对数据库管理表空间的扩展前,必须检查磁盘裸设备的空间,如果空间不够,需要增加磁盘裸设备的空间,再扩展数据库管理表空间,并且在扩展表空间之前,最好备份数据库,以免带来不必要的损失
备份数据库命令:$ db2move databaseName export