在线求救:如何收缩数据库中未用的表空间
我的数据库现在已经达到16个G了,造成硬盘都已经装不下了.而用查询表占空间发现实际有12个多G的空间并未使用,求救高手如何把这些空间给回收了
如图数据库空间占用查询结果:
reserved data index_size unused
15655768KB 2646240kB 44656KB 12964872KB
表占用空间查询结果:
nameinfo rowsinfo reserved datainfo index_size unused
jxc_qtxs200706 193509 1942712 KB 247048 KB 32 KB 1695632 KB
jxc_qtxs200705 192046 1939568 KB 256480 KB 24 KB 1683064 KB
jxc_qtxs200701 198112 1863640 KB 236008 KB 8 KB 1627624 KB
jxc_qtxs200702 205638 1738808 KB 227224 KB 16 KB 1511568 KB
jxc_qtxs200704 181069 1691704 KB 227048 KB 16 KB 1464640 KB
jxc_qtxs200708 126770 1656992 KB 209104 KB 32 KB 1447856 KB
sys_xtrz 27818 585800 KB 73288 KB 32 KB 512480 KB
js_jhdt 20490 413376 KB 52232 KB 32 KB 361112 KB
jxc_qtxs_ys 65937 409144 KB 54200 KB 32 KB 354912 KB
jxc_jhdt2007 8742 316200 KB 39512 KB 304 KB 276384 KB
jxc_wsdl 61568 284816 KB 37832 KB 3312 KB 243672 KB
jxc_yfzk2007 8609 260712 KB 32704 KB 32 KB 227976 KB
------解决方案--------------------压缩数据库:
DBCC SHRINKDATABASE (数据库名)
压缩表:
DBCC UPDATEUSAGE ( '数据库名 ', '表名 ', '表主键 ')
------解决方案--------------------你只要找到占用空间比较大的表进行压缩就可以了
并不需要压缩所有的表
查询每个表的使用空间:
-- drop table #tb
create table #tb(表名 sysname,记录数 int,
保留空间 varchar(10),使用空间 varchar(10)
,索引使用空间 varchar(10),未用空间 varchar(10))
insert into #tb exec sp_MSForEachTable 'EXEC sp_spaceused ' '? ' ' '
select * from #tb
order by cast(left(使用空间,len(使用空间)-3) as numeric)
------解决方案--------------------在要收缩的数据库上点右键-》所有任务-》收缩数据库
把“在收缩前将页移到文件起始位置”选上
收缩就可以了
------解决方案-------------------- --先备份数据库
--截断事务日志
backup log 数据库名 with no_log
go
--收缩数据库
dbcc shrinkdatabase(数据库名)
go
------解决方案--------------------可以在企业管理器中用可视化工具中的数据库收缩命令就可以了。
估计是你的日志文件太大。
------解决方案--------------------这个问题我曾经也遇到过,就是怎么收缩都不管用.过那是SQL97版,具体解决办法是用将数据库增长限制,然后用一张大数据的临时表不断交换数据,重复使用该方法.日志文件会不断减少.