server2000,删表,已用空间还是很大。

来源:百度知道 编辑:UC知道 时间:2024/05/15 09:07:23
sqlserver2000使用时间过长,估计是冗余数据产生,怎样缩小“已用空间”,看清楚是已用空间,并且是数据文件,不是日志文件。收缩数据库只能回收可用空间,不能回收已用空间。[color=#FF0000]如果你明白以上意思,可以不看下面的超详细举例,直接作答。我翘首以盼牛人作答。[/color]

具体情况是这样的(举例):
在两年前2007-5-1日开始用sqlserver2000建立了AAA数据库(里面有ipcc、adress...的表),每一天都有数据导入,生成那天的表(如今天ipcc_2009_4_8、adress_2009_4_8...),由于一般只需要近3个月的数据,所以一般每当数据库里的表累积到5个月的时候就删掉前两个月的表(如今天管理员进入数据库发现有2008-12-12、2008-12-13、2008-12-14...的表,就手动删除2008-12和2009-1两个月的所以表,“注意只是打开企业管理器,选AAA,选表,选中表,右键删除”至于视图恢复等明天导入数据生成表的时候是自动恢复的。)。如2007-6-1日,数据库中有2007-5-1至2007-5-31的表,AAA分配空间18G,已用15G,可用3G,每个月的数据大小都差不多是15G,2007-9-1日再看数据库是中AAA分配空间48G,已用45G,可用3G。直到现在,对数据库的操作只有手动删表而已。在2009-3-1删除表2008-11月以前的表,也就是数据库中只留2008-12-1至2009-2-28的表,此时AAA分配空间60G,已用55G,可用5G。到此问题出来了:每个月只会有15G的数据生成,已用空间应该是45G合乎要求,那多出来的10G是什么东西?怎样回收这10G的空间。我推算这10G的空间是:虽然删的只剩下3个月的表,但是以前的一些不属于表的东西没有删掉,日积月累,才多出来这10G。有什么方法能回收这10G的空间?我上网上查了不少资料,分离数据库出来在附加上去好像可以,我不确定。不过这个方法对我不适用,我还有另一台机子也是这种情况,并且情况更复杂,数据文件分到了5个盘上都有,而且加起来总共500多G的已用空间。
leeyige:::::::不对呀?我删除表之前和删表之后,已用空间是减小的啊?我删了300张表(一个月的)以后减了14g,而不

关键是你什么时候删除数据,按你说的应该是数据库中已存了5个月后你再删除前两个月的数据,所以多了10G.
这10个G是不能收回的.
因为数据库是建在设备上的,建库时是按你设定的原大小,和增长率自动增长的,数据库设备已划出空间,就算你库中没有内容也是那么大.

这就像一个只有扩大没有缩小的气球,在你向里面放东西时把他挤大了,再拿出来东西时,虽然里面东西减少了,但空间已经挤出来了,回不去了,这时你还可以向里面放东西,占用取出来的东西的位置.如果放不下了,他就又向外挤.
就是这个道理.

数据收缩下也不行???
搬的联机丛书的例子。
不能将整个数据库收缩到比其原始大小还要小。因此,如果数据库创建时的大小为 10 MB,后来增长到 100 MB,则该数据库最小能够收缩到 10 MB(假定已经删除该数据库中所有数据)。
--------------------------------

先对你的库做完全备份,然后你在建个新库,在把完全备份给还原到新库

对先把数据库选项的恢复模式改成简单,再对数据库进行收缩,可以把数据库文件收缩到最小

你试下通过收缩数据库文件的做法看可行不?
use databasename
select File_ID('databasename') 这里找到得是databasename的标示(ID)号
DBCC shrinkfile(标示(ID)号,1024(这个是压缩后的数据库文件大小,依MB为计算单位))