Бэкап 1С SQL скриптом в CMD без дополнительных сторонних программ
Резервное копирование (Backup, Бэкап)
Итак, у нас есть задача: делать резервную копию (бэкап) 1С с базой в SQL. На выходе получать ежедневно папку с датой и хранить на удалённом бэкап-сервере. Решается достаточно просто, ведь на самом SQL-сервере есть CMD и SQLCMD.
;;указываем папку с датой set today=%date:~-10,2%%date:~-7,2%%date:~-4,4%% ;; создаём каталог для временных файлов, если его нет mkdir D:\backup ;; удаляем старые бэкапы, если они есть DEL /F D:\backup\*.bak ;; бэкапим непосредственно базу. Если их несколько, добавляем строчки SQLCMD -S (local) -U sa -P PASSWORD -Q "BACKUP DATABASE demo TO DISK = 'D:\backup\demo.bak' WITH INIT, NOFORMAT, SKIP, NOUNLOAD" ;; монтируем удалённую шару в cmd net use P: \\bsrv\SQL /user:USER PASSWORD ;; создаём папку с нужной нам датой (сегодня) mkdir P:\%today% ;; копируем все бэкапы в папку с датой COPY /Y D:\backup\*.bak P:\%today%\ ;; отключаем диск, нечего его держать подключенным всё время net use P: /delete
В итоге получаем bak-файл размером с саму базу. Разумеется, никто не запрещает это сжимать, если потребуется, или добавить уведомление на почту типа:
Set checkfile=P:\%today%\demo.bak IF EXIST %checkfile% start D:\backup\send_good_mail.cmd IF NOT EXIST %checkfile% start D:\backup\send_bad_mail.cmd
Восстановление базы SQL 1С из bak-файла
Успешный бэкап - когда его можно ещё и развернуть. Восстановить В ТУ ЖЕ БАЗУ можем так же с помощью SQLCMD:
SQLCMD -S (local) -U sa -P PASSWORD -Q "RESTORE DATABASE demo FROM DISK='D:\backup\demo.bak' WITH REPLACE"
При этом заменятся все данные, если они есть. Однако есть проблемка, если восстанавливать нужно в базу с другим названием. Дело в том, что файлы с данными и логами будут создаваться по названию забэкапленной базы. Если подливаем не в demo, а в demo2, например, то сначала смотрим какие есть пути в бэкапе
SQLCMD -S (local) -U sa -P PASSWORD -Q "RESTORE FILELISTONLY FROM DISK='D:\backup\demo.bak'"
И потом уже заливаем, указывая нужные данные для файлов
SQLCMD -S (local) -U sa -P PASSWORD -Q "RESTORE DATABASE demo2 FROM DISK='D:\backup\demo.bak' WITH REPLACE, FILE=1, MOVE 'demo' TO 'D:\MSSQL\DATA\demo2.mdf', MOVE 'demo_log' TO 'D:\MSSQL\DATA\demo2_log.ldf'"
В данном случае путь, разумеется, указан мой, ориентируйтесь на свои данные.