MS SQL
February 25
Резервное копирование MS SQL баз в сетевой каталог
Для начала нужно сделать пользователя для SQL Server Agent для того чтобы монтировать сетевой диск.
EXEC sp_configure 'show advanced options', 1; RECONFIGURE; EXEC sp_configure 'xp_cmdshell', 1; RECONFIGURE;
EXEC xp_cmdshell 'net use X: \\u443481.your-storagebox.de\u443481-sub1 /user:username password';
BACKUP DATABASE [boykomtest] TO DISK = 'X:\backup\boykomtest.bak' WITH INIT, COMPRESSION, CHECKSUM;
EXEC xp_cmdshell 'net use X: /delete';
Если хочется копировать все пользовательские базы данных то скрипт будет выглядеть вот так:
DECLARE @BackupPath NVARCHAR(255) = '\\u443481.your-storagebox.de\u443481-sub1\backup\'
DECLARE @DatabaseName NVARCHAR(255)
DECLARE @BackupFile NVARCHAR(500)
DECLARE @SQL NVARCHAR(MAX)
-- Курсор для перебора всех пользовательских баз данных
DECLARE db_cursor CURSOR FOR
SELECT name FROM sys.databases
WHERE database_id > 4 -- Исключаем системные базы данных
AND name NOT IN ('CompressionSetting') -- Исключаем определённые базы
OPEN db_cursor
FETCH NEXT FROM db_cursor INTO @DatabaseName
WHILE @@FETCH_STATUS = 0
BEGIN
    -- Формируем имя файла бэкапа с полным путем
    SET @BackupFile = @BackupPath + 'full_' + @DatabaseName + '_'
                      + REPLACE(CONVERT(NVARCHAR, GETDATE(), 120), ':', '-') + '.bak'
    
    -- Формируем SQL-запрос для выполнения бэкапа
    SET @SQL = 'BACKUP DATABASE [' + @DatabaseName + '] TO DISK = ' + QUOTENAME(@BackupFile, '''') + '
                WITH INIT, COMPRESSION, CHECKSUM, FORMAT;'
    
    -- Логируем SQL-запрос для отладки
    PRINT 'Executing: ' + @SQL
    -- Выполняем бэкап
    EXEC sp_executesql @SQL
    -- Переход к следующей базе данных
    FETCH NEXT FROM db_cursor INTO @DatabaseName
END
CLOSE db_cursor
DEALLOCATE db_cursor
or
db_cursor
DEALLOCATE db_cursor