Bài giảng điện tử môn tin học: Transaction pptx

17 354 3
Bài giảng điện tử môn tin học: Transaction pptx

Đ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

1 TRANSACTION 12 12 2  Nguyên Tắc Hoạt Ðộng Của Transaction Log Nguyên Tắc Hoạt Ðộng Của Transaction Log Transaction log file trong SQL Server dùng để ghi lại Transaction log file trong SQL Server dùng để ghi lại các thay đổi xảy ra trong database. Quá trình này diễn các thay đổi xảy ra trong database. Quá trình này diễn ra như sau: ra như sau:  đầu tiên khi có một sự thay đổi data như Insert, đầu tiên khi có một sự thay đổi data như Insert, Update, Delete được yêu cầu từ các ứng dụng, SQL Update, Delete được yêu cầu từ các ứng dụng, SQL Server sẽ tải (load) Server sẽ tải (load) data page data page tương ứng lên tương ứng lên memory memory (vùng bộ nhớ này gọi là (vùng bộ nhớ này gọi là data cache data cache ), ),  sau đó data trong data cache được thay đổi (những sau đó data trong data cache được thay đổi (những trang bị thay đổi còn gọi là trang bị thay đổi còn gọi là dirty-page dirty-page ). ).  Tiếp theo mọi sự thay đổi đều được ghi vào Tiếp theo mọi sự thay đổi đều được ghi vào transaction transaction log file log file cho nên người ta gọi là cho nên người ta gọi là write-ahead log write-ahead log . .  Cuối cùng thì một quá trình gọi là Cuối cùng thì một quá trình gọi là Check Point Process Check Point Process sẽ kiểm tra và viết tất cả những sẽ kiểm tra và viết tất cả những transaction transaction đã được đã được commited commited (hoàn tất) vào dĩa cứng (hoàn tất) vào dĩa cứng (flushing the page). (flushing the page). 3 4 1. Khái niệm cơ bản về Transaction: 1. Khái niệm cơ bản về Transaction:  Một giao tác (transaction) là một chuỗi một hoặc Một giao tác (transaction) là một chuỗi một hoặc nhiều câu lệnh SQL được kết hợp lại với nhau nhiều câu lệnh SQL được kết hợp lại với nhau thành một khối công việc. thành một khối công việc.  Các câu lệnh SQL xuất hiện trong giao tác thường Các câu lệnh SQL xuất hiện trong giao tác thường có mối quan hệ tương đối mật thiết với nhau và có mối quan hệ tương đối mật thiết với nhau và thực hiện các thao tác độc lập. thực hiện các thao tác độc lập.  Việc kết hợp các câu lệnh lại với nhau trong một Việc kết hợp các câu lệnh lại với nhau trong một giao tác nhằm đảm bảo tính toàn vẹn dữ liệu và khả giao tác nhằm đảm bảo tính toàn vẹn dữ liệu và khả năng phục hồi dữ liệu. năng phục hồi dữ liệu.  Trong một giao tác, các câu lệnh có thể độc lập với Trong một giao tác, các câu lệnh có thể độc lập với nhau nhưng tất cả các câu lệnh trong một giao tác nhau nhưng tất cả các câu lệnh trong một giao tác đòi hỏi hoặc phải thực thi trọn vẹn hoặc không một đòi hỏi hoặc phải thực thi trọn vẹn hoặc không một câu lệnh nào được thực thi. câu lệnh nào được thực thi. 5  Xét một ví dụ kinh điển về Xét một ví dụ kinh điển về transaction transaction : Ta muốn : Ta muốn chuyển một số tiền chuyển một số tiền $500 $500 từ từ account account A A sang sang account account B B như vậy công việc này cần làm các bước sau: như vậy công việc này cần làm các bước sau: Trừ $500 từ account A - Cộng $500 vào account B Trừ $500 từ account A - Cộng $500 vào account B  Tuy nhiên việc chuyển tiền trên phải được thực Tuy nhiên việc chuyển tiền trên phải được thực hiện dưới dạng một hiện dưới dạng một transaction transaction nghĩa là giao dịch nghĩa là giao dịch chỉ được xem là hoàn tất chỉ được xem là hoàn tất (commited) (commited) khi cả hai khi cả hai bước trên đều thực hiện thành công. bước trên đều thực hiện thành công.  Nếu vì một lý do nào đó ta chỉ có thể thực hiện Nếu vì một lý do nào đó ta chỉ có thể thực hiện được bước 1 (chẳng hạn như vừa xong bước 1 thì được bước 1 (chẳng hạn như vừa xong bước 1 thì điện cúp hay máy bị treo) thì xem như giao dịch điện cúp hay máy bị treo) thì xem như giao dịch không hoàn tất và cần phải được phục hồi lại trạng không hoàn tất và cần phải được phục hồi lại trạng thái ban đầu thái ban đầu (roll back) (roll back) 6 7 Giao tác SQL được định nghĩa trên các câu lệnh sau: Giao tác SQL được định nghĩa trên các câu lệnh sau:  BEGIN TRANSACTION: BEGIN TRANSACTION: Bắt đầu một giao tác Bắt đầu một giao tác  SAVE TRANSACTION: SAVE TRANSACTION: Đánh dấu một vị trí trong Đánh dấu một vị trí trong giao tác (gọi là điểm giao tác (gọi là điểm đánh dấu) đánh dấu)  ROLLBACK TRANSACTION: ROLLBACK TRANSACTION: Quay lui trở lại đầu Quay lui trở lại đầu giao tác hoặc một điểm đánh dấu trước đó trong giao tác hoặc một điểm đánh dấu trước đó trong giao tác giao tác  COMMIT TRANSACTION: COMMIT TRANSACTION: Đánh dấu điểm kết Đánh dấu điểm kết thúc một giao tác. Khi câu lệnh này thực thi cũng có thúc một giao tác. Khi câu lệnh này thực thi cũng có nghĩa là giao tác đã thực hiện thành công nghĩa là giao tác đã thực hiện thành công  ROLLBACK ROLLBACK [ [ WORK WORK ] ] : : Quay lui trở lại đầu giao tác Quay lui trở lại đầu giao tác  COMMIT COMMIT [ [ WORK WORK ] ] : : Đánh dấu kết thúc giao tác Đánh dấu kết thúc giao tác 8 VD: VD: Giao tác dưới đây kết thúc do lệnh ROLLBACK Giao tác dưới đây kết thúc do lệnh ROLLBACK TRANSACTION và mọi thay đổi vể mặt dữ liệu mà TRANSACTION và mọi thay đổi vể mặt dữ liệu mà giao tác đã thực hiện (Update) đều không có tác dụng. giao tác đã thực hiện (Update) đều không có tác dụng. BEGIN TRANSACTION BEGIN TRANSACTION giaotac1 giaotac1 Update Update monhoc monhoc Set Set sodvht=4 sodvht=4 Where Where sodvht=3; sodvht=3; Update Update diemthi Set diemlan2=0 diemthi Set diemlan2=0 Where Where diemlan2 diemlan2 Is Null Is Null ROLLBACK TRANSACTION ROLLBACK TRANSACTION giaotac1 giaotac1 9 VD: giao tác dưới đây kết thúc bởi lệnh COMMIT và VD: giao tác dưới đây kết thúc bởi lệnh COMMIT và thực hiện thành công việc cập nhật dữ liệu trên các thực hiện thành công việc cập nhật dữ liệu trên các bảng MONHOC và DIEMTHI. bảng MONHOC và DIEMTHI. BEGIN TRANSACTION BEGIN TRANSACTION giaotac2 giaotac2 Update Update monhoc monhoc Set Set sodvht=4 sodvht=4 Where Where sodvht=3; sodvht=3; Update Update diemthi Set diemlan2=0 diemthi Set diemlan2=0 Where Where diemlan2 Is Null diemlan2 Is Null COMMIT TRANSACTION COMMIT TRANSACTION giaotac2 giaotac2 10 SAVE TRANSACTION SAVE TRANSACTION <tên_điểm_dánh_dấu> <tên_điểm_dánh_dấu> được sử dụng để đánh dấu một vị trí trong giao tác. Khi được sử dụng để đánh dấu một vị trí trong giao tác. Khi câu lệnh này được thực thi, trạng thái của cơ sở dữ liệu câu lệnh này được thực thi, trạng thái của cơ sở dữ liệu tại thời điểm đó sẽ được ghi lại trong nhật ký giao tác. tại thời điểm đó sẽ được ghi lại trong nhật ký giao tác. ROLLBACK TRANSACTION ROLLBACK TRANSACTION <tên_điểm_đánh_dấu> <tên_điểm_đánh_dấu> Trong trường hợp này, những thay đổi về mặt dữ liệu mà Trong trường hợp này, những thay đổi về mặt dữ liệu mà giao tác đã thực hiện từ điểm đánh dấu đến trước khi câu giao tác đã thực hiện từ điểm đánh dấu đến trước khi câu lệnh lệnh ROLLBACK ROLLBACK được triệu gọi sẽ bị huỷ bỏ. Giao tác sẽ được triệu gọi sẽ bị huỷ bỏ. Giao tác sẽ được tiếp tục với trạng thái cơ sở dữ liệu có được tại điểm được tiếp tục với trạng thái cơ sở dữ liệu có được tại điểm đánh dấu. đánh dấu. Nhưng nếu câu lệnh Nhưng nếu câu lệnh ROLLBACK ROLLBACK này được sử dụng để này được sử dụng để quay lui lại đầu giao tác (tức là huỷ bỏ giao tác), giao tác quay lui lại đầu giao tác (tức là huỷ bỏ giao tác), giao tác sẽ kết thúc và do đó câu lệnh sẽ kết thúc và do đó câu lệnh COMMIT TRANSACTION COMMIT TRANSACTION trong trường hợp này sẽ gặp lỗi. trong trường hợp này sẽ gặp lỗi. [...]...11 Ví dụ: Câu lệnh COMMIT TRANSACTION trong giao tác dưới đây kết thúc thành công BEGIN TRANSACTION giaotac3 Update diemthi Set diemlan2=0 Where diemlan2 Is Null SAVE TRANSACTION a Update monhoc Set sodvht=4 Where sodvht=3 ROLLBACK TRANSACTION a Update monhoc Set sodvht=2 Where sodvht=3 COMMIT TRANSACTION giaotac3 12 Ví dụ: về câu lệnh COMMIT TRANSACTION gặp lỗi: BEGIN TRANSACTION giaotac4 Update... Commit Transaction T1) 15 Giải sử table MonHoc chưa có dữ liệu ta xét VD sau: BEGIN TRANSACTION EXEC sp_ThemMonHoc 'T-01', 'ASP.NET', 4 SAVE TRANSACTION a EXEC sp_ThemMonHoc 'T-02', ‘CSDL', 5 ROLLBACK TRANSACTION a EXEC sp_ThemMonHoc 'T-03', ‘SQL Server', 5 COMMIT TRANSACTION Dữ liệu trong bảng MonHoc sau khi thực hiện là: MaMH TenMH SoDVHT T-01 ASP.NET 4 T-03 SQL Server 5 Lời gọi thủ tục cho môn 'CSDL'... @maMH nvarchar(10), @tenMH nvarchar(50), @sodvht smallint As BEGIN TRANSACTION T1 Insert Into MonHoc Values(@maMH, @ tenMH, @sodvht); COMMIT TRANSACTION T1 14 Lời gọi đến thủ tuch sp_ThemMonHoc c giao tác lồng: BEGIN TRANSACTION T2 EXEC sp_ThemMonHoc 'TI-005', 'CSDL', 5 ROLLBACK TRANSACTION T2 Trong giao tác trên, câu lệnh Rollback Transaction T2 huỷ bỏ giao tác và do đó tác dụng của lời gọi thủ tục... 12 Ví dụ: về câu lệnh COMMIT TRANSACTION gặp lỗi: BEGIN TRANSACTION giaotac4 Update diemthi Set diemlan2=0 Where diemlan2 Is Null SAVE TRANSACTION a Update monhoc Set sodvht=4 Where sodvht=3 ROLLBACK TRANSACTION giaotac4 Update monhoc Set sodvht=2 Where sodvht=3 COMMIT TRANSACTION giaotac4 13 Giao tác lồng nhau: Các giao tác trong SQL có thể được lồng vào nhau theo từng cấp Điều này thường gặp đối với... Server', 5 COMMIT TRANSACTION Dữ liệu trong bảng MonHoc sau khi thực hiện là: MaMH TenMH SoDVHT T-01 ASP.NET 4 T-03 SQL Server 5 Lời gọi thủ tục cho môn 'CSDL' trong giao tác đã bị huỷ bỏ bởi lệnh Rollback Transaction trong giao tác 16 Như đã thấy trong ví dụ trên, khi các giao tác SQL được lồng vào nhau, giao tác ngoài cùng nhất là giao tác có vai trò quyết định Nếu giao tác ngoài cùng nhất được uỷ thác... thời uỷ thác Và nếu giao tác ngoài cùng nhất thực hiện lệnh ROLLBACK thì những giao tác lồng bên trong cũng chịu tác động của câu lệnh này (cho dù những giao tác lồng bên trong đã thực hiện lệnh COMMIT TRANSACTION) 17 . 1 TRANSACTION 12 12 2  Nguyên Tắc Hoạt Ðộng Của Transaction Log Nguyên Tắc Hoạt Ðộng Của Transaction Log Transaction log file trong SQL Server dùng để ghi lại Transaction log. được định nghĩa trên các câu lệnh sau:  BEGIN TRANSACTION: BEGIN TRANSACTION: Bắt đầu một giao tác Bắt đầu một giao tác  SAVE TRANSACTION: SAVE TRANSACTION: Đánh dấu một vị trí trong Đánh. Where Where diemlan2 Is Null diemlan2 Is Null COMMIT TRANSACTION COMMIT TRANSACTION giaotac2 giaotac2 10 SAVE TRANSACTION SAVE TRANSACTION <tên_điểm_dánh_dấu> <tên_điểm_dánh_dấu>

Ngày đăng: 11/08/2014, 22:22

Từ khóa liên quan

Mục lục

  • TRANSACTION

  • Slide 2

  • Slide 3

  • Slide 4

  • Slide 5

  • Slide 6

  • Slide 7

  • Slide 8

  • Slide 9

  • Slide 10

  • Slide 11

  • Slide 12

  • Slide 13

  • Slide 14

  • Slide 15

  • Slide 16

  • Slide 17

Tài liệu cùng người dùng

Tài liệu liên quan