Sources:
https://www.mssqltips.com/sqlservertip/1070/simple-script-to-backup-all-sql-server-databases
Procedure for deleting old backup files
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE OR ALTER PROCEDURE [dbo].[usp_DeleteOldBackupFiles]
@path NVARCHAR(256) = '/var/opt/mssql/backup/daily/', --path of backups
@extension NVARCHAR(10) = 'bak', -- extension of backup files
@age_hrs INT = 10 --older than (hours).
--Use negative value for deleting everything
AS
BEGIN
SET NOCOUNT ON;
DECLARE @DeleteDate NVARCHAR(50)
DECLARE @DeleteDateTime DATETIME
SET @DeleteDateTime = DateAdd(hh, - @age_hrs, GetDate())
SET @DeleteDate = (Select Replace(Convert(nvarchar, @DeleteDateTime, 111), '/', '-') + 'T' + Convert(nvarchar, @DeleteDateTime, 108))
EXECUTE master.dbo.xp_delete_file 0,
@path,
@extension,
@DeleteDate,
1
END
GO
Procedure for backup
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE OR ALTER PROCEDURE [dbo].[usp_BackupAllUserDatabases]
@path NVARCHAR(256) = '/var/opt/mssql/backup/daily/', --path of backups
@extension NVARCHAR(10) = 'bak', -- extension of backup files
@custom_string NVARCHAR(10) = '' -- extension of backup files
AS
BEGIN
SET NOCOUNT ON;
DECLARE @name NVARCHAR(256) -- database name
DECLARE @fileName NVARCHAR(512) -- filename for backup
DECLARE @fileDate NVARCHAR(40) -- used for file name
-- specify filename format
SELECT @fileDate = CONVERT(NVARCHAR(20),GETDATE(),112)
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
SET @fileName = @path + @name + '_' + @custom_string + @fileDate + '.' +@extension
BACKUP DATABASE @name TO DISK = @fileName
WITH COMPRESSION
FETCH NEXT FROM db_cursor INTO @name
END
CLOSE db_cursor
DEALLOCATE db_cursor
END
GO
Using procedures
# Daily backup - set the job in SQL server Management studio DECLARE @path NVARCHAR(256) = '/var/opt/mssql/backup/daily/' DECLARE @custom_string NVARCHAR(50) = 'daily_' DECLARE @extension NVARCHAR(10) = 'bak' DECLARE @age_hrs INT = 30 * 24 --delete files older than 30 days EXECUTE master.dbo.usp_DeleteOldBackupFiles @path,@extension,@age_hrs EXECUTE master.dbo.usp_BackupAllUserDatabases @path, @extension, @custom_string # Monthly backup - set the job in SQL server Management studio DECLARE @path NVARCHAR(256) = '/var/opt/mssql/backup/monthly/' DECLARE @custom_string NVARCHAR(50) = 'monthly_' DECLARE @extension NVARCHAR(10) = 'bak' DECLARE @age_hrs INT = 12 * 30 * 24 --delete files older than 12 month EXECUTE master.dbo.usp_DeleteOldBackupFiles @path,@extension,@age_hrs EXECUTE master.dbo.usp_BackupAllUserDatabases @path, @extension, @custom_string
Copy files from docker to host system
# Copy files from docker to host system sudo docker cp sql1:/var/opt/mssql/backup/ /home/media/Ostatni/mssql/ #Configure crontab manualy or Use Webmin or Zeit #run every day at 06:15 #15 6 * * * docker cp sql1:/var/opt/mssql/backup/ /home/webserver/mssql/ #20 6 * * * chmod -R 777 /home/webserver/mssql/




