Резервные копии SQL с помощью планировщика виндовс и скрипта

12.03.20

База данных - Архивирование (backup)

Всем привет! Сильно не судите, в основном я создаю эту статью для себя, чтобы не забыть об этом, сразу скажу, что я не программист, но по долгу работы приходится решать вопросы. В данной статье я покажу код батника, с помощью которого я делаю резервное копирование баз данных 1С посредством SQL.

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование По подписке [?] Купить один файл
Резервные копии SQL с помощью планировщика виндовс и скрипта:
.bat 0,91Kb
2
2 Скачать (1 SM) Купить за 1 850 руб.

Для начала лучше иметь несколько дисков, в одном из которых нужно назначить права доступа только для одного пользователя с хорошим паролем (защита от шифровальщиков). Далее необходимо иметь дополнительный компьютер для БЭКАП, который находится в той же локальной сети, но без доступа к интернету, можно даже на Linux куда тоже будет скидываться БЭКАП, у меня в данной статье пока нет дополнительного компа, поэтому копии архивов я переношу на внешнее устройство, но скоро будет и я внесу изменения в эту статью. 

Вот текст самого батника:

 

@echo off

if exist D:\BACKUP\ZUP\ZUP_1mon.bak del D:\arhiv\ZUP\ZUP_1mon.bak
if exist D:\BACKUP\TORG\TORG_1mon.bak del D:\arhiv\TORG\TORG_1mon.bak
if exist D:\BACKUP\BUH\BUH_1mon.bak del D:\arhiv\BUH\BUH_1mon.bak

SQLCMD -S ИМЯВАШЕГОКОМПЬЮТЕРА\СЕРВЕРСКЛ -E -Q "BACKUP DATABASE [ZUP] TO DISK = 'D:\arhiv\ZUP\ZUP_1mon.bak' WITH INIT, NOFORMAT, SKIP, NOUNLOAD"
SQLCMD -S ИМЯВАШЕГОКОМПЬЮТЕРА\СЕРВЕРСКЛ -E -Q "BACKUP DATABASE [TORG] TO DISK = 'D:\arhiv\TORG\TORG_1mon.bak' WITH INIT, NOFORMAT, SKIP, NOUNLOAD"
SQLCMD -S ИМЯВАШЕГОКОМПЬЮТЕРА\СЕРВЕРСКЛ -E -Q "BACKUP DATABASE [BUH] TO DISK = 'D:\arhiv\BUH\BUH_1mon.bak' WITH INIT, NOFORMAT, SKIP, NOUNLOAD"

"C:\Program Files\WinRAR\Rar.exe" a -ep -m1 D:\BACKUP\ZUP\ZUP_1mon.vidi D:\arhiv\ZUP\ZUP_1mon.bak
"C:\Program Files\WinRAR\Rar.exe" a -ep -m1 D:\BACKUP\TORG\TORG_1mon.vidi D:\arhiv\TORG\TORG_1mon.bak
"C:\Program Files\WinRAR\Rar.exe" a -ep -m1 D:\BACKUP\BUH\BUH_1mon.vidi D:\arhiv\BUH\BUH3_1mon.bak

if exist D:\arhiv\ZUP\ZUP_1mon.bak del D:\arhiv\ZUP\ZUP_1mon.bak
if exist D:\arhiv\TORG\TORG_1mon.bak del D:\arhiv\TORG\TORG_1mon.bak
if exist D:\arhiv\BUH\BUH3_1mon.bak del D:\arhiv\BUH\BUH3_1mon.bak
 

exit

Имя этого батника bac_1mon.bat, т.е. это батник первого дня недели понедельника, разумеется у меня их 5 на каждый день.

Как видно из кода, у меня 3 базы, ZUP, TORG, BUH, зарплата и управление, управление торговлей, бухгалтерия предприятия, соответственно.

if exist D:\BACKUP\ZUP\ZUP_1mon.bak del D:\arhiv\ZUP\ZUP_1mon.bak
if exist D:\BACKUP\TORG\TORG_1mon.bak del D:\arhiv\TORG\TORG_1mon.bak
if exist D:\BACKUP\BUH\BUH_1mon.bak del D:\arhiv\BUH\BUH_1mon.bak

данная часть кода выполняет проверку на наличие имеющегося бэкапа в папке на диске Д такого ZUP_1mon.bak файла, в случае если он будет (а он будет через неделю, то он будет удаляться.

SQLCMD -S ИМЯВАШЕГОКОМПЬЮТЕРА\СЕРВЕРСКЛ -E -Q "BACKUP DATABASE [ZUP] TO DISK = 'D:\arhiv\ZUP\ZUP_1mon.bak' WITH INIT, NOFORMAT, SKIP, NOUNLOAD"

Эта часть кода уже непосредственно обращение к SQL вместо ИМЯВАШЕГОКОМПЬЮТЕРА\СЕРВЕРСКЛ - вам нужно написать име того компьютера на котором установлен сервер SQL например SERVER и через слеш имя Вашего SQL соединения по умолчанию SQLEXPRESS, таким образом код примет следующий вид:

SQLCMD -S SERVER\SQLEXPRESS -E -Q "BACKUP DATABASE [ZUP] TO DISK = 'D:\arhiv\ZUP\ZUP_1mon.bak' WITH INIT, NOFORMAT, SKIP, NOUNLOAD"

В квадратных скобках имя Вашей базы, а это 'D:\arhiv\ZUP\ZUP_1mon.bak' путь куда делать резервную копию

"C:\Program Files\WinRAR\Rar.exe" a -ep -m1 D:\BACKUP\ZUP\ZUP_1mon.vidi D:\arhiv\ZUP\ZUP_1mon.bak
"C:\Program Files\WinRAR\Rar.exe" a -ep -m1 D:\BACKUP\TORG\TORG_1mon.vidi D:\arhiv\TORG\TORG_1mon.bak
"C:\Program Files\WinRAR\Rar.exe" a -ep -m1 D:\BACKUP\BUH\BUH_1mon.vidi D:\arhiv\BUH\BUH3_1mon.bak

Эта часть кода отвечает за архивацию баз данных и архивирует базу в другую папку, как я уже говорил, лучше на другой диск, но у меня тот же. 

C:\Program Files\WinRAR\Rar.exe - это обращение к программе архиватора, если у Вас другая программа, то соответственно и путь будет другой, D:\BACKUP\BUH\BUH_1mon.vidi - это куда и как нужно сохранить архив, кстати я изменил расширение с zip на vidi, можете на любое другое, но большинство шифровальщиков работает по принципу шифрования всех наиболее знакомых форматов (zip, doc, xlm, jpg и др.) может это и не спасет, но я все же сделал так. D:\arhiv\BUH\BUH3_1mon.bak - это путь туда, откуда нужно взять файл и заархивировать его. 

if exist D:\arhiv\ZUP\ZUP_1mon.bak del D:\arhiv\ZUP\ZUP_1mon.bak
if exist D:\arhiv\TORG\TORG_1mon.bak del D:\arhiv\TORG\TORG_1mon.bak
if exist D:\arhiv\BUH\BUH3_1mon.bak del D:\arhiv\BUH\BUH3_1mon.bak

Это уже упомянутая выше часть кода, которая проверяет папку куда SQL делал бэкап и удаляет эти бэкапы, потому-что точно такие же бэкапы у нас заархивированы в другой папке, к чему тогда тратить место на диске.

Как настрою вторую машину в локалке, допишу код, как c помощью команды XCOPY сделать копию на другой компьютер в локальной сети.

ДОБАВЛЕННОЕ К СТАТЬЕ!

И снова здравствуйте, сделал наконец то вторую машину, теперь самое время настроить копирование на нее бэкапов SQL с сервера.

Первым делом на сервере SQL создаем пользователя с сложным паролем, чтобы не одна собака не могла отгадать, причем я сделал его еще и сменяемым, т.е. через определенный промежуток времени у меня это 2 месяца, винда просит сменить пароль создаем новый. У меня пользователь так и называется BACKUP, далее расшариваем тот диск и ту папку в которой у Вас хранятся резервные копии. Причем полные права делаем только для службы SQL и того самого пользователя со сложным паролем (BACKUP), для этого правой кнопкой жмем на тот диск где хранятся бэкапы и нажимаем ПКМ на этот диск, далее вкладка Доступ - Расширенная настройка, ставим галочку открыть общий доступ к этой папке и во вкалдке Разрешения, удаляем всех и добавляем нашего (BACKUP), жмем ок, папка расшарена, тоже делаем и с папкой допустим Arhiv, которая находится внутри этого диска. Далее проходим во вкладку Безопасность и добавляем туда нашего (BACKUP), а также службу SQL, остальных удалите или порежьте права, уберите возможность изменения. Все на сервере все сделано, переходим на второй комп, куда будут копироваться БЭКАПЫ.

Подключаем ту папку которую мы расшарили, для этого правой кнопкой мыши (ПКМ), кликаем на Мой компьютер - нажимаем на Подключить сетевой диск, далее два слэша \\имя Вашего сервера\имя той папки в которой хранятся архивы SQL, ставим галочку "Использовать другие учетные данные" нажимаем подключить и вводим имя (BACKUP или какой там у Вас), а пароль, тот самый, который очень сложный, у Вас появиться диск и Ваши папки которые на сервере, далее подгоняете под себя батник который прикреплен к статье  и настраиваете планировщик, только время создания копий, должно быть позднее чем то которое у Вас на сервере, а то будете копировать старый бэкап. Иногда вместо имени компьютера, нужно прописать IP адрес этого компьютера (сервера).

Планировщик, открываем:

Создаем папку 1С например

Далее ПКМ на эту папку и создаем задачу:

В открывшемся окне пишем название например "Копия бэкап понедельник" и так на все пять дней, вторник, среда ...

Снизу выбираете свою винду, далее создаете триггер, там указываете еженедельно, указываете время например на сервере у Вас создается копия в 22:00, то здесь в 24 или 02:00., как все заполнили нажимаете создать.

Далее в действие выбираете свои батники, которых у Вас пять (как у меня если конечно) понедельник, вторник и т.д. и на каждый день выбираете свой батник, если сейчас мы создаем пятницу например, то и батник  пятничный.

Условия и параметры можете как у меня на скринах

Вот и все. Цепочка выглядит так, На сервере батники которые указаны первоначально в этой статье создают в одну папку бэкап SQL, затем с этой папки архивируют их в другую папку тоже на сервере, но с другим расширение, чтобы предотвратить шифрование троянам (как было у меня((((().

Эти же батники, копирую тот бэкап который создает SQL с сервера на другой компьютер, затем также архивирует их под другим расширением. Разумеется все батники удаляют старые бэкапы.

Не судите. Всем хорошего настроения. 

батник скрипт бэкап

См. также

Архивирование (backup) Инструменты администратора БД Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Платные (руб)

Данная разработка позволит решить вопрос с резервным копированием Ваших баз в автоматическом режиме, расположенных на сервере 1С. Система умеет ставить блокировки на вход, блокировать фоновые задания, принудительно отключать сеансы пользователей. И все это система делает в автоматически при создании бэкапа (или через команду). Выгрузка происходит в родной формат 1С - .dt. Так же система умеет архивировать данные выгрузки с установкой пароля. Умеет менять расширение файла zip или dt на любое указанное вами, что позволит сохранить выгрузки от шифровальщика. Может удалять старые копии выгрузок, оставляя указанное количество резервных копий, начиная с самой поздней. Только для WINDOWS!

6000 руб.

06.11.2012    72788    625    45    

84

Архивирование (backup) Системный администратор Платформа 1С v8.3 Конфигурации 1cv8 Платные (руб)

Программа позволяет выполнять автоматическое создание копий файловых и серверных информационных баз 1С Предприятие 8 и размещение копий в облаке Яндекс.Диск, локальном или сетевом ресурсе.

1200 руб.

03.09.2014    15705    21    6    

27

Архивирование (backup) Администрирование СУБД Системный администратор Россия Бесплатно (free)

Постараюсь объяснить, зачем нужно резервное копирование именно журнала транзакций, а не только базы данных, и почему я словно сбросил груз, настроив его - как, покажу, естественно. Кстати, будут скрипты T-SQL (с подробными комментариями) - отличный способ сделать администрирование базы более уютным.

04.12.2023    9426    n_mezentsev    15    

27

Архивирование (backup) Системный администратор Программист Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

В данной инструкции будет описано, как с помощью pgAdmin, bat-файлов и планировщика заданий Windows организовать резервное копирование, восстановление и хранение копий баз данных.

07.10.2022    28597    sapervodichka    37    

147

Архивирование (backup) Системный администратор Платформа 1С v8.3 Конфигурации 1cv8 Россия Абонемент ($m)

Захотелось клиентам выгрузку архива баз, и выгрузку в дт, готовые скрипты с сети не заработали. Может, кому-то поможет. Релиз 8.3.18.1741.

1 стартмани

25.08.2022    5732    3    Gnom-Gluck    6    

7

Архивирование (backup) Системный администратор Программист Платформа 1С v8.3 Абонемент ($m)

Небольшая утилита для копирования файловых баз данных 1С.

1 стартмани

02.06.2022    4689    3    Giblarium    12    

5
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. Zebar 69 16.03.20 08:22 Сейчас в теме
В SQL есть свой агент, зачем делать средствами операционной системы и писать батник?
Не хочу заниматься саморекламой, но как раз именно о таком я рассказывал ранее:
https://infostart.ru/public/554112/
2. VID1234 146 16.03.20 08:30 Сейчас в теме
8. segatron 26.07.20 18:43 Сейчас в теме
(1), Агент SQL Server создает только бэкап sql-базы. А если вам надо положить в бэкап что то еще или/и залочить бэкап, т.е. выполнить дополнительные действия?

У меня например для 1С8 выполняется bat-файл, который
1. Создает временную папочку с именем базы и датой (например Accounting05_backup_2020_07_15_223800)
2. В эту папку сохраняет архив базы, а так же лог операции архивирования (мало ли чего с базой может быть, или с сервером ...)
3. Папочка с этими файлами архивируется с паролем с помощью 7-zip.
4. Папочка удаляется.

А для 1С 7.7 в эту папочку помимо sql-бэкапа (это ведь только данные) еще копируется весь каталог с базой (конфигурация, словарь, обработки, ...)
3. user613549_scratch_sv 17.03.20 12:00 Сейчас в теме
И зачем 5 батников? По дням недели?
Сделайте один, и пускайте ему цифру параметром. Или вообще, брать цифирку из даты (например %date:~1,1%)
segatron; +1 Ответить
4. VID1234 146 17.03.20 12:03 Сейчас в теме
(3) Логично, спасибо попробую.
9. segatron 26.07.20 18:49 Сейчас в теме
(4) Обязательно попробуйте
Прикрепленные файлы:
5. maxf 18.03.20 18:16 Сейчас в теме
Напишите уже кто-нибудь статью как средствами SQL бэкапить на другой компьютер. Сходу не решается - прав каких-то не хватает. Извращался по-всякому, запускал SQL агента от разных юзеров - не помогает. Только если доступ на бэкапник открыть всем - тогда работает, но это не вариант.
Либо, что еще лучше, посоветуйте скрипты/программы по синхронизации локального каталога с бэкапами на SQL сервере и сетевого, с удалением старых копий.
6. VID1234 146 19.03.20 10:31 Сейчас в теме
(5) Здравствуйте. Работаю над этим, как только сделаю, сразу напишу.
7. VID1234 146 08.05.20 09:02 Сейчас в теме
(5) Здравствуйте. Сделал, можете почитать, не знаю устроит Вас такой вариант или нет.
10. segatron 26.07.20 19:06 Сейчас в теме
(5)
Не стоит бэкапить средствами SQL напрямую на другой компьютер.
Кладите бэкапы в локальную папку (на том сервере где SQL), а затем копируйте/переносите из нее туда куда надобно.

Например вы можете раз в сутки запускать bat-файл с командой
robocopy <источник> <назначение> параметры

Почему robocopy?
Это встроенная команда ОС и нет необходимости что то ставит дополнительно.

Почему robocopy, а не move?
Потому что robocopy функциональнее. Она может копировать файлы по маске, правам, дате, старше/младше n-дней, делать r попыток, копировать папки рекурсивно, создавать папки в приемнике и т.п. И конечно же удалять файлы после завершения копирования (см ключ /MOV).

Создайте bat-файл в котором будут "создание sql-бэкапов всех необходимых баз" и "вызов(ы) robocopy после".
Создайте задание в планировщике и укадите учетную запись, под которой он будет запускаться.

Полезный совет:
Если вы на разных серверах создадите пользователя с одинаковым именем и паролем, то для копирования бэкапов с одного сервера на другой не будет препятствий (запускайте bat-файл от имени этого пользователя). Главное чтобы у такого пользователя был доступ и к папке-источнику, и к папке-приемнику.
bocharovki; +1 Ответить
11. user1499836 27.11.20 13:43 Сейчас в теме
Добрый День!
есть батник
F:
cd "F:\Backup zup"
md "%DATE%"
cd "%DATE%"
xcopy "D:\Base zup\Zup" /i /y /s

каждый день в 1 ночи делает ежедневную копию
как сделать чтобы он удалял старые которые более 3 месяцев

сильно не ругайте))
12. Online-Plus 02.02.21 22:40 Сейчас в теме
(8) Здравствуйте, здравое решение. Подробности будут ? (сам bat файл)
13. segatron 16.02.21 10:00 Сейчас в теме
(12) Подробности в файле
Прикрепленные файлы:
dbbackup1.bat_
14. Online-Plus 17.02.21 14:24 Сейчас в теме
(13)
Спасибо за bat.
Для sqlcmd есть параметр COMPRESSION, тогда 7zip не нужен.
15. segatron 10.03.21 19:55 Сейчас в теме
(14) Вы так и не поняли идею "зачем нужен 7-zip" :D
16. Dedushka 44 05.08.21 17:53 Сейчас в теме
(11) как сделать чтобы он удалял старые которые более 3 месяцев
cd /d d:\1C8_DataBase_BackUp\*.rar /a:-D/b/o:-D > listing_archive.txt

for /F "skip=90" %%i in (listing_archive.txt) do (del /Q "%%i")

и уже тут сама процедура архивации
Оставьте свое сообщение