存储过程备份SQL日志
2024-07-21 02:07:41
供稿:网友
 
set nocount on 
declare @logicalfilename sysname, 
@maxminutes int, 
@newsize int 
use "abc"-- 要操作的数据库名 
select @logicalfilename = 'abc_log', -- 日志文件名 
@maxminutes = 10, -- limit on time allowed to wrap log. 
@newsize = 500 -- 你想设定的日志文件的大小(m) 
-- setup / initialize 
declare @originalsize int 
select @originalsize = size  
from sysfiles 
where name = @logicalfilename 
select 'original size of ' + db_name() + ' log is ' +  
convert(varchar(30),@originalsize) + ' 8k pages or ' +  
convert(varchar(30),(@originalsize*8/1024)) + 'mb' 
from sysfiles 
where name = @logicalfilename 
create table dummytrans 
(dummycolumn char (8000) not null) 
declare @counter int, 
@starttime datetime, 
@trunclog varchar(255) 
select @starttime = getdate(), 
@trunclog = 'backup log ' + db_name() + ' with truncate_only' 
dbcc shrinkfile (@logicalfilename, @newsize) 
exec (@trunclog) 
-- wrap the log if necessary. 
while @maxminutes > datediff (mi, @starttime, getdate()) -- time has not expired 
and @originalsize = (select size from sysfiles where name = @logicalfilename)  
and (@originalsize * 8 /1024) > @newsize  
begin -- outer loop. 
select @counter = 0 
while ((@counter < @originalsize / 16) and (@counter < 50000)) 
begin -- update 
insert dummytrans values ('fill log')  
delete dummytrans 
select @counter = @counter + 1 
end  
exec (@trunclog)  
end  
select 'final size of ' + db_name() + ' log is ' + 
convert(varchar(30),size) + ' 8k pages or ' +  
convert(varchar(30),(size*8/1024)) + 'mb' 
from sysfiles  
where name = @logicalfilename 
drop table dummytrans 
set nocount off