Friday, 3 September 2010

Truncate tables monthly after backup

Objective: Truncate tables monthly after backup

DECLARE @yearmonth char(6)
DECLARE @DBNAME VARCHAR(11)
DECLARE @SQL VARCHAR(8000)
DECLARE @path VARCHAR(256) -- path for backup files
DECLARE @fileName VARCHAR(256) -- filename for backup
DECLARE @fileDate VARCHAR(20) -- used for file name
DECLARE @ReturnCode INT
SELECT @ReturnCode = 0

SET @yearmonth=CAST(CONVERT(VARCHAR(4),GETDATE(),112)+ right('00' + convert(varchar,(month(getdate())-2)),2) AS INT)
SET @DBNAME='dbanameprefix'+ @yearmonth
SET @path = '\\ipaddress\Backup\servername\BACKUPBEFORETRUNCATE\'

SET @fileDate = CONVERT(VARCHAR(20),GETDATE(),112)
SET @FILENAME = @path + @DBNAME + '_' + @fileDate + '.BAK'

PRINT @FILENAME


SET @SQL=
'
USE [master]
GO
BACKUP DATABASE ' + @DBNAME + ' TO DISK='''+@FILENAME+''';
exec master.dbo.xp_cmdshell ''c:\tools\gzip -r '+cast(@PATH as varchar(256))+'*.BAK'';
TRUNCATE TABLE ' + @DBNAME + '.DBO.ARTA_CALLRECORDS;
TRUNCATE TABLE ' + @DBNAME + '.DBO.ARTA_CALLRECORDS_DETAIL;
TRUNCATE TABLE ' + @DBNAME + '.DBO.GR_MTG_CALLRECORDS;
TRUNCATE TABLE ' + @DBNAME + '.DBO.MTG_CALLRECORDS;
USE ' + @DBNAME + '
GO
DBCC SHRINKDATABASE(N'''+ cast(@DBNAME as varchar) + ''' )
'
PRINT @SQL
SET @yearmonth=CAST(CONVERT(VARCHAR(4),GETDATE(),112)+ right('00' + convert(varchar,(month(getdate())-1)),2) AS INT)
SET @DBNAME='dbanameprefix'+ @yearmonth
SET @FILENAME = @path + @DBNAME + '_' + @fileDate + '.BAK'
SET @SQL=
'
USE [master]
GO
BACKUP DATABASE ' + @DBNAME + ' TO DISK='''+@FILENAME+''';
exec master.dbo.xp_cmdshell ''c:\tools\gzip -r '+cast(@PATH as varchar(256))+'*.BAK'';
TRUNCATE TABLE ' + @DBNAME + '.DBO.ARTA_CALLRECORDS_DETAIL;
USE ' + @DBNAME + '
GO
DBCC SHRINKDATABASE(N'''+ cast(@DBNAME as varchar) + ''' )
'
PRINT @SQL
SET @yearmonth=CAST(CONVERT(VARCHAR(4),GETDATE(),112)+ right('00' + convert(varchar,(month(getdate())-4)),2) AS INT)
SET @DBNAME='dbanameprefix'+ @yearmonth
SET @SQL=
'
USE [master]
GO
ALTER DATABASE ' + @DBNAME + ' SET READ_ONLY WITH NO_WAIT
GO
ALTER DATABASE ' + @DBNAME + ' SET READ_ONLY
'
PRINT @SQL











No comments:

Post a Comment