Transaksi (Azure Synapse Analytics dan Microsoft Fabric)
Berlaku untuk: Gudang Azure Synapse Analytics Analytics Platform System (PDW) di Microsoft Fabric
Transaksi adalah grup dari satu atau beberapa pernyataan database yang sepenuhnya diterapkan atau sepenuhnya digulung balik. Setiap transaksi bersifat atomik, konsisten, terisolasi, dan tahan lama (ACID). Jika transaksi berhasil, semua pernyataan di dalamnya akan diterapkan. Jika transaksi gagal, setidaknya salah satu pernyataan dalam grup gagal, maka seluruh grup digulung balik.
Awal dan akhir transaksi tergantung pada pengaturan AUTOCOMMIT dan pernyataan BEGIN TRANSACTION, COMMIT, dan ROLLBACK.
Jenis transaksi berikut didukung:
Transaksi eksplisit dimulai dengan pernyataan BEGIN TRANSACTION dan diakhiri dengan pernyataan COMMIT atau ROLLBACK.
Transaksi penerapan otomatis dimulai secara otomatis dalam sesi dan tidak dimulai dengan pernyataan BEGIN TRANSACTION. Saat pengaturan AUTOCOMMIT AKTIF, setiap pernyataan berjalan dalam transaksi dan tidak diperlukan COMMIT atau ROLLBACK eksplisit. Ketika pengaturan AUTOCOMMIT NONAKTIF, pernyataan COMMIT atau ROLLBACK diperlukan untuk menentukan hasil transaksi. Transaksi autocommit dimulai segera setelah pernyataan COMMIT atau ROLLBACK, atau setelah pernyataan SET AUTOCOMMIT OFF.
Catatan
Untuk informasi selengkapnya tentang transaksi di Microsoft Fabric, lihat Transaksi di Microsoft Fabric.
Sintaks
BEGIN TRANSACTION [;]
COMMIT [ TRAN | TRANSACTION | WORK ] [;]
ROLLBACK [ TRAN | TRANSACTION | WORK ] [;]
SET AUTOCOMMIT { ON | OFF } [;]
SET IMPLICIT_TRANSACTIONS { ON | OFF } [;]
Argumen
BEGIN TRANSACTION
Menandai titik awal transaksi eksplisit.
COMMIT [ WORK ]
Menandai akhir transaksi eksplisit atau autocommit. Pernyataan ini menyebabkan perubahan transaksi diterapkan secara permanen ke database. Pernyataan COMMIT identik dengan COMMIT WORK, COMMIT TRAN, dan COMMIT TRANSACTION.
ROLLBACK [ WORK ]
Mengembalikan transaksi ke awal transaksi. Tidak ada perubahan untuk transaksi yang diterapkan pada database. Pernyataan ROLLBACK identik dengan ROLLBACK WORK, ROLLBACK TRAN, dan ROLLBACK TRANSACTION.
ATUR AUTOCOMMIT { ON | NONAKTIF }
Menentukan bagaimana transaksi dapat dimulai dan berakhir.
AKTIF
Setiap pernyataan berjalan di bawah transaksinya sendiri dan tidak ada pernyataan COMMIT atau ROLLBACK eksplisit yang diperlukan. Transaksi eksplisit diizinkan saat AUTOCOMMIT AKTIF.
TIDAK AKTIF
Azure Synapse Analytics dan Microsoft Fabric secara otomatis memulai transaksi ketika transaksi belum berlangsung. Setiap pernyataan berikutnya dijalankan sebagai bagian dari transaksi dan COMMIT atau ROLLBACK diperlukan untuk menentukan hasil transaksi. Segera setelah transaksi diterapkan atau digulung balik dalam mode operasi ini, mode tetap NONAKTIF, transaksi baru dimulai. Transaksi eksplisit tidak diizinkan ketika AUTOCOMMIT NONAKTIF.
Jika Anda mengubah pengaturan AUTOCOMMIT dalam transaksi aktif, pengaturan tersebut memengaruhi transaksi saat ini dan tidak mempengaruhi hingga transaksi selesai.
Jika AUTOCOMMIT AKTIF, menjalankan pernyataan SET AUTOCOMMIT ON lain tidak berpengaruh. Demikian juga, jika AUTOCOMMIT NONAKTIF, menjalankan SET AUTOCOMMIT OFF lain tidak berpengaruh.
SET IMPLICIT_TRANSACTIONS { ON | NONAKTIF }
Ini mengalihkan mode yang sama dengan SET AUTOCOMMIT. Saat AKTIF, SET IMPLICIT_TRANSACTIONS mengatur koneksi ke dalam mode transaksi implisit. Saat NONAKTIF, koneksi akan mengembalikan koneksi ke mode autocommit. Untuk informasi selengkapnya, lihat SET IMPLICIT_TRANSACTIONS (Transact-SQL).
Izin
Tidak ada izin khusus yang diperlukan untuk menjalankan pernyataan terkait transaksi. Izin diperlukan untuk menjalankan pernyataan dalam transaksi.
Penanganan Kesalahan
Jika COMMIT atau ROLLBACK dijalankan dan tidak ada transaksi aktif, kesalahan akan muncul.
Jika BEGIN TRANSACTION dijalankan saat transaksi sudah berlangsung, kesalahan akan muncul. Ini dapat terjadi jika BEGIN TRANSACTION terjadi setelah pernyataan BEGIN TRANSACTION yang berhasil atau ketika sesi berada di bawah SET AUTOCOMMIT OFF.
Jika kesalahan selain kesalahan pernyataan run-time mencegah keberhasilan penyelesaian transaksi eksplisit, mesin daabase secara otomatis menggulung balik transaksi dan membebaskan semua sumber daya yang disimpan oleh transaksi. Misalnya, jika koneksi jaringan klien rusak atau klien keluar dari aplikasi, setiap transaksi yang tidak dilakukan untuk koneksi digulung balik ketika jaringan memberi tahu instans jeda.
Jika kesalahan pernyataan run-time terjadi dalam batch, Azure Synapse Analytics dan Microsoft Fabric berperilaku konsisten dengan SQL ServerXACT_ABORT diatur ke AKTIF dan seluruh transaksi digulung balik. Untuk informasi selengkapnya tentang pengaturan XACT_ABORT , lihat MENGATUR XACT_ABORT (Transact-SQL).
Keterangan Umum
Sesi hanya dapat menjalankan satu transaksi pada waktu tertentu; titik simpan dan transaksi berlapis tidak didukung.
Programmer bertanggung jawab untuk menerbitkan COMMIT hanya pada titik ketika semua data yang direferensikan oleh transaksi secara logis benar.
Ketika sesi dihentikan sebelum transaksi selesai, transaksi digulung balik.
Mode transaksi dikelola pada tingkat sesi. Misalnya, jika satu sesi memulai transaksi eksplisit atau mengatur AUTOCOMMIT ke NONAKTIF, atau mengatur IMPLICIT_TRANSACTIONS ke AKTIF, itu tidak berpengaruh pada mode transaksi sesi lain.
Batasan dan Pembatasan
Anda tidak dapat mengembalikan transaksi setelah pernyataan COMMIT dikeluarkan karena modifikasi data telah dibuat sebagai bagian permanen dari database.
Perintah CREATE DATABASE (Azure Synapse Analytics) dan DROP DATABASE (Transact-SQL) tidak dapat digunakan di dalam transaksi eksplisit.
Azure Synapse Analytics dan Microsoft Fabric tidak memiliki mekanisme berbagi transaksi. Ini menyiratkan bahwa pada titik waktu tertentu, hanya satu sesi yang dapat melakukan pekerjaan pada transaksi apa pun dalam sistem.
Perilaku Penguncian
Penguncian memastikan integritas transaksi dan mempertahankan konsistensi database saat beberapa pengguna mengakses data secara bersamaan. Penguncian digunakan oleh transaksi implisit dan eksplisit. Setiap transaksi meminta kunci dari berbagai jenis pada sumber daya, seperti tabel atau database tempat transaksi bergantung.
Semua kunci adalah tingkat tabel atau lebih tinggi. Kunci memblokir transaksi lain agar tidak memodifikasi sumber daya dengan cara yang akan menyebabkan masalah untuk transaksi yang meminta kunci. Setiap transaksi membebaskan kuncinya ketika tidak lagi memiliki dependensi pada sumber daya yang terkunci; transaksi eksplisit menyimpan kunci hingga transaksi selesai ketika dilakukan atau digulung balik.
Contoh:
J. Menggunakan transaksi eksplisit
BEGIN TRANSACTION;
DELETE FROM HumanResources.JobCandidate
WHERE JobCandidateID = 13;
COMMIT;
B. Mengembalikan transaksi
Contoh berikut menunjukkan efek menggulung balik transaksi. Dalam contoh ini, pernyataan ROLLBACK akan mengembalikan pernyataan INSERT, tetapi tabel yang dibuat masih akan ada.
CREATE TABLE ValueTable (id INT);
BEGIN TRANSACTION;
INSERT INTO ValueTable VALUES(1);
INSERT INTO ValueTable VALUES(2);
ROLLBACK;
C. Mengatur AUTOCOMMIT
Contoh berikut mengatur pengaturan AUTOCOMMIT ke ON
.
SET AUTOCOMMIT ON;
Contoh berikut mengatur pengaturan AUTOCOMMIT ke OFF
.
SET AUTOCOMMIT OFF;
D. Menggunakan transaksi multi-pernyataan implisit
SET AUTOCOMMIT OFF;
CREATE TABLE ValueTable (id INT);
INSERT INTO ValueTable VALUES(1);
INSERT INTO ValueTable VALUES(2);
COMMIT;