Временная модификация таблицы

Функция

Определение оператора временного изменения атрибутов базовой таблицы.

Спецификация
                   
< временный запрет действия первичного ключа >::=
ALTER TABLE [имя схемы.]имя таблицы DISABLE PRIMARY KEY
< временный запрет действия уникального ключа >::=
< временный запрет действия внешнего ключа >::=
< временное отключение всех триггеров таблицы >::=
ALTER TABLE [имя схемы.]имя таблицы DISABLE ALL TRIGGERS
< отмена временного запрета действия первичного ключа >::=
ALTER TABLE [имя схемы.]имя таблицы ENABLE PRIMARY KEY
< отмена временного запрета действия уникального ключа >::=
< отмена временного запрета действия внешнего ключа >::=
< отмена временного отключения всех триггеров таблицы >::=
ALTER TABLE [имя схемы.]имя таблицы ENABLE ALL TRIGGERS
< список столбцов >::=
Синтаксические правила
  1. < Имя таблицы > должно быть именем базовой таблицы или синонимом, указывающим на базовую таблицу (прямо или через цепочку синонимов).

Общие правила
  1. Временный запрет действия ключа (PRIMARY KEY, UNIQUE или FOREIGN KEY) должен устанавливаться в случаях, когда соответствующее ограничение ссылочной целостности нарушено для некоторых записей таблицы в результате логического повреждения целостности БД.

  2. На протяжении действия введенного запрета количество нарушений целостности не должно увеличиваться.

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

  4. На период временного запрета действия ключей запрещаются операции над первичным/уникальным ключом (когда запрещен сам этот ключ или какой-либо ссылающийся на него внешний ключ).

  5. Если нет ссылающихся на него внешних ключей, то разрешены любые действия. Если такие ключи есть, то:

    • добавление разрешается (при этом уникальность значения по-прежнему проверяется при добавлении в индекс);

    • удаление разрешается только для значений-дубликатов первичного (уникального) ключа (а также NULL-значений для уникального ключа);

    • обновление разрешается только для значений-дубликатов первичного (уникального) ключа, а также NULL-значений для уникального ключа. Уникальность нового значения проверяется при добавлении в индекс;

    • проверки ссылочной целостности не выполняются (это касается удаления и обновления значений-дубликатов первичного (уникального) ключа);

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

  6. На период временного запрета действия ключей запрещаются операции над внешним ключом (когда запрещен сам этот ключ либо первичный/уникальный ключ, на который он ссылается):

    • удаление разрешается;

    • разрешается добавление только NULL-значений;

    • разрешается обновление только в ссылках на NULL-значения.

  7. Правом на временное отключение/включение всех триггеров таблицы обладает ее владелец с уровнем прав доступа к БД – RESOURCE.

Пример

Пусть есть первичный (уникальный) ключ, на который ссылается множество внешних ключей. В момент отказа компьютера испорчен индекс на первичный (уникальный) ключ, в результате чего в столбце оказались дубликаты первичного (уникального) ключа. Перестроить этот индекс, не снимая атрибута «первичный (уникальный) ключ», нельзя, т.к. ядро СУБД обнаружит отсутствие уникальности значений ключа. Чтобы снять атрибут «первичный (уникальный) ключ», следует предварительно удалить все записи, ссылающиеся на этот ключ.

Использование команд временной модификации таблицы позволяет минимизировать количество действий, требуемое для восстановления БД.