DB2如何調整表空間大小


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(轉載)
 

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM