Поиск по этому блогу

вторник, 12 марта 2013 г.

MS SQL. Скрипт для создания backup'ов по сети (на удаленный ресурс)

Скрипт создает backup'ы баз данных сервера MS SQL. Базы перечислены в файле db_list.txt.
Копии сразу делаются по сети


rem В этот файл будем собирать скрипт для каждой базы данных
set script_name=C:\BACUP\CMD\ms_backup.sql
rem удаляем предыдущий файл
IF EXIST "%script_name%" (del "%script_name%")
rem монтируем диск
net use Z: \\10.0.0.10\1c-ispb /user:пользователь "пароль"
echo USE master ; >> %script_name%
rem -- подключаем сетевой диск
echo EXEC xp_cmdshell 'net use Z: \\10.0.0.10\1c-ispb  /user:пользователь "пароль"' ; >>  
%script_name%

таким образом можно подключить сетевой диск в MS SQL, по умолчанию возможность выполнять команды ОС отключена. Для включения надо выполнить следующий скрипт:

-- To allow advanced options to be changed.
EXEC sp_configure 'show advanced options', 1
GO
-- To update the currently configured value for advanced options.
RECONFIGURE
GO
-- To enable the feature.
EXEC sp_configure 'xp_cmdshell', 1
GO
-- To update the currently configured value for this feature.
RECONFIGURE
GO


rem ЦИКЛ БЕРЕМ ИМЕНА БАЗ ИЗ ФАЙЛА
for /F "eol= tokens=1 delims=," %%i in (C:\BACUP\CMD\db_list.txt) do (
rem генерируем имя файла
set FileName=%date:~0,2%_%date:~3,2%_%date:~6,4%
rem пишем в файл команду для монтирования устройства
echo EXEC sp_addumpdevice 'disk', 'Z1', '\\10.0.0.10\1c-ispb\%%i_%FileName%.bak' ; >>  %script_name%
rem пишем команду BACKUP 
echo BACKUP DATABASE [%%i] TO  [Z1] WITH NOFORMAT, NOINIT, NAME = N'backup', SKIP, NOREWIND, NOUNLOAD,STATS = 10 ; >>  %script_name%
rem удаляем устройство
echo EXEC sp_dropdevice 'Z1'; >>  %script_name%
)  rem КОНЕЦ ЦИКЛА
rem выполняем скрипт, используя команду Sqlcmd с ключами:

Sqlcmd
[-U идентификатор_входа]   
[-P пароль]
[-d использовать_имя_БД]   
[-c конец_команды]   
[-i входной_файл] 


Sqlcmd -U пользователь -P пароль -i  %script_name%
rem unmount
rem net use Z: /delete /yes



-- проверка резервной копии
--RESTORE VERIFYONLY FROM DISK= '<Backup_location>' WITH CHECKSUM