MULAI TRANSAKSI TERDISTRIBUSI (T-SQL)

Berlaku untuk:SQL ServerAzure SQL Managed Instance

Menentukan awal transaksi terdistribusi Transact-SQL. Saat menggunakan SQL Server, transaksi terdistribusi dikelola oleh Koordinator Transaksi Terdistribusi Microsoft (MS DTC).

  • Dalam kasus Azure SQL Managed Instance, transaksi terdistribusi dikelola oleh layanan itu sendiri dan bukan MS DTC. Untuk informasi tentang transaksi terdistribusi di Azure SQL Database dan Azure SQL Managed Instance, lihat Transaksi terdistribusi di seluruh database cloud.

Konvensi sintaks transact-SQL

Sintaksis

BEGIN DISTRIBUTED { TRAN | TRANSACTION }
     [ transaction_name | @tran_name_variable ]
[ ; ]

Catatan

Untuk melihat sintaks Transact-SQL untuk SQL Server 2014 (12.x) dan versi yang lebih lama, lihat Dokumentasi versi sebelumnya.

Argumen

transaction_name

Adalah nama transaksi yang ditentukan pengguna yang digunakan untuk melacak transaksi terdistribusi dalam utilitas MS DTC. transaction_name harus sesuai dengan aturan untuk pengidentifikasi dan harus <= 32 karakter.

@tran_name_variable

Adalah nama variabel yang ditentukan pengguna yang berisi nama transaksi yang digunakan untuk melacak transaksi terdistribusi dalam utilitas MS DTC. Variabel harus dideklarasikan dengan jenis data char, varchar, nchar, atau nvarchar .

Keterangan

Instans Mesin Database SQL Server yang menjalankan pernyataan BEGIN DISTRIBUTED TRANSACTION adalah asal transaksi dan mengontrol penyelesaian transaksi. Ketika pernyataan COMMIT TRANSACTION atau ROLLBACK TRANSACTION berikutnya dikeluarkan untuk sesi tersebut, instans pengendali meminta MS DTC mengelola penyelesaian transaksi terdistribusi di semua instans yang terlibat.

Isolasi rekam jepret tingkat transaksi tidak mendukung transaksi terdistribusi.

Cara utama instans jarak jauh Mesin Database terdaftar dalam transaksi terdistribusi adalah ketika sesi yang sudah terdaftar dalam transaksi terdistribusi menjalankan kueri terdistribusi yang mereferensikan server tertaut.

Misalnya, jika BEGIN DISTRIBUTED TRANSACTION dikeluarkan di ServerA, sesi memanggil prosedur tersimpan di ServerB dan prosedur tersimpan lainnya di ServerC. Prosedur tersimpan di ServerC menjalankan kueri terdistribusi terhadap ServerD, lalu keempat komputer terlibat dalam transaksi terdistribusi. Instans Mesin Database di ServerA adalah instans pengontrol asal untuk transaksi.

Sesi yang terlibat dalam transaksi terdistribusi Transact-SQL tidak mendapatkan objek transaksi yang dapat mereka teruskan ke sesi lain untuk secara eksplisit mendaftar dalam transaksi terdistribusi. Satu-satunya cara bagi server jarak jauh untuk mendaftar dalam transaksi adalah dengan menjadi target kueri terdistribusi atau panggilan prosedur tersimpan jarak jauh.

Ketika kueri terdistribusi dijalankan dalam transaksi lokal, transaksi secara otomatis dipromosikan ke transaksi terdistribusi jika sumber data OLE DB target mendukung ITransactionLocal. Jika sumber data OLE DB target tidak mendukung ITransactionLocal, hanya operasi baca-saja yang diizinkan dalam kueri terdistribusi.

Sesi yang sudah terdaftar dalam transaksi terdistribusi melakukan panggilan prosedur tersimpan jarak jauh yang mereferensikan server jarak jauh.

Opsi mengontrol sp_configure remote proc trans apakah panggilan ke prosedur tersimpan jarak jauh dalam transaksi lokal secara otomatis menyebabkan transaksi lokal dipromosikan ke transaksi terdistribusi yang dikelola oleh MS DTC. Opsi SET tingkat koneksi REMOTE_PROC_TRANSACTIONS dapat digunakan untuk mengambil alih default instans yang dibuat oleh sp_configure remote proc trans. Dengan opsi ini diatur, panggilan prosedur tersimpan jarak jauh menyebabkan transaksi lokal dipromosikan ke transaksi terdistribusi. Koneksi yang membuat transaksi MS DTC menjadi asal transaksi. COMMIT TRANSACTION memulai penerapan terkoordinasi MS DTC. sp_configure remote proc trans Jika opsinya aktif, panggilan prosedur tersimpan jarak jauh dalam transaksi lokal secara otomatis dilindungi sebagai bagian dari transaksi terdistribusi tanpa harus menulis ulang aplikasi untuk secara khusus menerbitkan BEGIN DISTRIBUTED TRANSACTION alih-alih BEGIN TRANSACTION.

Untuk informasi selengkapnya tentang lingkungan dan proses transaksi terdistribusi, lihat dokumentasi Koordinator Transaksi Terdistribusi Microsoft.

Izin

Memerlukan keanggotaan dalam peran publik.

Contoh

Contoh ini menghapus kandidat dari database AdventureWorks2022 pada instans lokal Mesin Database dan instans di server jarak jauh. Database lokal dan jarak jauh akan menerapkan atau mengembalikan transaksi.

Catatan

Kecuali MS DTC saat ini diinstal pada komputer yang menjalankan instans Mesin Database, contoh ini menghasilkan pesan kesalahan. Untuk informasi selengkapnya tentang menginstal MS DTC, lihat dokumentasi Koordinator Transaksi Terdistribusi Microsoft.

USE AdventureWorks2022;
GO
BEGIN DISTRIBUTED TRANSACTION;
-- Delete candidate from local instance.
DELETE AdventureWorks2022.HumanResources.JobCandidate
    WHERE JobCandidateID = 13;
-- Delete candidate from remote instance.
DELETE RemoteServer.AdventureWorks2022.HumanResources.JobCandidate
    WHERE JobCandidateID = 13;
COMMIT TRANSACTION;
GO

Langkah berikutnya