Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 26 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
26
Dung lượng
3,54 MB
Nội dung
GVHD: ThS Đỗ Thị Minh Phụng Transaction – Giao tác (SQL Server) niệm Khái Phân loại Giao tác không tường minh (Implicit Transaction) Giao tác tường minh (Explicit Transaction) Liên hệ với so sánh với Oracle Khái niệm Giao tác (transaction) tập hợp có thứ tự thao tác (statement) truy xuất liệu CSDL thành đơn vị công việc logic (xem thao tác nguyên tố), chuyển CSDL từ trạng thái quán sang trạng thái quán khác Trừ tiền bên A Bài toán chuyển tiền từ tài khoản A -> tài khoản B Cộng tiền bên B - Chỉ hành động thành cơng ? - Trạng thái trước CSDL có đảm bảo ? Cần cài đặt giao tác cho việc chuyển tiền 2.Phân loại SQL Server thực thi transaction theo chế độ Autocommit transactions Mỗi thao tác đơn (statement) xem transaction Explicit transactions Transaction bắt đầu với câu lệnh BEGIN TRANSACTION thực thi qua câu lệnh COMMIT or ROLLBACK Implicit transactions Các transaction thực liên tiếp – coi chuỗi Mỗi transaction chuỗi thực thi qua câu lệnh COMMIT or ROLLBACK Batch-scoped transactions Chạy thông qua session MARS (Multi active result sets) Lúc chuỗi transaction file batch có transaction chưa thực thì transaction SQL Server tự động kết thúc BEGIN TRANSACTION EXPLICIT AUTOCOMMIT SET IMPLICIT_TRANSACTION (ON/ OFF) IMPLICIT MARS Session BATCHSCOPED Giao tác không tường minh Sau chế độ implicit transaction (SET IMPLICIT_TRANSACTION ON) bật , câu lệnh sau bắt đầu chuỗi giao tác không tường minh Sau câu lệnh kết thúc (commit rollback) SQL Server tự động thực tiếp transaction sau kết thúc chuỗi gặp chế độ implicit tắt (SET IMPLICIT_TRANSACTION OFF) Giao tác tường minh - Để bắt đầu giao tác tường minh, sử dụng câu BEGIN TRAN - Để định SQL Server kết thúc giao tác ghi nhận lại hành động cập nhật liệu -> sử dụng lệnh COMMIT TRAN - Để định SQL Server kết thúc giao tác mà không ghi nhận lại hành động cập nhật liệu giao tác, sử dụng lệnh ROLLBACK TRAN 4.1/ Cú pháp BEGIN TRAN[SACTION] [Tên_giao_tác] Tên_giao_tác : phải định rõ ràng, nên sử dụng tên giao tác cấp độ lồng giao tác nhiều hai cấp COMMIT TRAN[SACTION] [Tên_giao_tác] ROLLBACK TRAN[SACTION] [Tên_giao_tác] Tên_giao_tác : tên giao tác định nghĩa trước câu lệnh BEGIN TRAN 4.3 / Phân vùng giao tác – SAVE TRAN - Ta định việc đồng ý ghi nhận không ghi nhận lại hành động cập nhật liệu riêng lẻ bên giao tác cách phân chia thành nhiều vùng nhỏ cho câu lệnh bên giao tác - Bằng cách chia nhỏ hành động bên giao tác thành nhiều phần, tương ứng phần nhỏ dễ dàng chủ động đồng ý ghi nhận không ghi nhận lại việc cập nhật liệu SAVE TRAN[SACTION] [Tên_vùng] Các _lệnh_bên_trong • Tên vùng : dùng để định vùng chứa lệnh cập nhật liệu tên vùng nên giao tác • Các_lệnh : lệnh phân chia theo vùng bên giao tác 4.4/ Kiểm tra xử lý lỗi giao tác Một số lỗi thường gặp sau thực câu lệnh giao tác: - Khơng có quyền truy cập đối tượng (table, stored procedure,…) - Vi phạm ràng buộc toàn vẹn (primary key, foreign key, check, rule, ràng buộc kiểm tra trigger,…) - Deadlock … Trong SQL Server có biến hệ thống @@ERROR – cho biết kết thực thi câu lệnh gần thành công hay thất bại + @@ERROR = 0: không xảy lỗi + @@ERROR 0: xảy lỗi với mã lỗi @@ERROR Giao tác tự động ROLLBACK gặp lỗi phát sinh trình thực câu lệnh thành phần giao tác Vì cần kiểm tra giá trị biến @@ERROR sau câu lệnh thành phần giao tác cần xử lý lỗi (nếu có): yêu cầu giao tác rollback cách tường minh lệnh ROLLBACK TRANSACTION ~ Liên hệ , so sánh Transaction SQL SERVER với Oracle ~ Bản chất Transaction Control + Oracle : thứ xem transaction + SQL : mặc định khơng hỗ trợ rõ ràng Ví dụ sau insert trùng khóa MS SQL Oracle : SQL báo lỗi, thực câu lệnh sau lỗi, cịn Oracle transaction bị rollback lỗi xảy ra! Transaction với Trigger Trong Oracle sử dụng COMMIT hay ROLLBACK SQL + Oracle sử dụng raise_application_error để xuất lỗi, SQL raiserror + Do chế quản lý transaction khác nhau, nên kết tương ứng khác : có lỗi, Oracle rollback transaction ngay, cịn SQL khơng Cụ thể câu lệnh sau raiserror rollback SQL thực Transaction Control – SQL SERVER Transaction Control – ORACLE SQL báo lỗi thực câu in insert Câu lệnh Insert không bị rollback Transaction với Trigger – SQL SERVER Transaction với Trigger – ORACLE THẢO LUẬN ~ Sinh viên thực ~ Hoàng Thái Hà - 07520098 Nguyễn Thiên Ân - 07520018 Nguyễn Ngọc Phúc - 07520282 Trần Thị Thanh Hương - 07520168 ... Liên hệ với so sánh với Oracle Khái niệm Giao tác (transaction) tập hợp có thứ tự thao tác (statement) truy xuất liệu CSDL thành đơn vị công việc logic (xem thao tác nguyên tố), chuyển CSDL từ... ngồi hơn) • Lệnh COMMIT transaction giảm @@TRANCOUNT 1, khơng có tác dụng u cầu hệ quản trị ghi nhận chắn thay đổi CSDL mà transaction làm •Chỉ có COMMIT transaction ngồi thực có tác dụng (như... thái quán khác Trừ tiền bên A Bài toán chuyển tiền từ tài khoản A -> tài khoản B Cộng tiền bên B - Chỉ hành động thành công ? - Trạng thái trước CSDL có đảm bảo ? Cần cài đặt giao tác cho việc chuyển