Документация iSZN

Удаление районных данных

Описание

Серверная операция предназначена для удаления данных выбранных районов. Если для удаления выбран район-папка, то также будут удалены данные всех нижестоящих от него районов. Операцией удаляются все записи, относящиеся к выбранному району (районам). Запись подлежит удалению, если хотя бы в одном районном столбце записи таблицы хранится идентификатор удаляемого района. Серверная операция используется задачей «Загрузка районных данных».

Пользователь, выполняющий серверную операцию, должен обладать ролью «Системный администратор».

Способ удаления районных данных зависит от того, секционирована ли таблица по основному району или нет (см. «Алгоритм обновления параметров секционирования таблиц»). Если таблица секционирована и удаляемому району соответствует собственная секция, то удаление данных района из такой таблицы осуществляется с помощью оператора усечения этой секции, который выполняется в течение нескольких секунд.

Если таблица несекционирована или секционирована, но удаляемому району не сопоставлена собственная секция, то удаление осуществляется с помощью оператора DELETE, который может выполняться значительное время (в зависимости от количества удаляемых записей удаление данных этим способом может продолжаться десятки часов). Удаление данных в этом случае выполняется последовательными транзакциями. Количество записей, удаляемых в одной транзакции, определяется значением параметра «Интервал фиксации транзакций удаления». При вызове серверной операции из задачи «Загрузка районных данных» количество записей, удаляемых в одной транзакции, определяется пользователем в самой задаче.

Фиксация транзакции — очень быстрая операция, независимо от размера транзакции. Время выполнения фиксации обычно достаточно стабильно и мало зависит от размера транзакции. Поэтому, чем меньше транзакций (и их фиксаций) выполняется (то есть, чем больше количество записей, удаляемых в одной транзакции), тем быстрее выполняется удаление районных данных. Если количество записей в транзакции не ограничено, то удаление всех записей таблицы удаляемого района (или районов) выполняется в одной транзакции. В этом случае возможно возникновение ошибки ORA-01555: snapshot too old. Для её устранения необходимо задать меньшее количество записей в транзакции или увеличить размер сегмента отката.

Параметры серверной операции

Наименование Отображаемое наименование Тип данных Обязательный Возможные значения Значение по умолчанию
REGION_IDS_FOR_DELETION Районы Список значений из справочника Да
COMMIT_INTERVAL Интервал фиксации транзакций удаления Целое число 100 000
CREATE_TEMP_INDEXES Создавать временные индексы Логическое значение Да Истина
RECOMP_STAT_FOR_TABLES Пересчитывать статистику перед удалением Логическое значение Да Ложь
REBUILD_INVALID_INDEXES После удаления перестраивать невалидные индексы Логическое значение Да Истина
RESTORE_REF_CONSTRAINTS Включать ссылочные ограничения целостности, отключённые при удалении Логическое значение Да Истина
ENABLE_PU_CONSTRAINTS После удаления включать отключённые Primary- и Unique-ограничения целостности Логическое значение Да Истина
UPDATE_INITIALIZED_REGIONS Обновить список инициализированных районов Логическое значение Да Истина

Описание алгоритма

При удалении районных данных выполняются следующие действия:

  1. Удаление временных индексов, которые могли остаться от предыдущей операции удаления районных данных.
  2. Включение пропуска отключённых индексов.
  3. Сохранение списка включённых триггеров.
  4. Отключение включённых триггеров.
  5. Удаление районных данных каждой таблицы:
    • если таблица секционирована по основному району:
      • для каждого района выполняются действия:
        • если удаляемому району соответствуют собственная секция:
          • отключаются все ссылочные ограничения целостности, ссылающиеся на данную таблицу;
          • выполняется усечение секции (удаление всех записей секции);
          • выполняется обновление статистики по секции;
      • если остались записи для удаления (находящиеся в секции по умолчанию PRIMARY_RGN_PART_DEFAULT):
        • выполняется отключение ограничений целостности таблиц с удаляемыми данными, ссылающиеся на данную таблицу;
        • создаются временные индексы по таблице, если для параметра «Создавать временные индексы» задано значение «Истина»; для каждого районного столбца таблицы создаётся собственный индекс;
        • обновляется статистика по таблице, если для параметра «Пересчитывать статистику перед удалением» задано значение «Истина»;
        • выполняется удаление записей таблицы, относящихся ко всем удаляемым районам (запись относится к району, если значение хотя бы одного районного столбца записи таблицы равняется идентификатору этого района), с помощью оператора DELETE; удаление записей выполняется последовательными транзакциями, в каждой из которых удаляется количество записей, не превышающее значение параметра «Интервал фиксации транзакций удаления», при этом в одной транзакции удаляются записи всех удаляемых районов, а не какого-либо одного. Записи удаляются не из всей таблицы, а из секции по умолчанию PRIMARY_RGN_PART_DEFAULT.
        • выполняется удаление временных индексов по таблице;
    • если таблица не секционирована по основному району:
      • если таблица содержит записи, подлежащие удалению:
        • выполняется отключение ограничений целостности таблиц с удаляемыми данными, ссылающиеся на данную таблицу;
        • создаются временные индексы по таблице, если для параметра «Создавать временные индексы» задано значение «Истина»; для каждого районного столбца таблицы создаётся собственный индекс;
        • обновляется статистика по таблице, если для параметра «Пересчитывать статистику перед удалением» задано значение «Истина»;
        • выполняется удаление записей таблицы, относящихся ко всем удаляемым районам (запись относится к району, если значение хотя бы одного районного столбца записи таблицы равняется идентификатору этого района), с помощью оператора DELETE; удаление записей выполняется последовательными транзакциями, в каждой из которых удаляется количество записей, не превышающее значение параметра «Интервал фиксации транзакций удаления», при этом в одной транзакции удаляются записи всех удаляемых районов, а не какого-либо одного.
        • выполняется удаление временных индексов по таблице;
  6. Включение отключённых триггеров, которые были включены до операции удаления районных данных.
  7. Удаление временных индексов.
  8. Выключение пропуска отключённых индексов.
  9. Перестройка индексов, находящихся в невалидном состоянии, если для параметра «После удаления перестраивать невалидные индексы» задано значение «Истина».
  10. Включение всех отключённых primary- и unique-ограничений целостности, если для параметра «После удаления включать отключённые Primary- и Unique-ограничения целостности» задано значение «Истина».
  11. Включение ссылочных ограничений целостности, отключённых в процессе удаления, если для параметра «Включать ссылочные ограничения целостности, отключённые при удалении» задано значение «Истина».
  12. Обновление списка инициализированных районов и перестройка региональных последовательностей, если для параметра «Обновить список инициализированных районов» задано значение «Истина» (см. «Алгоритм перестройки региональных последовательностей»).

См. также