Cập nhật Subscriber lập tức(Immediate_Updating Subscriber)
Trong trường hợp đơn giản nhất, cả hai nhân bản snapshot và giao dịch làm việc dựa trên mô hình nhân bản một chiều ( dữ liệu chỉ được nhân bản từ Publisher đến Subscriber). Tuy nhiên MS SQL Server cung cấp thêm một mô hình mới cho phép Subscriber sửa đổi dữ liệu nhân bản, tùy chọn Immediate_Updating Subscriber sẽ cung cấp sự nhất quán giao dịch ngầm (latent transactional consistency) giữa các Subscriber (những sửa đổi sẽ xảy ra lập tức giữa Subscriber thực hiện tác vụ cập nhật và Publisher) mà không yêu cầu cập nhật chỉ được làm tại Publisher site. Tùy chọn này được thiết lập vào lúc publication được tạo và cho phép Subscriber cập nhật bản sao dữ liệu cục bộ của nó và những thay đổi đó sẽ được phản ánh lập tức đến Publisher bằng cách sử dụng two-phase commit protocol (2PC). 2PC được qu 843;n lý bởi Microsoft Distributed Transaction Coordinator (MS DTC). Nếu cập nhật có thể được thực hiện bằng 2PC thì Publisher sẽ phổ biến những thay đổi đến tất cả các Subscriber khác theo lịch làm việc của distribution agent (hay là theo lần làm tươi snapshot kế tiếp). Bởi vì Subscriber gốc đã cập nhật những thay đổi dữ liệu rồi, nên user có thể tiếp tục làm việc với những dữ liệu đó và đảm bảo những thay đổi đó sẽ được cập nhật tại Publisher. Mô hình này đảm bảo tính toàn vẹn giao dịch.
Với mô hình này, tính độc lập site sẽ giảm, nhưng vẫn cao hơn khi tất cả các Subscriber cập nhật lập tức.
Tuỳ chọn Immediate-updating Subscribers được hỗ trợ sử dụng những công cụ :
- Triggers
- Stored procedues
- Microsoft Distributed Transaction Coordinator (MS DTC)
- Phát hiện tranh chấp
- Phát hiện Loopback
Triggers:
Triggers tại Subcriber theo dõi các transaction và báo về cho các publication bằng cách sử dụng những stored procedure gọi từ xa (remote stored procedure call) trong 2- phase commit protocol (2PC) mà được điều khiển bởi MS DTC . Trigger sẽ thực hiện các công việc:
- Trích giá trị từ những bảng insert hay delete
- Gọi lệnh BEGIN DISTRIBUTED TRAN{SACTION}
- Thực thi một remote procedure để gọi stored procedure thích hợp tại Publisher, thông qua những giá trị từ những bảng insert hay delete.
- Điều khiển cập nhật giá trị timestamp & indentity mới tại Subcriber
- Nếu gọi những stored procedure từ xa thành công, thì commit transaction phản ánh chính xác cùng những thay đổi tại cả hai Publisher và Subcriber. Sau đó, Publisher bảo đảm rằng những thay đổi được phổ biến đến tất cả các Subcriber khác. Ngược lại nếu không được Subscriber sẽ hủy bỏ (rollback) giao dịch và trả về những lỗi cho user.
Stored procedures:
Stored procedure tại Publisher thực thi những giao dịch khi giao dịch đó không tranh chấp với những thay đổi được làm tại Publisher. Nếu một tranh chấp được phát hiện, giao dịch bị hủy bỏ (roll back) ở cả hai site. Mỗi article có ba hàm insert, delete, update. Mỗi hàm tại Publisher sẽ thực hiện các công việc sau:
- Insert procedure : Cố gắng insert hàng (row). Sau đó kiểm tra giá trị @@ROWCOUNT/@@ERROR và trả về tín hiệu thành công hay sự cố cho lời gọi trigger đó của Subscriber.
- Delete procedure : Cố gắng xóa hàng . Sau đó kiểm tra giá trị @@ROWCOUNT/@@ERROR và trả về tín hiệu thành công hay sự cố cho lời gọi trigger đó của Subscriber.
- Update procedure : cố gắng cập nhật hàng có cùng giá trị khoá và timestamp với hàng trong bảng delete. Kiểm tra@@ROWCOUNT / @@ERROR. Nếu thành công, trả về một giá trị timestamp mới.
SQL Server tổ chức 2 bảng (table) : delete và insert để lưu những dữ liệu thay đổi được làm trên một bảng (table) mà chưa được commit. Thực tế lệnh update bao gồm 1 hàng trong bảng insert và 1 hàng trong bảng delete.
Một giao dịch mà ảnh hưởng lên nhiều hàng thì giao dịch đó chỉ được commit khi tất cả các hàng đều được cập nhật lên cả 2 site .
MS DTC (Microsoft Distributed Transaction Coordinator):
MS DTC quản lý những tác vụ 2-phase commit giữa một Subcriber và Publisher trong một lệnh gọi từ xa ( BEGIN DISTRIBUTED TRANSACTION trong Transact-SQL ).
Phát hiện tranh chấp:
Những stored procedure của Publisher sử dụng cột timestamp để phát hiện một hàng có thay đổi hay không sau khi nó được nhân bản đến Subcriber. Khi Subcriber yêu cầu một giao dịch cập nhật lập tức (immdediate-update transaction), nó gửi giá trị timestamp đến Publisher với tất cả những cột khác trong hàng. Khi đó stored procedure của Publisher so sánh giá trị này với giá trị timestamp hiện tại của hàng. Nếu giá trị này giống nhau thì hàng không được sửa đổi sau khi nó được nhân bản đến Subcriber v& 71c9 #224; vì thế giao dịch này được chấp nhận.
Timestamp là một giá trị tự động tăng và duy nhất trong một cơ sở dữ liệu.
Phát hiện loopback :
Nếu một transaction được thực thi thành công lên một Subcriber và Publisher, không cần thiết phổ biến những thay đổi trở về cho Subcriber gốc (Subscriber đưa những thay đổi đến Publisher ). SQL Server có một cơ chế gọi là phát hiện loopback (loopback detection ) để xử lý tình huống này.
Những thông tin sử dụng để phát hiện loopback đựoc lưu thành một transaction bởi cơ sở transaction. Những bảng mà định cư trong những cơ sở dữ liệu khác nhau tại immediate updating Subcriber hay những bảng mà định cư trong những cơ sở dữ liệu khác nhau ở phía bên kia của immediate-updating Subcriber không nên được update trong cùng 1 transaction.
Nhân bản những thực thi của Stored procedure
SQL server không những cho phép bạn nhân bản dữ liệu trong bảng mà còn hỗ trợ bạn nhân bản stored procedure một trong hai cách. Nếu bạn có một hay nhiều stored procedure như là những article trong một snapshot publication, SQL server sao chép toàn bộ store procedure từ Publisher đến Subcriber. Nếu bạn gồm một hay nhiều stored procedure như là article trong một nhân bản giao dịch, SQL Server sẽ nhân bản thực thi của stored procedure hơn là những dữ liệu thay đổi gây ra bởi sự thực thi những stored procedure đó. Cách làm này đặc biệt hữu ích trong nhân bản mà kết quả của những stored procedure có thể ảnh hưởng một số lượng lớn dữ liệu. Nhân bản những thay đổi như thực thi một lệnh đơn làm tăng hiệu quả ứng dụng của bạn.
Có 2 loại:
- Procedure execution
- Serializable Procedure execution
Procedure execution:
Nhân bản procedure execution đến tất cả Subcriber. Điều này xảy ra bất chấp những lệnh đơn trong stored procedure có thành công hay không. Bởi vì những thay đổi dữ liệu được làm bởi stored procedure có thể xảy ra trong nhiều giao dịch, nên dữ liệu tại Subcriber không thể bảo đảm là sẽ nhất quán với dữ liệu tại Publisher.
Serializable Procedure execution:
Chỉ thực hiện nhân bản procedure execution khi procedure được thực thi trong môt chuỗi giao dịch tuần tự. Cách này đảm bảo dữ liệu tại Subscriber nhất quán với dữ liệu tại Publisher.