(SQl Server 7)用Delete from XX表 where .... 删除一部记录后,该表是真删除吗?(50分)

  • 主题发起人 主题发起人 zf501
  • 开始时间 开始时间
Z

zf501

Unregistered / Unconfirmed
GUEST, unregistred user!
(SQl Server 7)用Delete from XX表 where .... 删除一部记录后,该表是真删除吗?
即数库的可用空间会增加吗。它是不是也是作标记或有空洞。
 
我的理解,只是将被删除的记录所占用空清空,删除时空间不会增加,
但以前所占用空间没有被释放,这样就产生了你所说的空洞,但是如果
再增加记录时这部分空间会不会利再被利用,我不知了。
 
这些记录是真被删除,但空间仍被占用,要用压缩数据库的方法去除这些空间!
 
sunjinhua:“但是如果再增加记录时这部分空间会不会利再被利用”。
会被再利用的。
 
谢谢leepin:)
但我知interbase是不会再利用的,不知对不对?
 
To i2346: 如何压缩呢?

To Leepin : i2346说的对吗?

有人确实作过实验吗?
 
interbase当然也会再利用的,否则IB就太破了
 
to Zf501
可以压缩,用 DBCC ShrinkDatabase语句,语法详见帮助。
 
To Leepin: 压缩以后才可再利用是吗。
 
to zf501:
不一定要压缩后才能利用,压缩基本上有两个目的:
1. dbcc shrinkdatabase 带参数TruncateOnly,表示:
将数据库减少最小,把释放的空间还给操作系统;
2. 带参数NoTruncate,表示:
将数据合并成一个区域,同时把空闲空间合并到另一个区域,即页面整理,
但不将它释放给操作系统,供Sql server自己使用
 
有两种压缩数据库的方法:
1、是利用SQL SERVER的企业管理器,展开服务器组,然后展开服务器。展开"数据库"文件夹,右击要收缩的数据库,指向"所有任务",然后单击"收缩数据库"命令。
要指定数据库的收缩量,请从以下选项中选择:在"收缩后文件中的最大可用空间"中输入收缩后数据库中剩余的可用空间量。以"数据库大小,可用空间"值作为依据。
选择"在收缩前将页移到文件起始位置",使释放的文件空间保留在数据库文件中,并使包含数据的页移到数据库文件的起始位置。
单击"调度"命令创建或更改自动收缩数据库的频率和时间。如果要收缩个别的数据库文件,请单击"收缩文件"。
2、手动压缩数据库:当使用 ALTER DATABASE AUTO_SHRINK 选项(或 sp_dboption 系统存储过程)将数据库设置为自动收缩,且数据库中有足够的可用空间时,则会发生收缩。但是,如果不能配置要删除的可用空间的百分比,则将删除尽可能多的可用空间。若要配置将删除的可用空间量,例如只删除数据库中当前可用空间的 50%,请使用SQL Server 企业管理器内的"属性"对话框进行数据库收缩。
但是,使用 DBCC SHRINKFILE 语句,可以将单个数据库文件收缩到比其初始创建大小还要小。必须分别收缩每个文件,而不要试图收缩整个数据库。
下面是示例
下例将 UserDB 用户数据库中名为 DataFil1 的文件收缩到 7 MB。

USE UserDB
GO
DBCC SHRINKFILE (DataFil1, 7)
GO

从SQL SERVER的帮助文件中抄的,如果你用的是中文版就去看看(或者你的E文很好)
我用的是SQL SERVER2000(7.0应该是一样的)
 
我知道如何压缩了。谢谢。
但我还是不知道这样的处理是必须的吗。我当然不想让客户去作这件事了。
另外,不好意思还有个小问题。在SQl Server 6.5 中如何实现像7.0中的SQL语句
"select Top 1 ....."即查出每一条记录。
 
压缩数据库这些事情最好用SQL SERVER的自动管理功能,Agent 、Alert和 Job等。


 
在SQl Server 6.5 中中不支持"select Top 1 ....."
但可以根据条件和排序方式得到MAX或MIN,然后根据该值再执行SQL语句,注意补充条件
 
真删除,但可用空间暂时不能增加,必须压缩后才能增加
 
多人接受答案了。
 
后退
顶部