欢迎光临
我们一直在努力

缩小SQL日志-数据库专栏,SQL Server

建站超值云服务器,限时71元/月

–缩小sql日志

— exec p_compdb test

create proc p_compdb
@dbname sysname, –要压缩的数据库名
@bkdatabase bit=1, –因为分离日志的步骤中,可能会损坏数据库,所以你可以选择是否自动数据库
@bkfname nvarchar(260)= –备份的文件名,如果不指定,自动备份到默认备份目录,备份文件名为:数据库名+日期时间
as
–1.清空日志
exec(dump transaction [+@dbname+] with  no_log)

–2.截断事务日志:
exec(backup log [+@dbname+] with no_log)

–3.收缩数据库文件(如果不压缩,数据库的文件不会减小
exec(dbcc shrinkdatabase([+@dbname+]))

–4.设置自动收缩
exec(exec sp_dboption +@dbname+,autoshrink,true)

–后面的步骤有一定危险,你可以可以选择是否应该这些步骤
–5.分离数据库
if @bkdatabase=1
begin
if isnull(@bkfname,)=
set @bkfname=@dbname+_+convert(varchar,getdate(),112)
+replace(convert(varchar,getdate(),108),:,)
select 提示信息=备份数据库到sql 默认备份目录,备份文件名:+@bkfname
exec(backup database [+@dbname+] to disk=+@bkfname+)
end

–进行分离处理
create table #t(fname nvarchar(260),type int)
exec(insert into #t select filename,type=status&0x40 from [+@dbname+]..sysfiles)
exec(sp_detach_db +@dbname+)

–删除日志文件
declare @fname nvarchar(260),@s varchar(8000)
declare tb cursor local for select fname from #t where type=64
open tb
fetch next from tb into @fname
while @@fetch_status=0
begin
set @s=del “+rtrim(@fname)+”
exec master..xp_cmdshell @s,no_output
fetch next from tb into @fname
end
close tb
deallocate tb

–附加数据库
set @s=
declare tb cursor local for select fname from #t where type=0
open tb
fetch next from tb into @fname
while @@fetch_status=0
begin
set @s=@s+,+rtrim(@fname)+
fetch next from tb into @fname
end
close tb
deallocate tb
exec(sp_attach_single_file_db +@dbname++@s)

go

赞(0)
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com 特别注意:本站所有转载文章言论不代表本站观点! 本站所提供的图片等素材,版权归原作者所有,如需使用,请与原作者联系。未经允许不得转载:IDC资讯中心 » 缩小SQL日志-数据库专栏,SQL Server
分享到: 更多 (0)