Technical Article

Script To shrinking log file

,

for both 7.0 and 2000. It generates log table and triggers for main table.Its avaliable for all dbs on current server.

USE master
GO
CREATE proc sp_tool_createlog
@help		varchar(1)	= null  , 
@tablename 	varchar(255)	= null	, 
@logtablename 	varchar(255) 	= null	, 
@createlogtable tinyint 	= null	, 
@trigtype 	char(1)		= null	  
as
-- M.AYDIN 9 Aug 2002
set nocount on
   if isnull(@help ,'#') = '?'
   begin	
	exec sp_tool_help 'sp_tool_createlog'
	return		
   end

declare @collist varchar(8000),@collist2 varchar(8000),@icounter smallint,@collistonerow varchar(8000),
	@crscolname char(30),@crsxtype tinyint,@crsisnullable int,@crsxprec tinyint,@crsxscale tinyint,
	@crslength int, @logtableschema varchar(8000),@create_params varchar(32),@coltypeparam varchar(255),
	@lastcolslength int,@crscolnamevarchar varchar(50),@msg varchar(200),
	@tab varchar(10),@enter varchar(10),@space varchar(10)

select  @collist = '',@icounter = 1
select  @logtablename = case when @logtablename is null then rtrim(@tablename) + 'log ' else @logtablename end,
	@collistonerow ='',@logtableschema = ''
select @tab = char(9),@enter = char(13),@space = char(32)
if @trigtype is not null and @trigtype not in ('U','D')
begin
	select @msg = '@trigtype must be ''U'',''D''  or NULL '
	raiserror 60000 @msg 
	return 60000
end


declare crs insensitive cursor for 
	select 
		name,xtype,isnullable,xprec,xscale,length,name
	from 
		syscolumns 
	where 
		id = object_id(@tablename) and  xtype <> 189 order by colid
	for read only
open crs
fetch crs into @crscolname,@crsxtype,@crsisnullable,@crsxprec,@crsxscale,@crslength,@crscolnamevarchar
while @@fetch_status = 0
begin

	select @create_params = CREATE_PARAMS from 
				master..spt_datatype_info where ss_dtype = @crsxtype
	select @coltypeparam  = case 
					when @create_params is null then type_name(@crsxtype)
					when @create_params = 'precision,scale' then type_name(@crsxtype) + '(' + convert(varchar(10),@crsxprec) + ',' + convert(varchar(10),@crsxscale) + ')'
					else type_name(@crsxtype) + '(' + convert(varchar(10),@crslength) + ')' 
				end	
	select @logtableschema = @logtableschema  + @enter + @tab + @crscolname + @tab + @coltypeparam + @tab + case @crsisnullable when 1 then 'NULL' else 'NOT NULL' end + ','
	if datalength(@collistonerow) >= 80
	begin
		select @collistonerow  = ''
		select @collistonerow  = @collistonerow   + case @collistonerow when '' then '' else ',' end +  @crscolnamevarchar
		select @collist  =  @collist   + @enter + @tab + case @collist when '' then '' else ',' end +  @crscolnamevarchar
	end else
	begin
		select @collistonerow  = @collistonerow   + case @collistonerow when '' then '' else ',' end +  @crscolnamevarchar
		select @collist  = @collist   + case @collist when '' then '' else ',' end +  @crscolnamevarchar
	end
	fetch crs into @crscolname,@crsxtype,@crsisnullable,@crsxprec,@crsxscale,@crslength,@crscolnamevarchar
end
close crs
deallocate crs
select @logtableschema = 'CREATE TABLE ' + rtrim(@logtablename) + @enter+ @space + '(' + @logtableschema
select @logtableschema = @logtableschema + @enter + @tab + cast('loguser'   as char(30))  + @tab + 'varchar(15) null, ' + @enter + @tab + 
							   cast('loghostname' as char(30))  + @tab + 'varchar(25) null, ' + @enter + @tab + 
							   cast('logappname'  as char(30))  + @tab + 'varchar(25) null, ' + @enter + @tab + 
							   cast('logtype'  as char(30))  + @tab + 'char(1) null ,'     + @enter + @tab + 
							   cast('logdate'  as char(30))  + @tab + 'datetime null ' + @enter + @space + ')'
select @logtableschema = @logtableschema + @enter + 'GO'
if isnull(@createlogtable,0) = 1 print @logtableschema 
select @icounter = 1
if @trigtype is not null
	print 
		'create trigger tr' + lower(@trigtype)  + '_' + rtrim(@tablename) + ' on dbo.' + rtrim(@tablename) +  @enter  + 
		'for ' + case when @trigtype = 'D' then 'delete ' else 'update' end  + @enter + 'as ' + @enter +
		'insert into ' + rtrim(@logtablename) + 
		@enter + @space + '( ' +  
		@enter + @tab + @collist + ',loguser,loghostname,logappname,logtype,logdate ' + 
		@enter + @space + ')' + 
		@enter + 'select ' + 
		@enter + @tab +  @collist + 
		',suser_sname(),host_name(),app_name(),''' + @trigtype + ''',getdate() ' + 
		@enter + 'from ' + 
		@enter + @tab + 'deleted' 
else
begin
	select @trigtype = 'D'
	print 
		'create trigger tr' + lower(@trigtype)  + '_' + rtrim(@tablename) + ' on dbo.' + rtrim(@tablename) +  @enter  + 
		'for ' + case when @trigtype = 'D' then 'delete ' else 'update' end  + @enter + 'as ' + @enter +
		'insert into ' + rtrim(@logtablename) + 
		@enter + @space + '( ' +  
		@enter + @tab + @collist + ',loguser,loghostname,logappname,logtype,logdate ' + 
		@enter + @space + ')' + 
		@enter + 'select ' + 
		@enter + @tab +  @collist + 
		',suser_sname(),host_name(),app_name(),''' + @trigtype + ''',getdate() ' + 
		@enter + 'from ' + 
		@enter + @tab + 'deleted' 
	select @trigtype = 'U'
	print 'GO'
	print 
		'create trigger tr' + lower(@trigtype)  + '_' + rtrim(@tablename) + ' on dbo.' + rtrim(@tablename) +  @enter  + 
		'for ' + case when @trigtype = 'D' then 'delete ' else 'update' end  + @enter + 'as ' + @enter +
		'insert into ' + rtrim(@logtablename) + 
		@enter + @space + '( ' +  
		@enter + @tab + @collist + ',loguser,loghostname,logappname,logtype,logdate ' + 
		@enter + @space + ')' + 
		@enter + 'select ' + 
		@enter + @tab +  @collist + 
		',suser_sname(),host_name(),app_name(),''' + @trigtype + ''',getdate() ' + 
		@enter + 'from ' + 
		@enter + @tab + 'deleted' 
end
print 'GO'
set nocount off

Rate

You rated this post out of 5. Change rating

Share

Share

Rate

You rated this post out of 5. Change rating