Функция JetInit

Применимо к: Windows | Windows Server

Функция JetInit

Функция JetInit переводит ядро СУБД в состояние, в котором оно может поддерживать использование приложениями файлов базы данных. Подсистема уже должна быть правильно настроена для инициализации с помощью JetSetSystemParameter. Аварийное восстановление базы данных выполняется автоматически в процессе инициализации.

JET_ERR JET_API JetInit(
  __in_out_opt  JET_INSTANCE* pinstance
);

Параметры

pinstance

Экземпляр, используемый для этого вызова.

В Windows 2000 этот параметр игнорируется и всегда должен иметь значение NULL.

Для Windows XP и более поздних версий использование этого параметра зависит от режима работы подсистемы. Если подсистема работает в устаревшем режиме (режим совместимости Windows 2000), где поддерживается только один экземпляр, этот параметр может иметь значение NULL или задать допустимый выходной буфер, который вернет глобальный дескриптор экземпляра, созданный в качестве побочных эффектов инициализации. Для этого выходного буфера необходимо задать значение NULL или JET_instanceNil. Затем этот дескриптор экземпляра можно передать в любую другую функцию, которая использует экземпляр . Если подсистема работает в режиме с несколькими экземплярами, для этого параметра необходимо задать допустимый входной буфер, содержащий дескриптор экземпляра, возвращаемый инициализируемым экземпляром функции JetCreateInstance .

Комментарии

Экземпляр должен быть инициализирован с помощью вызова JetInit , прежде чем его можно будет использовать в чем-либо, кроме JetSetSystemParameter.

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

Максимальное количество экземпляров, которые можно создать в любой момент времени, управляется JET_paramMaxInstances, которую можно настроить путем вызова JetSetSystemParameter. При инициализации ядра СУБД JetInit создаст начальный набор файлов для поддержки этого экземпляра. Эти файлы включают файл контрольных точек (с именем <JET_paramBaseName>. CHK), набор зарезервированных файлов журнала транзакций (с именем RES1). LOG и RES2. LOG), исходный файл журнала транзакций (с именем <JET_paramBaseName>. LOG) и временный файл базы данных (с именем в соответствии с JET_paramTempPath). Если JET_paramRecovery имеет значение "Выкл.", файл контрольных точек и файлы журнала создаваться не будут. Если JET_paramMaxTemporaryTables равно нулю, то временный файл базы данных создаваться не будет. Эти файлы представляют место на диске экземпляра и должны управляться с осторожностью. Если эти файлы повреждены по отдельности или относительно друг друга, данные, хранящиеся в базах данных, связанных с экземпляром, могут быть потеряны.

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

Из-за того, что JetInit выполняет аварийное восстановление, в случае сбоя может быть возвращена почти любая ошибка ядра СУБД. На практике большинство ошибок, наблюдаемых при развертывании, делятся на две категории: повреждение данных и неправильное управление файлами. Повреждение данных чаще всего проявляется в следующих или аналогичных ошибках:

  • JET_errReadVerifyFailure

  • JET_errLogFileCorrupt

  • JET_errCheckpointCorrupt

Эти ошибки почти всегда возникают из-за проблем с оборудованием, поэтому их невозможно избежать. Неправильное управление файлами чаще всего проявляется в следующих или похожих ошибках:

  • JET_errMissingLogFile

  • JET_errAttachedDatabaseMismatch

  • JET_errDatabaseSharingViolation

  • JET_errInvalidLogSequence

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

Функция JetInit ведет себя по-разному в отношении файлов базы данных, присоединенных к экземпляру, в Windows 2000 и более поздних выпусках.

Windows 2000: В Windows 2000 любая база данных, подключенная к экземпляру во время предыдущего воплощения этого экземпляра, остается присоединенной к экземпляру после успешного завершения JetInit . Нет необходимости вызывать JetAttachDatabase после JetInit , чтобы обеспечить последующий доступ к базе данных. Если функция JetAttachDatabase вызывается после функции JetInit , будет возвращено предупреждение JET_wrnDatabaseAttached. Это предупреждение указывает, что вложение базы данных сохранено и может быть проигнорировано.

Windows XP: В Windows XP и более поздних версиях все базы данных автоматически отсоединяются от экземпляра с помощью JetInit. Это означает, что JetAttachDatabase в данном случае всегда должна вызываться после JetInit .

Любое приложение, написанное для запуска в Windows 2000 и более поздних выпусках, всегда должно вызывать JetAttachDatabase после JetInit. Если приложение работает в Windows 2000, в некоторых случаях оно должно ожидать JET_wrnDatabaseAttached. Дополнительные сведения см. в разделе JetAttachDatabase .

Требования

Требование Значение

Клиент

Требуется Windows Vista, Windows XP или Windows 2000 Professional.

Сервер

Требуется Windows Server 2008, Windows Server 2003 или Windows 2000 Server.

Верхняя часть

Объявлено в Esent.h.

Библиотека

Используйте ESENT.lib.

DLL

Требуется ESENT.dll.

См. также:

Расширяемые файлы подсистемы хранилища
JET_ERR
JET_GRBIT
JET_INSTANCE
JET_paramMaxTemporaryTables
JET_paramRecovery
JetAttachDatabase
JetCreateInstance
JetInit3
JetSetSystemParameter