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