Quiesce database

Материал из Национальной библиотеки им. Н. Э. Баумана
Последнее изменение этой страницы: 12:04, 16 июня 2019.

Quiesce - приостановка или изменение устройства/приложения для достижения согласованного состояния, обычно при подготовке к резервному копированию или другому обслуживанию. [Источник 1] Далее «заморозка». Иногда вам может потребоваться перевести базу данных в состояние, разрешающее только транзакции DBA, запросы, выборки или выражения PL/SQL. Такое состояние называется «замороженным» состоянием (quiesced state) в том смысле, что в системе не выполняются текущие транзакции, которые не являются DBA, запросами, выборками или выражениями PL/SQL.

Состояние «заморозки» позволяет администраторам выполнять действия, которые иначе невозможно выполнить безопасно. Эти действия включают в себя:

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

Без возможности «заморозить» базу данных вам потребуется остановить базу данных и снова запустить ее в ограниченном режиме. Это серьезное ограничение, особенно для систем, требующих круглосуточной доступности. «Заморозка» базы данных является гораздо меньшим ограничением, поскольку она устраняет помехи для пользователей и время простоя, связанное с выключением и перезапуском базы данных.

Когда база данных находится в «замороженном» состоянии, благодаря средствам диспетчера ресурсов базы данных предотвращается активация сеансов, не связанных с DBA. Поэтому, пока база данных в статусе quiesced, любая попытка изменить текущий план ресурсов будет помещена в очередь до тех пор, пока система не будет остановлена.

Перевод базы данных в «замороженное» состояние (на примере Oracle Database)

Чтобы перевести базу данных в «замороженное» состояние, выполните следующую инструкцию:

ALTER SYSTEM QUIESCE RESTRICTED;

Не-DBA активные сеансы будут продолжаться, пока они не станут неактивными. Активный сеанс - это сеанс, который в настоящее время находится внутри транзакции, запроса, выборки или выражения PL/SQL; или сеанс, который в настоящее время удерживает какие-либо общие ресурсы. Неактивные сеансы не могут стать активными. Например, если пользователь выдает запрос SQL в попытке заставить неактивный сеанс стать активным, запрос зависнет. Когда база данных позднее «размораживается», сеанс возобновляется, и заблокированное действие обрабатывается.

Как только все сеансы не DBA становятся неактивными, инструкция ALTER SYSTEM QUIESCE RESTRICTED завершается, и база данных переходит в «замороженное» состояние. В среде Oracle Real Application Clusters этот оператор влияет на все экземпляры, а не только на тот, который выдает оператор.

Оператор ALTER SYSTEM QUIESCE RESTRICTED может долго ждать, пока активные сеансы станут неактивными. Вы можете определить сеансы, которые блокируют операцию покоя, запросив представление V$BLOCKING_QUIESCE. Это представление возвращает только один столбец: SID (идентификатор сеанса). Вы можете присоединиться к нему с помощью V$SESSION, чтобы получить больше информации о сеансе, как показано в следующем примере:

select bl.sid, user, osuser, type, program
from v$blocking_quiesce bl, v$session se
where bl.sid = se.sid;

Если вы прервете запрос на «замораживание» базы данных или если ваш сеанс прервется до того, как все активные сеансы будут приостановлены, Oracle Database автоматически отменит все частичные эффекты команды.

Для запросов, выполняемых несколькими последовательными выборками Oracle Call Interface (OCI), оператор ALTER SYSTEM QUIESCE RESTRICTED не ожидает завершения всех выборок. Он ждет только окончания текущей выборки.

Как для выделенных, так и для общих подключений к серверу все входы в систему, отличные от DBA, после выполнения этой команды ставятся в очередь диспетчером ресурсов базы данных и не допускаются для продолжения. Для пользователя это выглядит так, как будто логин завис. Вход в систему будет возобновлен, когда база данных будет «разморожена».

База данных остается в «замороженном» состоянии, даже если завершается сеанс, выдавший команду на «заморозку». Администратор базы данных должен войти в базу данных, чтобы выдать команду на «разморозку».

Восстановление системы в нормальный режим

Следующая команда восстанавливает базу данных в режим нормальной работы:

ALTER SYSTEM UNQUIESCE;

Вся деятельность, не связанная с DBA, становится разрешена. В среде Oracle Real Application Clusters эту команду не требуется выполнять из того же сеанса или даже того же экземпляра, что и тот, который «заморозил» базу данных. Если сеанс, выполняющий инструкцию ALTER SYSTEM UNQUIESCE, прерывается, то сервер базы данных Oracle обеспечивает завершение операции «разморозки».

Проверка состояния экземпляра

Вы можете запросить столбец ACTIVE_STATE представления V$INSTANCE, чтобы увидеть текущее состояние экземпляра. Значения столбца имеют одно из следующих значений:

NORMAL: нормальное «незамороженное» состояние.

QUIESCING: «замороженное» состояние, но некоторые сеансы не DBA все еще активны.

QUIESCED: «замороженное» состояние; нет активных или разрешенных сеансов не DBA.

Реализация Quiesce database вендорами

  • Как и было сказано выше, Oracle поддерживает команду QUIESCE, начиная с версии 9i.
  • SYBASE ASE версии 12.0 и выше поддерживает команду QUIESCE DATABASE, которая запрещает любому процессу запускать команды, которые записывают в журнал транзакций. Основная цель - остановить все операции обновления, чтобы файлы базы данных можно было копировать или создавать резервные копии с помощью утилит уровня ОС. Пока БД приостановлена, она всё ещё доступна пользователям для запросов только для чтения
  • Система объектно-ориентированной базы данных JADE может выполнять резервное копирование с параметром 'quiesced = true'. База данных переводится в состояние покоя, позволяя текущим активным транзакциям завершать и затем сбрасывать измененные буферы из кэша в стабильную базу данных. Во время резервного копирования транзакции обновления не разрешены, и попытки выполнить транзакции базы данных вызывают исключение базы данных.[Источник 2]

Источники

  1. Quescing a Database // Oracle Help Center. [1999 - ]. URL: https://docs.oracle.com/cd/B28359_01/server.111/b28310/start004.htm (дата обращения 27.05.2019).
  2. Quiesce // Wikipedia. [2001 - ]. Дата обновления: 17.07.2018. URL: https://en.wikipedia.org/wiki/Quiesce (дата обращения 16.06.2019).