Введение
Обновлятор умеет выполнять архивацию и автоматическое восстановление (при неудачном обновлении) в том числе для клиент-серверных баз средствами СУБД: ссылка.
Но до сих пор средствами обновлятора нельзя было решить, например, такую задачу: сделать по расписанию выгрузку средствами СУБД из одной базы, а далее по расписанию сделать загрузку этой выгрузки уже в другую базу.
Теперь такая возможность появилась.
Решение
Если вы не работали со скриптами в обновляторе - сперва научитесь, это несложно.
Далее обратите внимание на вот этот пункт меню:
Нажмите на него и в скрипт вставится 2 следующие команды:
@sql_backup( file_path: "x:\work\1.sql", dbms_compression_level: 0, optimize_cluster_test: 0, pg_format: "plain" ) @sql_restore( file_path: "x:\work\1.sql", decompression_password: "", recreate_base_in_cluster: 0, new_user_name: "", new_user_password: "" ) |
Разберём эти команды и их параметры.
sql_backup
Команда sql_backup предназначена для выгрузки копии средствами СУБД в определенный файл для базы над которой выполняется скрипт.
Параметр | Описание |
---|---|
file_path | Полный путь к файлу, в который будет сделана выгрузка копии базы средствами СУБД. Перед началом выгрузки существующий файл будет удалён. |
dbms_compression_level | Сжатие выгрузки средствами СУБД. Для MS SQL значение 0 означает вариант "без сжатия", любое отличное от нуля значение означает сжатие (уровень сжатия здесь не задаётся). Для PostgreSQL значение может варьироваться от 0 до 9, обозначая уровень сжатия от варианта "без сжатия" до "максимальное сжатие" (подробнее см. документацию к утилите pg_dump, параметр 'compress'). |
optimize_cluster_test | Значение по умолчанию 0. Если установить 1, то обновлятор по возможности пропустит подключение к кластеру 1С, чтобы узнать имя базы на сервере СУБД, если оно ему уже известно по предыдущим подключениям к кластеру. Это позволит сократить время операции, а также устранить зависимость от работоспособности кластера 1С в момент архивации базы средствами СУБД. Важный момент. В дополнение к значению 1 для этой опции, необходимо в начале скрипта разместить команду @skip_any_connection_for_server_base() иначе при выполнении скрипта в самом начале в любом случае будет осуществлена попытка подключения к кластеру. |
pg_format | Этот параметр имеет смысл только для PostgreSQL. Возможные значения 'plain' и 'custom' (подробнее см. документацию к утилите pg_dump, параметр 'format'). |
sql_restore
Команда sql_restore предназначена для загрузки средствами СУБД копии из определенного файла в базу над которой выполняется скрипт.
Параметр | Описание |
---|---|
file_path | Полный путь к файлу из которого будет сделана загрузка копии базы средствами СУБД. |
decompression_password | Если file_path указывает на выгрузку сжатую внешним архиватором (в формате zip или 7z) с паролем - укажите этот пароль в этом параметре. |
recreate_base_in_cluster | 0 - ничего не делать с базой в кластере при восстановлении, 1 - пересоздавать базу в кластере с теми же параметрами. Подробнее здесь. Значение по умолчанию 0. |
new_user_name | Имя пользователя для авторизации в базе, если его нужно сменить после восстановления из архива (архив может быть от другой базы). По умолчанию пустая строка. |
new_user_password | Пароль пользователя для авторизации в базе, если его нужно сменить после восстановления из архива (архив может быть от другой базы). По умолчанию пустая строка. |
Пример использования
Предположим у нас есть 2 клиент-серверные базы 1c (формат СУБД PostgreSQL) с именами pos5 и pos6 и нам требуется ежедневно в час ночи выполнять копирование базы pos5 в базу pos6.
Для этого мы создаём для базы pos5 вот такой скрипт:
@sql_backup( file_path: "c:\bd.sql", dbms_compression_level: 0, optimize_cluster_test: 0, pg_format: "plain" ) |
На панеле под редактором снимаем галки "Подключаться к базе", "Блокировать" и "Разблокировать". Сохраняем этот скрипт (кнопка 'Сохранить' под редактором скриптов) в файл 'c:\save_to_sql.cmd'.
Далее создаём для базы pos6 вот такой скрипт:
@sql_restore( file_path: "c:\bd.sql", decompression_password: "", recreate_base_in_cluster: 0, new_user_name: "", new_user_password: "" ) |
На панеле под редактором устанавливаем галки "Блокировать" и "Разблокировать". Сохраняем этот скрипт в файл 'c:\load_from_sql.cmd'.
Затем заходим в расписание задач и создаём там 2 задачи с типом операции "Запуск скрипта".
Для первой задачи указываем (справа от типа операции) наш файл 'c:\save_to_sql.cmd' и базу pos5.
Для второй задачи указываем файл 'c:\load_from_sql.cmd' и базу pos6.
Время запуска выстраиваем так, чтобы сначала запустилась первая задача, а спустя хотя бы 3 минуты вторая (вторая всё-равно будет ожидать завершение первой).
Готово. Первая задача выполнит скрипт для выгрузки средствами СУБД для базы pos5 в файл 'c:\bd.sql', а вторая задача выполнит скрипт для загрузки из этого файла копии в pos6.