расширяемые файлы служба хранилища Engine

Применимо к: Windows | Windows Сервером

расширяемые файлы служба хранилища Engine

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

В этой таблице содержится обзор имен файлов данных, управляемых ESE. для Windows Vista и более поздних версий параметр JET_paramLegacyNames влияет на используемые имена файлов.

Метка Применение

Файлы журнала транзакций

Файлы журнала транзакций содержат операции с файлами базы данных. Они содержат достаточно информации для перевода базы данных в логически целостное состояние после непредвиденного завершения процесса или завершения работы системы.

Имена файлов журнала зависят от имени из трех букв, которое можно задать с помощью JET_paramBaseName. В приведенных ниже примерах используется базовое имя EDB, так как это базовое имя по умолчанию. Расширение для файлов журнала транзакций будет иметь тип. log или. жткс в зависимости от того, задан ли JET_bitESE98FileNames в параметре JET_paramLegacyFileNames. дополнительные сведения см. в разделе расширенные параметры системы служба хранилища Engine.

Файлы журнала транзакций имеют имя <base> <generation-number> . log, начинающееся с 1. Номер создания журнала имеет шестнадцатеричный формат. Например, Edb00001. log — это первый журнал, а edb000ff. log — журнал 255th. Файлы журнала содержат пять шестнадцатеричных цифр в имени файла журнала, пока не будет создан файл журнала 1048576th, после чего файлы журнала начинают называться в формате 11,3 (например, edb00100000. log). <base>. log всегда является файлом журнала, который используется в настоящий момент. Если ядро СУБД неактивно, можно определить поколение EDB. log с помощью следующей команды: esentutl.exe-ML EDB. log.

Хотя файлы журнала транзакций имеют. Расширение журнала, обычно связанное с текстовыми файлами, файлы журнала транзакций имеют двоичный формат и никогда не должны редактироваться пользователем. Операции с базой данных записываются в журнал первыми. Данные могут быть записаны в файл базы данных позднее; возможно, немедленно, возможно, будет намного позже. В случае непредвиденного завершения процесса или прекращения работы системы операции по-прежнему находятся в файлах журнала, и можно выполнить откат незавершенных транзакций. Процесс воспроизведения файлов журнала транзакций называется мягким восстановлением и выполняется автоматически при вызове жетинит или JetInit2 . Мягкое восстановление также можно выполнить вручную с помощью параметра "-r" программы Esentutl.exe. Процесс воспроизведения файлов журнала транзакций в базе данных, восстановленной из резервной копии, называется жесткое восстановление.

Файлы журнала имеют фиксированный размер, настраиваемый с помощью JET_paramLogFileSize. Когда текущий файл журнала (EDB. log) заполняется, он переименовывается в <base> <generation-number> . log, а новый файл журнала транзакций необходим в потоке журнала транзакций.

С каждым экземпляром базы данных связана одна последовательность файлов журнала. Windows В XP появился жеткреатеинстанце, что позволяет одному процессу использовать несколько последовательностей файлов журнала транзакций. Однако несколько последовательностей файлов журнала транзакций не могут существовать в одном каталоге.

Файлы журнала транзакций не следует менять, переименовывать, перемещать или удалять вручную, так как это может привести к повреждению данных.

Файлы журнала транзакций будут удалены ядром СУБД во время полной архивации (см. раздел жетбаккуп, жеттрункателог, жеттрункателогинстанце) или во время нормальной работы, если циклическое ведение журнала включено.

После заполнения файла журнала транзакций ядру СУБД необходимо создать новый файл журнала. Циклическое ведение журнала — это способ, с помощью которого ядро СУБД может автоматически очищать файлы журналов, если они больше не требуются для восстановления после сбоя. Этот процесс является альтернативой удалению файлов журнала в ходе выполнения резервного копирования. Циклическое ведение журнала можно контролировать с помощью системного параметра JET_paramCircularLog . Файлы журнала транзакций не следует удалять с помощью любого другого метода.

Временные файлы журналов транзакций

Когда EDB. log заполняется, ESE необходимо создать новый файл. Новый файл транзакций журнала называется временным файлом журнала транзакций до его использования ESE.

Во время создания нового файла журнала и его размера он будет называться <base> tmp. log. Создание нового файла может быть потенциально дорогостоящей операцией, поэтому ESE создаст следующий файл журнала в режиме «в фоновом задании».

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

Зарезервированные файлы журнала транзакций

Зарезервированные файлы журнала транзакций создаются, когда подсистема начинает регистрировать важные операции, чтобы получить чистое завершение работы.

Windows Vista: в Windows Vista и более поздних версиях зарезервированные файлы журнала транзакций имеют имя <base> рескскскскскс. жрс.

Windows Server 2003: в Windows Server 2003 и более ранних версий зарезервированные файлы журнала транзакций именуются res1. Log и res2. log.

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

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

файлы контрольных точек

Файл контрольных точек хранит контрольную точку для определенной последовательности файлов журнала транзакций. Файл контрольных точек называется <base> CHK или <base> жкп, в зависимости от того, задан ли JET_bitESE98FileNames в параметре JET_paramLegacyFileNames, а его расположение задается JET_paramSystemPath.

Операции базы данных сначала записываются в файлы журнала, а затем кэшируются в памяти. В более поздней точке операции записываются в файл базы данных, но по соображениям производительности порядок записи операций в файл базы данных может отличаться от порядка, в котором они были изначально зарегистрированы. Операции, записанные в файл журнала транзакций, будут находиться в одном из двух состояний:

  • Записывается в файл журнала транзакций и в файл базы данных.

  • Записывается в файл журнала транзакций и еще не записывается в файл базы данных.

Многие операции с базами данных могут храниться в одном файле журнала транзакций. Данный файл журнала может состоять из следующих элементов:

  • Все операции, записанные в файл базы данных.

  • Нет операций, записанных в файл базы данных

  • Сочетание операций, записанных в файл базы данных, и операций, которые еще не записаны в файл базы данных.

Контрольная точка относится к моменту времени в потоке журнала транзакций, где все операции до контрольной точки записываются в файл базы данных. Нет никакой гарантии на операции, выполняемые после создания контрольной точки. Некоторые могут быть в памяти, а некоторые могут быть записаны в базу данных.

Так как все операции в файлах журнала до контрольной точки представлены в файле базы данных, для мягкого восстановления требуется только файлы журнала транзакций после контрольной точки, чтобы перевести определенную базу данных в чистое состояние.

Файлы базы данных

Файл базы данных содержит схему для всех таблиц в базе данных, записи для всех таблиц в базе данных и индексы по таблицам. Его расположение задается с помощью жеткреатедатабасе, JetCreateDatabase2, жетаттачдатабасеили JetAttachDatabase2.

После успешного вызова жеттерм или JetTerm2база данных завершает работу в чистом виде.

Программа Esentutl.exe может определить, завершается ли работа базы данных с помощью параметра "-MH". Например, "esentutl.exe-MH Sample. edb" будет считывать заголовок базы данных с именем Sample. edb и выводить сведения о состоянии Sample. edb. Он может вывести на печать состояние: чистое завершение работы или состояние: "грязное" завершение работы.

База данных, которая не была завершена аккуратно, находится в состоянии "неправильное завершение работы". до Windows XP это состояние было вызвано несоответствующим. "Грязную" (ненепротиворечивую) базу данных можно вернуть в исходное состояние с мягким восстановлением. Поврежденная база данных не совпадает с «грязной» («непротиворечивой») базой данных.

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

Только аккуратное завершение работы баз данных может быть безопасно перемещено или переименовано. Если база данных не была корректно завершена, она не может быть автоматически перемещена или переименована.

Несколько баз данных могут быть связаны с одной последовательностью файлов журнала транзакций.

Временные базы данных

Временная база данных используется в качестве резервного хранилища для темптаблес, а также используется при создании индексов.

Имя и расположение настраиваются с помощью JET_paramTempPath.

Темптаблес создаются с помощью жетопентемптабле, JetOpenTempTable2, JetOpenTempTable3, жетопентемпораритабле. Они также создаются некоторыми вызовами API и используются для возврата сведений о схеме (например, жетжетиндексинфо).

Очистить файлы карт

начиная с Windows 10 годовщины обновления (клиента) и Windows Server 2016 (сервер), подсистема ESE добавила дополнительный уровень защиты от потерянных операций записи (или потерянных сбросов) 1, что позволяет обнаруживать такие события в initialization2. Эта функция требует сохранения метаданных в отдельном файле, который называется "дисковой картой".

Для каждого файла базы данных создается один файл для записи на диск, который находится в том же каталоге. Имя файла аналогично имени файла базы данных, но с другим расширением. Например, если клиентское приложение создает базу данных с полным путем C: \ MyDirectory \ мидабатасе. edb, соответствующий файл записи на диск с файлом отображения имеет значение C: \ MyDirectory \ мидабатасе. жфм.

В этом усовершенствовании представлены два требования к именам файлов базы данных.

  • Две базы данных в одном каталоге не должны иметь одинаковые имена файлов с разными расширениями. Например: C: \ MyDirectory \ мидабатасе. DB1 и C: \ MyDirectory \ мидабатасе. DB2.

  • 2. База данных не должна иметь расширение жфм.

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

Размер файла на карте записи прямо пропорционален размеру связанного файла базы данных и приблизительно равен (все размеры в байтах, результат должен округляться до следующего числа, кратного 8 192):

8,192 + ((<database file size> / <database page size>) / 4)

Например: для базы данных размером 1,5 ГБ, использующей размер страницы 32 КБ, приблизительный размер схемы записи на диск составляет 24 576 байт (или 24KB).

Файл отображения на диск должен быть обновлен, так как страницы базы данных сбрасываются. Если включено ведение журнала транзакций (например, JET_paramRecovery задано значение "on", значение по умолчанию), обновление схемы очистки выполняется по мере внесения изменений в базу данных клиентским приложением. В среднем вся схема очистки записывается на носитель с энергонезависимым по одному разу для каждых 20% JET_paramCheckpointDepthMax (в байтах) создаваемых журналов транзакций. Количество операций записи зависит от того, насколько распределены изменения в пределах базы данных. Но в большинстве случаев приблизительно (все размеры в байтах):

<flush map file size> / JET_paramMaxCoalesceWriteSize

Если ведение журнала транзакций отключено (например, JET_paramRecovery установлен в значение OFF), то схема записи на диск обновляется только один раз, когда база данных явно отсоединяется явным образом (через жетдетачдатабасеили неявно отключается в явном виде путем завершения связанного экземпляра ESE (через любую функцию жеттерм , если JET_bitTermDirty не передается).

1 потерянная запись (или потерянная очистка) определяется как операция записи, которая успешно возвращает данные из операционной системы в ядро базы данных ESE, но фактических данных они никогда не сохраняются в файле базы данных на носителе с энергонезависимым. Обычно это вызвано неправильной или неправильно настроенным стеком хранилища (программное обеспечение или оборудование). Клиентские приложения могут получить ошибку JET_errReadLostFlushVerifyFailure от функций ESE, требующих считывание данных из базы данных, если данные находятся в регионе, в котором произошло потеря события записи.

2 возможность обнаружения потерянных операций записи в течение времени существования процесса имеется с момента Windows 8 (клиент) и Windows Server 2012 (сервер).