Изменение структуры баз данных IBM Db2
IBM DB2 реализует комплекс функций и средств для обеспечения изменения структуры баз данных и взаимосвязанных программных объектов с минимальным воздействием на функционирование приложений. Правильное использование этих средств позволяет минимизировать либо полностью исключить периоды приостановки доступа пользователей к данным и приложениям.
Многие операции изменения структуры таблиц требуют физической реорганизации хранения данных в изменяемой таблице. Например, при радикальном изменении типа данных колонки таблицы (число - строка, или наоборот) необходимо прочитать каждую запись таблицы, изменить её структуру и записать обратно.
Изменения структуры таблицы, которые не требуют физической реорганизации, сохраняют таблицу доступной для чтения и записи, но будут учтены при проведении следующей плановой реорганизации. Пример: добавление колонок в существующую таблицу обрабатывается без прекращения доступа приложений к данной таблице и не требует обновления всех записей таблицы.
В рамках одной транзакции может быть выполнено неограниченное количество изменений структуры таблицы без выполнения её реорганизации, при этом доступ к данным таблицы может быть приостановлен до выполнения следующей реорганизации. Реализованная в DB2 отслеживания изменений структуры таблицы, требующих её реорганизации, более детально описана в следующем техническом документе, а также в разделе «Altering tables» документации DB2.
Обратите внимание, что командный процессор DB2 по умолчанию подтверждает транзакцию
после каждой выполненной команды - это часто приводит к отказам выполнения
второй и последующих операций изменения структуры таблицы (будет возвращено сообщение
о необходимости выполнить реорганизацию).
Поэтому перед выполнением серии операций изменения структуры таблицы необходимо отключить
автоматическое подтверждение транзакций командным процессором (например, с помощью команды
UPDATE COMMAND OPTIONS USING c OFF
).
IBM DB2 также поддерживает полную реорганизацию структуры таблиц без приостановки
доступа к реорганизуемым таблицам, с помощью административной процедуры ADMIN_MOVE_TABLE
.
Описание порядка работы с данной функцией приведено в
документации DB2.
Административная процедура ADMIN_MOVE_TABLE
осуществляет
копирование данных из исходной таблицы в новую (с требуемой структурой), выполняя отслеживание
изменений данных в ходе копирования и применяя изменения к созданной копии, а затем
заменяет исходную таблицу вновь созданной копией. Одним из вариантов применения данной
процедуры является перемещение существующей таблицы в другое табличное пространство.
Примеры использования данной функции опубликованы в статье
«Distributed DBA: Table movement made easy».
В отличие от таблиц, изменение программных объектов (представлений, хранимых процедур, пользовательских функций и триггеров) осуществляется путем их полного пересоздания. Программные объекты могут зависеть от структуры таблиц и от других программных объектов (например, представления могут обращаться к таблицам, другим представлениям и пользовательским функциям). Зависимости между объектами базы данных отслеживаются DB2, и в случае удаления объектов (либо блокировки доступа к ним) зависимые программные объекты отмечаются как некорректные (требующие перекомпиляции либо исправления). IBM DB2 поддерживает автоматическую перекомпиляцию зависимых объектов (automatic revalidation, см. документацию), выполняемую при первом обращении к объекту, требующему перекомпиляции. По умолчанию для всех новых баз данных, созданных в DB2 версии 9.7 и более поздних, используется режим автоматической перекомпиляции.
Рекомендуемым методом изменения программного объекта является замена его описания
с помощью оператора CREATE OR REPLACE
. Применение данного оператора
сохраняет выданные привилегии на доступ к объекту, в то время как удаление и повторное
создание объекта потребует повторной выдачи всех ранее установленных полномочий.
IBM DB2 поддерживает режим мягкого удаления (soft invalidation, см.
документацию),
используемый по умолчанию, который позволяет удалять и заменять
программные объекты базы данных даже в тот момент, когда они используются работающими
приложениями.
Выполнение необходимых операций реорганизации таблиц и перекомпиляции программных
объектов могут быть автоматизированы с использованием административной процедуры
ADMIN_REVALIDATE_DB_OBJECTS
. Данная процедура определяет объекты
базы данных, которые необходимо реорганизовать либо перекомпилировать, и выполняет
соответствующие операции. Инструкции по использованию данной процедуры приведены в
документации DB2.