SQL_full_backup hinzugefügt

This commit is contained in:
2026-04-05 11:59:33 +02:00
parent faa7e8fefa
commit 30d1019da1

122
SQL_full_backup Normal file
View File

@@ -0,0 +1,122 @@
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 += '&emsp;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 += '&emsp;<b>Full Backup</b> [' + @name + '_' + @fileDate + '.' + @fileExtention + ']<br>' +
'&emsp;<b>Bereinigung Backupdateien</b> älter ' + CONVERT(VARCHAR(25), @delDate, 120) + '<br>' +
'&emsp;<b>Bereinigung Backup Log</b> älter ' + CONVERT(VARCHAR(25), @backupHistoryDate, 120) + '<br>' +
'&emsp;Pfad: ' + @path + '<br><br>'
SET @errorexists = 0
END TRY
BEGIN CATCH
SET @errorexists = 1
SET @failedbaks += '&emsp;<b>Full Backup</b> [' + @name + '_' + @fileDate + '.' + @fileExtention + ']<br>' +
'&emsp;<b>Bereinigung Backupdateien</b> älter ' + CONVERT(VARCHAR(25), @delDate, 120) + '<br>' +
'&emsp;<b>Bereinigung Backup Log</b> älter ' + CONVERT(VARCHAR(25), @backupHistoryDate, 120) + '<br>' +
'&emsp;Pfad: ' + @path + '<br><br>'
END CATCH
FETCH NEXT FROM db_cursor INTO @name
END
IF (@errorexists = 0)
BEGIN
SET @failedbaks += '&emsp;<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