首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

:怎么收缩数据库中未用的表空间

2012-01-24 
在线求救:如何收缩数据库中未用的表空间我的数据库现在已经达到16个G了,造成硬盘都已经装不下了.而用查询

在线求救:如何收缩数据库中未用的表空间
我的数据库现在已经达到16个G了,造成硬盘都已经装不下了.而用查询表占空间发现实际有12个多G的空间并未使用,求救高手如何把这些空间给回收了
如图数据库空间占用查询结果:
reserved           data             index_size         unused
15655768KB       2646240kB     44656KB             12964872KB
表占用空间查询结果:
nameinfo                   rowsinfo     reserved       datainfo           index_size         unused        
jxc_qtxs2007061935091942712   KB247048   KB32   KB1695632   KB
jxc_qtxs2007051920461939568   KB256480   KB24   KB1683064   KB
jxc_qtxs2007011981121863640   KB236008   KB8   KB1627624   KB
jxc_qtxs2007022056381738808   KB227224   KB16   KB1511568   KB
jxc_qtxs2007041810691691704   KB227048   KB16   KB1464640   KB
jxc_qtxs2007081267701656992   KB209104   KB32   KB1447856   KB
sys_xtrz27818585800   KB73288   KB32   KB512480   KB
js_jhdt20490413376   KB52232   KB32   KB361112   KB
jxc_qtxs_ys65937409144   KB54200   KB32   KB354912   KB
jxc_jhdt20078742316200   KB39512   KB304   KB276384   KB
jxc_wsdl61568284816   KB37832   KB3312   KB243672   KB
jxc_yfzk20078609260712   KB32704   KB32   KB227976   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版,具体解决办法是用将数据库增长限制,然后用一张大数据的临时表不断交换数据,重复使用该方法.日志文件会不断减少.

热点排行