Telegram VK YouTube
ЗАКАЗАТЬ ДЕМОНСТРАЦИЮ 1C:ERP 2
ГлавнаяБлогРезервное копирование и восстановление «1С»-баз на PostgreSQL в Windows с помощью pgAdmin, bat-файлов и планировщика

Блог

×

Заказать обратный звонок

Поля обязательные для заполнения
×

Заказать демонстрацию 1С:ERP

Поля обязательные для заполнения
10.10.2022 Статьи экспертов

Резервное копирование и восстановление «1С»-баз на PostgreSQL в Windows с помощью pgAdmin, bat-файлов и планировщика

slon-4.png

Автор статьи: технический руководитель проектов внедрения 1С:ERP Внедренческого центра «Раздолье» Дмитрий Малышев.

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

Введение

pgAdmin — это интерфейс для администрирования баз данных PostgreSQL, в моём понимании это аналог MS SQL Management Studio. Ставится pgAdmin отдельно от PostgreSQL. Инструкцию установки найдите, пожалуйста, в интернет-поисковиках. В данной инструкции будет описано как с помощью pgAdmin, bat-файлов и Планировщика заданий Windows организовать резервное копирование, восстановление и хранение копий баз данных.

psql-1.png


Открытие pgAdmin

Через пуск или в проводнике открываем приложение "C:\Program Files\pgAdmin 4\v6\pgAdmin4.ico".

psql-2.png

Вводим пароль доступа (задается ранее пользователем).

psql-4.png

Откроется интерфейс управления базами данных.

psql-1.png


Создание резервной копии

Рассмотрим создание резервной копии из pgAdmin и командным bat-файлом.

2.1. С помощью pgAdmin

Выбираем базу в дереве, правой кнопкой мыши открываем контекстное меню, где выбираем создание резервной копии/Backup… Указываем полный путь для сохранения копии, формат Custom и жмем [Создать / Create].

psql-5.png
***
psql-6.png
***

psql-7.png


2.2. С помощью командного файла *.bat

Запускаем двойным кликом мыши командный файл backup_pdadmin_UH_IMD_everyday.bat, в котором уже прописан вызов архиватора формат и путь файла копии.

psql-8.png

Копии сохраняются сюда.

psql-9.png

Содержимое командного файла:

REM СОЗДАНИЯ РЕЗЕРВНОЙ КОПИИ БАЗЫ ДАННЫХ POSTGRESQL

CLS

ECHO OFF

CHCP 1251

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

SET PGDATABASE=IMD_UH

SET PGHOST=localhost

SET PGPORT=5432

SET PGUSER=postgres

SET PGPASSWORD=ЗДЕСЬ_УКАЖИТЕ_ПАРОЛЬ_для_пользователя_postgres

REM Формирование имени файла резервной копии и файла-отчета

SET DATETIME=%DATE:~6,4%-%DATE:~3,2%-%DATE:~0,2% %TIME:~0,2%-%TIME:~3,2%-%TIME:~6,2%

SET DUMPFILE=%PGDATABASE% %DATETIME%.backup

SET LOGFILE=%PGDATABASE% %DATETIME%.log

SET DUMPPATH="E:\UH_IMD\Backup\%DUMPFILE%"

SET LOGPATH="E:\UH_IMD\Backup\%LOGFILE%"

REM Создание резервной копии

IF NOT EXIST Backup MD Backup

CALL "C:\Program Files\pgAdmin 4\v6\runtime\pg_dump.exe" --format=custom --verbose --file=%DUMPPATH% 2>%LOGPATH%

REM Анализ кода завершения

IF NOT %ERRORLEVEL%==0 GOTO Error

GOTO Successfull

REM В случае ошибки удаляется поврежденная резервная копия и делается соответствующая запись в журнале

:Error

DEL %DUMPPATH%

MSG * "ERROR to create backup!!! See the information E:\UH_IMD\Backup\backup.log."

ECHO %DATETIME% Ошибка при создании резервной копии %DUMPFILE%. Смотрите %LOGFILE%. >> backup.log

GOTO End

REM В случае удачного резервного копирования просто делается запись в журнал

:Successfull

ECHO %DATETIME% Успешное создание резервной копии %DUMPFILE% >> backup.log

GOTO End

:End


Пояснения:

SET PGDATABASE=IMD_UH - здесь имя базы данных на СУБД равно IMD_UH, у вас будет свое поменяйте обязательно.

E:\UH_IMD\Backup - здесь путь хранения backup у вас будет свой, поменяйте.

C:\Program Files\pgAdmin 4\v6\runtime - папка утилиты pg_dump.exe для создания дампов, пусть может чуть отличаться, например, вместо v6 будет v4. И не забудьте pgAdmin установить, он ставится отдельно.

SET PGPASSWORD=ЗДЕСЬ_УКАЖИТЕ_ПАРОЛЬ_для_пользователя_postgres - тут укажите реальный пароль от пользователя postgres СУБД PostgreSQL


Восстановление резервной копии

Есть несколько способов: из командной строки, из pgAdmin, заранее подготовленным командным файлом. Мы рассмотрим: pgAdmin.


3.1. С помощью pgAdmin

3.1.1. В существующую базу

Выбираем базу, вызываем правой кнопкой ее контекстное меню, где выбираем действие Восстановить / Restore.

psql-10.png

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

psql-11.png

***

psql-12.png

***

psql-13.png

***

ps-14.png

3.1.2. В новую базу

3.1.2.1. Создаем новую базу в PostgreSQL

На корне дерева баз вызываем правой кнопкой мыши контекстное меню и действие Создать / Create – Базу данных / Database.

psql-14.png

Задаем имя новой базы.

psql-15.png

Выбираем обязательно схему создания template0 (иначе на следующем шаге база не развернется из backup из-за конфликта таблиц).

psql-16.png
 
Для контроля смотрим итоговый запрос, и жмем кнопку [Сохранить]/[Save].

psql-17.png


3.1.2.2. Восстанавливаем базу из архива в PostgreSQL

После создания пустой новой базы, её нужно восстановить из архива. Для этого смотрите пункт выше 3.1.1. Для восстановления в существующую базу, выполняем всё тоже самое только для базы с именем NewBaseName


3.1.2.3. Создаем новую базу 1С NewBaseName

После того как развернули базу на СУБД PostgreSQL её требуется опубликовать на сервере 1С, чтобы пользователи получили к ней доступ. Для этого выполним действия по созданию базы 1С и связывании её с существующей базой на СУБД.

psql-18.png
***
psql-19.png
***
psql-20.png
***
psql-21.png
***
psql-22.png

Не забываем ставь флаг «Установить блокировку регламентных заданий», если это копия.


Удаление старых резервных копий

4.1. Вручную

Удаляем архивы старше 30 дней вручную. Затем чистим корзину на рабочем столе.

В проводнике папка E:\UH_IMD\Backup.

psql-23.png
***
psql-24.png

4.2. С помощью командного файла *.bat

Запускаем двойным щелчком мыши командный файл. В файле указана очистка в каталоге файлов старше 30 дней.
 psql-24.2.png


Его содержимое:

forfiles /p "E:\UH_IMD\Backup" /S /D -30 /C "cmd /c del /f /a /q @file"

Пояснения:

E:\UH_IMD\Backup - здесь путь хранения backup'ов, у вас будет свое поменяйте обязательно.

30 - срок в днях хранения backup'ов


Автоматическое выполнение резервного копирования

Использован стандартный планировщик заданий Windows каждый день в 5:00 утра запуск, выполнения командного файла (архив рабочей базы примерно 1 час создается).

psql-25.png

***

psql-26.png

***

psql-27.png

***

psql-28.png

***

psql-29.png

***

psql-30.png

***

psql-31.png

Автоматическое выполнение очистки копий старше 30 дней

Использован стандартный планировщик заданий Windows каждую субботу в 10:00 утра запуск, выполнения командного файла.

psql-32.png

***

psql-33.png
***
psql-34.png

***

psql-35.png

***

psql-36.png

***

psql-37.png

***

psql-38.png

Приложения

Пример содержимого общего файла логов backup.log.

psql-39.png

Пример содержимого файла лога конкретной выгрузки UH_IMD 2022-10-07 5-00-00.log

psql-40.png

P.S. Коллеги, сразу скажу, что я не системный администратор, а программист 1С. Системщик решил бы, может быть, элегантнее. 

Хотя ситуация сложилась такая, что я делал настройки и эту инструкцию с bat-никами по просьбе системных администраторов (как бы странно это ни звучало). Нечасто такими настройками занимаюсь, поэтому не судите строго. 

Добавил 2 батника, по обновлению статистики и реиндексации:

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

Файл vacuumdb_BaseName.bat - обновление статистики.

Его содержимое:

vacuumdb -d UH_IMD -Z -v -j 1

Пояснения:

Обновление статистики базы с именем UH_IMD (тут поставьте свою) в 1 поток.
Можно поменять на обновление статистики во всех базах в 4 потока, тогда будет текст:

vacuumdb -a -Z -v -j 4

Файл reindexdb_BaseName.bat - реиндексация таблиц в базе.

Его содержимое:

reindexdb -d UH_IMD -v -j 1

Пояснения:

Обновление индексов в базе с именем UH_IMD (тут поставьте свою) в 1 поток.
Можно поменять на обновление статистики во всех базах в 4 потока, тогда будет 
текст:

reindexdb -a -v -j 4

Также обратите внимание на программу Effector Saver — программа резервного копирования 1С:Предприятия (поищите в инете).
Делает копии в MS и PostgreSQL, настройка хранения и удаления. Есть возможность подключать скрипты и выполнять тестирование исправление 1С. Есть бесплатная версия (которой должно хватить), и есть также платная с плюшками.

Для использования пригодятся следующие материалы (можно скачать в конце статьи по этой ссылке):

  • backup_pgadmin_BaseName_everyday.bat

  • delete_backup_BaseName_older than 30 days.bat

  • Резервное копирование и восстановление баз PostgreSQL в Windows с помощью pgAdmin, bat-файлов и планировщика.docx

  • vacuumdb_BaseName.bat

  • reindexdb_BaseName.bat

  • Резервное копирование и восстановление баз PostgreSQL в Windows с помощью pgAdmin, bat-файлов и планировщика.docx (версия от 12.10.2022)

Ближайшие мероприятия

Получить консультацию

Заполните форму, и наш специалист свяжется с вами в течение 1 часа в рабочее время.

Имя и фамилия

Телефон

Поля обязательные для заполнения —