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

Tài liệu Hệ Quản Trị CSDL pdf

26 932 5

Đ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

Thông tin cơ bản

Tiêu đề Transaction – giao tác (SQL Server)
Người hướng dẫn ThS. Đỗ Thị Minh Phụng
Chuyên ngành Hệ quản trị cơ sở dữ liệu
Thể loại Tài liệu
Định dạng
Số trang 26
Dung lượng 3,54 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Giao tác không tường minh Sau khi chế độ implicit transaction SET IMPLICIT_TRANSACTION ON được bật , một trong những câu lệnh sau sẽ bắt đầu chuỗi giao tác không tường minh.. Sau khi câ

Trang 1

GVHD: ThS Đỗ Thị Minh Phụng

Trang 2

3 Giao tác không tường minh (Implicit Transaction)

4 Giao tác tường minh (Explicit Transaction)

Trang 3

1 Khái niệm

Giao tác (transaction) là 1 tập hợp có thứ tự các thao tác (statement) truy xuất dữ liệu trên CSDL thành 1 đơn vị công việc logic (xem là 1 thao tác nguyên tố), chuyển CSDL từ trạng thái nhất quán này sang trạng thái nhất quán khác

Bài toán chuyển tiền từ tài

khoản A -> tài khoản B

Trừ tiền bên A Cộng tiền bên B

- Chỉ một trong 2 hành động thành công ?

- Trạng thái trước đó của CSDL có được đảm bảo ?

Cần cài đặt giao tác cho việc

chuyển tiền

Trang 4

Batch-scoped transactions

Chạy thông qua session MARS (Multi active result sets) Lúc này nếu trong một chuỗi các transaction của một file batch nếu có transaction chưa được thực thì thì transaction này sẽ được SQL Server tự động kết thúc

SQL Server thực thi transaction theo 4 chế độ

Trang 5

BATCH-SET IMPLICIT_TRANSACTION

(ON/ OFF)

BEGIN TRANSACTION

MARS Session

Trang 6

3 Giao tác không tường minh

Sau khi chế độ implicit transaction

(SET IMPLICIT_TRANSACTION ON) được bật , một trong những câu lệnh sau sẽ bắt đầu chuỗi giao tác không tường minh

Sau khi câu lệnh kết thúc (commit hoặc rollback) thì SQL Server sẽ tự động thực hiện tiếp các transaction sau đó cho đến khi kết thúc chuỗi hoặc gặp chế độ implicit được tắt

(SET IMPLICIT_TRANSACTION OFF)

Trang 8

4 Giao tác tường minh

- Để bắt đầu một giao tác tường minh, sử dụng câu BEGIN TRAN

- Để chỉ định SQL Server kết thúc giao tác và ghi nhận lại các hành động cập nhật dữ liệu -> sử dụng lệnh COMMIT TRAN

- Để chỉ định SQL Server kết thúc giao tác mà không ghi nhận lại các hành động cập nhật dữ liệu trong giao tác, sử dụng lệnh ROLLBACK TRAN

Trang 9

BEGIN TRAN[SACTION] [Tên_giao_tác]

Tên_giao_tác : phải được chỉ định rõ ràng, chỉ nên sử dụng tên giao tác khi cấp

độ lồng nhau của các giao tác nhiều hơn hai cấp

Tên_giao_tác : tên của giao tác được định nghĩa trước đó trong câu lệnh

BEGIN TRAN

4.1/ Cú pháp

Trang 11

4.2/ Transaction lồng nhau

SQL cho phép các giao tác này được thực thi bên trong một thao tác khác Lúc này biến hệ thống tự động là @@TRANCOUNT trả về cấp độ lồng hiện hàng bên trong giao tác cha (tổng số giao tác được lồng )

SQL đưa ra các qui định sau nhằm đảm bảo việc thực hiện của các transaction lồng nhau không làm vi phạm các tính chất của giao tác :

• Lệnh COMMIT TRANSACTION sẽ được xem như thuộc về transaction bắt đầu sau nhất (bên trong nhất) chưa commit , cho dù nó được đi kèm với tên của transaction bắt đầu trước (cấp ngoài hơn)

• Lệnh COMMIT của transaction con chỉ giảm @@TRANCOUNT đi 1, không có tác dụng yêu cầu hệ quản trị ghi nhận chắc chắn những thay đổi trên CSDL mà transaction này đã làm.

•Chỉ có COMMIT của transaction ngoài cùng mới thực sự có tác dụng này (như vậy nếu có n transaction lồng nhau thì lệnh commit transaction thứ n mới thực sự commit toàn bộ giao tác)

• Ngược với COMMIT , chỉ cần có một lệnh ROLLBACK (ở bất cứ cấp nào) là toàn

bộ giao tác sẽ bị rollback

• ROLLBACK TRAN + Tên_giao_tác chỉ hợp lệ khi Tên_giao_tác là tên của transaction ngoài cùng, nếu là tên của transaction bên trong, lệnh này sẽ bị lỗi.

Trang 15

4.3 / Phân vùng trong giao tác – SAVE TRAN

- Ta có thể chỉ định việc đồng ý ghi nhận hoặc không ghi nhận lại các hành

động cập nhật dữ liệu riêng lẻ bên trong một giao tác bằng cách phân chia

thành nhiều vùng nhỏ cho các câu lệnh bên trong một giao tác

- Bằng cách này chúng ta chia nhỏ các hành động bên trong giao tác ra thành nhiều phần, tương ứng từng phần nhỏ chúng ta có thể dễ dàng chủ động đồng ý ghi nhận hoặc không ghi nhận lại việc cập nhật dữ liệu

Các _lệnh_bên_trong

• Tên vùng : dùng để chỉ định vùng chứa các lệnh cập nhật dữ liệu

và tên vùng nên duy nhất trong một giao tác.

• Các_lệnh : các lệnh được phân chia theo vùng bên trong giao tác.

Trang 17

4.4/ Kiểm tra và xử lý lỗi trong giao tác

Một số lỗi thường gặp sau khi thực hiện 1 câu lệnh trong giao tác:

- Không có quyền truy cập trên 1 đối tượng (table, stored procedure,…)

- Vi phạm ràng buộc toàn vẹn (primary key, foreign key, check, rule, các ràng buộc được kiểm tra bằng trigger,…)

- Deadlock

Trong SQL Server có biến hệ thống @@ERROR – cho biết kết quả thực thi của câu lệnh gần nhất là thành công hay thất bại

+ @@ERROR = 0: không xảy ra lỗi

+ @@ERROR <> 0: xảy ra lỗi với mã lỗi là @@ERROR

Giao tác không thể tự động ROLLBACK khi gặp những lỗi phát sinh trong quá trình thực hiện 1 câu lệnh thành phần trong giao tác Vì vậy cần kiểm tra giá trị của biến @@ERROR sau mỗi câu lệnh thành phần trong giao tác và cần xử

lý những lỗi (nếu có): yêu cầu giao tác rollback một cách tường minh bằng lệnh ROLLBACK TRANSACTION

Trang 20

~ Liên hệ , so sánh về Transaction

trong SQL SERVER với Oracle ~

Bản chất của Transaction Control

Transaction với Trigger

+ Oracle : mọi thứ đều được xem như các transaction

+ SQL : mặc định thì không được hỗ trợ rõ ràng

Ví dụ sau về insert trùng khóa chính trong MS SQL và Oracle : SQL sẽ báo lỗi, nhưng vẫn thực hiện các câu lệnh sau lỗi, còn Oracle thì transaction bị rollback ngay khi lỗi xảy ra!

Trong Oracle không thể sử dụng COMMIT hay ROLLBACK như trong SQL+ Oracle sử dụng raise_application_error để xuất lỗi, còn SQL là raiserror

+ Do cơ chế quản lý transaction khác nhau, nên kết quả tương ứng cũng khác nhau : khi có lỗi, Oracle rollback transaction đó ngay, còn SQL thì không Cụ thể là các câu lệnh sau raiserror và rollback của SQL vẫn thực hiện

Trang 21

Transaction Control – SQL SERVER

Trang 22

Transaction Control – ORACLE

Trang 23

SQL báo lỗi nhưng vẫn thực hiện câu in

ra và insert Câu lệnh Insert này không bị rollback.

Transaction với Trigger – SQL SERVER

Trang 24

Transaction với Trigger – ORACLE

Trang 25

THẢO LUẬN

Trang 26

~ Sinh viên thực hiện ~ 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

Ngày đăng: 17/02/2014, 02:20

TỪ KHÓA LIÊN QUAN

w