缩小SQLServer数据库日志
时间:2007-12-23 来源:不详 作者:迈克DB
--缩小日志
--execp_compdb’test’
createprocp_compdb
@dbnamesysname,--要压缩的数据库名
@bkdatabasebit=1,--因为分离日志的步骤中,可能会损坏数据库,所以你可以选择是否自动数据库
@bkfnamenvarchar(260)=’’--备份的文件名,假如不指定,自动备份到默认备份目录,备份文件名为:数据库名 日期时间
as
--1.清空日志
exec(’DUMPTRANSACTION[’ @dbname ’]WITHNO_LOG’)
--2.截断事务日志:
exec(’BACKUPLOG[’ @dbname ’]WITHNO_LOG’)
--3.收缩数据库文件(假如不压缩,数据库的文件不会减小
exec(’DBCCSHRINKDATABASE([’ @dbname ’])’)
--4.设置自动收缩
exec(’EXECsp_dboption’’’ @dbname ’’’,’’autoshrink’’,’’TRUE’’’)
--后面的步骤有一定危险,你可以可以选择是否应该这些步骤
--5.分离数据库
if@bkdatabase=1
begin
ifisnull(@bkfname,’’)=’’
set@bkfname=@dbname ’_’ convert(varchar,getdate(),112)
replace(convert(varchar,getdate(),108),’:’,’’)
select提示信息=’备份数据库到SQL默认备份目录,备份文件名:’ @bkfname
exec(’backupdatabase[’ @dbname ’]todisk=’’’ @bkfname ’’’’) 内容来自dedecms
end
--进行分离处理
createtable#t(fnamenvarchar(260),typeint)
exec(’insertinto#tselectfilename,type=status&0x40from[’ @dbname ’]..sysfiles’)
exec(’sp_detach_db’’’ @dbname ’’’’)
--删除日志文件
declare@fnamenvarchar(260),@svarchar(8000)
declaretbcursorlocalforselectfnamefrom#twheretype=64
opentb
fetchnextfromtbinto@fname
while@@fetch_status=0
begin
set@s=’del"’ rtrim(@fname) ’"’
execmaster..xp_cmdshell@s,no_output
fetchnextfromtbinto@fname
end
closetb
deallocatetb
--附加数据库
set@s=’’
declaretbcursorlocalforselectfnamefrom#twheretype=0
opentb
fetchnextfromtbinto@fname
while@@fetch_status=0
begin
set@s=@s ’,’’’ rtrim(@fname) ’’’’
fetchnextfromtbinto@fname
end
closetb
deallocatetb
exec(’sp_attach_single_file_db’’’ @dbname ’’’’ @s)
GO
上一篇:怎样配置SQLServer发送电子邮件 下一篇:SQL 的一些核心语句
文章评论
共有位Admini5网友发表了评论 查看完整内容