Fungsi JetBeginTransaction
Berlaku untuk: Windows | Windows Server
Fungsi JetBeginTransaction
Fungsi JetBeginTransaction menyebabkan sesi memasuki transaksi dan membuat titik penyimpanan baru. Fungsi ini dapat dipanggil lebih dari sekali pada satu sesi untuk menyebabkan pembuatan titik penyimpanan tambahan. Titik penyimpanan ini dapat digunakan untuk menyimpan atau membuang perubahan secara selektif pada status database.
JET_ERR JET_API JetBeginTransaction(
__in JET_SESID sesid
);
Parameter
sesid
Sesi yang digunakan untuk panggilan ini.
Tampilkan Nilai
Fungsi ini mengembalikan jenis data JET_ERR dengan salah satu kode pengembalian berikut. Untuk informasi selengkapnya tentang kemungkinan kesalahan ESE, lihat Kesalahan Mesin Penyimpanan yang Dapat Diperluas dan Parameter Penanganan Kesalahan.
Menampilkan kode |
Deskripsi |
---|---|
JET_errSuccess |
Operasi berhasil diselesaikan. |
JET_errClientRequestToStopJetService |
Tidak dimungkinkan untuk menyelesaikan operasi karena semua aktivitas pada instans yang terkait dengan sesi telah berhenti sebagai akibat dari panggilan ke JetStopService. |
JET_errInstanceUnavailable |
Tidak dimungkinkan untuk menyelesaikan operasi karena instans yang terkait dengan sesi telah mengalami kesalahan fatal yang mengharuskan akses ke semua data dicabut untuk melindungi integritas data tersebut. Kesalahan ini hanya akan dikembalikan oleh Windows XP dan rilis yang lebih baru. |
JET_errNotInitialized |
Tidak dimungkinkan untuk menyelesaikan operasi karena instans yang terkait dengan sesi belum diinisialisasi. |
JET_errRestoreInProgress |
Tidak dimungkinkan untuk menyelesaikan operasi karena operasi pemulihan sedang berlangsung pada instans yang terkait dengan sesi. |
JET_errSessionSharingViolation |
Sesi yang sama tidak dapat digunakan untuk lebih dari satu utas secara bersamaan. Kesalahan ini hanya akan dikembalikan oleh Windows XP dan rilis yang lebih baru. |
JET_errTermInProgress |
Tidak dimungkinkan untuk menyelesaikan operasi karena instans yang terkait dengan sesi sedang dimatikan. |
JET_errTransTooDeep |
Transaksi baru tidak dapat dimulai karena sesi sudah pada kedalaman titik penyimpanan maksimum yang diizinkan oleh mesin database. |
Jika berhasil, sesi yang disediakan akan berada di dalam transaksi. Jika sesi sebelumnya berada di dalam transaksi, maka titik penyimpanan baru akan dibuat.
Jika gagal, status transaksional sesi tidak akan berubah. Tidak ada perubahan pada status database yang akan terjadi.
Keterangan
Mesin database menyediakan model isolasi rekam jepret untuk transaksinya. Ini berarti bahwa, ketika sesi pertama kali masuk ke status transaksi, sesi akan melihat seluruh database dibekukan pada waktu pada awal transaksi. Sesi tidak perlu membaca mengunci data apa pun karena selalu dapat mengakses versi data yang sesuai. Ini berarti bahwa sesi yang memperbarui data tidak akan pernah memblokir sesi yang berbeda untuk membaca data tersebut.
Implikasi lain dari penggunaan isolasi rekam jepret adalah model penguncian yang digunakan untuk pembaruan. Mesin database akan memberikan kunci tulis pada bagian data tertentu ke sesi pertama yang memintanya. Kunci tulis ini dirilis ketika transaksi dilakukan atau dibatalkan sepenuhnya sehingga sesi tidak lagi dalam transaksi. Saat sesi memegang kunci tulis, sesi lain yang meminta kunci tulis yang sama tidak akan memblokir hingga kunci tulis tersedia. Sebaliknya, sesi kedua itu akan segera gagal dengan JET_errWriteConflict. Untuk mengatasi konflik ini, sesi kedua harus membatalkan (atau menerapkan) transaksinya sepenuhnya, menunggu beberapa periode waktu kecil agar sesi pertama menerapkan atau membatalkan transaksinya, lalu memulai kembali.
Untuk mendukung isolasi rekam jepret, mesin database menyimpan semua versi semua data yang dimodifikasi dalam memori sejak saat transaksi aktif terlama pada sesi apa pun pertama kali dimulai. Ini memiliki implikasi penting untuk aplikasi Anda. Perilaku apa pun yang menyebabkan sejumlah besar versi dibangun dalam memori dapat menyebabkan instans menghabiskan ukuran penyimpanan versi maksimumnya (lihat JET_paramMaxVerPages di Parameter Sistem untuk informasi selengkapnya). Perilaku tersebut termasuk, tetapi tidak terbatas pada pembaruan yang sangat besar dalam satu transaksi dan transaksi yang berjalan sangat lama. Akibatnya, sangat penting untuk mengonfigurasi ukuran penyimpanan versi dengan benar untuk beban transaksional aplikasi yang diharapkan. Penting juga untuk berhati-hati untuk membatasi jumlah pembaruan yang dilakukan dalam satu transaksi. Selain itu, penting untuk membuat transaksi sesingkat mungkin dalam durasi di bawah skenario beban tinggi.
Sangat disarankan agar aplikasi selalu berada dalam konteks transaksi saat memanggil API ESE yang mengambil atau memperbarui data. Jika ini tidak dilakukan, mesin database akan secara otomatis membungkus setiap panggilan API ESE dari jenis ini dalam transaksi atas nama aplikasi. Biaya transaksi yang sangat singkat ini dapat bertambah dengan cepat dalam beberapa kasus.
Perilaku default mesin adalah membatasi penggunaan sesi ke utas yang sama sejak panggilan pertama ke JetBeginTransaction dilakukan sampai waktu ketika panggilan yang cocok ke JetCommitTransaction atau JetRollback dilakukan. Perilaku ini dapat diubah untuk menghapus pembatasan ini dengan mengatur konteks sesi kustom menggunakan JetSetSessionContext dan JetResetSessionContext.
Mesin database juga mendukung modifikasi skema transaksional. Misalnya, dimungkinkan untuk memulai transaksi baru, membuat tabel, menambahkan beberapa kolom, membuat indeks atau dua, lalu membatalkan transaksi. Elemen skema yang baru saja ditambahkan akan dihapus dari database. Dimungkinkan juga untuk mencampur modifikasi skema dan pembaruan database biasa dalam transaksi yang sama.
Persyaratan
Persyaratan | Nilai |
---|---|
Klien |
Memerlukan Windows Vista, Windows XP, atau Windows 2000 Professional. |
Server |
Memerlukan Windows Server 2008, Windows Server 2003, atau Windows 2000 Server. |
Header |
Dinyatakan dalam Esent.h. |
Pustaka |
Gunakan ESENT.lib. |
DLL |
Membutuhkan ESENT.dll. |
Lihat juga
JET_ERR
JET_GRBIT
JET_SESID
JetCommitTransaction
JetGetSystemParameter
JetResetSessionContext
JetRollback
JetSetSessionContext
JetStopService
Parameter Sistem