Một giao tác phân tán bắt đầu trong Transact-SQL với một cấu trúc tương đối đơn giản:
a. Một kịch bản hay ứng dụng Transact-SQL kết nối thực thi một lệnh Transact-SQL là bắt đầu một giao tác phân tán.
b. Khi SQL Server Database Engine thực thi câu lệnh chính là quá trình điều khiển máy chủ trong giao tác.
c. Tiếp theo kịch bản hoặc ứng dụng thực thi trên các máy cục bộ hoặc phân tán các truy vấn trở lại các linked server.
d. Khi các truy vấn phân tán và thủ tục điều khiển từ xa được gọi để thực hiện, server điều khiển sẽ tự động gọi điều phối giao tác phân tán (Microsoft Distributed Transaction Coordinator (MS DTC)) để tạo danh sách các linked server trong giao tác phân tán.
e. Khi kịch bản hay ứng dụng đưa ra lệnh COMMIT hoặc ROLLBACK, server điểu khiển sẽ gọi MS DTC để quản lý hai giai đoạn hoặc là chuyển giao quá trình xử lý hoặc là thông báo cho các linked server để phục hồi lại các giao dịch.
Các câu lệnh Transact-SQL điều khiển các giao tác phân tán rất ít vì hầu hết các công việc được thực hiện nội bộ bởi các SQL Server Database Engine và MS DTC.
• Một lệnh Transact-SQL yêu cầu những kịch bản hay ứng dụng trong Transact-SQL gồm:
- Bắt đầu một giao tác phân tán.
- Thực thi các truy vấn phân tán trở lại các máy chủ.
- Gọi các câu lệnh chuẩn Transact-SQL: COMMIT TRANSACTION, COMMIT WORD, ROLLBACK TRANSACTION hay ROLLBACK WORK để kết thúc giao tác.
• Đối với bất kỳ giao tác phân tán Transact-SQL thì Database Engine sẽ xử lý kịch bản hoặc kết nối tự động để gọi MS DTC nhằm chuyển giao hay phục hồi giao tác.
• Có thể bắt đầu giao tác phân tán trong Transact-SQL bằng các cách sau:
Cú pháp:
BEGIN DISTRIBUTED TRANSACTION [transaction_name | @tran_name_variable]
Các tham số:
transaction_name: Là một giao tác người dùng định nghĩa để theo dõi giao tác phân tán bên trong tiện ích MS DTC. Transaction_name phải thích ứng với các quy luật định danh nhưng chỉ 32 ký tự đầu tiên được sử dụng.
@tran_name_variable: Là tên của biến người dùng định nghĩa chứa tên một giao tác dùng để theo dõi giao tác phân tán bên trong tiện ích của MS DTC. Biến phải được khai báo với một trong các kiểu dữ liệu char, varchar, nchar, hoặc nvarchar.
Phân quyền
BEGIN DISTRIBUTED TRANSACTION phân quyền mặc định đến các người dùng hợp lệ. Ví dụ:
USE pubs GO
BEGIN DISTRIBUTED TRANSACTION UPDATE authors
SET au_lname = ‘McDonald’ WHERE au_id = ‘409-56-7008’
EXECUTE remote.pubs.dbo.changeauth_lname ‘409-56-7008’,’McDonald’ COMMIT TRAN