缩小SQL日志

来源:互联网 发布:php 开发方案 编辑:程序博客网 时间:2024/05/01 19:13
<script type="text/javascript"><!--google_ad_client = "pub-2947489232296736";/* 728x15, 创建于 08-4-23MSDN */google_ad_slot = "3624277373";google_ad_width = 728;google_ad_height = 15;//--></script><script type="text/javascript"src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
<script type="text/javascript"><!--google_ad_client = "pub-2947489232296736";/* 160x600, 创建于 08-4-23MSDN */google_ad_slot = "4367022601";google_ad_width = 160;google_ad_height = 600;//--></script><script type="text/javascript"src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>

--缩小SQL日志

--execp_compdb'test'

createprocp_compdb
@dbnamesysname,--要压缩的名
@bkdatabasebit=1,--因为分离日志的步骤中,可能会损坏数据库,所以你可以选择是否自动数据库
@bkfnamenvarchar(260)=''--备份的文件名,如果不指定,自动备份到默认备份目录,备份文件名为:数据库名+日期时间
as
--1.清空日志
exec('DUMPTRANSACTION['+@dbname+']WITH NO_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+'''')
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

<script type="text/javascript"><!--google_ad_client = "pub-2947489232296736";/* 728x15, 创建于 08-4-23MSDN */google_ad_slot = "3624277373";google_ad_width = 728;google_ad_height = 15;//--></script><script type="text/javascript"src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
<script type="text/javascript"><!--google_ad_client = "pub-2947489232296736";/* 160x600, 创建于 08-4-23MSDN */google_ad_slot = "4367022601";google_ad_width = 160;google_ad_height = 600;//--></script><script type="text/javascript"src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>