SQL Server中收缩、清空和删除数据库文件及日志文件

时间:2021-08-19 13:53:52

一、简单方法 
–SQL Server收缩方法 

1、右键数据库→属性→选项→故障还原模型→设为简单→确定; 
2、右键数据库→所有任务→收缩数据库→确定; 
3、右键数据库→属性→选项→故障还原模型→设为大容量日志记录→确定。

二、复杂方法 
–SQL Server日志清空方法 
在查询分析器中顺序执行以下三步,其中 databasename 为你的数据库文件名  
1.清空日志:DUMP TRANSACTION databasename WITH NO_LOG 
2.截断事务日志:BACKUP LOG databasename WITH NO_LOG 
3.收缩数据库:DBCC SHRINKDATABASE(databasename) 

(BACKUP LOG databasename WITH NO_LOG|TRUNCATE_ONLY可以截断事务日志。 
第一步只是将非活动的事务日志截断,并没有收缩数据库,只有进行第二项操作后,数据库才进行事务日志的清理工作,将截断的非活动事务删除,并将事务日志文件收缩到适当尺寸。)

3、收缩数据库文件(如果不压缩,数据库的文件不会减小) 
企业管理器–右键你要压缩的数据库–所有任务–收缩数据库–收缩文件–选择日志文件–在收缩方式里选择收缩至XXM,这里会给出一个允许收缩到的最小M数,直接输入这个数,确定就可以了 
–选择数据文件–在收缩方式里选择收缩至XXM,这里会给出一个允许收缩到的最小M数,直接输入这个数,确定就可以了。 
收缩数据库完成后,建议将您的数据库属性重新设置为标准模式,操作方法同简单方法里第一点,因为日志在一些异常情况下往往是恢复数据库的重要依据

也可以用SQL语句来完成

–收缩数据库 
DBCC SHRINKDATABASE(数据库名) 
–收缩指定数据文件,1是文件号,可以通过这个语句查询到: 
select * from sysfiles DBCC SHRINKFILE(1)

4、为了最大化的缩小日志文件(如果是sql 7.0,这步只能在查询分析器中进行)

在使用 SQL Server 时,数据库里的日志文件会越来越大,需要把它删除。 我先把这个数据库分离,在数据库上点右键 -> 所有任务 -> 分离数据库,分离之后,就可以把 Log 文件删除,同时也可以把数据进行备份。之后,就可以在所有任务里的附加数据库再把那个数据库添进来,SQL Server 会提示 LOG 文件不存在,问你是不是要新建一个,选是就行了,这样,LOG 文件就清空了。 这个方法只需几分钟的时间,但在这几分钟里,就不能访问这个数据库了,我觉得只适用于小型的应用,对于大型的系统就要找其它方法了。) 
a.分离数据库 
企业管理器–服务器–数据库–右键–分离数据库 
b.在我的电脑中删除LOG文件 
c.附加数据库 
企业管理器–服务器–数据库–右键–附加数据库 
此法将生成新的LOG,大小只有500多K

或用代码: 
下面的示例分离 pubs,然后将 pubs 中的一个文件附加到当前服务器。 
a.分离 
EXEC sp_detach_db @dbname = ‘pubs’ 
b.删除日志文件 
c.再附加 
EXEC sp_attach_single_file_db @dbname = ‘pubs’,@physname = ‘c:/Program Files/Microsoft SQL 
Server/MSSQL/Data/pubs.mdf’

5、为了以后能自动收缩,做如下设置 
企业管理器–服务器–右键数据库–属性–选项–选择”自动收缩” 
–SQL语句设置方式: 
EXEC sp_dboption ‘数据库名’, ‘autoshrink’, ‘TRUE’ 
或 
ALTER DATABASE <你的数据库名称> SET AUTO_SHRINK ON 
如: ALTER DATABASE myXXDB SET AUTO_SHRINK ON

6、如果想以后不让它日志增长得太大 
企业管理器–服务器–右键数据库–属性–事务日志 
–将文件增长限制为xM(x是你允许的最大数据文件大小) 
–SQL语句的设置方式: 
alter database 数据库名 modify file(name=逻辑文件名,maxsize=20)

特别注意: 
请按步骤进行,未进行前面的步骤,请不要做后面的步骤,否则可能损坏你的数据库。 
一般不建议做第4、6两步,第4步不安全,有可能损坏数据库或丢失数据,第6步如果日志达到上限,则以后的数据 
库处理会失败,在清理日志后才能恢复。