File Mesin Penyimpanan yang Dapat Diperluas

Berlaku untuk: Windows | Windows Server

File Mesin Penyimpanan yang Dapat Diperluas

Extensible Storage Engine menggunakan jenis file berikut:

Tabel ini berisi gambaran umum nama file data yang dikelola oleh ESE. Untuk Windows Vista dan yang lebih baru, pengaturan JET_paramLegacyNames berdampak pada nama file yang digunakan.

Label Nilai

File Log Transaksi

File log transaksi berisi operasi pada file database. Mereka berisi informasi yang cukup untuk membawa database ke status yang konsisten secara logis setelah penghentian proses atau pematian sistem yang tidak terduga.

Nama file log bergantung pada nama dasar tiga huruf, yang dapat diatur dengan JET_paramBaseName. Contoh di bawah ini menggunakan nama dasar "edb", karena itu adalah nama dasar default. Ekstensi untuk file log transaksi akan berupa .log atau .jtx tergantung pada apakah JET_bitESE98FileNames diatur dalam parameter JET_paramLegacyFileNames. Untuk informasi selengkapnya, lihat Parameter Sistem Mesin Penyimpanan yang Dapat Diperluas.

File log transaksi diberi nama <base><generation-number.log>, dimulai dengan 1. Nomor pembuatan log dalam format heksadesimal. Misalnya, edb00001.log adalah log pertama, dan edb000ff.log adalah log ke-255. File log memiliki lima digit heksadesimal dalam nama file log, hingga file log ke-1048576, di mana file log mulai dinamai dalam format 11.3 (misalnya, edb00100000.log). <base.log> selalu merupakan file log yang saat ini sedang digunakan. Jika mesin database tidak aktif, pembuatan edb.log dapat diidentifikasi menggunakan perintah berikut: esentutl.exe -ml edb.log.

Meskipun file log transaksi memiliki . Ekstensi LOG yang umumnya terkait dengan file teks, file log transaksi dalam format biner dan tidak boleh diedit oleh pengguna. Operasi database ditulis ke log terlebih dahulu. Data dapat ditulis ke file database nanti; mungkin segera, berpotensi jauh kemudian. Jika terjadi proses atau penghentian sistem yang tidak terduga, operasi masih ada dalam file log, dan transaksi yang tidak lengkap dapat digulung balik. Tindakan memutar ulang file log transaksi disebut pemulihan lunak, dan dilakukan secara otomatis ketika JetInit atau JetInit2 dipanggil. Pemulihan lunak juga dapat dilakukan secara manual dengan opsi "-r" dari program Esentutl.exe. Tindakan memutar ulang file log transaksi pada database yang dipulihkan dari cadangan disebut pemulihan keras.

File log berukuran tetap, dapat disesuaikan dengan JET_paramLogFileSize. Ketika file log saat ini (yaitu, edb.log) terisi, file log akan diganti namanya menjadi <base><generation-number.log>, dan file log transaksi baru diperlukan dalam aliran log transaksi.

Setiap instans database memiliki urutan file log tunggal yang terkait dengannya. Windows XP memperkenalkan JetCreateInstance, memungkinkan beberapa urutan file log transaksi digunakan oleh satu proses. Beberapa urutan file log transaksi tidak dapat ada di direktori yang sama.

File log transaksi hampir tidak boleh dimanipulasi, diganti namanya, dipindahkan, atau dihapus secara manual karena kerusakan data dapat diakibatkan.

File log transaksi akan dihapus oleh mesin database selama pencadangan penuh (lihat JetBackup, JetTruncateLog, JetTruncateLogInstance), atau selama operasi normal, jika pengelogan melingkar diaktifkan.

Setelah file log transaksi diisi, mesin database perlu membuat file log baru. Pengelogan melingkar adalah sarana di mana file log dapat secara otomatis dibersihkan oleh mesin database ketika tidak lagi diperlukan untuk pemulihan crash. Proses ini adalah alternatif untuk menghapus file log sebagai produk sampingan dari melakukan pencadangan. Pengelogan melingkar dapat dikontrol dengan parameter sistem JET_paramCircularLog . File log transaksi tidak boleh dihapus menggunakan metode lain.

File Log Transaksi Sementara

Ketika edb.log terisi, ESE perlu membuat file baru. File transaksi log baru dikenal sebagai file log transaksi sementara sebelum digunakan oleh ESE.

Saat file log baru dibuat dan ukurannya diperluas, file log akan disebut <tmp.log dasar>. Membuat file baru bisa menjadi operasi yang berpotensi mahal, sehingga ESE akan membuat file log berikutnya secara proaktif sebagai tugas latar belakang.

Karena file log transaksi sementara dibuat untuk mengantisipasi kebutuhan akan file log transaksi baru, file log tersebut tidak berisi informasi yang berguna.

File Log Transaksi Yang Dipesan

File log transaksi yang dipesan dibuat ketika mesin mulai memungkinkan operasi penting dicatat untuk mendapatkan pematian yang bersih.

Windows Vista: Di Windows Vista dan yang lebih baru, File Log Transaksi Yang Dipesan diberi nama <dasar>RESXXXXX.jrs.

Windows Server 2003: Di Windows Server 2003 dan yang lebih lama, File Log Transaksi Yang Dipesan diberi nama res1.log dan res2.log.

Ketika mesin database kehabisan ruang disk, mesin database tidak dapat membuat file log baru. Hal paling aman yang harus dilakukan adalah mematikan dengan bersih, tetapi beberapa operasi (seperti operasi putar kembali) masih harus dicatat. Sebagian besar operasi database akan gagal selama tahap ini.

Karena file log transaksi yang dipesan dibuat untuk mengantisipasi kebutuhan file log transaksi dalam skenario di luar disk, file log tersebut tidak berisi informasi yang berguna.

File Titik Pemeriksaan

File titik pemeriksaan menyimpan titik pemeriksaan untuk urutan file log transaksi tertentu. File titik pemeriksaan diberi nama <base.chk> atau <base.jcp>, tergantung pada apakah JET_bitESE98FileNames diatur dalam parameter JET_paramLegacyFileNames, dan lokasinya diberikan oleh JET_paramSystemPath.

Operasi database pertama kali ditulis ke file log lalu di-cache dalam memori. Pada titik selanjutnya, operasi ditulis ke file database, tetapi karena alasan performa, urutan operasi ditulis ke file database mungkin tidak cocok dengan urutan di mana mereka awalnya dicatat. Operasi yang ditulis ke file log transaksi akan berada di salah satu dari dua status:

  • Ditulis ke file log transaksi dan file database.

  • Ditulis ke file log transaksi dan belum ditulis ke file database.

Banyak operasi database dapat disimpan dalam satu file log transaksi. File log tertentu dapat terdiri dari item berikut:

  • Semua operasi ditulis ke file database.

  • Tidak ada operasi yang ditulis ke file database

  • Campuran operasi yang ditulis ke file database dan operasi yang belum ditulis ke file database.

Titik pemeriksaan mengacu pada titik waktu dalam aliran log transaksi di mana semua operasi sebelum titik pemeriksaan telah ditulis ke file database. Tidak ada jaminan tentang operasi yang terjadi setelah titik pemeriksaan; beberapa mungkin dalam memori, dan beberapa mungkin ditulis ke database.

Karena semua operasi dalam file log sebelum titik pemeriksaan diwakili dalam file database, hanya file log transaksi setelah titik pemeriksaan yang diperlukan untuk pemulihan lunak untuk membawa database tertentu ke dalam keadaan bersih.

File Database

File database berisi skema untuk semua tabel dalam database, rekaman untuk semua tabel dalam database, dan indeks di atas tabel. Lokasinya diberikan menggunakan JetCreateDatabase, JetCreateDatabase2, JetAttachDatabase, atau JetAttachDatabase2.

Database dimatikan dengan bersih hanya setelah panggilan berhasil ke JetTerm atau JetTerm2.

Program Esentutl.exe dapat mendeteksi apakah database dimatikan dengan bersih dengan opsi "-mh". Misalnya, "esentutl.exe -mh sample.edb" akan membaca header database database bernama sample.edb, dan mencetak status sample.edb. Ini dapat mencetak "State: Clean Shutdown" atau "State: Dirty Shutdown".

Database yang belum dimatikan dengan bersih dalam keadaan matikan yang kotor. Sebelum Windows XP, status ini disebut tidak konsisten. Database kotor (tidak konsisten) dapat dibawa ke keadaan bersih dengan pemulihan lunak. Database yang rusak tidak sama dengan database kotor ("tidak konsisten").

Database yang rusak mengacu pada kerusakan fisik atau logis, dan tidak dapat diperbaiki dengan pemulihan lunak. Kerusakan fisik dapat sedikit membalik, yang akan sering ditangkap oleh checksum pada halaman database. Checksum yang gagal dalam file database memanifestasikan dirinya sebagai kesalahan JET_errReadVerifyFailure.

Hanya database yang dimatikan dengan bersih yang dapat dipindahkan atau diganti namanya dengan aman. Jika database tidak dimatikan dengan bersih, database tidak dapat dipindahkan atau diganti namanya secara otomatis.

Beberapa database dapat dikaitkan dengan satu urutan file log transaksi.

Database Sementara

Database sementara digunakan sebagai penyimpanan cadangan untuk temptable dan juga digunakan saat membuat indeks.

Nama dan lokasi dikonfigurasi dengan JET_paramTempPath.

Temptable dibuat dengan JetOpenTempTable, JetOpenTempTable2, JetOpenTempTable3, JetOpenTemporaryTable. Mereka juga dibuat oleh beberapa panggilan API dan digunakan untuk mengembalikan informasi skema (seperti JetGetIndexInfo).

Menghapus File Peta

Dimulai dengan Windows 10 Anniversary Update (klien) dan Windows Server 2016 (server), ESE menambahkan tingkat perlindungan tambahan terhadap penulisan yang hilang (atau kehilangan flush) 1, memungkinkannya mendeteksi peristiwa tersebut menginisialisasi ulang lintas proses2. Fitur ini memerlukan metadata yang bertahan ke file terpisah yang disebut file "flush map".

Satu file peta flush dibuat untuk setiap file database, dan terletak di direktori yang sama. File dinamai mirip dengan file database, tetapi dengan ekstensi yang berbeda. Misalnya, jika aplikasi klien membuat database dengan jalur lengkap C:\MyDirectory\MyDabatase.edb, file peta flush yang sesuai adalah C:\MyDirectory\MyDabatase.jfm.

Peningkatan ini memperkenalkan dua persyaratan tentang bagaimana file database harus diberi nama:

  • Dua database dalam direktori yang sama tidak boleh memiliki nama file yang sama dengan ekstensi yang berbeda. Misalnya: C:\MyDirectory\MyDabatase.db1 dan C:\MyDirectory\MyDabatase.db2.

  • 2. Database tidak boleh memiliki ekstensi .jfm.

Saat Anda menyalin atau memindahkan file database secara manual, file peta flush yang sesuai juga harus, masing-masing, disalin atau dipindahkan ke direktori tujuan yang sama. Jika file peta flush tidak ada pada saat lampiran database baru (melalui JetAttachDatabase, file baru akan dibuat dan diisi ulang sesuai permintaan saat halaman dibaca dari database. Pencampuran database yang tidak cocok dan file peta flush ditangani oleh ESE, dan memaksa peta flush yang tidak cocok untuk dihapus dan dibuat ulang dari awal.

Ukuran file peta flush berbanding lurus dengan file database terkait dan kira-kira sama dengan (semua ukuran dalam byte, hasil harus dibulatkan ke kelipatan berikutnya dari 8.192):

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

Misalnya: untuk database 1,5GB menggunakan ukuran halaman 32KB, perkiraan ukuran peta flush adalah 24.576 byte (atau 24KB).

File peta flush perlu disegarkan saat halaman database dibersihkan. Jika pengelogan transaksional diaktifkan (misalnya, JET_paramRecovery diatur ke "on", default), merefresh peta flush dilakukan saat aplikasi klien melakukan modifikasi pada database. Rata-rata, seluruh peta flush ditulis ke media non-volatil sekali untuk setiap 20% log transaksional JET_paramCheckpointDepthMax -worth (dalam byte) yang dihasilkan. Jumlah operasi tulis tergantung pada seberapa terdistribusi di seluruh database modifikasi. Tetapi paling banyak, kira-kira (semua ukuran dalam byte):

<flush map file size> / JET_paramMaxCoalesceWriteSize

Jika pengelogan transaksional dinonaktifkan (misalnya, JET_paramRecovery diatur ke "nonaktif"), peta flush akan disegarkan hanya sekali ketika database secara eksplisit dilepas dengan bersih (melalui JetDetachDatabase, atau secara implisit terlepas dengan menghentikan instans ESE terkait (melalui salah satu fungsi JetTerm , selama JET_bitTermDirty tidak diteruskan).

1 Tulisan yang hilang (atau kehilangan flush) didefinisikan sebagai operasi tulis yang berhasil dikembalikan dari sistem operasi ke mesin database ESE tetapi data aktual tidak pernah disimpan ke file database di media non-volatil. Biasanya disebabkan oleh tumpukan penyimpanan yang tidak berfungsi atau salah dikonfigurasi (perangkat lunak atau perangkat keras). Aplikasi klien mungkin menerima kesalahan JET_errReadLostFlushVerifyFailure dari fungsi ESE yang memerlukan membaca data dari database jika data terletak di wilayah yang mengalami peristiwa tulis yang hilang.

2 Kemampuan untuk mendeteksi tulisan yang hilang dalam masa pakai proses telah ada sejak Windows 8 (klien) dan Windows Server 2012 (server).