Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В операции восстановления система обработки транзакций (TPS) пытается восстановить состояние из сведений, входящих в потоки журналов. После завершения операции восстановления все транзакции должны находиться в состоянии фиксации или отката, а все данные ресурсов должны находиться в известном исправном состоянии.
Иногда TPS останавливается до завершения всех своих транзакций. Например, операционная система может дать сбой. Таким образом, диспетчеры ресурсов должны инициировать операции восстановления всякий раз, когда они начинают выполняться. Операция восстановления пытается определить, являются ли транзакции неполными. Если неполные транзакции найдены в журнале, операция восстановления пытается зафиксировать или откатить эти транзакции.
Для TPS на основе KTM каждая операция восстановления состоит из двух шагов. Первым шагом является восстановление сведений из потока журнала объекта диспетчера транзакций. Второй шаг включает восстановление сведений из потока журнала диспетчера ресурсов.
TPS может восстановиться до конца всех потоков журналов или, если диспетчеры его ресурсов поддерживают значения виртуальных часов, он может восстановиться до указанного значения этих виртуальных часов.
Восстановление сведений из потока журнала объекта Диспетчера транзакций
Сразу после вызова ресурсным менеджером ZwCreateTransactionManager или ZwOpenTransactionManager, необходимо вызвать ZwRecoverTransactionManager. Подпрограмма ZwRecoverTransactionManager считывает поток журнала, принадлежащий объекту диспетчера транзакций. Эта подпрограмма восстанавливает состояние объекта диспетчера транзакций (включая все транзакции, перечисления и диспетчеры ресурсов) из сведений о восстановлении, которые находится в потоке журналов, начиная с последней области перезапуска , созданной KTM и заканчивающейся в конце потока.
Чтобы восстановить последнюю область перезапуска до указанного значения виртуальных часов, диспетчер ресурсов может вызывать ZwRollforwardTransactionManager вместо ZwRecoverTransactionManager.
Восстановление сведений из потока журналов менеджера ресурсов
Сразу после вызова ZwCreateResourceManager или ZwOpenResourceManager он должен вызывать ZwRecoverResourceManager. Подпрограмма ZwRecoverResourceManager пытается восстановить транзакции, связанные с каждым из зачислений диспетчера ресурсов.
Когда диспетчер ресурсов вызывает ZwRecoverResourceManager, KTM отправляет TRANSACTION_NOTIFY_RECOVER уведомления для каждого из зачислений диспетчера ресурсов. Диспетчер ресурсов должен вызывать ZwRecoverEnlistment каждый раз, когда он получает одно из TRANSACTION_NOTIFY_RECOVER уведомлений.
Когда диспетчер ресурсов вызывает ZwRecoverEnlistment, KTM отправляет одно из следующих уведомлений:
УВЕДОМЛЕНИЕ_О_ПОДТВЕРЖДЕНИИ_ТРАНЗАКЦИИ
Диспетчер ресурсов должен использовать сведения в потоке журналов для фиксации транзакции, а затем вызвать ZwCommitComplete.
УВЕДОМЛЕНИЕ_ОТКАТ_ТРАНСАКЦИИ
Диспетчер ресурсов должен использовать сведения в потоке журналов для отката транзакции, а затем вызвать ZwRollbackComplete.
TRANSACTION_NOTIFY_INDOUBT (Транзакция уведомляет о состоянии неопределенности)
KTM не определил статус транзакции и отправит уведомление о подтверждении или отмене позже.
Как правило, KTM отправляет уведомление TRANSACTION_NOTIFY_COMMIT, если определяет, что все диспетчеры ресурсов вызвали ZwPrepareComplete до остановки и перезапуска TPS. KTM отправляет уведомление TRANSACTION_NOTIFY_ROLLBACK, если система определяет, что один или несколько диспетчеров ресурсов не вызывал ZwPrepareComplete.
После отправки уведомления TRANSACTION_NOTIFY_RECOVER для каждого участия KTM отправляет уведомление TRANSACTION_NOTIFY_LAST_RECOVER.
Если диспетчер ресурсов вызвал ZwRollforwardTransactionManager вместо вызова ZwRecoverTransactionManager, он должен восстановить только до значения виртуальных часов, которое было указано в ZwRollforwardTransactionManager.
Диспетчеры ресурсов могут вызывать ZwSetInformationEnlistment , чтобы задать настраиваемые сведения о восстановлении. KTM сохраняет эти сведения и записывает их в поток журнала, но KTM не пытается интерпретировать сведения. Диспетчер ресурсов может получить сведения о восстановлении в любое время, вызвав ZwQueryInformationEnlistment.
Диспетчеры транзакций часто получают уведомления TRANSACTION_NOTIFY_RECOVER_QUERY во время операции восстановления.