Копируем SQL базу с рабочего сервера на тестовый BATником

Часто требуется обновить тестовую базу 1С, расположенную на тестовом сервере, из рабочей. А если база большая то это долгий трехэтапный процесс (выгрузить, скопировать, загрузить).
Предлагаем батник автоматизирующий данную рутину:

@echo off
rem *******************************************************************************
rem *******************************************************************************
rem БАТНИК : КОПИРУЕМ SQL БАЗУ С РАБОЧЕГО СЕРВЕРА НА ТЕСТОВЫЙ
rem *******************************************************************************
rem *******************************************************************************
rem Настройки папок. (Уберите пробелы в конце строк установки переменных.)
rem *******************************************************************************

rem Имя бакапа для переноса
set BAK_NAME=am_sample_bak

rem Каталог на этой машине для бакапа
set LOCAL_TEMP_DIR=d:\temp\

rem Сетевой путь к папке другой машины
set REMOTE_TEMP_DIR=\\Test1C\temp2\

rem Локальный путь к папке на другой машине
set LOCAL_TEMP_DIR_AT_REMOTE=E:\temp2\

rem *******************************************************************************
rem Настройки MSSQL 9.0
rem *******************************************************************************

rem Командный процессор MSSQL
set MSSQLCMD=C:\Progra~1\Micros~1\90\Tools\Binn\SQLCMD.EXE

rem Имя базы для бакапа
set BAKDB=am_workbase

rem Имя сервера для бакапа (на нем мы стартуем батник)
set BAKSERVER=1c8

rem Пароль SA сервера для бакапа
set BAKSERVERSAPASS=put_pass_here

rem Логическое имя файла данных
set BAKDATAFILENAME=am_workbase

rem Логическое имя файла лога
set BAKLOGFILENAME=am_workbase_log

rem Имя базы для рестора
set RESTDB=am_testbase

rem Имя сервера для рестора
set RESTSERVER=Test1C

rem Пароль SA сервера для рестора
set RESTSERVERSAPASS=put_pass_here

rem путь к MDF файлу базы рестора
set RESTMDFFILE=E:\sql_data\am_testbase.mdf

rem путь к LDF файлу базы рестора
set RESTLDFFILE=E:\sql_log\am_testbase.ldf

rem *******************************************************************************
rem Настройки завершены, далее сам скрипт.
rem *******************************************************************************

set BAK_FILE=%BAK_NAME%.bak
del %LOCAL_TEMP_DIR%%BAK_FILE% 2>nul
del temp_backup.sql 2>nul
echo BACKUP DATABASE %BAKDB% TO DISK='%LOCAL_TEMP_DIR%%BAK_FILE%' >> temp_backup.sql
echo WITH NOFORMAT,NOINIT,NAME='%BAK_NAME%',SKIP,REWIND,NOUNLOAD,STATS=10 >> temp_backup.sql

type temp_backup.sql

@echo on
%MSSQLCMD% -S %BAKSERVER% -U sa -P %BAKSERVERSAPASS% -i temp_backup.sql
@echo off

del %REMOTE_TEMP_DIR%%BAK_FILE% 2>nul

@echo on
move %LOCAL_TEMP_DIR%%BAK_FILE% %REMOTE_TEMP_DIR%%BAK_FILE%
@echo off

del temp_restore.sql 2>nul
echo RESTORE DATABASE %RESTDB% >> temp_restore.sql
echo FROM DISK = '%LOCAL_TEMP_DIR_AT_REMOTE%%BAK_FILE%' >> temp_restore.sql
echo WITH REPLACE, MOVE '%BAKDATAFILENAME%' TO '%RESTMDFFILE%', >> temp_restore.sql
echo MOVE '%BAKLOGFILENAME%' TO '%RESTLDFFILE%' >> temp_restore.sql

type temp_restore.sql
@echo on
%MSSQLCMD% -S %RESTSERVER% -U sa -P %RESTSERVERSAPASS% -i temp_restore.sql
@echo off

del temp_backup.sql 2>nul
del temp_restore.sql 2>nul
del %LOCAL_TEMP_DIR%%BAK_FILE% 2>nul
del %REMOTE_TEMP_DIR%%BAK_FILE% 2>nul

pause Done!

Похожие материалы

Справочники

Документы

Отчеты

Обработки