ECC6.0+DB2下DBTABLOG表清理并释放表空间
DB2表空间已满
解决方法但由于是双机,所以裸设备需要在hacmp中建,或者建了后两边同步一下,可以找富通和IBM解决。
DB2解决tablespace满的问题1. 连接到数据库,查看一下tablespace的使用情况db2 => list tablespaces show detailTablespaces for Current DatabaseTablespace ID = 0Name = SYSCATSPACEType = System managed spaceContents = Any dataState = 0x0000Detailed explanation:NormalTotal pages = 4814Useable pages = 4814Used pages = 4814Free pages = Not applicableHigh water mark (pages) = Not applicablePage size (bytes) = 4096Extent size (pages) = 32Prefetch size (pages) = 32Number of containers = 1Tablespace ID = 1Name = TEMPSPACE1Type = System managed spaceContents = System Temporary dataState = 0x0000Detailed explanation:NormalTotal pages = 227Useable pages = 227Used pages = 227Free pages = Not applicableHigh water mark (pages) = Not applicablePage size (bytes) = 4096Extent size (pages) = 32Prefetch size (pages) = 32Number of containers = 1Name = USERSPACE1Type = Database managed spaceContents = Any dataState = 0x0000Detailed explanation:NormalTotal pages = 131072Useable pages = 131056Used pages = 12080Free pages = 118976High water mark (pages) = 12432Page size (bytes) = 4096Extent size (pages) = 16Prefetch size (pages) = 16Number of containers = 1Minimum recovery time = 2006-09-25-07.22.30.000000Tablespace ID = 3Name = USERSPACE2Type = Database managed spaceContents = Any dataState = 0x0000Detailed explanation:NormalTotal pages = 65536Useable pages = 65520Used pages = 65520Free pages = 0High water mark (pages) = 65520Page size (bytes) = 16384Extent size (pages) = 16Prefetch size (pages) = 16Number of containers = 1Minimum recovery time = 2006-08-11-02.52.11.000000Tablespace ID = 4Name = TMPSPACE3Type = System managed spaceContents = System Temporary dataState = 0x0000Detailed explanation:NormalTotal pages = 199Used pages = 199Free pages = Not applicableHigh water mark (pages) = Not applicablePage size (bytes) = 16384Extent size (pages) = 32Prefetch size (pages) = 32Number of containers = 1Minimum recovery time = 2005-12-15-11.09.33.000000发现USERSPACE2 Free pages为0了2. 再看一下USERSPACE2使用的containerdb2 => list tablespace containers for 3 show detailTablespace Containers for Tablespace 3Container ID = 0Name = /dev/rdatacdblv2Type = DiskTotal pages = 65536Useable pages = 65520Accessible = Yes只有一个/dev/rdatacdblv23. 查看一下系统中相关的裸设备#>cd /dev#>ls -l *datacdb*brw-rw---- 1 db2admin db2grp1 10, 10 11月11 2004 datacdblv1 brw-rw---- 1 db2admin db2grp1 10, 12 4月05 2006 datacdblv2 crw-rw---- 1 db2admin db2grp1 10, 10 9月30 15时01 rdatacdblv1 crw-rw---- 1 db2admin db2grp1 10, 12 10月09 18时43 rdatacdblv24. 创建一个新的裸设备#>mklv -y'datacdblv3' -t'raw' db2vg 4rootvg是卷组的名称,可以用lsvg查,16是块的数量,要看OS的PPSIZE,相乘就是裸设备的大小5. 看一下新的的设备#>ls -l *datacdb*brw-rw---- 1 db2admin db2grp1 10, 10 11月11 2004 datacdblv1 brw-rw---- 1 db2admin db2grp1 10, 12 4月05 2006 datacdblv2 brw-rw---- 1 root system 10, 18 10月09 19时56 datacdblv3 crw-rw---- 1 db2admin db2grp1 10, 10 9月30 15时01 rdatacdblv1 crw-rw---- 1 db2admin db2grp1 10, 12 10月09 18时43 rdatacdblv2 crw-rw---- 1 root system 10, 18 10月09 19时56 rdatacdblv36. 修改属主#>chown db2admin:db2grp1 *datacdb*7. 再看一下属主是否已经改了#>ls -l *datacdb*brw-rw---- 1 db2admin db2grp1 10, 10 11月11 2004 datacdblv1 brw-rw---- 1 db2admin db2grp1 10, 12 4月05 2006 datacdblv2 brw-rw---- 1 db2admin db2grp1 10, 18 10月09 19时56 datacdblv3 crw-rw---- 1 db2admin db2grp1 10, 10 9月30 15时01 rdatacdblv1 crw-rw---- 1 db2admin db2grp1 10, 12 10月09 18时43 rdatacdblv2 crw-rw---- 1 db2admin db2grp1 10, 18 10月09 19时56 rdatacdblv38. 连接到数据库9. 为tablespace增加containerdb2 => alter tablespace USERSPACE2 add (device'/dev/rdatacdblv3' 32768)10. 最后确认一下是否增加成功了db2 => list tablespaces show detailTablespaces for Current DatabaseTablespace ID = 0Name = SYSCATSPACEType = System managed space Contents = Any dataState = 0x0000Detailed explanation:NormalTotal pages = 4814Useable pages = 4814Used pages = 4814Free pages = Not applicableHigh water mark (pages) = Not applicable Page size (bytes) = 4096Extent size (pages) = 32Prefetch size (pages) = 32Number of containers = 1Tablespace ID = 1Name = TEMPSPACE1Type = System managed space Contents = System Temporary data State = 0x0000Detailed explanation:NormalTotal pages = 227Useable pages = 227Used pages = 227Free pages = Not applicableHigh water mark (pages) = Not applicable Page size (bytes) = 4096Extent size (pages) = 32Prefetch size (pages) = 32Number of containers = 1Tablespace ID = 2Name = USERSPACE1Type = Database managed space Contents = Any dataState = 0x0000Detailed explanation:NormalTotal pages = 131072Useable pages = 131056Used pages = 12080Free pages = 118976High water mark (pages) = 12432Page size (bytes) = 4096Extent size (pages) = 16Prefetch size (pages) = 16Number of containers = 1Minimum recovery time = 2006-09-25-07.22.30.000000Tablespace ID = 3Name = USERSPACE2Type = Database managed spaceContents = Any dataState = 0x10000000Detailed explanation:DMS rebalancer is activeTotal pages = 98304Useable pages = 98272Used pages = 65520Free pages = 0High water mark (pages) = 65520Page size (bytes) = 16384Extent size (pages) = 16Prefetch size (pages) = 16Number of containers = 2Minimum recovery time = 2006-08-11-02.52.11.000000Tablespace ID = 4Name = TMPSPACE3Type = System managed spaceContents = System Temporary dataState = 0x0000Detailed explanation:NormalTotal pages = 199Useable pages = 199Used pages = 199Free pages = Not applicableHigh water mark (pages) = Not applicablePage size (bytes) = 16384Extent size (pages) = 32Prefetch size (pages) = 32Number of containers = 1。
oracle释放表空间最佳实践
oracle释放表空间最佳实践释放表空间是在数据库中删除不再需要的表空间,以节省存储空间和提高数据库性能。
以下是Oracle数据库释放表空间的最佳实践:1. 确保没有任何对象依赖于要释放的表空间。
在进行释放之前,需要确保没有表、索引、分区、包等对象依赖于要释放的表空间。
可以使用Oracle的`DBA_DEPENDENCIES`视图来检查对象间的依赖关系。
2. 备份数据。
在释放表空间之前,应该先备份要释放的表空间中的数据。
这样可以避免意外删除数据引起的潜在问题。
3. 迁移数据。
如果要释放的表空间中有一些重要的数据,但是不再需要这些数据,可以先将这些数据迁移到其他表空间或者归档。
这样可以确保这些数据不会丢失,同时也不会占用要释放的表空间的存储空间。
4. 关闭相关的数据库连接。
在释放表空间之前,应该确保没有任何活动的数据库连接正在使用该表空间。
可以使用`DBA_ACTIVE_SESSIONS`视图和`V$SESSION`视图来查找和关闭相关的数据库连接。
5. 停止相关的数据库服务。
在释放表空间之前,最好停止相关的数据库服务,以确保没有任何数据库进程正在使用该表空间。
6. 使用`DROP TABLESPACE`语句释放表空间。
最后,使用`DROP TABLESPACE`语句来释放表空间。
这个语句将会删除该表空间及其包含的所有对象。
总之,释放表空间之前,必须确保没有任何对象依赖于它,并备份重要的数据。
同时,还要关闭相关的数据库连接和停止相关的数据库服务。
最后,使用`DROP TABLESPACE`语句来释放表空间。
DB2数据库删除表空间
在创建数据库时遇到数据库别名已存在的问题时,可以通过以下方法解决:
首先用db2 list database directory命令看在系统数据库目录(System Database Directory)中有没有该数据库。
如果有,应该在确定该数据库是没有用的数据库之后用db2 drop database 数据库名将其删除。
如果没有,再用db2 list database directory on location 看在本地数据库目录(Local Database Directory)中有没有该数据库,location指定数据库的位置(如Windows下的C: ,Unix下/home/db2inst1)。
如果有,先用db2 catalog database 数据库名on location将数据库编目到节点上,再对其进行删除处理。
解决过程:
1、db2 list database directory 查看系统数据库目录,看不到要找的数据库,表示该数据库不在系统数据库目录中
2、db2 list database directory on D:(在系统数据库目录找不到的情况下执行该指令,这里是盘符d),然后发现有sample和source的别名。
说明在本地数据库目录中。
3、db2 catalog database 数据库名on d: 将数据库编目到节点上
4. drop database 数据库名删除数据库。
DB2如何调整表空间大小
DB2如何调整表空间⼤⼩DB2如何调整表空间⼤⼩刚刚接到客户那边打的电话,程序⼀直报错,所有的业务都做不了,拷贝了⼀份应⽤服务器(weblogic)的⽇志,⽇志⾥显⽰:WARN : 2009-06-18 16:24:32,421: JDBCExceptionReporter[line:77}: SQL Error: -99999, SQLState: nullERROR: 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: 57011ERROR: 2009-06-18 16:24:32,422: JDBCExceptionReporter[line:78}: Error for batch element #1: DB2 SQL error: SQLCODE: -289, SQLSTATE: 57011, SQLERRMC: SMKWARN : 2009-06-18 16:24:32,423: JDBCExceptionReporter[line:77}: SQL Error: -99999, SQLState: nullERROR: 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: 57011ERROR: 2009-06-18 16:24:32,424: JDBCExceptionReporter[line:78}: Error for batch element #2: DB2 SQL error: SQLCODE: -289, SQLSTATE: 57011, SQLERRMC: SMKERROR: 2009-06-18 16:24:32,424: AbstractFlushingEventListener[line:301}: Could not synchronize database state with sessionorg.hibernate.exception.GenericJDBCException: Could not execute JDBC batch updateat 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 mit(JDBCTransaction.java:106)at org.springframework.orm.hibernate3.HibernateTransactionManager.doCommit(HibernateTransactionManager.java:575)atorg.springframework.transaction.support.AbstractPlatformTransactionManager.processCommit(AbstractPlatformTransactionManager.java:662) at mit(AbstractPlatformTransactionManager.java:632)atmitTransactionAfterReturning(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 nct.mp.counterservice.service.CounterServiceService.applySave(CounterServiceService.java:135)at nct.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 nct.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] ⾮⾃动批处理出现故障。
db2数据库日志清理
1、lo ad 方法装入数据:exp ort t o tem pfile of d el se lect* fro m tab lenam e whe re no t 清理条件;l oad f rom t empfi le of delmodif ied b y del prior itych ar re place into tabl enamenonr ecove rable;说明:在不相关的数据表exp ort数据时,可以采取并发的形式,以提高效率;table name指待清理ta ble的名称;m odifi ed by delp riori tycha r防止数据库记录中存在换行符,导致数据无法装入的情况; r eplac e int o对现数据库中的内容进行替换,即将现行的数据记录清理,替换为数据文件内容;n onrec overa ble无日志方式装入;2、查找当前的应用:db2 lis t app licat ion g rep b tpdbs;3、删除当前正在使用的a pplic ation:db2 "fo rce a pplic ation (id1,id2,id3)"id1,id2,id3 是list显示的应用号;4、查看当前应用号的执行状态:db2 g et sn apsho t for appl icati on ag entid 299greprow5、查看数据库参数:db2 getdb cf g for //当前数据库可以省略6、修改数据库的log数据:db2 u pdate db c fg us ing <参数名><参数值>7、d b2sto p for ce的用法:在进行bind的时候出现如下错误:sql0082c an er ror h as oc curre d whi ch ha s ter minat ed pr ocess ing.sql0092nn o pac kagewas c reate d bec auseof pr eviou s err ors.sql0091nb indin g was ende d wit h "3" erro rs an d "0" warn ings.主要是表文件被加锁,不能继续使用;在进行s top的时候报错:d b2sto p8/03/2005 21:46:530 0sql1025nth e dat abase mana ger w as no t sto ppedbecau se da tabas es ar e sti ll ac tive.sql1025n the d ataba se ma nager wasnot s toppe d bec ausedatab asesare s tillactiv e.需要使用如下命令可以解决这个问题: db2stopforce08/03/2005 21:47:49 0 0 sql1064nd b2sto p pro cessi ng wa s suc cessf ul.sql1064ndb2stop proc essin g was succ essfu l.然后启动数据库db2s tart,连接数据库db2s后,重新进行bind即可。
DB2及表空间和缓冲池
DB2及表空间和缓冲池DB2的表空间和缓冲池对于刚涉足DB2 领域的DBA 或未来的DBA 而言,新数据库的设计和性能选择可能会很令人困惑。
在本文中,我们将讨论DBA 要做出重要选择的两个方面:表空间和缓冲池。
表空间和缓冲池的设计和调优会对DB2 服务器的性能产生深远的影响,因此我们将着重讨论这些活动。
表空间数据库中的所有数据都存储在许多表空间中。
可以认为表空间是孩子而数据库是其父母,其中表空间(孩子)不能有多个数据库(父母)。
由于表空间有不同用途,因此根据它们的用途和管理方式将它们分类。
根据用途有五种不同的表空间:目录表空间每个数据库只有一个目录表空间,它是在发出CREATE DATABASE 命令时创建的。
目录表空间被DB2 命名为SYSCATSPACE,它保存了系统目录表。
总是在创建数据库时创建该表空间。
常规表空间常规表空间保存表数据和索引。
它还可以保存诸如大对象(Large Object,LOB)之类的长数据,除非这些数据显式地存储在长表空间中。
如果某些表空间是数据库管理的空间(Database Managed Space,DMS),则可以将表及其索引分别放到单独的常规表空间中。
我们将在本文后面定义DMS 和系统管理的空间(System Managed Space,SMS)之间的区别。
每个数据库中必须至少有一个常规表空间。
创建数据库时指定该表空间的缺省名为USERSPACE1。
长表空间长表空间用于存储长型或LOB 表列,它们必须驻留在DMS 表空间中。
它们还可以存储结构化类型的列或索引数据。
如果没有定义长表空间,那么将把LOB 存储在常规表空间中。
长表空间是可选的,缺省情况下一个都不创建。
系统临时表空间系统临时表空间用于存储SQL 操作(比如排序、重组表、创建索引和连接表)期间所需的内部临时数据。
每个数据库必须至少有一个系统临时表空间。
随数据库创建的系统临时表空间的缺省名为TEMPSPACE1。
DB2表空间
表可以分散存放到多个表空间中吗 N Y
仅在需要时才分配空间吗 Y N
按类型分为:规则表空间、大对象表空间、系统临时表空间、用户临时表空间。
规则表空间中包含用户数据的表。默认用户表空间名为USERSPACE1,索引也存储在规则表空间中,另外系统目录表也放在规则表空间中。默认的系统目录表空间名为SYSCATSPACE。
临时表空间分为系统临时表空间和用户临时表空间。
系统临时表只能存储在系统临时表空间中,所以数据库必须始终至少有一个系统临时表空间。
例十:创建用户临时表空间:
CREATE USER TEMPORARY TABLESPACE usr_tbsp MANAGED BY DATABASE USING(FILE ‘d:\db2data\user_tbsp’ 5000, FILE ‘e:\db2data\user_tbsp’ 5000)
表空间可以被放在不同的磁盘中吗 Y N
创建之后,区段大小能够改变吗 N N
例九:创建系统临时表空间:
CREATE SYSTEM TEMPORARY TABLESPACE tmp_tbsp MANAGED BY SYSTEM USING(‘d:\tmp_tbsp’,’e:\tmp_tbsp’)
CREATE TABLESPACE RESOURCE MANAGED BY DATABASE USING (DEVICE '/dev/rdblv6' 10000, DEVICE '/dev/rdblv7' 10000, DEVICE '/dev/rdblv8' 10000)
上面语句中提到的UNIX设备必须已经存在,且实例拥有者和SYSADM组必须能够写入它们。
数据库表空间不足引发的故障处理方法
数据库表空间不足引发的故障处理方法在数据库管理中,表空间的重要性不言而喻。
表空间是用来存储数据库中表和索引的地方,当表空间不足时,会导致数据库无法正常运行,影响业务运行和数据的完整性。
因此,及时处理表空间不足的问题至关重要。
本文将分享如何处理数据库表空间不足所引发的故障,以确保数据库的稳定运行。
一、了解表空间的概念和特性在处理表空间不足的问题之前,首先需要了解表空间的概念和特性。
表空间是由一个或多个数据文件组成的逻辑存储单元,用于存放数据库中的表、索引和其他对象。
每个表空间都有一个固定大小,根据数据库管理系统的不同,表空间的大小可以灵活调整。
表空间的管理是数据库管理员的重要任务之一,合理规划和管理表空间,可以提高数据库的性能和可靠性。
因此,在进行故障处理之前,确保对表空间有深入了解,掌握表空间的特性和基本管理方法是必不可少的。
二、监控表空间的使用情况及时了解表空间的使用情况是处理表空间不足问题的关键。
数据库管理员应该定期监控表空间的使用情况,通过数据库管理工具或查询系统视图来获取相关信息。
查询表空间的使用情况可以使用如下SQL语句:```SELECT tablespace_name, sum(bytes)/(1024*1024) AS "Total Size(MB)",sum(bytes)/(1024*1024) - sum(free_space)/(1024*1024) AS "Used Size(MB)",sum(free_space)/(1024*1024) AS "Free Size(MB)" FROM dba_free_spaceGROUP BY tablespace_name;```该语句可以列出所有表空间的总大小、已使用大小和空闲大小。
通过监控表空间的使用情况,可以及时发现空间不足的问题,避免出现故障。
三、释放不再使用的空间在监控表空间使用情况的基础上,如果发现某个表空间空间不足,应及时采取措施释放不再使用的空间。
db2数据库删除分区命令
db2数据库删除分区命令
在DB2数据库中,要删除分区,你可以使用ALTER TABLE命令来删除分区。
具体步骤如下:
首先,你需要连接到DB2数据库,并进入要操作的数据库。
然后,使用以下命令删除分区:
ALTER TABLE table_name DROP PARTITION partition_name.
在这个命令中,table_name是你要操作的表的名称,partition_name是要删除的分区的名称。
执行这条命令后,DB2数据库将会删除指定的分区。
需要注意的是,删除分区可能会影响到表的数据和性能,所以在执行这个操作之前,请确保已经做好了充分的备份,并且明确了删除分区的后果。
另外,还需要考虑到删除分区后可能需要重新组织表的数据和索引,以确保数据库的性能和一致性。
因此,在执行删除分区操作
之后,建议进行必要的数据和索引的重新组织。
总之,删除分区是一个需要谨慎对待的操作,需要在充分了解其影响的情况下进行。
希望这个回答能够帮助到你。
DB2数据库表空间修改文档
DB2数据库表空间检查与维护一、表空间占满故障现象1、系统上线初期正常,稳定运行半年以后突然出现故障。
2、对数据库进行写入操作时失败:用户的流程计划不能正常提交,录入数据无法保存。
3、系统应用程序操作响应慢,甚至宕机(死机)。
4、DB2数据库能正常连接,select语句执行正常,insert语句执行失败。
二、表空间状态检查与查看1、使用DB2管理员账户查看表空间状态:db2 list tablespaces |more ,其中|more 用于分页显示输出结果,按空格键翻页。
结果如图1所示。
图1其中状态0x0000 表示表空间正常。
2、查看表空间及其表空间所属容器的详细信息:db2 list tablespaces show detail |more ,结果如图2所示。
图2剩余表空间=可用页数*页大小,如图2中SYSCATSPACE表空间的可用空间大小:=3532*4096(4K)=14M,即该表空间最多还能增加14M的数据,若占满后需要扩充表空间。
三、表空间占满解决方法1、改变容器大小:db2 alter tablespace idx_data resize(file 'd:\db2\datafile_netdb\idx_data' 32000)该命令是将表空间idx_data 的大小为1000MB(因为该表空间扩展数据库大小为32K),d:\db2\datafile_netdb\idx_data是该表空间文件存放位置。
执行结果如图3所示。
图32、增加新的容器:db2 alter tablespace idx_data add(file 'd:\db2\datafile_netdb\idx_data_ex1' 640) 该命令是将表空间idx_data 增加新的容器idx_data_ex1,大小为20MB(因为该表空间扩展数据库大小为32K),d:\db2\datafile_netdb\idx_data_ex1是该新增容器文件存放位置。
db2表空间详解
3.2 表空间设计3.2.1 创建表空间表空间建立数据库系统使用的物理存储设备与用来存储数据的逻辑对象或表之间的关系。
对于非自动存储器表空间,在创建表空间时,必须知道将引用的容器的设备名或文件名。
另外,必须知道与要分配给表空间的每个设备名或文件名及分配空间大小。
对于自动存储器表空间,数据库管理器将根据与数据库关联的存储路径将容器指定给表空间。
在一个数据库内创建表空间,会将容器分配到表空间,并在数据库系统目录表中记录它的定义和属性,然后就可以在此表空间内创建表。
当创建数据库时,会创建3个初始表空间。
这3个初始表空间的页大小基于使用CREATE DATABASE命令时建立或接受的默认值。
此默认值还表示所有将来CREATE BUFFERPOOL和CREATE TABLESPACE语句的默认页大小。
如果在创建数据库时不指定页大小,那么默认大小是4KB。
如果在创建表空间时不指定页大小,那么默认页大小是创建数据库时设置的页大小。
创建表空间可以通过控制中心或命令行创建。
一、使用控制中心创建表空间使用控制中心创建表空间二、使用命令行创建表空间1.创建用户表空间创建SMS表空间:CREATE TABLESPACE <NAME> MANAGED BY SYSTEM USING (‘<path>’)创建DMS表空间:CREATE TABLESPACE <NAME> MANAGED BY DATABASE USING(DEVICE |FILE’<path>’<size>) 创建自动存储器表空间CREATE TABLESPACE <NAME>或CREATE TABLESPACE <NAME> MANAGED BY AUTOMATIC STORAGE例:1.在Windows上,使用3个不同的驱动器上的目录,创建SMS表空间CREATE TABLESPACE TS1 MANAGED BY SYSTEMUSING (‘d:\nxz_tbsp’,’e:\nxz_tbsp’,’f:\nxz_tbsp)2.使用各自有5000页的两个文件容器创建了一个DMS表空间:CREATE TABLESPACE TS2 MANAGED BY DATABASEUSING (FILE’d:\db2data\acc_tbsp’ 5000,FILE’e:\db2data\acc_tbsp’ 5000)在创建DMS表空间时,表空间文件容器不需要重建,DB2自动来创建,但裸设备容器无法自动创建,需要root用户参与。
Oracle中关于清除数据和释放表空间
Oracle中关于清除数据和释放表空间⼀、表的重命名flashback table test2 to before drop rename to test3;--【to test3】将表重命名drop table test3 purge; --彻底删除表⼆、清除表中的数据truncate操作同没有where条件的delete操作⼗分相似,只是把表⾥的信息全部删除,但是表依然存在。
例如:truncate table XXTruncate不⽀持回滚,并且不能truncate⼀个带有外键的表,如果要删除⾸先要取消外键,然后再删除。
truncate table 后,有可能表空间仍没有释放,可以使⽤如下语句:alter table 表名称 deallocate UNUSED KEEP 0;注意如果不加KEEP 0的话,表空间是不会释放的。
例如:alter table F_MINUTE_TD_NET_FHO_B7 deallocate UNUSED KEEP 0;或者:TRUNCATE TABLE (schema)table_name DROP(REUSE) STORAGE才能释放表空间。
例如: truncate table test1 DROP STORAGE;三、查询分区表存在哪些分区:查询分区表的情况,可以在USER_TAB_PARTITIONS中查询。
例如:select 'alter table '||t.table_name ||' truncate partition ' || t.partition_name from USER_TAB_PARTITIONS t where t.table_name like 'F_%'清除指定某个分区表的分区数据:alter table 表名称 truncate partition 分区名称;四、清除分区表占⽤的空间:alter table 表名称 DROP partition 分区名称;例如:alter table F_HOUR_TD_NET_MPVOICE DROP partition P_09121913;五、查询表空间信息可以利⽤如下语句查询各表在存储空间的使⽤分情况:SELECT TABLESPACE_NAME,TO_CHAR(SUM(BYTES)/(1024*1024),'999G999D999') CNT_MB FROM DBA_EXTENTS WHERE OWNER='&OWNER' AND SEGMENT_NAME='&TABLE_NAME' AND SEGMENT_TYPE LIKE 'TABLE%' GROUP BY TABLESPACE_NAME;可以使⽤如下语句,查询存储空间情况:Select Tablespace_Name, Sum(bytes)/1024/1024 From Dba_Segments group By Tablespace_Name六、查询⽤户下的表如果你的⽤户权限不是DBA:那你⽤select * from user_tables;可以查询到当前⽤户所拥有的表。
SAP下DBTABLOG表清理并释放表空间
适用情况:ECC6.0DB2 版本从V9.5升级到V10.1DBTABLOG表中数据可删除、可归档,本文采取是删除。
一、从表DBTABLOG中删除数据,只保留1年数据。
(时间自己定)SE38 运行程序RSTBPDEL,后台运行程序。
二、打入DB6CONV程序参考note1513862,下载附件中的文件解压,把解压文件放到如下目录:cp R000016.FW1 /usr/sap/trans/datacp K000016.FW1 /usr/sap/trans/cofiles运行STMS传输即可。
三、运行程序DB6CONV重组表DBTABLOG。
SE38 执行程序DB6CONV,参考note 362325保存即可,选择合适的时间启动后台任务运行。
四、降低高水位高水位降低后表空间大小没有减少。
五、缩小PRD#PROTD表空间1、创建表空间PRD#PROTD1(语句可以从ddl中查找,自己生成DDL文件)CREATE LARGE TABLESPACE "PRD#PROTD1" IN DATABASE PARTITION GROUP SAPNODEGRP_PRD PAGESIZE 16384 MANAGED BY AUTOMATIC STORAGEUSING STOGROUP "IBMSTOGROUP"AUTORESIZE YESINITIALSIZE 32 MMAXSIZE NONEEXTENTSIZE 2PREFETCHSIZE AUTOMATICBUFFERPOOL "IBMDEFAULTBP"DATA TAG NONEOVERHEAD 7.500000TRANSFERRATE 0.060000NO FILE SYSTEM CACHINGDROPPED TABLE RECOVERY OFF;2、把表空间PRD#PROTD的数据转移到表空间PRD#PROTD1。
DB2查看表空间和增加表空间容量
DB2查看表空间和增加表空间容量Db2 connect to xxxDb2 “LIST TABLESPACES SHOW DETAIL”Tablespace ID = 7Name = TSASNAAType = Database managed spaceContents = All permanent data. Large table space.State = 0x0000Detailed explanation:[@more@]NormalTotal pages = 14800Useable pages = 14752Used pages = 12864Free pages = 1888High water mark (pages) = 12864Page size (bytes) = 8192Extent size (pages) = 32Prefetch size (pages) = 32Number of containers = 1增加表空间⼤⼩DB2数据库使⽤时,如果表空间满了,该如何扩容呢?下⽂将教给您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页。
oracle 删除数据后释放数据文件大小的方法
Oracle 删除数据后释放数据文件大小的方法在Oracle数据库中,删除数据后,数据文件的大小并不会立即减小,而是会维持不变,这是因为Oracle使用了一种称为“延迟块清理”的机制来处理已删除的数据。
延迟块清理机制的目的是为了提高性能,避免频繁的磁盘写入操作。
然而,如果数据库中存在大量已删除的数据,这些未释放的空间可能会导致数据文件变得非常庞大,浪费存储资源。
为了解决这个问题,我们需要采取一些措施来释放已删除数据所占用的空间。
本文将介绍一些有效的方法,可以帮助您在Oracle数据库中删除数据后释放数据文件大小。
方法一:使用ALTER TABLE语句进行数据重组ALTER TABLE语句可以用来重新组织表中的数据,将已删除的数据空间释放出来。
具体步骤如下:1.首先,使用以下语句查看表的碎片化情况:SELECT segment_name, sum(bytes)/1024/1024 AS "Size(MB)"FROM dba_extentsWHERE segment_type = 'TABLE'GROUP BY segment_name;2.找到需要重组的表,并使用以下语句执行数据重组:ALTER TABLE table_name MOVE;其中,table_name是需要重组的表名。
3.重复步骤1,确认表的碎片化情况是否得到改善。
方法二:使用TRUNCATE TABLE语句TRUNCATE TABLE语句可以删除表中的所有数据,并释放已删除数据所占用的空间。
具体步骤如下:1.使用以下语句删除表中的所有数据:TRUNCATE TABLE table_name;其中,table_name是需要清空的表名。
2.使用以下语句查看表的碎片化情况:SELECT segment_name, sum(bytes)/1024/1024 AS "Size(MB)"FROM dba_extentsWHERE segment_type = 'TABLE'GROUP BY segment_name;确认表的空间是否得到释放。
db2清理大批量数据的实践分享
“案发”当日(2月29日,四年才相逢的日子):ecif数据库中一张关键表crossindex(ecif客户与其他源系统客户对照关系表,下文均用表A代替)在批量作业处理时异常增大,停止时该表数据为1.4亿条数据。
数据异常增大的原因本文就不在赘述了,详细原因足够写一个长篇回忆录了,说多了全是眼泪。
之前做过统计,此表正常数据应当为1200万条左右。
看到下图结果的时候,有点小崩溃。
一个简单的count(1)后查询“仅”用了3分20秒,异常数据总条数在1.3亿条左右,并且查看了当时的表空间,数据表空间已剩余不多,索引表空间全部被占满了。
确切的说是因为索引表空间占满了,批量数据才得以停止,否则数据量会更大。
命题:一个有业务系统使用的数据库,需要将其中的一张表,从1.4亿条数据中删除1.3亿,最终只保留有用的1200万数据,且索引表空间已满,无法增加表空间。
磁盘空间不足,无法备份。
前提:幸运的是,数据库之前做过优化。
具体有以下几个参数:db2set DB2_SKIPINSERTED=ondb2set DB2_EVALUNCOMMITTED=on这两个参数主要是提高数据库的并行处理能力,确保批量程序处理过程中,其它应用可以查询数据。
其实就是延迟行锁定,当在表扫描或索引扫描期间执行行锁定时,DB2 会先锁定已扫描的每一行然后再确定该行是否符合查询要求,直到确定某行符合查询要求为止。
调整数据库锁列表比例,控制应用在过多情况占用锁资源;update db cfg for ecifdb using MAXLOCKS 30(目前生产环境大多数系统是采取自动配置,大小为97%)调整锁资源大小;update db cfg for ecifdb using LOCKLIST 204800(目前生产环境大多数系统是采取自动配置,大小为496864页)调整锁等待超时时长;update db cfg for ecifdb using LOCKTIMEOUT 40(目前生产环境大多数系统是采取自动配置,大小为1800秒)直白的说,有了以上数据库参数的调整,即使我们去进行数据删除时,也不会导致数据库的崩溃,毕竟数据量有点大。
db2数据库日志清理
db2数据库日志清理1、load 方法装入数据:export to tempfile of del select * from tablename where not 清理条件;load from tempfile of del modified by delprioritychar replace into tablename nonrecoverable;说明:在不相关的数据表export数据时,可以采取并发的形式,以提高效率;tablename指待清理table的名称;modified by delprioritychar防止数据库记录中存在换行符,导致数据无法装入的情况;replace into对现数据库中的内容进行替换,即将现行的数据记录清理,替换为数据文件内容;nonrecoverable无日志方式装入;2、查找当前的应用:db2 list application grep btpdbs;3、删除当前正在使用的application:db2 "force application (id1,id2,id3)"id1,id2,id3 是list显示的应用号;4、查看当前应用号的执行状态:db2 get snapshot for application agentid 299 grep row5、查看数据库参数:db2 get db cfg for //当前数据库可以省略6、修改数据库的log数据:db2 update db cfg using <参数名> <参数值>7、db2stop force的用法:在进行bind的时候出现如下错误:sql0082can error has occurred which has terminated processing.sql0092nno package was created because of previous errors.sql0091nbinding was ended with "3" errors and "0" warnings.主要是表文件被加锁,不能继续使用;在进行stop的时候报错:db2stop8/03/2005 21:46:530 0 sql1025nthe database manager was not stopped because databases are still active.sql1025nthe database manager was not stopped because databases are still active.需要使用如下命令可以解决这个问题: db2stop force08/03/2005 21:47:49 0 0 sql1064ndb2stop processing was successful.sql1064ndb2stop processing was successful.然后启动数据库db2start,连接数据库db2s后,重新进行bind即可。
删除数据后如何及时释放存储空间
删除数据后如何及时释放存储空间?--黄海明当表空间大小受限时,即便通过delete带条件删除部分数据,被删除数据所使用的空间,依然不会被释放。
此时想要再添加新的数据可能会得到“磁盘空间不足”的报错。
本文通过一个实验场景,介绍清理回滚段及时释放存储空间的方法,用以解决上述困扰。
一.创建实验场景步骤如下(注:本实验场景中数据页的大小16k):1.删除测试环境中的表和表空间(确保数据库中TEST表空间及TEST_CLOB表仅为本实验所用)SQL> drop table test_clob;SQL> drop tablespace test;2.创建test表空间,大小为64M,并且务必关闭表空间自动扩展功能SQL> create tablespace test datafile '/dm7/data/DAMENG1/test.dbf' size64 autoextend off;3.创建表create table test_clob(c1 int,c2 clob )storage(on test, clusterbtr);4.构建一个往test_clob表中增加大量数据匿名块declarebeginfor i in 1..10000 loopinsert into test_clob values(1, lpad('测试',32000,'空间限制'));commit;end loop;end;/等待匿名块执行完成,会收到如下报错:[-523]:磁盘空间不足.5.查看插入了多少条记录SQL> select count(1) from test_clob;行号 COUNT(1)---------- --------------------1 1493已用时间: 27.543(毫秒). 执行号:2088.6.删除500条记录SQL> delete from test_clob where rowid <= 500;SQL> commit;查询记录条数SQL> select count(1) from test_clob;行号 COUNT(1)---------- --------------------1 993已用时间: 1.809(毫秒). 执行号:2091.再插入数据,看看是否报错?SQL> insert into test_clob values(1, lpad('测试',32000,'空间限制'));insert into test_clob values(1, lpad('测试',32000,'空间限制'));[-523]:磁盘空间不足.已用时间: 3.407(毫秒). 执行号:2092.truncate好用,然而不能带条件删除,表空间大小本身又有局限,怎么才能将尚未释放的存储空间用起来?二.解决方法:7.以DBA身份创建存储过程create or replace procedure remove_space()asbeginexecute immediate 'alter system set ''UNDO_RETENTION''=1;';dbms_lock.sleep(10);execute immediate 'alter system set ''UNDO_RETENTION''=900;';end;/以DBA身份调用上述存储过程call remove_space();8.再插入500条试试,看是否报错?declarebeginfor i in 1..500 loopinsert into test_clob values(1, lpad('测试',32000,'空间限制'));commit;end loop;end;/查一下总记录数SQL> select count(1) from test_clob;行号 COUNT(1)---------- --------------------1 1493已用时间: 2.333(毫秒). 执行号:2096.问题解决。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
适用情况:
ECC6.0
DB2 版本从V9.5升级到V10.1
一、从表DBTABLOG中删除数据,只保留1年数据。
(时间自己定)
SE38 运行程序RSTBPDEL,后台运行程序。
二、打入DB6CONV程序
参考note1513862,下载附件中的文件解压,把解压文件放到如下目录:cp R000016.FW1 /usr/sap/trans/data
cp K000016.FW1 /usr/sap/trans/cofiles
运行STMS
传输即可。
三、运行程序DB6CONV重组表DBTABLOG。
SE38 执行程序DB6CONV,参考note 362325
保存即可,选择合适的时间启动后台任务运行。
四、降低高水位
高水位降低后表空间大小没有减少。
五、缩小PRD#PROTD表空间
1、创建表空间PRD#PROTD1。
CREATE LARGE TABLESPACE "PRD#PROTD1" IN DATABASE PARTITION GROUP SAPNODEGRP_PRD PAGESIZE 16384 MANAGED BY AUTOMATIC STORAGE
USING STOGROUP "IBMSTOGROUP"
AUTORESIZE YES
INITIALSIZE 32 M
MAXSIZE NONE
EXTENTSIZE 2
PREFETCHSIZE AUTOMATIC
BUFFERPOOL "IBMDEFAULTBP"
DATA TAG NONE
OVERHEAD 7.500000
TRANSFERRATE 0.060000
NO FILE SYSTEM CACHING
DROPPED TABLE RECOVERY OFF;
2、把表空间PRD#PROTD的数据转移到表空间PRD#PROTD1。
运行会报错,如下:
SQL0551N "SAPPRD" does not have the required authorization or privilege to perform operation "CREATE TABLE" on object
缺少权限,给用户SAPPRD dbadm权限。
db2 grant dbadm on database to user SAPPRD
SE38 运行程序DB6CONV
3、删除表空间PRD#PROTD,容器也被删除,文件系统空间释放。
db2 drop tablespace PRD#PROTD
4、重建表空间PRD#PROTD。
CREATE LARGE TABLESPACE "PRD#PROTD" IN DATABASE PARTITION GROUP SAPNODEGRP_PRD PAGESIZE 16384 MANAGED BY AUTOMATIC STORAGE
USING STOGROUP "IBMSTOGROUP"
AUTORESIZE YES
INITIALSIZE 32 M
MAXSIZE NONE
EXTENTSIZE 2
PREFETCHSIZE AUTOMATIC
BUFFERPOOL "IBMDEFAULTBP"
DATA TAG NONE
OVERHEAD 7.500000
TRANSFERRATE 0.060000
NO FILE SYSTEM CACHING
DROPPED TABLE RECOVERY OFF;
5、把表空间PRD#PROTD1中的数据重新转回到表空间PRD#PROTD。
6、删除表空间PRD#PROTD1。
db2 drop tablespace PRD#PROTD1
7、去掉dbadm权限
revoke dbadm on database from user sapprd
六、前后对比变化
1、表空间PRD#PROTD从145G减少到256M,释放文件系统空间144G,数据库大小减少144G。
2、表空间PRD#PROTD的状态发生了变化。
RECLAIMABLE_SPACE_ENABLED的值从0变成1。
第三步到第五步,也可如下操作
1、rename old tablespaces
db2 rename tablespace PRD#PROTD to PRD#PROTD _OLD
db2 rename tablespace PRD#PROTI to PRD#PROTDI_OLD
2、创建表空间
通过DBACOCKPIT事务码创建表空间PRD#PROTD和PRD#PROTI,也可通过DDL语句找到创建表空间的语句在数据库层面创建。
3、通过DB6CONV程序转换表空间即可。
Tablespace to Be Converted“PRD#PROTD _OLD”,Target Data Tablespace“PRD#PROTD”,Target Index Tablespace“PRD#PROTDI”。
4、DROP旧表空间
db2 drop tablespace PRD#PROTD
db2 drop tablespace PRD#PROTI。