Quantcast
Channel: Answers for "Please provide a script which will delete old back"
Viewing all articles
Browse latest Browse all 14

Answer by Cyborg

$
0
0
I have a solution using XP__CMDSHELL_, I know enabling XP_CMDSHELL is a security risk.... Sorry!.

-- Use this script inside your Job

DECLARE @SQL VARCHAR(800),
		@ID INT,
		@MaxID INT,
		@BackupPath  VARCHAR(500)

declare @temp TABLE
(ID INT IDENTITY,
 backupPath VARCHAR(500)
 )

INSERT INTO @temp
SELECT 'DEL '+physical_device_name
FROM msdb.dbo.backupmediafamily mf
INNER JOIN msdb.dbo.backupset bs
ON bs.media_set_id = mf.media_set_id
WHERE DATEDIFF(dd,backup_finish_date,GETDATE()) = 1
AND type = 'D' -- Database backup


SELECT @id = 1, @maxID = MAX(ID)
FROM @temp

WHILE @id <= @maxID
BEGIN
		SELECT @BackupPath = (SELECT backupPath FROM @temp WHERE ID = @id)
		EXEC XP_CMDSHELL  @BackupPath

SET @Id = @id + 1
END
It can be done better using powershell script. Another option is

 - Create a text file on any location.
 - Create a SQL Server Job as follows
   You need to create two Job steps both should be of type Operating System(CmdExec)
   Step1: use the following command
   SQLCMD -C -S ServerName -q "SELECT 'DEL '+physical_device_name FROM msdb.dbo.backupmediafamily mf INNER JOIN msdb.dbo.backupset bs ON bs.media_set_id = mf.media_set_id WHERE DATEDIFF(dd,backup_finish_date,GETDATE()) = 1  AND type = 'D'"
 -o the-location-of-the-text-file-you-created-earlier
  Step2: Click open and choose the file you created earlier
- Schedule it to run every day.

Viewing all articles
Browse latest Browse all 14

Trending Articles