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