Правила решения коллизий
Загрузка пакета выполняется после сохранения прикрепленного SOP–файла к записи импортируемого пакета. При загрузке конфигурационных пакетов выполняется проверка записей VCS из пакета на предмет коллизий с конфигурацией целевого экземпляра. После загрузки пакета необходимо проанализировать коллизии.
Коллизия – это логическое противоречие между текущим и импортируемым содержимым или свойствами конфигурационной записи.
Пример:
- Пользователь экспортировал локальный пакет с настройками бизнес-правила.
- Пользователь прикрепил пакет к записи импортированного пакета на другом экземпляре, где существует более новая версия этого бизнес-правила, т.е. она была обновлена позже, чем запись на исходном экземпляре.
- Пользователь получил сообщение о коллизии: на целевом экземпляре содержится более новая версия этой записи.
Информация о загрузке пакета содержится в связанном списке Журнал просмотра VCS на форме Импортированного пакета. Для каждой версии пакета отображается статус загрузки в соответствующем поле и информация о коллизии в поле Сообщение.
Возможные статусы загрузки:
Статус | Описание |
---|---|
Коллизия | Версия в этом статусе не может быть импортирована до тех пор, пока причины коллизии не будут устранены. |
Норма | Версия не вызывает коллизию. |
Пропущено | Версия в этом статусе будет проигнорирована в процессе установки пакета. Для импорта версии измените статус Пропущено на Норма. |
Предупреждение | Статус присваивается версиям, которые имеют незначительные проблемы, связанные с импортом. В зависимости от ошибки записи VCS будут либо перенесены на целевой экземпляр, либо пропущены. |
Для решения коллизий после загрузки пакета, выполните следующие шаги:
-
Откройте вкладку Журнал просмотра VCS в области Связанные списки на форме Импортированного пакета.
-
Отфильтруйте список, исключив все записи со статусом Норма.
-
Откройте первую запись. В поле Сообщение будет указана причина ошибки.
-
Откройте запись из связанного списка Извлеченные записи.
-
Внесите необходимые изменения в поле Копия записи (JSON).
примечаниеВ ряде случаев, когда решение коллизий требует большого количества изменений, рекомендуется производить повторную сборку локального пакета на исходном экземпляре. После выгрузки пакета замените пакет во вложениях к Импортированному пакету и нажмите кнопку Загрузить повторно.
-
Нажмите Сохранить и выйти.
-
Вернитесь в запись импортированного пакета и нажмите Подготовить к импорту.
-
Убедитесь, что статус записи в связанном списке Журнал просмотра VCS изменился на Норма.
-
Повторите шаги 3–8 до тех пор, пока все записи в списке Журнал просмотра VCS не перейдут в статус Норма или, при необходимости, Пропущено.
-
Нажмите кнопку Импортировать обновления.
Если запись вызывает несколько коллизий, в системе отобразится только первая. Исправьте ошибку и нажмите Подготовить к импорту, чтобы увидеть следующую коллизию, связанную с этой записью.
Возможные коллизии
Коллизия 1
В пакете содержится версия записи Х. Запись Х связана с другой записью Y, которой нет на экземпляре. Версия записи Y также отсутствует в импортируемом пакете. При загрузке записи VCS в Журнале просмотра VCS в поле Сообщение появится информация:
Reference {sys_id} in {column_name} does not exists in referenced table {reference_table_name}
Решение:
-
Добавьте версию записи Y в локальный пакет на исходном экземпляре.
ИЛИ
-
Оставьте запись в Журнале просмотра VCS в статусе Пропущено.
Коллизия 2
В пакете содержится версия на удаление записи Х. На экземпляре содержится запись, которая ссылается на запись X, или в пакете содержится версия записи, которая ссылается на запись Х. При загрузке записи VCS в Журнале просмотра VCS в поле Сообщение появится информация:
{column_name} column in {reference_table_name} table referenced on this record;
Решение:
Оставьте запись в Журнале просмотра VCS в статусе Пропущено.
Коллизия 3
Несовпадение набора колонок при импорте пакета.
Детали:
Таблица Запланированные скрипты на исходном экземпляре содержит N колонок. Таблица Запланированные скрипты на целевом экземпляре содержит N-1 колонок (см. схему ниже). При загрузке записи VCS в Журнале просмотра VCS в поле Сообщение появится информация:
Column "c_typical" related to "sys_schedule_script" does not exist.
Решение:
-
Продолжите импорт версии в статусе Предупреждение. В этом случае колонка c_typical не будет создана, а импортированная версия будет содержать N-1 пар ключ-значение в поле Копия записи (JSON).
ИЛИ
-
Импортируйте пакет с версией колонки c_typical на целевой экземпляр. Выполните повторную загрузку локального пакета.
ИЛИ
-
Если отсутствие определенной колонки ожидаемо:
- Откройте запись из Журнала просмотра VCS.
- Перейдите на форму записи в связанном списке Импортированные записи.
- Удалите из поля Копия записи (JSON) пару ключ-значение для колонки c_typical.
- Сохраните запись и нажмите Подготовить к импорту.
Коллизия 4
Запись VCS на целевом экземпляре более новая, чем запись VCS в пакете. Сравнение версий производится по дате и времени в значении ключа sys_updated_at в поле Копия записи (JSON). Записи VCS, для которых найдена более новая версия, будут находиться в статусе Пропущено. При загрузке записи VCS в Журнале просмотра VCS в поле Сообщение появится информация:
The system has a newer record
Решение:
-
Установите статус Норма для импорта версии из пакета.
ИЛИ
-
Оставьте запись в Журнале просмотра VCS в статусе Пропущено, чтобы сохранить записи на целевом экземпляре без изменений.
Коллизия 5
В пакете находится запись VCS на удаление таблицы. В таблице на целевом экземпляре содержатся записи. При загрузке записи VCS в Журнале просмотра VCS в поле Сообщение появится информация:
Table is not empty
Решение:
-
Установите статус Норма. В этом случае таблица и ее записи будут удалены.
ИЛИ
-
Оставьте запись в Журнале просмотра VCS в статусе Пропущено.
Коллизия 6
Пакет содержит версии записей приложения X, которое не установлено на целевом экземпляре. При загрузке записи VCS в Журнале просмотра VCS в поле Сообщение появится информация:
Related application "{application_id}" does not exist. Please repack this pack on the source instance.
Решение:
- Выгрузите локальный пакет с версией записи sys_application с исходного экземпляра.
- Импортируйте пакет на целевой экземпляр.
- Нажмите Загрузить повторно, чтобы выполнить повторную загрузку пакета с версиями записей приложения X.
Коллизия 7
Причиной коллизии является нарушение уникального ключа.
Детали:
В импортированном пакете содержится запись X1 из таблицы с уникальным ограничением. На целевом экземпляре содержится такая же запись (X2) с другим ID, то есть эти записи идентичны во всем, кроме их ID. После загрузки пакета на целевой экземпляр появляется коллизия записи VCS. При загрузке записи VCS в Журнале просмотра VCS в поле Сообщение появится информация:
This record has a duplication of a unique key. DETAIL: Key (column_id, record_id, language_id)=(156941403909472422, 159170696512371798, 156628684306200767)
Решение:
-
Удалите запись X2 на целевом экземпляре и нажмите Загрузить повторно.
ИЛИ
-
Пропустите импорт версии для записи X1.
Коллизия 8
Импортируемая колонка уже существует на одном из уровней наследования целевой таблицы.
Детали:
Целевой экземпляр содержит таблицу X и ее дочернюю таблицу Y. Таблица Y наследует колонки из таблицы X. В пакете находится запись VCS, которая добавляет колонку А в таблицу Y. В родительской таблице Х на целевом экземпляре уже содержится колонка с названием А. При загрузке записи VCS в Журнале просмотра VCS в поле Сообщение появится информация:
A record for column A already created in the table X.
Решение:
Установите для записи X статус Пропущено.
Коллизия 9
Версия импортируемой колонки относится к таблице, которой нет на целевом экземпляре. В импортируемом пакете запись версии таблицы также отсутствует. При загрузке записи VCS в Журнале просмотра VCS в поле Сообщение появится информация:
Attempt to read property "name" on null
Решение:
Импортируйте пакет с версией данной таблицы и версиями колонок sys_id
, sys_created_at
, sys_created_by
, sys_updated_at
и sys_updated_by
. Затем нажмите Загрузить повторно, чтобы выполнить повторную загрузку текущего пакета.
Коллизия 10
Запись VCS не может быть загружена, если в поле Политика защиты указано Защищена. При загрузке записи VCS в Журнале просмотра VCS в поле Сообщение появится информация:
Don't update, policy is protected
Решение:
Решение зависит от значения поля Политика защиты, которое необходимо для целевой записи после загрузки пакета.
-
Для импорта без изменения политики защиты:
- Перейдите на запись через связанный список Журнал просмотра VCS.
- В открывшейся форме перейдите на запись VCS в связанном списке Импортированные записи.
- Измените политику защиты на Защищено.
- Нажмите Подготовить к импорту наверху справа.
Теперь на форме импортированного пакета можно увидеть, что для версии данной записи изменился текст в поле Сообщение.
-
Для импорта с изменением политики защиты:
- Вернитесь на экземпляр, на котором собирался импортируемый пакет.
- Откройте запись VCS, с которой была коллизия, и установите флажок Игнорировать флаг Protected.
- Экспортируйте локальный пакет с обновленной записью и загрузите его на целевой экземпляр.
Коллизия 11
Версия импортируемой записи VCS на целевом экземпляре была изменена (поле Политика защиты = Изменена). При загрузке записи VCS в Журнале просмотра VCS в поле Сообщение появится информация:
Don't update, record is changed
Решение:
- В связанном списке Журнал просмотра VCS импортируемого пакета откройте необходимую запись.
- В связанном списке Актуальная версия будет находиться текущая версия записи.
- Ознакомьтесь со значениями в полях текущей версии: Копия записи (JSON), Локальный пакет и Кем создано.
- Примите решение по импорту версии. Если версия должна быть импортирована – переведите статус записи в Журнале просмотра VCS в Норма.