各种数据库空间满处理办法
数据库数据清理方案

数据库数据清理方案数据库数据清理方案随着公司业务的不断发展和变化,数据库中存储的数据也会越来越多,多年来积累的数据量会越来越大,会对数据库性能和可用性造成不利影响。
因此,数据库的数据清理变得非常必要。
本文旨在提供一些数据库数据清理方案供大家参考。
一、需求分析在对数据库进行清理时,需要明确清理目的和对象。
根据数据库使用情况、法律法规等方面的需求,明确需要清理的数据内容和清理的方式。
以下是一些常见的需求:1. 数据库空间限制:由于硬盘容量限制,需要清理过时的数据来释放空间。
2. 废弃数据:某些数据已经没有实际意义,需要删除,以防止应用程序误用数据。
3. 保密要求:对于一些涉及个人隐私的数据,需要定期清理,以保护用户隐私。
二、数据清理策略在数据库清理中,需要考虑到清理的删减范围、时间点和方式等。
以下是一些常见策略:1. 定时清理:可以根据业务需求制定一定时间的清理计划,以防止数据凌乱、混乱。
例如,可以定期清理过时数据、重复数据和错误数据等。
2. 根据存储空间状态清理:在磁盘空间接近上限时,需要清理数据库中的冗余和过时数据,以删除占用大量存储空间的数据,并释放磁盘空间。
3. 达到某一时间范围:对于某些存在时间限制的数据,需要及时清理。
例如,日志数据保存期限通常不超过一年,可以设置清理策略,使数据库中的日志数据不超过一年。
4. 结合备份计划:数据库备份是保证数据安全性的重要措施。
在制定备份计划时,也可以设置相应的清理策略,以避免备份过多、占用过多磁盘空间的数据。
三、数据清理技术数据库数据清理技术也需要考虑方案。
以下是一些常见技术:1. SQL语句清理:常用的SQL语句可以从数据库中删除无用数据,例如Delete和Truncate语句。
2. 数据库表和字段设计:在设计数据库表和字段时,如果不需要长时间使用某些字段,可以考虑将其删除。
3. 自动化清理:可以通过编写脚本,自动执行一些数据清理操作,例如定期清理过时数据、删除冗余数据和去重操作等。
各种数据库空间满处理办法

DB2数据库:1、查看空间大小db2 list tablespaces show detail ,如下图;通过可用页数可以判断空间是否满2、查看数据库文件存放位置Db2 LIST TABLESPACE CONTAINERS FOR 表空间标识SHOW DETAIL 如下图:3、调整空间大小在现有数据文件扩容:alter tablespace datadbs extend(file'/home/db2inst1/db/r_dta_01' 1000M)增加新数据文件:alter tablespace datadbs add (file'/home/db2inst1/db/r_dta_02' 4096M)不指定单位(G,M,K)默认为页4、数据库的日志文件已满查看日志使用情况get db cfg for 数据库名修改日志文件大小:update db cfg for <dbname> using LOGFILSIZ 4096修改主日志文件个数:update db cfg for <dbname> using LOGPRIMARY 20修改辅助日志文件个数:update db cfg for <dbname> using LOGSECOND 10将数据库设置为空间自增加ALTER TABLESPACE库名AUTORESIZE YES查看是否为自增加get snapshot for tablespaces onORACLE数据库:1、查看空间大小Select table_name, sum(bytes) ,file_name from dba_data_files group by tablespace_name,查看未用空间大小:select sum(bytes)/(1024*1024) as free_space,tablespace_name from dba_free_space group by tablespace_name;汇总:SELECT A.TABLESPACE_NAME,A.BYTES TOTAL,B.BYTES USED,C.BYTES FREE,(B.BYTES*100)/A.BYTES "% USED",(C.BYTES*100)/A.BYTES "% FREE" FROMSYS.SM$TS_A V AIL A,SYS.SM$TS_USED B,SYS.SM$TS_FREE C WHERE A.TABLESPACE_NAME=B.TABLESPACE_NAME ANDA.TABLESPACE_NAME=C.TABLESPACE_NAME;2、调整空间大小增加新数据文件并自增长:alter tablespace 库名add datafile '/home/oracle/data_02.dbf' size 200m autoextend on next 10m maxsize 500m/unlimeted;在现有数据文件扩容:alter database datafile '/opt/oracle/ora_tbs/xwj_datafile01.dbf ' resize 200m;日志已满的处理方法ORA-00257: archiver error. Connect internal only, until freed archive log1. 用sys用户登录sqlplus sys/oracle@ora10g as sysdba2. 看看archiv log所在位置SQL> show parameter log_archive_dest;NAME TYPE V ALUE------------------------------------ ----------- ------------------------------log_archive_dest stringlog_archive_dest_1 stringlog_archive_dest_10 string3. 一般V ALUE为空时,可以用archive log list;检查一下归档目录和log sequenceSQL> archive log list;Database log mode Archive ModeAutomatic archival EnabledArchive destination USE_DB_RECOVERY_FILE_DESTOldest online log sequence 360Next log sequence to archive 360Current log sequence 3624. 检查flash recovery area的使用情况,可以看见archivelog已经很大了,达到96.62SQL> select * from V$FLASH_RECOVERY_AREA_USAGE;FILE_TYPE PERCENT_SPACE_USED PERCENT_SPACE_RECLAIMABLE NUMBER_OF_FILES------------ ------------------ ------------------------- ---------------CONTROLFILE .13 0 1 ONLINELOG 2.93 0 3 ARCHIVELOG 96.62 0 141 BACKUPPIECE 0 0 0 IMAGECOPY 0 0 0 FLASHBACKLOG 0 0 05. 计算flash recovery area已经占用的空间SQL> select sum(percent_space_used)*3/100 from v$flash_recovery_area_usage;SUM(PERCENT_SPACE_USED)*3/100-----------------------------2.99046. 找到recovery目录, show parameter recoverSQL> show parameter recover;NAME TYPE V ALUE------------------------------------ ----------- ------------------------------db_recovery_file_dest string /u01/app/oracle/flash_recovery_area db_recovery_file_dest_size big integer 5Grecovery_parallelism integer 07 上述结果告诉我们,归档位置用的是默认值,放在flash_recovery_area下(db_recovery_file_dest目录=/u01/app/oracle/flash_recovery_area)[root@sha3 10.2.0]# echo $ORACLE_BASE/u01/app/oracle[root@sha3 10.2.0]# cd $ORACLE_BASE/flash_recovery_area/ora10g/archivelog转移或清除对应的归档日志, 删除一些不用的日期目录的文件,注意保留最后几个文件(比如360以后的)---------------------------------------------------------------------------------------注意:在删除归档日志后,必须用RMAN维护控制文件,否则空间显示仍然不释放。
Sybase数据库空间满了的处理方案

Sybase日志满了处理方案在Sybase SQLServer中,我们的bshare数据库停止运行,查看日志显示如下: Can't allocate space for object 'tbs_stop_time_log' in database 'bshare' because 'default' segment is full/has no free extents. If you ran out of space in syslogs, dump thetransaction log. Otherwise, use ALTER DATABASE to increase the size of the segment.由上面的错误信息可以看出没有数据库”default”段没空间了。
可以通过两种方案实现相关的功能。
查看数据库的设备使用情况:Sp_helpdb bshare查看数据段和日志段信息sp_helpsegment查看默认段:sp_helpsegment default查看日志段:sp_helpsegment logsegment方案一:添加数据库设备空间1. root用户登录系统创建相关的逻辑卷lvcreate -L 5120M /dev/vg01/lv_bsharedev2 vg012. 修改设备文件的属主和权限chmod 777 /dev/vg01/lv_bsharedev2chown sybase:sybase /dev/vg01/lv_bsharedev23. 切换sybase用户su – Sybase4. 以sa用户登录master数据库isql –Usa –P -SQ5_DSuse master5. 选择master数据库,添加数据库设备查看设备编号sp_helpdevice添加设备信息DISK init name='bshare_dev2',physname='/dev/vg01/lv_bsharedev2', #创建lv的路径vdevno='16', #在原设备中不存在的编号size ='5120M' #设备大小必须小于等于lv大小备注:disk init name = '设备逻辑名',physname = '设备路径及物理名',size = '大小6. 设置设备对应的数据库alter database bshareon bshare_dev2=’5120M’;备注:alter database your_db on 设备逻辑名 = '大小'方案二:截断数据日志或者情况日志1. 截断日志的方法dump transaction bshare with no_log或者dump tran bshare with truncate_only;2. 操作上面命令之后需要停止ASE(先停止备份服务,然后停止服务器) shutdown –f Q5_DS_BSshutdown Q5_DS。
数据库存储空间管理的常见问题与解决方案

数据库存储空间管理的常见问题与解决方案随着数字化时代的到来,数据的增长速度愈发迅猛。
数据库作为数据的重要存储工具,在日常使用中面临着一系列的存储空间管理问题。
本文将为大家介绍数据库存储空间管理的常见问题,并提供一些解决方案。
一、数据库存储空间管理的常见问题1. 存储空间不足存储空间不足是数据库管理中最常见的问题之一。
当数据库中的数据量增长超过了已分配的存储空间时,数据库将无法继续写入新的数据,这将严重影响数据库的正常运行。
2. 存储空间浪费在数据库管理中,经常会出现存储空间被浪费的情况。
由于数据增长不可预测或数据过期未及时清理,可能会导致存储空间被空无一物的数据占据,增加了维护的成本和数据的访问时间。
3. 存储空间碎片化频繁的数据删除和数据更新操作可能导致存储空间碎片化。
当存储空间被分割成多个碎片时,会降低数据库的读取和写入效率,增加了维护和管理的复杂性。
二、数据库存储空间管理的解决方案1. 定期监控和优化存储空间定期监控数据库的存储空间使用情况,并根据数据的增长速度和预测进行存储空间扩容。
同时通过优化数据库的存储结构和索引,减少存储空间的浪费和碎片化。
2. 压缩和归档数据对于长时间不会被访问的数据,可以考虑将其进行压缩和归档。
通过压缩可以减小数据占用的存储空间,通过归档可以将不常使用的数据存储到其他存储介质中,释放主数据库的存储空间。
3. 实施数据备份和恢复策略定期进行数据库备份可以保护数据的安全性,并确保在数据丢失或数据库损坏时可以进行及时恢复。
备份数据可以存储在独立的存储介质中,释放主数据库的存储空间,同时防止数据丢失。
4. 数据清理和数据归档定期清理无用的数据可以释放存储空间,提高数据库的性能。
同时,对于已经使用较长时间但仍有保留价值的数据,可以进行归档,将其存储在独立的介质中,以便于后续需要时进行检索。
5. 存储空间监控工具使用存储空间监控工具可以实时追踪和报警数据库存储空间的使用情况。
数据库数据清理方案

数据库数据清理方案
随着时间的推移,数据库中的数据量不断增加,不可避免地会出现一些冗余、重复或无效的数据。
这些问题不仅会占用宝贵的存储空间,还会降低数据库的性能和安全性。
因此,数据清理变得越来越重要。
以下是一些常见的数据库数据清理方案:
1. 定期删除过期数据
如果你的数据库包含一些有时效性的数据,例如日志或会话记录,那么建议定期删除过期数据。
这可以通过编写定期清理脚本来实现,以确保数据库中只保留最新的有效数据。
2. 去重
如果数据库中存在重复数据,可以通过去重操作来清理它们。
这可以通过查询操作来完成,以查找重复项并将其删除。
另外,一些数据清理工具也可以帮助自动化该过程。
3. 删除无用数据
有些数据可能已经过时或不再需要,例如测试数据或旧版本的数据。
这些数据只会占用宝贵的存储空间,因此应及时地删除它们。
4. 数据备份和归档
备份和归档是数据清理的另一种方法。
将旧的数据备份和归档到另一个位置,可以释放数据库的存储空间,同时还可以防止数据丢失。
5. 数据库优化
数据库优化可以通过删除无用索引、压缩表和优化查询等方式来
提高数据库性能。
这可以通过使用各种数据库管理工具或手动调整来完成。
综上所述,数据清理对于保持数据库性能、安全性和可靠性至关重要。
以上提到的一些方案可以帮助您定期清理数据库中的数据,以确保其正常运行。
oracle数据库表空间扩容方法

一、概述数据库管理是企业信息系统中极为重要的一环,而Oracle数据库作为业界优秀的关系型数据库管理系统,通常被广泛应用于企业级应用中。
在数据库管理中,表空间是一个很重要的概念,它用于管理数据库中的数据存储。
随着数据量的增加,表空间可能会出现空间不足的情况,因此扩容表空间变得至关重要。
本文将介绍几种扩容Oracle数据库表空间的方法。
二、从数据文件角度扩容表空间1. 增加数据文件当表空间中的数据文件即将满的时候,可以通过增加数据文件的方式来扩容表空间。
具体操作步骤如下:1) 在Oracle数据库中使用“alter tablespace 表空间名 add datafile 新数据文件名 size 新数据文件大小”命令来增加数据文件;2) 通过以上操作,可以为表空间增加数据文件,并使表空间的空间得到扩容。
2. 自动扩展在表空间创建的时候,可以选择启用自动扩展功能。
当表空间中的数据文件空间不足时,可以自动扩展表空间的空间大小。
具体操作步骤如下:1) 在创建表空间的时候,使用“autoextend on”选项来启用自动扩展功能;2) 当表空间中的数据文件空间不足时,系统会自动扩展表空间的空间大小。
三、从段角度扩容表空间1. 移动段移动段是一种有效的扩容表空间的方法。
通过移动段,可以将表或索引从原有的表空间移动到具有足够空间的表空间中,从而实现表空间的扩容。
具体操作步骤如下:1) 使用“alter table 表名 move tablespace 新表空间名”命令来将表移动到新的表空间;2) 使用“alter index 索引名 rebuild tablespace 新表空间名”命令来将索引移动到新的表空间。
2. 压缩段通过压缩段的方式,可以释放表空间中的空闲空间,从而实现表空间的扩容。
具体操作步骤如下:1) 使用“alter table 表名enable row movement”命令来启用行移动功能;2) 使用“alter table 表名shrink spacepact”命令来压缩表,释放表空间中的空闲空间。
数据库清理方案

数据库清理方案一、为啥要清理数据库。
你想啊,数据库就像个大仓库,东西(数据)堆得乱七八糟,时间久了,找个东西(查询数据)都费劲,还可能把仓库(数据库)撑爆了呢。
所以清理数据库就像是给仓库来个大扫除,把没用的东西扔出去,有用的摆放整齐,这样仓库(数据库)就能高效运转啦。
二、确定清理目标。
1. 找出“垃圾数据”那些过期的信息就像过期的食品,留着也没用。
比如说,你有个记录促销活动的表,活动都结束好几个月了,相关的数据就可以扔了。
重复的数据就像双胞胎中的一个多余的,只需要留一个就好。
比如同一个用户注册了好几次,留下最新或者最完整的那条记录就行。
2. 找出占用空间大的无用数据块。
有些大文件或者日志文件,可能已经没有用了,就像你家里堆着的那些旧家具,占地方又没用,该扔就扔。
三、制定清理计划。
1. 按时间清理。
对于那些有时间戳的数据,比如说订单数据。
如果订单状态是“已完成”,而且是一年前的订单,可能就可以把和这个订单相关的一些附属数据(比如订单的临时计算结果之类的)清理掉。
可以设置个定期任务,每个月或者每个季度来一次这样的时间清理。
就像每个月定期打扫一次房间一样。
2. 按数据完整性清理。
先检查数据的完整性,比如说有些必填字段是空的,而且这个数据也没有和其他重要数据关联,那就可以把这个数据干掉。
这就好比你发现一件衣服少了个关键的扣子,而且这件衣服你也不打算补扣子了,那就扔了呗。
3. 按使用频率清理。
有些数据可能很久都没人访问了,就像你衣柜里几年都没穿过的衣服。
你可以统计一下数据的访问频率,如果某个表或者数据块在很长时间(比如半年)都没有人查询或者使用,那就要考虑是不是可以清理掉了。
四、实际清理操作。
1. 备份数据。
在清理之前,可别忘了备份啊。
这就像你要装修房子,得先把重要的东西搬到安全的地方。
你可以把要清理的数据先备份到另外一个存储设备或者数据库的备份区,万一清理错了,还能恢复呢。
2. 测试清理脚本或工具。
如果是用脚本或者专门的数据库清理工具,先在一小部分数据上测试一下。
Oracle10g的临时表空间占满之后的解决方法。

Oracle10g的临时表空间占满之后的解决方法。
公司客户数据库用了一段时间之后,总是出现磁盘被占满的情况。
基本上这个情况要么就是undo表空间很大,要么就是临时表空间很大,这个时候就需要进行转储undo表空间或者临时表空间。
以下是解决方法。
---解决临时表空间Temp的方法TEMP文件尚未调整,还是16G,首先创建了一个新的TEMP文件并设定为缺省临时表空间SQL> create temporary tablespace TEMP3 TEMPFILE '/opt/oracle/oradata/cuss/TEMP2.dbf' size 20m reuse autoextend off;SQL>alter database default temporary tablespace "TEMP2"结果这个情况下做exp产生ORA-01403的错误,后来得知是因为TEMP临时表空间容量过小的原因重新创建一个TEMP3文件,初始大小1G,每次增长200M,最大限制为4G。
SQL> create temporary tablespace TEMP3 TEMPFILE'/opt/oracle/oradata/cuss/TEMP3.dbf' size 1000m reuse autoextend on next 200m maxsize 4000m;把缺省临时表空间指向这个新建的TEMP3。
SQL>alter database default temporary tablespace "TEMP3"删除原有的临时表空间文件和操作系统中的对应物理文件,释放磁盘空间SQL>drop tablespace temp2 including contents and datafiles;重新做exp导出,导出成功。
至此调整结束。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
DB2数据库:1、查看空间大小db2 list tablespaces show detail ,如下图;通过可用页数可以判断空间是否满2、查看数据库文件存放位置Db2 LIST TABLESPACE CONTAINERS FOR 表空间标识SHOW DETAIL 如下图:3、调整空间大小在现有数据文件扩容:alter tablespace datadbs extend(file'/home/db2inst1/db/r_dta_01' 1000M)增加新数据文件:alter tablespace datadbs add (file'/home/db2inst1/db/r_dta_02' 4096M)不指定单位(G,M,K)默认为页4、数据库的日志文件已满查看日志使用情况get db cfg for 数据库名修改日志文件大小:update db cfg for <dbname> using LOGFILSIZ 4096修改主日志文件个数:update db cfg for <dbname> using LOGPRIMARY 20修改辅助日志文件个数:update db cfg for <dbname> using LOGSECOND 10将数据库设置为空间自增加ALTER TABLESPACE库名AUTORESIZE YES查看是否为自增加get snapshot for tablespaces onORACLE数据库:1、查看空间大小Select table_name, sum(bytes) ,file_name from dba_data_files group by tablespace_name,查看未用空间大小:select sum(bytes)/(1024*1024) as free_space,tablespace_name from dba_free_space group by tablespace_name;汇总:SELECT A.TABLESPACE_NAME,A.BYTES TOTAL,B.BYTES USED,C.BYTES FREE,(B.BYTES*100)/A.BYTES "% USED",(C.BYTES*100)/A.BYTES "% FREE" FROMSYS.SM$TS_A V AIL A,SYS.SM$TS_USED B,SYS.SM$TS_FREE C WHERE A.TABLESPACE_NAME=B.TABLESPACE_NAME ANDA.TABLESPACE_NAME=C.TABLESPACE_NAME;2、调整空间大小增加新数据文件并自增长:alter tablespace 库名add datafile '/home/oracle/data_02.dbf' size 200m autoextend on next 10m maxsize 500m/unlimeted;在现有数据文件扩容:alter database datafile '/opt/oracle/ora_tbs/xwj_datafile01.dbf ' resize 200m;日志已满的处理方法ORA-00257: archiver error. Connect internal only, until freed archive log1. 用sys用户登录sqlplus sys/oracle@ora10g as sysdba2. 看看archiv log所在位置SQL> show parameter log_archive_dest;NAME TYPE V ALUE------------------------------------ ----------- ------------------------------log_archive_dest stringlog_archive_dest_1 stringlog_archive_dest_10 string3. 一般V ALUE为空时,可以用archive log list;检查一下归档目录和log sequenceSQL> archive log list;Database log mode Archive ModeAutomatic archival EnabledArchive destination USE_DB_RECOVERY_FILE_DESTOldest online log sequence 360Next log sequence to archive 360Current log sequence 3624. 检查flash recovery area的使用情况,可以看见archivelog已经很大了,达到96.62SQL> select * from V$FLASH_RECOVERY_AREA_USAGE;FILE_TYPE PERCENT_SPACE_USED PERCENT_SPACE_RECLAIMABLE NUMBER_OF_FILES------------ ------------------ ------------------------- ---------------CONTROLFILE .13 0 1 ONLINELOG 2.93 0 3 ARCHIVELOG 96.62 0 141 BACKUPPIECE 0 0 0 IMAGECOPY 0 0 0 FLASHBACKLOG 0 0 05. 计算flash recovery area已经占用的空间SQL> select sum(percent_space_used)*3/100 from v$flash_recovery_area_usage;SUM(PERCENT_SPACE_USED)*3/100-----------------------------2.99046. 找到recovery目录, show parameter recoverSQL> show parameter recover;NAME TYPE V ALUE------------------------------------ ----------- ------------------------------db_recovery_file_dest string /u01/app/oracle/flash_recovery_area db_recovery_file_dest_size big integer 5Grecovery_parallelism integer 07 上述结果告诉我们,归档位置用的是默认值,放在flash_recovery_area下(db_recovery_file_dest目录=/u01/app/oracle/flash_recovery_area)[root@sha3 10.2.0]# echo $ORACLE_BASE/u01/app/oracle[root@sha3 10.2.0]# cd $ORACLE_BASE/flash_recovery_area/ora10g/archivelog转移或清除对应的归档日志, 删除一些不用的日期目录的文件,注意保留最后几个文件(比如360以后的)---------------------------------------------------------------------------------------注意:在删除归档日志后,必须用RMAN维护控制文件,否则空间显示仍然不释放。
---------------------------------------------------------------------------------------8. rman target sys/oracle[root@sha3 oracle]# rman target sys/oracleRecovery Manager: Release 10.2.0.4.0 - Production on Tue Jan 20 01:41:26 2009Copyright (c) 1982, 2007, Oracle. All rights reserved.connected to target database: tt (DBID=4147983671)9. 检查一些无用的archivelogRMAN> crosscheck archivelog all;10. 删除过期的归档RMAN> delete expired archivelog all;delete archivelog until time 'sysdate-1' ; 删除截止到前一天的所有archivelog11. 再次查询,发现使用率正常,已经降到23.03SQL> select * from V$FLASH_RECOVERY_AREA_USAGE;FILE_TYPE PERCENT_SPACE_USED PERCENT_SPACE_RECLAIMABLE NUMBER_OF_FILES------------ ------------------ ------------------------- ---------------CONTROLFILE .13 0 1 ONLINELOG 2.93 0 3 ARCHIVELOG 23.03 0 36 BACKUPPIECE 0 0 0 IMAGECOPY 0 0 0 FLASHBACKLOG 0 0 0其它有用的Command:----------------------------------如果archive log模式下不能正常startup,则先恢复成noarchive log,startup成功后,再shutdown; shutdown immediate;startup mount;alter database noarchivelog;alter database open;shutdown immediate;再次startup以archive log模式shutdown immediate;startup mount;show parameter log_archive_dest;alter database archivelog;archive log list;alter database open;如果还不行,则删除一些archlog logSQL> select group#,sequence# from v$log;GROUP# SEQUENCE#---------- ----------1 623 642 63原来是日志组一的一个日志不能归档SQL> alter database clear unarchived logfile group 1;alter database open;最后,也可以指定位置Arch Log, 请按照如下配置select name from v$datafile;alter system set log_archive_dest='/opt/app/oracle/oradata/usagedb/arch' scope=spfile或者修改大小SQL> alter system set db_recovery_file_dest_size=3G scope=both;Informix 数据库:1、查看空间大小onstat –d2、调整空间大小,给数据库datadbs加chunkonspaces -a datadbs -p /home/informix/dbs/datadbs2 -o 0 -s 2000000onspaces -a spacename -p pathname -o offset -s size [-m path offset]onspaces -c spacename [-t] -p pathname -o offset -s size [-m path offset]。