122 lines
4.8 KiB
Plaintext
122 lines
4.8 KiB
Plaintext
DECLARE @FILEPATH NVARCHAR(255) -- servername
|
|
SET @FILEPATH = '[FILEPATH LIKE: \\SERVERNAME\SHARENAME\FOLDERNAME]'
|
|
|
|
DECLARE @name NVARCHAR(256) -- database name
|
|
DECLARE @bakLocation NVARCHAR(255) -- Backup location
|
|
DECLARE @path NVARCHAR(512) -- path for backup files
|
|
DECLARE @fileName NVARCHAR(512) -- filename for backup
|
|
DECLARE @fileDate NVARCHAR(40) -- used for file name
|
|
DECLARE @backupHistoryDate NVARCHAR(40) -- used for file name
|
|
DECLARE @fileExtention NVARCHAR(10) -- file extension
|
|
|
|
DECLARE @sendSucceeded NVARCHAR(3)
|
|
DECLARE @errorexists bit
|
|
DECLARE @succeededbaks NVARCHAR(MAX)
|
|
DECLARE @failedbaks NVARCHAR(MAX)
|
|
|
|
DECLARE @csubject NVARCHAR(255)
|
|
DECLARE @cbody NVARCHAR(MAX)
|
|
DECLARE @delDate Datetime
|
|
DECLARE @recipients NVARCHAR(50)
|
|
|
|
-- customizable variables
|
|
SET @sendSucceeded = 'no' -- decide to send mail everytime [yes] or only on errors [no]
|
|
SET @fileExtention = 'full.bak' -- [full.bak] or [diff.bak]
|
|
-- specify the backup location path / share until last static folder
|
|
SET @bakLocation = @FILEPATH +'\' + (CASE WHEN SERVERPROPERTY('InstanceName') IS NULL THEN 'MSSQL\' ELSE '\' END)
|
|
SET @recipients = '[RECIPIENTS-MAIL-ADRESSES LIKE: user.example@mail.com]'
|
|
|
|
-- you can change the date difference between today and last created backups (second parameter must be negative)
|
|
SET @delDate = DATEADD(DAY, -15, GETDATE())
|
|
|
|
-- delete backup_history older than XX days
|
|
SET @backupHistoryDate = FORMAT(DATEADD(DAY, -22, GETDATE()), 'yyyy-MM-dd_hh-mm-ss')
|
|
|
|
-- don't touch these variables!
|
|
-- mail html body
|
|
SET @cbody = '<html>
|
|
<head>
|
|
<meta http-equiv=Content-Type content="text/html; charset=windows-1252">
|
|
</head>'
|
|
SET @failedbaks = '<h3 style="color:red;text-decoration:underline">Fehlerhafte Aktionen</h3>'
|
|
SET @succeededbaks = '<h3 style="color:green;text-decoration:underline">Erfolgreiche Aktionen:</h3>'
|
|
SET @errorexists = 1
|
|
|
|
|
|
DECLARE db_cursor CURSOR READ_ONLY FOR
|
|
SELECT name FROM master.sys.databases WHERE name NOT IN ('master','model','msdb','tempdb') -- exclude these databases
|
|
AND state = 0 -- database is online
|
|
AND is_in_standby = 0 -- database is not read only for log shipping
|
|
|
|
OPEN db_cursor
|
|
FETCH NEXT FROM db_cursor INTO @name
|
|
|
|
WHILE @@FETCH_STATUS = 0
|
|
BEGIN
|
|
-- specify filename format
|
|
SET @fileDate = FORMAT(GETDATE(), 'yyyy-MM-dd_hh-mm-ss')
|
|
|
|
-- specify database backup directory @name = databasename as last folder
|
|
SET @path = @bakLocation + @name + '\'
|
|
|
|
BEGIN TRY
|
|
-- create subfolders until path end
|
|
EXECUTE master.dbo.xp_create_subdir @path
|
|
END TRY
|
|
BEGIN CATCH
|
|
SET @errorexists = 1
|
|
SET @failedbaks += ' Pfad [' + @path + '] konnte nicht erstellt werden<br>'
|
|
END CATCH
|
|
|
|
SET @fileName = @path + @name + '_' + @fileDate + '.' + @fileExtention
|
|
BEGIN TRY
|
|
BACKUP DATABASE @name TO DISK = @fileName WITH NOFORMAT, NOINIT, NAME = @name, SKIP, REWIND, NOUNLOAD, COMPRESSION, STATS = 10
|
|
-- changeable backup procedure
|
|
-- EXECUTE master.dbo.xp_delete_file @FileType = 0 [backup=0 or log=1], @FolderPath = @path, @FileExtension = N'bak', @Date = @DeleteDate, @Subfolder = 1
|
|
EXECUTE master.dbo.xp_delete_file 0, @path, @fileExtention, @delDate, 1
|
|
|
|
SET @succeededbaks += ' <b>Full Backup</b> [' + @name + '_' + @fileDate + '.' + @fileExtention + ']<br>' +
|
|
' <b>Bereinigung Backupdateien</b> älter ' + CONVERT(VARCHAR(25), @delDate, 120) + '<br>' +
|
|
' <b>Bereinigung Backup Log</b> älter ' + CONVERT(VARCHAR(25), @backupHistoryDate, 120) + '<br>' +
|
|
' Pfad: ' + @path + '<br><br>'
|
|
SET @errorexists = 0
|
|
END TRY
|
|
BEGIN CATCH
|
|
SET @errorexists = 1
|
|
SET @failedbaks += ' <b>Full Backup</b> [' + @name + '_' + @fileDate + '.' + @fileExtention + ']<br>' +
|
|
' <b>Bereinigung Backupdateien</b> älter ' + CONVERT(VARCHAR(25), @delDate, 120) + '<br>' +
|
|
' <b>Bereinigung Backup Log</b> älter ' + CONVERT(VARCHAR(25), @backupHistoryDate, 120) + '<br>' +
|
|
' Pfad: ' + @path + '<br><br>'
|
|
END CATCH
|
|
|
|
FETCH NEXT FROM db_cursor INTO @name
|
|
END
|
|
|
|
|
|
IF (@errorexists = 0)
|
|
BEGIN
|
|
SET @failedbaks += ' <b>Keine Fehler</b>'
|
|
END
|
|
SET @failedbaks += '<br><br>'
|
|
SET @succeededbaks += '<br><br>'
|
|
SET @cbody = @failedbaks + @succeededbaks +
|
|
'</body>
|
|
</html>'
|
|
|
|
IF (@errorexists = 0)
|
|
BEGIN
|
|
IF (@sendSucceeded = 'yes')
|
|
BEGIN
|
|
SET @csubject = '[Erfolgreich] Volle SQL-Backups auf [' + @@SERVERNAME + (CASE WHEN SERVERPROPERTY('InstanceName') IS NULL THEN '\MSSQL' ELSE '' END) + ']'
|
|
EXECUTE msdb.dbo.sp_send_dbmail @body_format = 'HTML' ,@subject= @csubject ,@body= @cbody, @recipients=@recipients
|
|
END
|
|
END
|
|
ELSE
|
|
BEGIN
|
|
|
|
SET @csubject = '[Fehlerhaft] Volle SQL-Backups auf [' + @@SERVERNAME + (CASE WHEN SERVERPROPERTY('InstanceName') IS NULL THEN '\MSSQL' ELSE '' END) + ']'
|
|
EXECUTE msdb.dbo.sp_send_dbmail @body_format= 'HTML', @subject= @csubject ,@body= @cbody, @recipients=@recipients
|
|
END
|
|
|
|
CLOSE db_cursor
|
|
DEALLOCATE db_cursor |