Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Система обработки транзакций на основе KTM (TPSs) должна регистрировать действие транзакции с помощью common Log File System (CLFS). KTM создает поток журналов для каждого объекта диспетчера транзакций. Каждый диспетчер ресурсов должен создать собственный поток журналов.
Создание потоков журналов для объектов Диспетчера транзакций
Когда диспетчер ресурсов вызывает ZwCreateTransactionManager, необходимо указать имя потока журнала CLFS. Если указанный поток не существует, KTM создает его. Если поток уже существует, ZwCreateTransactionManager снова открывает его. KTM назначает этот поток журнала объекту диспетчера транзакций.
KTM использует поток журнала диспетчера транзакций для записи внутренних сведений о состоянии объекта диспетчера транзакций и всех объектов диспетчера ресурсов, объектов транзакций и объектов перечисления, связанных с объектом диспетчера транзакций. Если операции транзакций прерваны до их завершения, KTM может использовать сведения в журнале, чтобы определить, следует ли зафиксировать или откатить транзакции.
KTM не записывает данные транзакций, получаемые диспетчерами ресурсов или отправляемые клиентам. Диспетчеры ресурсов должны использовать собственные потоки журналов для записи этих сведений.
Диспетчеры ресурсов могут вызывать ZwQueryInformationTransactionManager для получения сведений о потоке журнала объекта диспетчера транзакций, например имени пути потока журнала или GUID, который KTM назначает потоку.
Создание потоков журналов для менеджеров ресурсов
В коде инициализации каждый диспетчер ресурсов должен вызывать ClfsCreateLogFile для создания собственного потока журнала. Каждый диспетчер ресурсов должен использовать поток для записи всех сведений о транзакциях, необходимых для фиксации, отката или восстановления данных транзакции.
KTM и все диспетчеры ресурсов TPS могут использовать один файл журнала, но каждый компонент TPS должен использовать другой поток в файле журнала. Сведения о том, как указать отдельные потоки в файле журнала, см. в разделе ClfsCreateLogFile.
Периодически KTM создает область перезапуска в лог-потоке диспетчера транзакций. При выполнении операции восстановления KTM считывает последнюю область перезапуска, чтобы восстановить состояние объектов, открытых до завершения работы системы. Аналогичным образом диспетчер ресурсов должен периодически создавать области перезапуска в потоке журналов. Например, диспетчер ресурсов может создавать область перезапуска при каждом завершении транзакции.
Дополнительные сведения о областях перезапуска в потоках журналов CLFS см. в разделе "Чтение записей перезапуска" из потока CLFS. Кроме того, см. подпрограммы ClfsWriteRestartArea, ClfsReadRestartArea и ClfsReadPreviousRestartArea .
Использование потоков журналов для восстановления
После вызова ZwCreateTransactionManager диспетчер ресурсов должен вызвать ZwRecoverTransactionManager. Подпрограмма ZwRecoverTransactionManager считывает поток журнала объекта диспетчера транзакций, чтобы восстановить состояние TPS до известной хорошей точки. Если компьютер завершил работу должным образом или не завершил работу после последней загрузки диспетчера ресурсов, поток журналов содержит минимальную информацию. Если произошел сбой системы, поток журнала содержит достаточно сведений о восстановлении, чтобы восстановить все транзакции в известном состоянии.
После вызова ZwCreateResourceManager диспетчер ресурсов должен вызвать ZwRecoverResourceManager. Функция ZwRecoverResourceManager пытается восстановить транзакции, связанные с каждым из участий управляющего ресурсами. Дополнительные сведения о восстановлении транзакций диспетчера ресурсов см. в разделе "Обработка операций восстановления".
Хранение данных транзакций
Диспетчеры ресурсов, использующие потоки журналов CLFS, должны хранить данные транзакций в областях маршаллинга CLFS. CLFS периодически перемещает данные из области буферизации потока журнала на постоянный носитель. Чтобы регистрировать операцию, которая изменяет данные, диспетчер ресурсов может выполнить следующее:
Скопируйте исходные данные до того, как операция записи изменит их, в зону маршаллинга.
Выполните операцию с копией данных без изменения постоянного носителя хранилища базы данных.
Скопируйте новые данные в зону подготовки.
Если диспетчер ресурсов получает уведомление об откате, он может восстановить исходные данные из потока журнала. Если диспетчер ресурсов получает уведомление о фиксации, он может скопировать измененные данные из журнального потока в долговременное хранилище базы данных.
Диспетчеры ресурсов также могут использовать подпрограмму ZwSetInformationEnlistment для хранения сведений о восстановлении в объекте активизации. KTM сохраняет эти сведения в потоке журнала и считывает их из потока журнала во время операций восстановления. Поэтому диспетчер ресурсов может получить эти сведения о восстановлении в любое время, вызвав ZwQueryInformationEnlistment.