Chủ nhiệm Bộ môn Phan Nguyên Hải ĐỀ CƯƠng chi tiết bài giảNG


- Thiết lập thủ tục tự động, thủ tục : sp_procoption



tải về 308.69 Kb.
trang2/3
Chuyển đổi dữ liệu19.08.2016
Kích308.69 Kb.
#24765
1   2   3

- Thiết lập thủ tục tự động, thủ tục : sp_procoption

- Yêu cầu SV chuẩn bị:

+ Đọc trước tài liệu [4] chương 6 từ trang 151 - 184

+ Tìm hiểu các nội dung sau:

Các ưu điểm khi dùng thủ tục so với dùng tập các câu lệnh đơn lẻ.

Ý nghĩa của query plan, các tham số dạng default, output, execute as.

Thủ tục đệ quy

Tạo một số thủ tục đơn giản trong CSDL bán hàng.

Tạo thủ tục đệ quy, thực hiện lời gọi để đệ quy quá 32 lần.


Bài giảng 7: Hàm (Function)

Chương 5

Tiết thứ: 19 - 21 Tuần thứ: 7

- Mục đích, yêu cầu:

+ Ý nghĩa của hàm, tạo và thực thi thủ tục

+ So sánh hàm với view.

- Hình thức tổ chức dạy học: Lý thuyết, thảo luận, tự học, tự nghiên cứu

- Thời gian: Lý thuyết, thảo luận: 3 tiết; Tự học, tự nghiên cứu: 3 tiết

- Địa điểm: Giảng đường do P2 phân công.

- Nội dung chính:

- Định nghĩa hàm.

+ Hàm được chia thành 2 loại: hàm xác định (deterministic) và hàm không xác định (non-deterministic)

+ Hàm xác định là hàm luôn trả về cùng giá trị nếu giá trị các tham số được truyền vào như nhau.

+ Hàm không xác định là hàm có thể tạo ra các kết quả khác biệt tại mỗi thời điểm chúng được gọi thực hiện, ngay cả khi giá trị các tham số được cung cấp vẫn không thay đổi. Ví dụ hàm getdate() – khi gọi tại 2 thời điểm cho kết quả khác nhau.

+ Thuật ngữ “scalar functions – các hàm vô hướng” dùng để chỉ các hàm trả về một giá trị, tương phản với nó là các hàm trả về một table.

- Hàm trả về giá trị đơn - Scalar Functions

Cú pháp:

CREATE FUNCTION [ schema_name. ] function_name

( [ { @parameter_name [ AS ][ type_schema_name. ] parameter_data_type

[ = default ] } [ ,...n ] ])

RETURNS return_data_type

[ WITH [ ,...n ] ]

[ AS ]

BEGIN


function_body

RETURN scalar_expression

END [ ; ]

- Hàm trả về bảng:

+ Cú pháp hàm trả về bảng, thân hàm chỉ có một lệnh T-SQL (Inline Table-valued Functions)

+ Cú pháp hàm trả về bảng, thân hàm gồm một khối lệnh T-SQL (Multistatement Table-valued Functions)

- Ý nghĩa của các tham số EXECUTE AS; AS CALLER; AS OWNER; AS SELF.

- Lời gọi hàm.

- Một số hàm hệ thống:

+ Hàm lấy thời gian của hệ thống: getdate().

+ Hàm @@identity

+ Hàm Object_ID, Object_Name

+ Hàm đánh số thứ tự bản ghi ROW_NUMBER()

- Các ví dụ

+ Hàm đệ quy tính số Fibonaci (Hàm trả về giá trị vô hướng)

Create function dbo.fibonaci(@n int)

returns int as

Begin

if @n>1


return dbo.fibonaci(@n-1) +dbo.fibonaci(@n-2)

return 1


End

declare @i int

set @i=dbo.fibonaci(5)

print @i

+ Tạo hàm đảo ngược chuỗi

+ Tạo hàm bảng mã kí tự ASCII, UNICODE, qui tắc sắp xếp trường dữ liệu văn bản (collation) trên MS SQL Server

- Xây dựng hàm sắp xếp dữ liệu văn bản tiếng Việt

- Yêu cầu SV chuẩn bị:

+ Tìm hiểu một số hàm thường dùng của hệ thống: getdate, row_number, @@identity,…

+ Viết một số hàm tổng hợp, tìm kiếm dữ liệu trên CSDL bán hàng.

+ Đọc trước tài liệu [4] chương 5 trang 117 - 149


Bài giảng 8: Kích họat (Trigger)

Chương 6

Tiết thứ: 22 - 24 Tuần thứ: 8

- Mục đích, yêu cầu:

+ Giúp sinh viên biết cách sử dụng các luồng và xử lý file

+ Tìm hiểu ý nghĩa, trường hợp sử dụng, cú pháp tạo, sửa, xóa DDL trigger và DML trigger.

+ Sử dụng MS Management Studio để tạo, xóa, sửa trigger.



- Hình thức tổ chức dạy học: Lý thuyết, thảo luận, tự học, tự nghiên cứu

- Thời gian: Lý thuyết, thảo luận: 3 tiết; Tự học, tự nghiên cứu: 3 tiết

- Địa điểm: Giảng đường do P2 phân công.

- Nội dung chính:

- Trigger là một kiểu thủ tục được kích họat tự động theo các sự kiện (events).

- Có 02 lọai triggers: Data definition trigger (DDL triggers) và Data manipulation language triggers (DML triggers)

- Tạo trigger: Cú pháp CREATE TRIGGER

- Sửa trigger: ALTER TRIGGER

- Xóa trigger: DROP TRIGGER.



- Data definition trigger (DDL triggers)

+ Tạo DDL trigger trên server

+ Tạo DDL Trigger trên database

+ DDL triggers được tự động gọi sau khi máy thực hiện các lệnh sau: Create Table, Drop Table, Alter Procedure, Drop Schema, Create Login, …

+ Trigger trên Server được lưu trong: Server Objects -> Triggers.

+ Trigger trên Database được lưu trong: Programmability -> Database Triggers.

+ Ví dụ trigger ngăn cấm việc tạo UserLogin

+ Ví dụ trigger ngăn cấm thay đổi UserLogin

-- Ngăn cấm can thiệp đến loginUser(CREATE_LOGIN, DROP_LOGIN, ALTER_LOGIN)

-- ALL SERVER - chỉ định ràng trigger này họat động trong tất cả các CSDL của server hiện thời

CREATE TRIGGER trgPreventLoginChanges ON ALL SERVER FOR DDL_LOGIN_EVENTS

AS


RAISERROR('It is not allowed to add logins to this server without permission.

Call DBA Security Group.', 16, 1)

Rollback

GO

drop trigger trgPreventLoginChanges ON ALL SERVER



+ Event Data Trigger: cho phép ghi lại những thay đổi về dữ liệu.

- Data manipulation language triggers (DML triggers)

+ Trigger dạng For: các câu lệnh bên trong trigger sẽ được thực hiện sau khi các sự kiện tạo nên trigger đã xảy ra rồi.

+ Trigger dạng thay thế INSTEAD OF: sẽ bỏ qua sự kiện đã kích hoạt trigger mà thay vào đó sẽ thực hiện các dòng lệnh SQL bên trong Trigger. INSTEAD OF được chia làm 3 loại nhỏ: INSTEAD OF INSERT, INSTEAD OF UPDATE và INSTEAD OF DELETE.

+ Cú pháp:

Tạo trigger:

CREATE TRIGGER ON |

[With encryption|EXECUTE AS { CALLER | SELF | 'user_name' } ]

{[FOR| AFTER] [insert],[update],[delete] | Instead of}


AS Transact-SQL statements

Sửa trigger: ALTER Trigger.

Xóa trigger: DROP Trigger.

Vô hiệu hóa trigger: DISABLE TRIGGER

Làm trigger có hiệu lực trở lại: ENABLE TRIGGER.

- Lưu ý:

+ Trigger không thể được tạo ra trên bảng tạm thời hay bảng hệ thống. Trigger chỉ có thể được kích hoạt một cách tự động bởi một trong các event Insert, Update, Delete mà không thể chạy manually được. Có thể áp dụng trigger cho View. 

+ Trigger Insert: Trigger được phát biểu bởi for insert. Trigger này sẽ được thực hiện khi tiến hành thêm một mẫu tin vào bảng. Mẫu tin cần thêm sẽ được lưu trong một bảng tạm có tên là Inserted.

+ Trigger Delete: Trigger được phát biểu bởi for delete. Trigger này sẽ được thực hiện khi tiến hành xóa một mẫu tin trong bảng. Mẫu tin bị xóa sẽ được lưu trong một bảng tạm có tên là deleted.

+ Trigger Update: Trigger được phát biểu bởi for update. Trigger này sẽ được thực hiện khi tiến hành sửa một mẫu tin trong bảng. Mẫu tin bị thay đổi sẽ được lưu trong 2 bảng tạm có tên là Inserted (chứa giá trị mới) và Deleted (chứa giá trị cũ).

+ Inserted và Deleted là 2 table tạm chỉ chứa trên bộ nhỏ và chỉ có giá trị bên trong trigger mà thôi (nghĩa là chỉ nhìn thấy được trong trigger mà thôi). Ta có thể dùng thông tin trong 2 table này để so sánh data cũ và mới hoặc kiểm tra xem data mới.

- Tạo trigger trên bảng, view

- Hàm Update() trong các trigger.

- Ý nghĩa của các tham số EXECUTE AS; AS CALLER; AS OWNER; AS SELF

- Gỡ rối trigger: Để gỡ rối một trigger chúng ta phải viết một procedure có gọi các thao tác làm phát sinh sự kiện để thực thi trigger

- Các ví dụ

- Yêu cầu SV chuẩn bị:

+ Đọc trước tài liệu [4] chương 7 từ trang 187 - 217

+ Tạo một số trigger có chức năng quản trị mức Server.

+ Tạo một số trigger có chức năng quản trị mức database.

+ Tạo một số trigger mức bảng, có chức năng kiểm tra tính hợp lệ dữ liệu trong khi thao tác.
Bài giảng 9: Cách tạo và làm việc với chỉ mục (Index)

Chương 7

Tiết thứ: 25 - 27 Tuần thứ: 9

- Mục đích, yêu cầu:

+ Giới thiệu về chỉ mục, tạo và sử dụng chỉ mục trong CSDL.

+ Sinh viên nắm được cách tạo và bảo trì chỉ mục.

- Hình thức tổ chức dạy học: Lý thuyết, thảo luận, tự học, tự nghiên cứu

- Thời gian: Lý thuyết, thảo luận: 3 tiết; Tự học, tự nghiên cứu: 3 tiết

- Địa điểm: Giảng đường do P2 phân công.

- Nội dung chính:

- Mục đích của chỉ mục

+ SQL Server 2005 sử dụng index để tăng tốc độ truy vấn đến dữ liệu trong bảng.

+ Việc truy cập dữ liệu có sử dụng index gọi là ‘index access’

+ Trường hợp ngược lại, gọi là ‘table scan’ khi đó các bản ghi sẽ được xử lý tuần tự

+ Tất cả các indexes trong SQL Server 2005 đều sử dụng cấu trúc B-tree.

+ Việc truy cập dữ liệu trong bảng sử dụng chỉ mục là một chiến lược rất tốt: SQL Server 2005 nói chung cần một thời gian ngắn đề truy cập một bảng ghi bất kỳ trong bảng. Trong khi đó việc truy cập tuần từ cần một thời gian lớn để truy cập đến một bản ghi nằm ở cuối bảng.

- Phương pháp lưu trữ dữ liệu trên SQL Server

+ Trong SQL 2000 mỗi dòng chứa tối đa 8,060 bytes.

+ Trong SQL 2005 kích thước mỗi dòng có thể vượt quá 8,060 bytes.

- Qui tắc chọn các trường dữ liệu làm chỉ mục

- Phân loại chỉ mục

+ Chỉ mục dạng phân cụm Clustered, cấu trúc B+Tree

+ Chỉ mục dạng nonclustered

+ Chỉ mục dạng hàm băm

+ Cách quản lý bản ghi, tổ chức dữ liệu, tìm kiếm bản ghi của chỉ mục Clustered và nonclustered.

- Quan hệ giữa keys và indexes.

+ Trong mô hình CSDL quan hệ có sử dụng 3 loại khóa: primary, candidate và foreign keys.

+ Một chỉ mục “unique index” sẽ được tạo tự động tạo cho mỗi primary và candidate key. Hơn nữa, mỗi cột primary key hoặc candidate key sẽ không thể chứa giá trị NULL.

+ Một chỉ mục “non unique index” sẽ được tạo tự động tạo cho mỗi foreign key.

- Các trường nên tạo chỉ mục:

+ Các trường dữ liệu xuất hiện sau where.

+ Sau where có nhiều điều kiện với phép and

+ Với phép toán JOIN thì hai trường tham gia vào phép toán này phải là PK và FK.

- Chỉ mục

+ Tạo chỉ mục

+ Tham số FILLFACTOR:

FILLFACTOR – qui định các trang ở mức lá của chỉ mục sẽ được điền đầy như thế nào? Giá trị mặc định của FILLFACTOR là 0. FILLFACTOR =0 hoặc 100 có nghĩa là các trang ở mức là có thể được điền đầy, nhưng các trang ở gốc và trung gian thì phải còn trống ít nhất là 2 dòng. Các giá trị khác của FILLFACTOR chỉ giá trị phần trăm được điền đầy của các trang ở mức lá.

Cách đặt lại giá trị mặc định cho FILLFACTOR.

+ Tham số PAD_INDEX: xác định rằng các trang ở gốc và trung gian của chỉ mục sử dụng giá trị FILLFACTOR giống như trang lá.

+ Tham số INCLUDE ( column [ ,... n ] ) chỉ định một số trường không phải là trương khóa được bổ sung thêm vào các bản ghi ở mức lá của chỉ mục N-Index.
- Ví dụ minh họa

- Bảo trì chỉ mục

+ Xem thông tin về các chỉ mục của bảng.

+ Xem các thông tin về sự phân mảnh của dữ liệu và chỉ mục của một bảng.

+ Khi phát hiện phân mảnh chúng ta có thể sử dụng một trong ba cách sau:

+ Xóa và tạo lại index.

+ Rebuild the index - DBCC DBREINDEX

+ Defrag the index - DBCC INDEXDEFRAG

- Sử dụng công cụ Database Engine Tuning Advisor (DTA)

+ Sử dụng cộng cụ DTA để hiệu chỉnh CSDL nhằm tăng tốc độ truy vấn.

+ DTA dùng để tìm một thiết kế vật lý tốt nhất cho việc thực hiện các truy vấn.

+ Các bước hiệu chỉnh các truy vấn trong file:

- Giám sát hiệu năng thực thi của các truy vấn

+ Thực hiện truy vấn

+ Chọn menu Query -> Display Estimated Execution Plan

+ Nếu muốn hiển thị kế hoạch thực thi mỗi lần thực hiện một truy vấn thì ta chọn Query -> Include Actual Execution Plan.

+ Muốn xem thông tin thống kê ở client mỗi lần thực thi, chọn Query -> Include Client Statistic. (Chú ý dòng total execution time – ghi nhớ lại để so sanh với truy vấn khi đã được tối ưu).

- Cải thiện truy vấn bằng tạo chỉ mục.



- Yêu cầu SV chuẩn bị:

+ Đọc trước tài liệu [1] chương 8 trang 189 - 228

+ Tạo bảng có dữ liệu lớn, thực thi truy vấn với điều kiện where có nhiều phép AND, sắp xếp dữ liệu. Xem hiệu năng thực thi truy vấn.

+ Tạo chỉ mục cho các trường sau where, thực thi câu lệnh. Xem hiệu năng truy vấn.


Bài giảng 10: Kiểu dữ liệu con trỏ - Cursor

Chương 8

Tiết thứ: 28 - 30 Tuần thứ: 10

- Mục đích, yêu cầu:

+ Giúp sinh viên hiểu, phân loại và sử dụng được các loại con trỏ khác nhau.

+ Sinh viên viết khối lệnh sử dụng con trỏ để đọc các mẩu tin

+ Nắm được các tình huống nên sử dụng con trỏ.



- Hình thức tổ chức dạy học: Lý thuyết, thảo luận, tự học, tự nghiên cứu

- Thời gian: Lý thuyết, thảo luận: 3 tiết; Tự học, tự nghiên cứu: 3 tiết

- Địa điểm: Giảng đường do P2 phân công.

- Nội dung chính:

- Ý nghĩa sử dụng: Dữ liệu con trỏ cho phép lưu trữ một tập hợp các mẫu tin từ bảng

- Khai báo kiểu dữ liệu con trỏ

+ Cú pháp 1:

DECLARE cursor_name [ INSENSITIVE ] [ SCROLL ]

CURSOR FOR select_statement

[ FOR { READ ONLY | UPDATE [ OF column_name [ ,...n ] ] } ]

+ Trong đó:

INSENSITIVE – SQL sẽ tạo ra một bảng dữ liệu tạm thời trong TempDB vì vậy các sửa đổi dữ liệu trong bảng cũ không có tác dụng lên con trỏ.

SCROLL - Mặc định chỉ cho phép thực hiện FETCH NEXT, nếu có thêm tham số SCROLL thì có thể thực hiện: FIRST, LAST, PRIOR, NEXT, RELATIVE, ABSOLUTE

UPDATE [OF column_name [,...n]] – danh sách các trường có thể update dữ liệu. Nếu chỉ có UPDATE thì tất cả các trường đều có thể cập nhập dữ liệu.

+ Cú pháp 2:

DECLARE cursor_name CURSOR[ LOCAL | GLOBAL ]

[ FORWARD_ONLY | SCROLL ]

[ STATIC | KEYSET | DYNAMIC | FAST_FORWARD ]

FOR select_statement[ FOR UPDATE [ OF column_name [ ,...n ] ] ]

- Cách sử dụng con trỏ:

+ Khai báo

+ Mở con trỏ.

+ Kiểm tra trạng thái, lấy mẩu tin từ con trỏ.

+ Đóng con trỏ.

+ Hủy con trỏ.

- Mở và lấy mẫu tin từ con trỏ

+ Open

+ Sau khi mở con trỏ, bước tiếp theo là chúng ta sẽ lấy giá trị các cột trong các mẫu tin lưu trong con trỏ.

FETCH  [ NEXT | PRIOR | FIRST | LAST] FROM cursor_name [ INTO @variable_name [ ,...n ] ]

. FETCH – Lấy dữ liệu

. Next - Đến mẫu tin tiếp theo

. Prior -Về mẫu tin trước đó

. First –Về mẫu tin đầu tiên

. Last – Đến mẫu tin cuối cùng

. INTO @variable_name [ ,...n ] - Dữ liệu của các cột trong mẫu tin sẽ được đưa vào các biến tương ứng

- Kiểm tra trạng thái của con trỏ

+ Sử dụng hàm@@Fetch_Status để kiểm tra.

0 - Nếu như lấy mẫu tin thành công;

1 - Lấy mẫu tin thất bại với lý do là con trỏ đã ra quá vùng giới hạn BOF hoặc EOF,

2 - Lấy mẫu tin thất bại với lý do là mẫu tin không tồn tại.

- Phạm vi họat động của con trỏ

+ Local – là phạm vi mặc định - chỉ hoạt động trong một thủ tục.

+ Global – có phạm vi hoạt động trong toàn bộ kết nối.

- Phân loại con trỏ

+ Con trỏ tĩnh (Static)

Khi con trỏ này được tạo ra, những mẫu tin được copy vào một bảng tạm thời trong CSDL tempdb;

Con trỏ làm việc với bảng tạm thời do đó những thay đổi dữ liệu trong bảng gốc không có tác động đến con trỏ;

Con trỏ static không cho phép cập nhật dữ liệu.

+ Con trỏ Keyset (Keyset-driven)

Tập dữ liệu trong khóa được copy vào bảng tạm trong TempDB.

Tập dữ liệu trong khóa phải duy nhất

Cho phép thay đổi các trường dữ liệu không phải là khóa

Việc thay đổi các trường nonkey sẽ có tác động ngay đến con trỏ.

Việc xóa bản ghi hoặc thay đổi khóa có thể làm con trỏ bị lỗi.

Việc thêm mới bản ghi vào bảng gốc không tác động đến con trỏ

+ Con trỏ động (Dynamic)

Con trỏ Dynamic không sử dụng đến bảng tạm trong TempDB mà thao tác trực tiếp với bảng gốc.

Khác với con trỏ keyset, dynamic không yêu cầu unique index

Mọi thao tác thêm, sửa, xóa đều có tác động ngay lập tức đến con trỏ Dynamic.

- Các ví dụ

- Sử dụng con trỏ global để trao đổi dữ liệu giữa các thủ tục

- Sửa đổi dữ liệu tại vị trí của con trỏ

Có thể sử dụng Update hoặc Delete để sửa đổi hoặc xóa bản ghi tại vị trí hiện thởi của con trỏ với mệnh đề Where current of TEN_CURSOR

Chỉ áp dụng với con trỏ dạng KeySet và Dynamic

- Yêu cầu SV chuẩn bị:

+ Đọc trước tài liệu [1] chương 15 trang 421 - 453

+ Sử dụng biến con trỏ, duyệt các bản ghi của bảng nhân viên, in ra tên các nhân viên.

+ Sử dụng biến con trỏ KeySet và Dynamic để cập nhật dữ liệu tại vị trí con trỏ.

+ Tạo con trỏ Global, trao đổi dữ liệu giữa 2 thủ tục.
Bài giảng 11: Giao dịch - Transaction và Khoá –Lock

Chương 9

Tiết thứ: 31 - 33 Tuần thứ: 11

- Mục đích, yêu cầu:

+ Giới thiệu giao dịch, khóa và cách thức sử dụng trong môi trường nhiều người sử dụng.



- Hình thức tổ chức dạy học: Lý thuyết, thảo luận, tự học, tự nghiên cứu

- Thời gian: Lý thuyết, thảo luận: 3 tiết; Tự học, tự nghiên cứu: 3 tiết

- Địa điểm: Giảng đường do P2 phân công.

- Nội dung chính:

- Khái niệm về giao dịch:

Transaction là một loạt các hoạt động xảy ra được xem như một công việc đơn, nghĩa là hoặc thành công toàn bộ hoặc không làm gì cả.

- Các thuộc tính của transaction

+ Atomic (nguyên tử)

+ Consistent (nhất quán ): Một giao tác đặt sở dữ liệu ở trạng thái nhất quán sau khi nó hoàn tất hoặc hỏng. Các thay đổi được thực hịên bởi một giao tác là nhất quán từ trạng thái này sang trạng thái khác.

+ Isolated(cô lập): Một giao tác được gọi là bị cô lập khi nó không ảnh hưởng hoặc xung đột với bất kỳ giao tác khác trong cở sở dữ liệu.

+ Durable( bền vững): Một giao tác được gọi là lâu bền nếu công việc được bảo đảm vẫn hoàn tất mặc cho có bất kỳ điều gì xảy ra với cơ sở dữ liệu sau khi giao tác kết thúc thành công. Nếu nguồn điện cung cấp hỏng và cơ sở dữ liệu máy chủ kết thúc không bình thường, giao tác được bảo đảm vẫn hoàn tất khi máy chủ khởi động lại.

- Các phát biểu của transaction:

+ BEGIN TRAN: Bắt đầu một giao tác

+COMMIT TRAN: Xác định giao tác hoàn thành

+ ROLLBACK TRAN: Quay ngược giao tác

+ SAVE: Định nghĩa điểm đánh dấu cho phép quay ngược

+ Rollback chỉ một phần giao tác

- Phân loại transaction

+ Explicit Transaction ( Giao tác tường minh ): Được định nghĩa bắt đầu bằng BEGIN TRANS và kết thúc đơn vị giao tác bởi hành động COMMIT TRANS.

+ Autocommit Transaction( Giao dịch tự động): Một phát biểu hiệu chỉnh dữ liệu trong SQL Server là một implied transaction (giao dịch mặc nhiên). Mỗi phát biểu SQL là một giao dịch riêng biệt. Mỗi phát biểu thành công hay thất bại tuỳ thuộc vào giao dịch của chính nó.

+ Giao dịch implicit

Giao dịch implicit có hiệu lực ở cấp độ phiên làm việc bằng cách sử dụng phát biểu sau:

SET IMPLICIT_TRANSACTION ON

=> các phát biểu sau đó cần được commit rõ ràng( hoặc quay lui lại)

Để tắt các giao tác implicit, ta dùng lệnh sau:

SET IMPLICIT_TRANSACTION

- Cách sử dụng SQL Server Log

Transaction log file trong SQL Server ghi lại các thay đổi xảy ra trong database và chứa đầy đủ thông tin để có thể ROLLBACK hay ROLLFORWARD khi cần.

- Khái niệm về CheckPoint và Recovery Interval

- Các giao dịch phân tán

Giao dịch phân tán mở rộng ra hai hoặc nhiều máy.

Microsoft Distributed Transaction Coordinator (MS DTC) – dịch vụ quản lý các giao dịch phân tán.

- Các giai đoạn của một giao dịch phân tán

+ Giai đoạn chuuẩn bị Prepare

Server nguồn gửi một yêu cầu là lệnh của giao dịch đến Server liên quan.

Server thứ hai nhận yêu cầu thực hiện các giao dịch của Server nguồn, Server này phải thực hiện cho đến khi kết thúc các giao dịch đã yêu cầu.

+ Giai đoạn commit



Lệnh SQL Server

Lệnh Distributed

Begin Tran

Begin Distributed Tran

Save Tran

( Không hỗ trợ)

Rollback Tran

Rollback Tran

Commit Tran

Commit Tran

- Khóa


+ Các chế độ khóa (lock modes)

Shared Locks (S)

Exclusive Locks (X)

Update Locks (U)

- Khóa chỉ được phép đọc (Shared Locks (S) – Read Only)

+ Khi đọc 1 đơn vị dữ liệu, SQL Server tự động thiết lập Shared Lock trên đơn vị dữ liệu đó (trừ trường hợp sử dụng No Lock)

+ Được thiết lập trên 1 bảng, 1 trang, 1 khóa hay trên 1 dòng dữ liệu.

+ Nhiều giao tác có thể đồng thời giữ Shared Lock trên cùng 1 đơn vị dữ liệu.

+ Được giải phóng ngay sau khi sử dụng xong dữ liệu được đọc, trừ khi có yêu cầu giữ shared lock cho đến hết giao tác.

- Khóa loại trừ (Exclusive Locks (X))

+ Khi thực hiện thao tác ghi (insert, update, delete) trên 1 đơn vị dữ liệu, SQL Server tự động thiết lập Exclusive Lock trên đơn vị dữ liệu đó.

+Exclusive Lock luôn được giữ đến hết giao tác.

+ Tại 1 thời điểm, chỉ có tối đa 1 giao tác được quyền giữ Exclusive Lock trên 1 đơn vị dữ liệu.

- Khóa Update Locks (U):

+ Sử dụng khi đọc dữ liệu với dự định ghi trở lại trên đơn vị dữ liệu này.

+ Là chế độ khóa trung gian giữa Shared Lock và Exclusive Lock.

- Những loại tài nguyên có thể khóa


- Các vấn đề khi truy xuất dữ liệu một cách đồng thời

+ Đọc dữ liệu chưa commit (Uncommit data, Dirty read)

Xảy ra khi một giao tác thực hiện đọc trên một đơn vị dữ liệu mà đơn vị xử lý dữ liệu này đang bị cập nhạt bởi một giao tác khác nhưng việc cập nhật chưa được xác nhận.

+ Dữ liệu không lặp lại (Unrepeatable data)

Xảy ra khi một giao tác đang thực hiện đọc trên một đơn vị dữ liệu nhưng giao tác khác lại được phép thay đổi (ghi) trên đơn vị dữ liệu này. Điều này làm cho lần đọc sau đó của giao tác đầu tiên không còn nhìn thấy dữ liệu ban đầu nữa.

+ Phantom

Là tình trạng mà một giao tác trên một tập dữ liệu nhưng giao tác khác lại chèn thêm hoặc xóa bớt các dòng dữ liệu mà giao tác kia quan tâm.

+Mất dữ liệu cập nhật (Lost update)

Tình trạng này xảy ra khi có nhiều hơn một thao tác cùng thực cập nhật trên 1 đơn vị dữ liệu. Khi đó giao tác cập nhật thực hiện sau cùng sẽ đè lên kết quả của giao tác thực hiện cập nhật trước.

- Các mức cô lập (isolation levels)

+ Read Uncommitted

. Đặc điểm:

Không thiết lập Shared Lock trên những đơn vị dữ liệu cần đọc

Không bị ảnh hưởng bởi những khóa của các giao tác khác trên những đơn vị dữ liệu cần đọc

Không phải chờ khi đọc dữ liệu (kể cả khi dữ liệu đang bị lock bởi giao tác khác)

Các vấn đề gặp phải khi xử lý đồng thời:

Dirty Reads; Unrepeatable Reads; Phantoms; Lost Updates

. Ưu điểm:

Tốc độ xử lý rất nhanh

Không cản trở những giao tác khác thực hiện việc cập nhật dữ liệu

. Khuyết điểm:

Có khả năng xảy ra mọi vấn đề trong việc xử lý đồng thời, đặc biệt là vấn đề Dirty Reads

. Nhận xét:

Chỉ nên dùng để đọc dữ liệu trong trường hợp cần 1 cái nhìn tổng quan về CSDL, ví dụ như tạo những báo cáo về tình hình chung.

Không dùng trong trường hợp cần đọc những số liệu chính xác hay tiến hành cập nhật trên cơ sở dữ liệu.

+ Read Committed

. Đặc điểm:

Đây là mức độ cô lập mặc định của SQL Server

Giải quyết vấn đề Dirty Reads

Tạo ra khóa chia sẻ (Shared Lock) trên đơn vị dữ liệu được đọc, Shared Lock được giải phóng ngay sau khi đọc xong dữ liệu

Tạo Exclusive Lock trên đơn vị dữ liệu được ghi, Exclusive Lock được giữ cho đến hết giao tác

. Ưu điểm:

Giải quyết vấn đề Dirty Reads

Shared Lock được giải phóng ngay, không cần phải giữ cho đến hết giao tác nên không ngăn cản thao tác cập nhật của các giao tác khác.

. Khuyết điểm:

Chưa giải quyết được vấn đề Unrepeatable Reads, Phantoms, Lost Updates

Phải chờ khi chưa thể được đáp ứng yêu cầu lock trên đơn vị dữ liệu đang bị giữ lock bởi giao tác khác.

+ Repeatable Read

. Đặc điểm:

Repeatable Read = Read Committed

Giải quyết vấn đề Dirty Reads và Unrepeatable Reads

Tạo Shared Lock trên đơn vị dữ liệu được đọc, Shared Lock được giữ cho đến hết giao tác => Không cho phép các giao tác khác cập nhật, thay đổi giá trị trên đơn vị dữ liệu này.

Tạo Exclusive Lock trên đơn vị dữ liệu được ghi, Exclusive Lock được giữ cho đến hết giao tác.

. Ưu điểm:

Giải quyết vấn đề Dirty Reads và Unrepeatable Reads

. Khuyết điểm:

Chưa giải quyết được vấn đề Phantoms

Phải chờ khi chưa thể được đáp ứng yêu cầu lock trên đơn vị dữ liệu đang bị giữ lock bởi giao tác khác.

Các giao tác khác không được phép cập nhật trên những đơn vị dữ liệu đang bị giữ Shared Lock.

Vẫn cho phép Insert những dòng dữ liệu thỏa mãn điều kiện thiết lập những Shared Lock => Phantoms

+ Serializable

. Đặc điểm:

Serializable = Repeatable Read + Giải quyết Phantoms

Giải quyết vấn đề Dirty Reads, Unrepeatable Reads và Phantoms

Tạo Shared Lock trên đơn vị dữ liệu được đọc, Shared Lock được giữ cho đến hết giao tác => Không cho phép các giao tác khác cập nhật, thay đổi giá trị trên đơn vị dữ liệu này.

Không cho phép Insert những dòng dữ liệu thỏa mãn điều kiện thiết lập những Shared Lock (sử dụng khóa trên 1 miền giá trị-Key Range Lock)

Tạo Exclusive Lock trên đơn vị dữ liệu được ghi, Exclusive Lock được giữ cho đến hết giao tác.

. Ưu điểm:

Giải quyết vấn đề Dirty Reads, Unrepeatable Reads và Phantoms

. Khuyết điểm:

Phải chờ khi chưa thể được đáp ứng yêu cầu lock trên đơn vị dữ liệu đang bị giữ lock bởi giao tác khác.


Каталог: files -> FileMonHoc
FileMonHoc -> NGÂn hàng câu hỏi lập trình cơ BẢn nhóm câu hỏI 2 ĐIỂM
FileMonHoc -> CHƯƠng 2 giới thiệu về LÝ thuyết số
FileMonHoc -> CÁc hệ MẬt khoá CÔng khai kháC
FileMonHoc -> BỘ MÔn duyệt chủ nhiệm Bộ môn
FileMonHoc -> Khoa công nghệ thông tin cộng hòa xã HỘi chủ nghĩa việt nam
FileMonHoc -> Chủ nhiệm Bộ môn Ngô Thành Long ĐỀ CƯƠng chi tiết bài giảNG
FileMonHoc -> Khoa: CÔng nghệ thông tin cộng hòa xã HỘi chủ nghĩa việt nam
FileMonHoc -> MẬt mã khóA ĐỐi xứng lý thuyết cơ bản của Shannon
FileMonHoc -> Khoa công nghệ thông tin bài giảng LẬp trình cơ BẢn biên soạn
FileMonHoc -> Khoa cntt cộng hòa xã HỘi chủ nghĩa việt nam

tải về 308.69 Kb.

Chia sẻ với bạn bè của bạn:
1   2   3




Cơ sở dữ liệu được bảo vệ bởi bản quyền ©hocday.com 2024
được sử dụng cho việc quản lý

    Quê hương