intTypePromotion=1
zunia.vn Tuyển sinh 2024 dành cho Gen-Z zunia.vn zunia.vn
ADSENSE

Hệ Quản Trị CSDL

Chia sẻ: Lê Trinh | Ngày: | Loại File: PPT | Số trang:26

83
lượt xem
6
download
 
  Download Vui lòng tải xuống để xem tài liệu đầy đủ

GVHD: ThS Đỗ Thị Minh Phụng . Transaction – Giao tác (SQL Server) 1. 2. 3. 4. Khái niệm Phân loại Giao tác không tường minh (Implicit Transaction) Giao tác tường minh (Explicit

Chủ đề:
Lưu

Nội dung Text: Hệ Quản Trị CSDL

  1. GVHD: ThS Đỗ Thị Minh Phụng
  2.  Transaction – Giao tác (SQL Server) 1. Khái niệm 2. Phân loại 3. Giao tác không tường minh (Implicit Transaction) 4. Giao tác tường minh (Explicit Transaction)  Liên hệ với so sánh với Oracle
  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 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ỉ 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
  4. 2.Phân loại SQL Server thực thi transaction theo 4 chế độ. Autocommit transactions Mỗi một thao tác đơn (statement) được xem là 1 transaction Explicit transactions Transaction bắt đầu với câu lệnh BEGIN TRANSACTION và th ực thi qua câu lệnh COMMIT or ROLLBACK. Implicit transactions Các transaction được thực hiện liên tiếp nhau – đ ược coi là m ột chu ỗi. M ỗi transaction trong chuỗi đó cũng được 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 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
  5. BEGIN TRANSACTION EXPLICIT AUTOCOMMIT IMPLICIT SET IMPLICIT_TRANSACTION (ON/ OFF) MARS Session BATCH­ SCOPED
  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)
  7. 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
  8. 4.1/ Cú pháp 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 COMMIT TRAN[SACTION] [Tên_giao_tác] ROLLBACK TRAN[SACTION] [Tên_giao_tác] 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
  9. 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.
  10. 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. SAVE TRAN[SACTION] [Tên_vùng]     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.
  11. 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.
  12. ~ Liên hệ , so sánh về Transaction trong  SQL SERVER với Oracle ~  Bản chất của Transaction Control + 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!  Transaction với Trigger 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.
ADSENSE

CÓ THỂ BẠN MUỐN DOWNLOAD

 

Đồng bộ tài khoản
2=>2