1. Trang chủ
  2. » Công Nghệ Thông Tin

TRANSACTION

21 453 1
Tài liệu đã được kiểm tra trùng lặp

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Nội dung

TRANSACTION I.GIỚI THIỆU VỀ GIAO DỊCH TRONG SQL SERVER 7.0 : I.1. Đònh nghóa : Transaction là một đơn vò tính toán nhất quán và tin cậy . Một đơn vò luận lý phải đưa ra 4 lợi điểm ,được gọi là ACDI :tính nguyên tố (Atomicity) , tính nhất quán (Consistency) ,tính tách biệt (Isolation) , tính bền (Durability) . Đây là điểm khác biệt giữa một query và một giao dòch. Với query , hoàn toàn không có chú ý nào liên quan đến sự nhất quán và tin cậy. I.2.Các thuộc tính của giao dòch : • Atomicity : Một giao dòch phải đảm bảo là một đơn vò nguyên tố của công việc ; Hoặc là tất cả hoặc là không có bất kỳ giao dòch nào được thực hiện .Tính nguyên tố đòi hỏi nếu một giao dòch bò ngắt do sự cố thì các kết quả bộ phận của nó sẽ bò hủy bỏ (undo). • Consistency : khi một giao dòch hoàn thành , giao dòch phải đảm bảo tất cảdữ liệu trong trạng thái nhất quán . Trong cơ sở dữ liệu quan hệ , tất cả các qui tắc phải được ứng dụng vào sự sửa đổi của giao dòch để đảm bảo sự toàn vẹn dữ liệu . • Isolation : Một giao dòch chưa hoàn thành không thể đưa kết quảcho giao dòch khác trước khi nó hoàn tất . Sự thay đổi được tạo ra từ những giao dòch đồng thời phải được tách biệt với những sửa đổi của những giao dòch đồng thời khác . Một giao dòch có thể đọc dữ liệu trứơc khi một giao dòch đồng thời khác sửa đổi nó , hay là nó đọc dữ liệu sau khi giao dòch thứ hai hoàn thành . • Durability: Sau khi giao dòch hoàn thành , hệ thống phải đảm bảo là kết quả của các tác vụ của nó không bao giờ bò mất, không bò lệ thuộc vào sự cố sau đó . Sự thay đổi này vẫn còn giữ nguyên ngay cả có sự cố làm hệ thống gặp sự cố (fail) . II. VIỆC CHỈ RÕ VÀ RÀNG BUỘC TRANSACTION TRONG SQL SERVER 7.0: Người lập trình SQL có trách nhiệm khởi động và kết thúc giao dòch để thực thi tính nhất quán luận lý của dữ liệu . Người lập trình phải đònh nghóa sự tuần tự của sự thay đổi dữ liệu để dữ liệu luôn ở trạng thái nhatá quán . Người lập trình gom những tác vụ chỉnh sửa vào một giao dòch đơn lẻ để SQL Server có thể đảm bảo sự toàn vẹn vật lý của giao dòch . Đó là thuộc trách nhiệm của hệ thống enterprise database (SQL Server) ,hệ thống cung cấp những kỹ thuật đảm bảo sự toàn vẹn vật lý của mỗi giao dòch , SQL Server cung cấp những dòch vụ : • Tiện ích khóa(Locking facilities ) :dùng để đảm sự tách biệt (isolation) của giao dòch . • Tiện ích Log (Logging facilities) : đảm bảo tính bền của giao dòch . Thậm chí server phục vụ phầm cứng , hệ điều hành , hay SQL Server bò sự cố , SQL Server sử dụng những phương pháp transaction log (một file cơ sở dữ liệu mà tất cả sự thay dữ liệu sẽ được ghi vào , nó được sử dụng khi SQL Server tự động khôi phục) , để khởi động lại hay roll back tự động bất cứ giao dòch nào chưa hoàn tất khi hệ thống bò sự cố . • Quản lý giao dòch có đặc điểm là đảm bảo tính nguyên tố và nhấn quán đối với giao dòch . Sau khi một giao dòch khởi động , nó phải được hoàn thành một cách tốt đẹp hay SQL Server hủy tất cả những sự thay đổi dữ liệu được tạo ra từ lúc giao dòch phát sinh . II.1. Quá trình quản lý giao dòch : Ứng dụng điều khiển các giao dòch bằng cách chỉ ra khi nào nó khởi động hay kết thúc . Điều này được chỉ rõ bằng việc sử dụng lệnh Transac-SQL hay hàm của database API . Hệ thống phải có công cụ báo lỗi một cách đúng đắn để hủy bỏ giao dòch trước khi nó hoàn thành . Một giao dòch sẽ được quản lý ở mức kết nối của mỗi SQL Server . Khi một giao dòch được khởi động trong một kết nối , tất cả các lệnh Transac-SQL được thực thi trong kết nối đó sẽ là một phần của giao dòch cho đến khi giao dòch đó kết thúc . II.1.1 .Khởi động một giao dòch : Được chia làm 3 loại : • Explicit (rõ ràng) : để khởi động giao dòch loại này dùng lệnh BEGIN TRANSACTION . • Autocommit (tự động) :SQL Server tự thiết lập kiểu này. Mỗi một tác vụ Transaction-SQL được commit khi nó hoàn thành mà không chỉ ra bất cứ trạng thái điều khiển giao dòch . • Implicit (ngầm) :có thể thiết lập kiểu giao dòch ngầm cả trong API hay Transac-SQL : SET IMPLICIT_TRANSACTION ON . Lệnh kế tiếp khởi động tự động một giao dòch mới . Khi một giao đó hoàn thành , lệnh kế tiếp được xem như khởi động một giao dòch mới . Nếu một kết nối thay đổi từ một kiểu giao dòch này sang dạng giao dòch khác , nó không ảnh hưởng vào mode giao dòch của bất kì sự kết nối khác . II.1.2. Kết thúc một giao dòch : Để kết thúc giao dòch có thể dùng COMMIT hay ROLLBACK. • COMMIT : Nếu một giao dòch thành công thì commit nó .Lệnh COMMIT đảm bảo tất cả sự thay đổi của giao dòch được tạo ra là một phần vónh cữu của database . Lệnh COMMIT cũng giải phóng tài nguyên được dùng trong quá trình thực hiện giao dòch . • ROOLBACK : Nếu một lỗi xuất hiện trong giao dòch hay user quyết đònh hủy bỏ giao dòch thì giao dòch được roll back . Lệnh ROLLBACK khôi phục lại những gì đã sửa đổi tạo ra trong giao dòch và đưa nó về trạng thái lúc giao dòch bắt đầu khởi động . Lệnh này cũng giải phóng tài nguyên do giao dòch giữ . II.1.3. Những lỗi xuất hiện trong quá trình thực thi giao dòch: Nếu lỗi server ngăn cản sự hoàn thành của giao dòch , SQL Server tự động roll back giao dòch và giải phóng tất cả tài nguyên được giữ bởi giao dòch . Nếu sự kết nối mạng giữa client đến SQL Server bò hỏng thì bất kỳ giao dòch nào đang giải quyết trên kết nối đó đều bò roll back khi mạng báo cho SQL Server về sự hỏng hóc đó. Nếu ứng dụng client hay client shut down hay được khởi động lại,điều này cũng dẫn đến sự hủy kết nối và SQL Server roll back bất cứ kết nối nào đang làm việc ngay khi mạng thông báo cho nó biết . Nếu client ra khỏi ứng dụng thì tất cả giao dòch đều bò roll back. Nếu lỗi của tác vụ là run-time xuất hiện như vi phạm ràng buộc , thì đáp ứng mặc đònh trong SQL là roll back chỉ lệnh nào xuất hiện lỗi (SET XACT_ABORT) . Sau khi SET XACT_ABORT ON, các lỗi run-time gây ra sự roll back tự động đối với giao dòch hiện thời . Lỗi biên dòch như lỗi syntax không bò ảnh hưởng bởi SET XACT_ABORT . Nhiệm vụ của người lập trình là viết code cho ứng dụng để chỉ rõ tác vụ đúng (COMMIT hay ABORT) nếu xuất hiện lỗi run-time hay biên dòch . II.2. Loại giao dòch Explicit : Explicit Transaction là giao dòch mà user dònh nghóa một cách rõ ràng cả quá trình khởi động lẫn kết thúc giao dòch . Explicit Transaction cũng được gọi bởi giao dòch user_defined hay user_specified trong các version của SQL Server . • Ứng dụng DB_library và Transact_SQL script : BEGIN TRANSACTION , COMMIT TRANSACTION , COMMIT WORK , ROLLBACK TRANSACTION hay ROLLBACK WORK . • Ứng dụng OLE DB :ItransactionLocal::StartTransaction , ITransaction::Commit hay ITransaction::Abort . • Ứng dụng ADO : Begin Transaction Commit hay Transaction Rollback trong đối tương Conection . • Ứng dụng ODBC API : không hỗ trợ explicit transaction chỉ hỗ trợ autocommit hay implitcit transaction . II.3. Loại giao dòch Autocommit : Loại giao dòch autocommit được thiết lập quản lý giao dòch mặc đònh trong SQL Server . Nếu một giao dòch thực hiện thành công thì nó được (commit : tất cả sự thay được tạo ra từ giao dòch đó sẽ được cập nhật trong cơ sở dữ liệu) , nếu nó gặp bất kì lỗi nó sẽ roll back . Trong mode autocommit , thỉnh thoảng xuất hiện lỗi nếu SQL Server roll back nguyên cả batch (một tập các lệnh SQL cùng được xem xét và được thực thi , nó được biên dòch một lần và kết thúc bởi lệnh go) thay vì một lệnh SQL . Điều này chỉ xảy ra nếu lỗi đụng độ là lỗi biên dòch không phải là lỗi run-time . Lỗi biên dòch ngăn cản SQL Server xây dựng kế hoạch thực thi , vì thế không có lệnh nào trong batch được thực thi . • Ví dụ : Không có tác vụ INSERT trong batch thứ ba được thực thi vì quá trình biên dòch gặp lỗi : USE pubs GO CREATE TABLE TestBatch (Cola INT PRIMARY KEY, Colb CHAR(3)) GO INSERT INTO TestBatch VALUES (1, 'aaa') INSERT INTO TestBatch VALUES (2, 'bbb') INSERT INTO TestBatch VALUSE (3, 'ccc') /* Syntax error */ GO SELECT * FROM TestBatch /* Returns no rows */ GO Trong ví dụ sau , tác vụ INSERT thứ ba gặp lỗi thực thi do Cola là khóa chính nhưng hai tác vụ đầu đều được thực thi : USE pubs GO CREATE TABLE TestBatch (Cola INT PRIMARY KEY, Colb CHAR(3)) GO INSERT INTO TestBatch VALUES (1, 'aaa') INSERT INTO TestBatch VALUES (2, 'bbb') INSERT INTO TestBatch VALUES (1, 'ccc') /* Duplicate key error */ GO SELECT * FROM TestBatch /* Returns rows 1 and 2 */ GO SQL Server 7.0 giới thiệu giải pháp delayed name không được resolve cho tới khi thời gian thực thi . Các version trước của SQL Server resolve name trong thời gian dòch . Các lỗi này là lỗi biên dòch và ngăn cản việc thực thi một batch trong các version trước , giờ đây là lỗi run- time trong SQL Server 7.0 . Trong ví dụ hai tác vụ đầu được thực thi và commit, tác vụ thứ ba trở thành lỗi thực thi do tham khảo vào một bảng chưa hình thành : USE pubs GO CREATE TABLE TestBatch (Cola INT PRIMARY KEY, Colb CHAR(3)) GO INSERT INTO TestBatch VALUES (1, 'aaa') INSERT INTO TestBatch VALUES (2, 'bbb') INSERT INTO TestBch VALUES (3, 'ccc') /* Table name error */ GO SELECT * FROM TestBatch /* Returns rows 1 and 2 */ GO II.4. Loại giao dòch Implicit: Khi kết nối được tạo ra theo mode implicit transaction . SQL Server tự động khởi động một giao dòch mới sau khi giao dòch hiện thời được commit hay roll back . User không làm bất cứ điều gì để phác họa khởi tạo giao dòch ,user chỉ commit hay roll back mỗi giao dòch . Implicit Transaction mode đưa ra các mắt xích nối kết liên tục các giao dòch. Ví dụ : SET QUOTED_IDENTIFIER OFF GO SET NOCOUNT OFF GO USE pubs GO CREATE TABLE ImplicitTran (Cola int PRIMARY KEY, Colb char(3) NOT NULL) GO SET IMPLICIT_TRANSACTIONS ON GO /* First implicit transaction started by an INSERT statement */ INSERT INTO ImplicitTran VALUES (1, 'aaa') GO INSERT INTO ImplicitTran VALUES (2, 'bbb') GO /* Commit first transaction */ COMMIT TRANSACTION GO /* Second implicit transaction started by a SELECT statement */ SELECT COUNT(*) FROM ImplicitTran GO INSERT INTO ImplicitTran VALUES (3, 'ccc') GO SELECT * FROM ImplicitTran GO /* Commit second transaction */ COMMIT TRANSACTION GO SET IMPLICIT_TRANSACTIONS OFF GO III. GIAO DỊCH PHÂN BỐ (DISTRIBUTED TRANSACTION) : III.1. Đặc điểm của giao dòch phân bố : Giao dòch phân bố kết nối hai hay nhiều server đã được nhận biết nhờ resource manager . Sự quản lý các giao dòch phải được ngang hàng giữa các quản lý tài nguyên bởi một phần tử server gọi là transaction manager . Một giao dòch trong SQL Server đơn kết nối hai hoặc nhiều database là một giao dòch phân bố . Tuy nhiên ,SQL Server quản lý giao dòch bên trong , user thực thi nó như là thực thi một giao dòch cục bộ . Trong ứng dụng , một giao dòch phân bố được quản lý như là một giao dòch cục bộ . Khi kết thúc giao dòch , ứng dụng yêu cầu commit hay rollback . Sự commit phân bố phải được quản lý khác biệt với sự quản lý giao dòch để tối thiểu sự may rủi như network bò fail có thể gây ra cho một số quản lý tài nguyên commit thành công trong khi những quản lý tài nguyên khác rollback giao dòch .điều này được quản lý bằng giao thức 2PC ( two phase commit) : • Prepare phase : khi quản lý giao dòch (Coordinator) nhận yêu cầu commit , nó gởi một lệnh prepare tới tất cả quản lý tài nguyên khác (Participant) có liên quan trong giao dòch . Mỗi participant thực hiện mọi yêu cầu để giao dòch đảm bảo tính bền (durable) và tất cả buffer giữ các thao tác yêu cầu của giao dòch (log image) được đẩy vào dóa .Khi mà pha prepare hoàn thành , nó sẽ trả về thành công hay thất bại của pha prepare tới coordinator . • Commit phase : Nếu coordinator nhận tín hiệu prepare từ các participant thì nó sẽ gởi thông điệp commit đến các participant. Nếu bất kì participant nào gởi thông điệp báo bò fail trong pha prepare , coordinator sẽ gởi thông điệp thông báo roll back cho tất cả participant và tạo ra sự cố fail tới ứng dụng . III.2. Tác vụ của giao dòch phân bố : Giao dòch phân bố được khởi động trong trong Transact-SQL có cấu trúc tương đối đơn giản : 1. Transac-SQL script hay sự kết nối ứng thực thi một câu lệnh SQL mà nó khởi động giao dòch phân bố . 2. Việc SQL Server thực thi các câu lệnh SQL gọi là server điều khiển giao dòch . 3. Script hay ứng dụng thực thi cả truy vấn phân bố dựa vào các server đã được liên kết lẫn việc gọi các store procedure từ xa dựa vào các server đãõ được gọi từ xa . 4. Khi truy vấn phân bố và việc gọi thủ tục từ xa được tạo ra , server điều khiển tự động gọi MS DTC để lựa chọn các servser nối kết từ xa trong giao dòch phân bố . 5. Khi script hay ứng dụng đưa ra COMMIT hay ROLLBACK thì server điều khiển gọi MS DTC quản lý quá trình hai pha commit hay khai báo việc kết nối các server để roll back giao dòch của nó. III.3. Khởi động giao dòch phân bố : • Để khởi động một giao phân bố explicit dùng lệnh BEGIN DISTRIBUTED TRANSACTION .User cũng có thể thực thi một truy vấn phân bố dựa vào server đã được nối kết . Gọi MS DTC để quản lý giao dòch phân bố với các server đã được kết nối . User cũng có thể gọi store procedure từ xa tới các SQL Server từ xa như là một phần của giao dòch phân bố . • Nếu OLE DA data source hỗ trợ giao tiếp ItransactionJoin thì giao dòch được thăng cấp lên giao dòch phân bố , thậm chí truy vấn là truy vấn chỉ đọc . Nếu data source không hỗ trợ ItransactionJoin ,thì chỉ có tác vụ chỉ đọc được cho phép . • Nếu SET REMOTE_PROC_TRANSACTION ON được xử lý và giao dòch cục bộ gọi store procedure từ xa trên một SQL Server khác thì giao dòch cục bộ được thăng cấp thành giao dòch phân bố. SQL Server dùng MS DTC làm ngang bằng các giao dòch phục vụ từ xa . • Việc gọi store procedure từ xa thực thi bên ngoài phạm vi giao dòch cục bộ nếu REMOTE_PROC_TRANSACTION được set thành OFF . Tác vụ được thực hiện bở thủ tục từ xa thì không bò roll back nếu giao dòch cục bộ rool back . Tác vụ được làm bởi store procedure từ xa được commit vào thời điểm thủ tục hoàn thành , không phải khi giao dòch cục bộ được commit . III.4. Truy vấn và giao dòch phân bố : SQL Server cho phép user tạo ra kết nối với OLE DB bằng cách gọi server kết nối. Sau khi link với data source user có thể : • Tham khảo rowset từ data source của OLE DB như table trong Transact-SQL . • Mỗi một lệnh truy vấn phấn bố có thể tham khảo đến nhiều server đã được kết nối và có thẻ thực hiện các tác vụ update lẫn tác vụ đọc dựa trên mỗi server riêng rẽ . Một truy vấn phân bố có thể thực hiện tác vụ đọc dựa vào vài server này và tác vụ update dựa vào vài server khác . Các kiểu truy vấn được thực thi dựa trên các server đã được nối kết phụ thuộc vào mức độ hỗ trợ cho giao dòch do OLE DB cung cấp . OLE DB đònh nghóa hai giao tiếp chọn lựa cho việc quản lý giao dòch : • ItransactionLocal : hỗ trợ giao dòch cục bộ trong data source của OLE DB • ItransactionJoin : cho phép công cụ Join trong giao dòch phân bố với các quản lý tài nguyên khác . Bất kì provider nào hỗ trợ ItransactionJoin cũng hỗ trợ ItransactionLocal Nếu một truy vấn phân bố được thi hành ở dạng mode autocommit , áp dụng những luật sau : • Chỉ toán tử đọc được cho phép dựa vào provider không hỗ trộ ItransactionLocal • Tất cả những toán tử update được cho phép dựa vào provider hỗ trợ ItransactionLocal SQL Server tự động gọi ItransactionLocal cho mỗi server đã kết nối tham gia vào toán tử update để khởi dộng giao dòch cục bộ và commit chúng khi trạng thái thành công hay rool back nếu trạng thái fail . Nếu một truy vấn phân bố được thực thi khi sự kết nối là explicit hay implicit thì áp dụng các luật sau : • Chỉ toán tử đọc cho phép dựa vào provider không hỗ trợ ItransactionJoin .Provider không hỗ trợ bất kì giao dòch nào hay chỉ hỗ trợ ItransactionLocal nhưng không thể tham gia vào toán tử update . • Nếu SET XACT_ABORT ON ,tất cả toán tử update được cho phép dựa vào provider hỗ trợ ItransactionJoin . SQL Server tự động gọi ItransactionJoin trong mỗi server đã liên kết tham gia vào toán tử update để tuyển nó vào giao dòch phân bố. MS DTC commit hay roll back khi server điều khiển tạo ra giao dòch được commit hay roll back . • Nếu SET XACT_ABORT OFF ,server đã được nối kếtphái hỗ trợ giao dòch lồng nhau (nested) trước khi toán tử update được cho phép .Giao dòch lồng nhau được hỗ trợ nếu provider hỗ trợ Itransaction::StartTransaction . Điều này cho phép SQL server roll back những lệnh riêng rẽ trong truy vấn phân bố mà không roll back nguyên giao dòch . IV. NHỮNG TÍNH CHẤT KHÁC CỦA GIAO DỊCH : IV.1. Giao dòch lồng nhau (Nesting Transaction) : Giao dòch rõ ràng (Explicit) có thể được lồng vào nhau . Điều này có khuynh hướng chính là hỗ trợ giao dòch trong store procedure mà nó có thể được gọi từ một quá trình trong một giao dòch lẫn từ nhiều quá trình . Ví dụ sau trình bày giao dòch lồng nhau : Nếu thủ tục TranProc được gọi khi một giao dòch được hoạt động thì những giao dòch bên trong thủ tục TranProc bò lờ đi và những tác vụ INSERT sẽ được commit hay roll back hụ thuộc vào những giao dòch bên ngoài : Việc commit bên trong giao dòch bò lờ đi . Giao dòch được commit hay roll back dựa vào tác vụ được tạo ra khi kết thúc giao dòch ngoài cùng . Nếu giao dòch nhoài được commit thì giao dòch lồng bên trong cũng được commit . Nếu giao dòch ngoài roll back thì tất cả giao dòch bên trong cũng roll back bất chấp các giao dòch bên trong có commit hay không . IV.2. Transaction Savepoint : Savepoint cung cấp kỹ thuật roll back từng phần của giao dòch . User tạo ra một savepoint bằng cách đưa ra lệnh SAVE_TRANSACTION savepoint_name để roll back từng phần thay vì roll back cả giao dòch . Savepoint được dùng trong tình huống mà lỗi không chắc sẽ xảy ra . Việc sử dụng savepoint để roll back một phần của giao dòch trong trường hợp lỗi hiếm khi xảy ra có thể hiệu quả hơn là thử trên từng giao dòch xem toán tử update có hợp lệ hay không trước khi thực hiện update. Toán tử update và rollback là những toán tử có chí phí cao, vì thế savepoint chỉ hiệu quả nếu khả năng xuất hiện lỗi thấp và chí phí kiểm tra tính hợp lệ của update đã sẵn sàng từ trước tương đối cao. Ví dụ : SET NOCOUNT OFF GO USE pubs GO CREATE TABLE InvCtrl (WhrhousID int, PartNmbr int, QtyInStk int, ReordrPt int, CONSTRAINT InvPK PRIMARY KEY (WhrhousID, PartNmbr), CONSTRAINT QtyStkCheck CHECK (QtyInStk > 0) ) GO CREATE PROCEDURE OrderStock @WhrhousID int, @PartNmbr int, @OrderQty int AS DECLARE @ErrorVar int SAVE TRANSACTION StkOrdTrn UPDATE InvCtrl SET QtyInStk = QtyInStk - @OrderQty WHERE WhrhousID = 1 AND PartNmbr = 1 SELECT @ErrorVar = @@error IF (@ErrorVar = 547) BEGIN ROLLBACK TRANSACTION StkOrdTrn RETURN (SELECT QtyInStk FROM InvCtrl WHERE WhrhousID = @WhrhousID AND PartNmbr = @PartNmbr) END ELSE RETURN 0 Bảng InvCtrl có một ràng buộc check từ đó tạo ra lỗi thứ 547 khi cột QtyInStk <= 0 . Thủ tục OrderStock tạo ra một savepoint ,nếu lỗi 547 xảy ra thì nó roll back savepoint và trả về (SELECT QtyInStk FROM InvCtrl WHERE WhrhousID = @WhrhousID AND PartNmbr = @PartNmbr) Nếu lỗi không xảy ra thủ tục OrderStock trả về giá trò 0. IV.3. Bound Connections : Bound connection cho phép hai hay nhiều kết nối tham gia vào cùng một giao dòch và lock . Bound connection có thể thực hiện trên cùng một dữ liệu mà không xảy ra sự đụng độ lock. Bound connection có thể được tạo ra từ nhiều kết nối phức tạp trong cùng một ứng dụng , hay trên nhiều ứng dụng phức tạp với những kết nối khác biệt . Bound connection làm cho các tác vụ ngang hàng trên nhiều kết nối dễ dàng hơn . Để tham dự vào một Bound connection, một kết nối gọi sp_getbindtoken hay srv_getbindtoken để chiếm bind token . Một bind token là một chuỗi kí tự để nhận dạng duy nhất mỗi bound transaction . Bind token được gởi đến các kết nối khác mà tham gia vào bound connection . Những kết nối khác buộc kết nối đầu tiên bằng cách gọi sp_bindsession . Bind token phải được truyền từ code ứng dụng cái mà tạo kết nối đầu tiên tới code ứng dụng tạo ra các bound connection sau này . Một vài phương thức thường dùng để truyền bind token : • Nếu các kết nối được tạo ra từ một quá trình ứng dụng, bind token có thể lưu trong bộ nhớ hay trong các function như một tham số . • Nếu các kết nối được tạo từ những ứng dụng khác biệt , bind token có thể được truyền bằng IPC (interprocess communication: RPC) hay DDE (Dynamic data exchange ) . • Bind token được lưu trong một bảng của SQL Server và chỉ được đọc bởi những quá trình muốn buộc với sự kết nối đầu tiên . Chỉ có một kết nối trong tập bound connection có thể được active trong một thời điểm . Nếu một kết nối đang thực thi một lệnh trên một server hay có kết quả đang đợi từ server thì không có một kết nói nào khác mà tham gia cùng một giao dòch có thể truy cập trên server cho tới khi kết nối hiện thời hoàn thành quá trình hay hủy bỏ lệnh hiện thời . Nếu server bận thì lỗi xuất hiện cho biết không gian giao dòch đang sử dụng và kết nối nên làm lại sau đó . Có hai kiểu bound connection : cục bộ và phân bố . • Local bound connection : cho phép bound connection tham gia không gian giao dòch của một giao dòch đơn trên một server . • Distributed bound connection : cho phép bound connection tham gia vào cùng một giao dòch trên hai hay nhiều server cho tới khi nguyên giao dòch commit hay roll back Bound connectioin phân bố thì không được nhận biết bằng chuỗi kí tự bind token ,chúng được nhận biết bằng một nhóm sự nhận biết giao dòch phân bố . Nếu một bound connection liên quan một giao dòch cục bộ và thực thi một RPC tới một server từ xa với lệnh SET REMOTE_PROC_TRANSACTIONS ON thì bound connection cục bộ đó được nâng lên tự động thành bound connection phân bố [...]... thông qua một số giai đoạn sau : • Trước khi khởi động một giao dòch , cơ sở dữ liệu nằm trong trạng thái nhất quán • Ứng dụng gởi tín hiệu khởi động giao dòch Điều này được thực thi bằng lệnh BEGIN TRANSACTION Không có một record nào được ghi vào log, record đầu tiên được ghi khi ứng dụng tạo ra sự thay đổi dữ liệu • Ứng dụng bắt đầu thay đổi dữ liệu Những sự thay đổi này được tạo ra trên một... cản giao dòch hoàn thành thì nó sẽ undo hay roll back tất cả các thay đổi Nó sẽ trả lại trạng thái nhất quán mà khi bắt đầu khởi động giao dòch Khôi phục giao dòch: Mỗi cơ sở dữ liệu SQL Server có một transaction log lưu trữ những thay đổi dữ liệu trong cơ sở dữ liệu Log file lưu trữ quá trình khởi động và kết thúc của mỗi giao dòch và kết hợp với mỗi sự thay đổi trong giao dòch Mỗi một record được... hiện các tác vụ sau : 1 Xác đònh tất cả các giao dòch chưa hoàn tất mà vẫn chưa được roll back Các giao dòch chưa hoàn tất có thể được nhận dạng bởi vì chúng có trạng thái khởi động giao dòch (BEGIN TRANSACTION) trong log file mà không có những trạng thái commit hay roll back 2 Xác đònh tất cả giao dòch cần được roll forward Theo nguyên tắc tập hợp này bao gồm tất cả các giao dòch có commit record... dòch roll back SQL Server dùng cơ chế checkpoint 3 Roll back các giao dòch xác đònh ở bước một và roll forward những giao dòch xác đònh ở bước hai SQL Server lưu nhiều kiểu thông tin khác nhau trong transaction log SQL Server ghi nhận những thao tác luận lý đã được thực hiện Những thao tác này được nhân bản roll forward hay roll back sự thay đổi SQL Server điều khiển khi những thay đổi được ghi . BEGIN TRANSACTION , COMMIT TRANSACTION , COMMIT WORK , ROLLBACK TRANSACTION hay ROLLBACK WORK . • Ứng dụng OLE DB :ItransactionLocal::StartTransaction , ITransaction::Commit. ImplicitTran GO /* Commit second transaction */ COMMIT TRANSACTION GO SET IMPLICIT_TRANSACTIONS OFF GO III. GIAO DỊCH PHÂN BỐ (DISTRIBUTED TRANSACTION) : III.1. Đặc

Ngày đăng: 28/09/2013, 10:20

Xem thêm

HÌNH ẢNH LIÊN QUAN

• Intent shared (IS) : chỉ ra khi giao dịch dọc một vài tài nguyên (như một phần bảng) bằng cách đặt shared lock trên những tài nguyên riêng rẽ . - TRANSACTION
ntent shared (IS) : chỉ ra khi giao dịch dọc một vài tài nguyên (như một phần bảng) bằng cách đặt shared lock trên những tài nguyên riêng rẽ (Trang 15)
Ví dụ : Giao dịch một T1 có khóa loại trừ vào bảng Supplier .Giao dịch hai T2 tạo khóa loại trừ trên bảng Park và rồi nó muốn lock bảng Supplier   - TRANSACTION
d ụ : Giao dịch một T1 có khóa loại trừ vào bảng Supplier .Giao dịch hai T2 tạo khóa loại trừ trên bảng Park và rồi nó muốn lock bảng Supplier (Trang 17)

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

  • Đang cập nhật ...

TÀI LIỆU LIÊN QUAN

w