Tải bản đầy đủ (.docx) (28 trang)

Tìm hiểu các vấn đề liên quan đến: Kiểm soát kích thước tập tin , Kiểm tra tính toàn vẹn của CSDL , Đặt ra giới hạn tiêu thụ tài nguyên

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (322.09 KB, 28 trang )

ĐỀ TÀI:Tìm hiểu các vấn đề liên quan đến: Kiểm soát kích thước tập tin ,
Kiểm tra tính toàn vẹn của CSDL , Đặt ra giới hạn tiêu thụ tài nguyên.

Mục Lục
gì……………………………………………………...25

1


LỜI NÓI ĐẦU
Gần đây vấn đề bảo mật cơ sở dữ liệu diễn ra lan tràn trên các phương tiện thông tin đại
chúng và mạng lưới tin tức Internet. Đầu tiên là sâu Slammer và gần đây nhất là vụ truy
cập bất hợp pháp hơn 8 triệu mã số thẻ tín dụng.
Nhiều người đặt ra câu hỏi: “Các admin quản trị hệ thống ngủ sau bánh xe cho chúng
hoạt động hay sao?”. Giống như mạng Internet bị đánh bom vậy. Hiện người ta thường
hay sử dụng các tiện ích rẻ tiền hơn của các hệ thống thông tin sử dụng web, do đó họ trở
nên lười áp dụng các biện pháp bảo mật cơ sở.
Vấn đề ở đây là phải cấp bách áp dụng các biện pháp an toàn với người quản trị hệ thống
sáng suốt. Câu hỏi đầu tiên cho các admin hiện nay thường là “Sửa chữa nhanh như thế
nào” chứ không phải “Có bao nhiêu mối nguy hiểm” như trước kia. Muốn giải quyết
được vấn đề hiện tại, trước hết chúng ta phải điều chỉnh lại ý thức và suy nghĩ trong mỗi
người.
Bây giờ chúng tôi xin cung cấp một vài phương pháp bảo mật cơ bản sau đây. Hy vọng
chúng sẽ giúp bạn ít nhiều bảo vệ được các cơ sở dữ liệu quan trọng. Trong bài thả luận
này , nhóm 06 xin trình bày về một số vấn đề bảo mật cơ sở dữ liệu quan trọng cơ bản
nhất . Do kiến thức và thời gian còn hạn hẹp , bài thảo luận còn nhiều sai sót . Mong cô
và các bạn góp ý để bài thảo luận được hoản thành hơn . Cảm ơn cô Hàn Minh Phương
đã giúp đỡ nhóm trong quá trình giảng dạy và thảo luận !

2



I.KIỂM SOÁT KÍCH THƯỚC TẬP TIN CỦA CSDL
Chủ đề này chứa thông tin về làm thế nào để theo dõi kích thước của một nhật ký giao
dịch SQL Server, co lại nhật ký giao dịch, thêm hoặc mở rộng một tập tin nhật ký giao
dịch, tối ưu hóa các tempdb tốc độ tăng trưởng của file log thi thực thi giao dịch, và kiểm
soát sự phát triển của một tập tin nhật ký giao dịch.
Màn hình sử dụng không gian đăng nhập
Giám sát sử dụng không gian đăng nhập bằng cách sử dụng DBCC SQLPERF
(LOGSPACE). Lệnh này trả về thông tin về số lượng của không gian đăng nhập hiện
đang sử dụng, và chỉ khi các bản ghi giao dịch cần cắt ngắn. Để biết thêm thông tin, xem
DBCC SQLPERF (Transact-SQL) . Để biết thông tin về kích thước hiện tại của một tập
tin đăng nhập, kích thước tối đa của nó, và các tùy chọn autogrow cho tập tin, bạn cũng
có thể sử dụng các kích thước , MAX_SIZE , và tăng trưởng các cột cho file đó trong
sys.database_files . Để biết thêm thông tin, xem sys.database_files (Transact-SQL) .
1.Shrink đăng nhập kích thước tập tin
Để giảm kích thước vật lý của file bản ghi vật lý, bạn phải thu nhỏ các tập tin đăng nhập.
Điều này rất hữu ích khi bạn biết rằng một tập tin nhật ký giao dịch có chứa không gian
chưa sử dụng bạn sẽ không need.You có thể thu nhỏ một file log có thể chỉ xảy ra trong
khi cơ sở dữ liệu trực tuyến và ít nhất một tập tin nhật ký ảo là miễn phí. Trong một số
trường hợp, thu hẹp các bản ghi có thể không thể cho đến khi sau khi đăng nhập cắt ngắn
tới.
Các yếu tố, chẳng hạn như một giao dịch dài chạy, mà giữ các tập tin ghi ảo hoạt động
một thời gian dài có thể hạn chế log co rút hoặc thậm chí ngăn ngừa các bản ghi từ co lại
ở tất cả. Để biết thông tin về các yếu tố có thể trì hoãn log cắt ngắn, xem The Transaction
Log (SQL Server) .
Thu hẹp lại một tập tin log loại bỏ một hoặc nhiều tập tin ghi ảo mà giữ không có một
phần của bản ghi logic (có nghĩa là, không hoạt động tập tin ghi ảo ). Khi một tập tin nhật
ký giao dịch đang bị thu hẹp, đủ không hoạt động tập tin ghi ảo được loại bỏ từ cuối của
file bản ghi để giảm nhật ký để kích thước xấp xỉ mục tiêu.
Shrink một tập tin đăng nhập (không thu hẹp các file cơ sở dữ liệu)

DBCC SHRINKFILE (Transact-SQL)
DBCC SQLPERF (Transact-SQL)
3


sys.database_files (Transact-SQL) (Xem kích thước , MAX_SIZE , và tăng trưởng các
cột cho các file log hoặc các tập tin.)
Thu hẹp cơ sở dữ liệu và các file log có thể được thiết lập để tự động xuất hiện. Tuy
nhiên, chúng tôi khuyên bạn nên chống co tự động, và autoshrink sở hữu cơ sở dữ liệu
được thiết lập để sai theo mặc định. Nếu autoshrink được đặt là TRUE, tự động co lại làm
giảm kích thước của một tập tin duy nhất khi có nhiều hơn 25 phần trăm của không gian
của nó là không sử dụng. Các tập tin được thu nhỏ hoặc kích thước mà tại đó chỉ có 25
phần trăm của tập tin là không gian không sử dụng hoặc kích thước ban đầu của các tập
tin, tùy theo cái nào lớn hơn. Để biết thông tin về việc thay đổi các thiết lập của
autoshrink tài sản, xem Xem hoặc thay đổi các thuộc tính của một cơ sở dữ liệu -sử dụng
Auto Shrink tài sản trên các tùy chọn trang hoặc ALTER DATABASE chọn SET
(Transact-SQL) -sử dụng tùy chọn AUTO_SHRINK.
-Thêm hoặc phóng to một tập tin đăng nhập
Ngoài ra, bạn có thể đạt được không gian bằng cách mở rộng các tập tin đăng nhập hiện
tại (nếu giấy phép không gian đĩa) hoặc bằng cách thêm một file bản ghi cơ sở dữ liệu,
thường là trên một đĩa khác nhau.
Để thêm một file bản ghi cơ sở dữ liệu, sử dụng các khoản Thanh LOG FILE của tuyên
bố DATABASE ALTER. Thêm một tập tin log cho phép đăng nhập để phát triển.
Để mở rộng các tập tin đăng nhập, sử dụng FILE khoản sửa đổi của bản tuyên bố
DATABASE ALTER, xác định SIZE và cú pháp MAXSIZE. Để biết thêm thông tin,
xem ALTER DATABASE (Transact-SQL) .
-Tối ưu hóa kích thước tempdb nhật ký giao dịch
Khởi động lại một trường hợp máy chủ thay đổi kích thước các bản ghi giao dịch của
tempdb cơ sở dữ liệu ban đầu, kích thước trước autogrow của nó. Điều này có thể làm
giảm hiệu suất của tempdb nhật ký giao dịch. Bạn có thể tránh chi phí này bằng cách tăng

kích thước của tempdb nhật ký giao dịch sau khi bắt đầu hoặc khởi động lại các ví dụ
máy chủ. Để biết thêm thông tin, xem cơ sở dữ liệu tempdb .
2.Kiểm soát tăng trưởng giao dịch tập tin đăng nhập
Bạn có thể sử dụng các DATABASE ALTER (Transact-SQL) tuyên bố để quản lý sự
phát triển của một tập tin nhật ký giao dịch. Lưu ý những điều sau đây:
Để thay đổi kích thước tập tin hiện tại KB, MB, GB, và các đơn vị lao, sử dụng tùy chọn
SIZE.
4


Để thay đổi tăng trưởng, sử dụng tùy chọn FILEGROWTH. Giá trị 0 chỉ ra rằng sự tăng
trưởng tự động được thiết lập để tắt và không có thêm không gian được cho phép. Một số
gia autogrowth nhỏ vào một file log có thể làm giảm hiệu suất. Mức tăng trưởng tập tin
vào một tập tin log cần đủ lớn để tránh việc mở rộng thường xuyên. Mức tăng trưởng
mặc định là 10 phần trăm nói chung phù hợp.
Để biết thông tin về việc thay đổi các thuộc tính tập tin, tăng trưởng trên một file bản ghi,
xem ALTER DATABASE (Transact-SQL) .
Để kiểm soát tối đa kích thước của một tập tin log trong KB, MB, GB, và các đơn vị lao
hoặc để thiết lập tăng trưởng để UNLIMITED, sử dụng tùy chọn MAXSIZE.
3.Các phương pháp kiểm soát kích thước tập tin:
3.1.Thông tin Tempdb
Tempdb là không gian làm việc tạm thời. Cùng với các ứng dụng khác, SQL Server sử
dụng tempdb cho:
-Lưu trữ các bảng tạm thời được tạo rõ ràng.
- Các bảng làm việc lưu gữ kết quả trung gian được tạo ra trong quá trình xử lý và sắp
xếp truy vấn.
- Con trỏ tĩnh được cụ thể hoá.
SQL Server ghi lại đủ thông tin trong nhật ký giao dịch tempdb để quay lại một giao dịch
nhưng không thực hiện lại giao dịch trong quá trình truy vấn cơ sở dữ liệu. Tính năng này
làm tăng hiệu suất của câu lệnh INSERT trong tempdb. Ngoài ra, không cần ghi nhật ký

thông tin để thực hiện lại bất kỳ giao dịch nào vì tempdb được tạo lại mỗi lần bạn khởi
động lại SQL Server; do đó, không có bất kỳ giao dịch nào để chuyển đến hoặc quay lại.
Khi SQL Server khởi động, tempdb được tạo lại bằng cách sử dụng bản sao của cơ sở dữ
liệu mẫu và được thiết lập lại về kích thước được cấu hình sau cùng.
Theo mặc định, cơ sở dữ liệu tempdb được cấu hình để tự phát triển khi cần; do đó, cơ sở
dữ liệu này có thể phát triển theo thời gian đến kích thước lớn hơn mong muốn. Việc
khởi động đơn giản SQL Server thiết lập lại kích thước của tempdb về kích thước được
cấu hình sau cùng. Kích thước được cấu hình là kích thước rõ ràng sau cùng được thiết
lập bằng hoạt động thay đổi kích thước tệp như ALTER DATABASE với tuỳ chọn
MODIFY FILE hoặc câu lệnh DBCC SHRINKFILE. Bài viết này trình bày ba phương
pháp mà bạn có thể sử dụng để thu hẹp tempdb đến kích thước nhỏ hơn kích thước được
cấu hình.
5


3.2.Phương pháp 1 để Thu hẹp Tempdb
Phương pháp này yêu cầu bạn khởi động lại SQL Server.
a. Dừng SQL Server. Mở dấu nhắc lệnh, rồi khởi động SQL Server bằng cách nhập lệnh
sau:
sqlservr -c -f
Tham số -c và -f khiến SQL Server khởi động trong chế độ cấu hình tối thiểu với kích
thước tempdb bằng 1 MB cho tệp dữ liệu và 0,5 MB cho tệp nhật ký.
Chú ý: Nếu bạn sử dụng SQL Server có tên như ví dụ, bạn phải thay đổi thành thư mục
phù hợp (Program Files\Microsoft SQL Server\MSSQL$instance name\Binn) và sử dụng
khoá chuyển đổi -s (-s%instance_name%).
b. Kết nối đến SQL Server bằng Query Analyzer, rồi chạy lệnh Transact-SQL sau:
ALTER DATABASE tempdb MODIFY FILE
(NAME = 'tempdev', SIZE = target_size_in_MB)
--Kích thước mục tiêu mong muốn cho tệp dữ liệu
ALTER DATABASE tempdb MODIFY FILE

(NAME = 'templog', SIZE = target_size_in_MB)
--Kích thước mục tiêu mong muốn cho tệp nhật ký
c.Dừng SQL Server bằng cách nhấn Ctrl-C tại cửa sổ dấu nhắc lệnh, khởi động lại SQL
Server như một dịch vụ, rồi xác thực kích thước của các tệp Tempdb.mdf và
Templog.ldf.
Một hạn chế của phương pháp này là chỉ hoạt động trên các tệp logic tempdb mặc định,
tempdev và templog. Nếu các tệp bổ sung được thêm vào tempdb, bạn có thể thu hẹp
chúng sau khi khởi động lại SQL Server như một dịch vụ. Tất cả các tệp tempdb đều
được tạo lại trong khi khởi động; do đó, các tệp đều trống và có thể xoá được. Để xoá các
tệp bổ sung trong tempdb, hãy sử dụng lệnh ALTER DATABASE với tuỳ chọn
REMOVE FILE.

6


3.3. Phương pháp 2 để Thu hẹp Tempdb
Sử dụng lệnh DBCC SHRINKDATABASE để thu hẹp toàn bộ cơ sở dữ liệu tempdb.
DBCC SHRINKDATABASE nhận được tham số target_percent, là phần trăm không
gian trống mong muốn còn lại trong tệp cơ sở dữ liệu sau khi cơ sở dữ liệu được thu hẹp.
Nếu bạn sử dụng DBCC SHRINKDATABASE, bạn có thể phải khởi động lại SQL
Server.
Quan trọng: Nếu bạn chạy DBCC SHRINKDATABASE, không có hoạt động nào khác
có thể xảy ra với cơ sở dữ liệu tempdb. Để đảm bảo rằng các quá trình khác không thể sử
dụng tempdb trong khi chạy DBCC SHRINKDATABASE, bạn phải khởi động SQL
Server trong chế độ một người dùng. Để biết thêm thông tin, hãy tham khảo phần Ảnh
hưởng của việc Thực thi DBCC SHRINKDATABASE hoặc DBCCSHRINKFILE Trong
khi Tempdb Đang được Sử dụng trong bài viết này.
a.Xác định không gian đang được sử dụng trong tempdb bằng cách sử dụng quy trình
được lưu trữ sp_spaceused. Sau đó, tính toán phần trăm không gian trống còn lại để sử
dụng làm tham số cho DBCC SHRINKDATABASE; việc tính toán này dựa trên kích

thước cơ sở dữ liệu mong muốn.
Chú ý: Trong một số trường hợp, bạn có thể phải thực thi sp_spaceused
@updateusage=true để tính toán lại không gian được sử dụng và để có được báo cáo cập
nhật. Tham khảo Sách Trực tuyến về SQL Server để biết thêm thông tin về quy trình
được lưu trữ sp_spaceused.
Xem xét ví dụ này:Giả sử rằng tempdb có hai tệp, tệp dữ liệu chính (Tempdb.mdf), có
kích thước 100 MB và tệp nhật ký (Tempdb.ldf), có kích thước 30 MB. Giả sử rằng
sp_spaceused báo cáo rằng tệp dữ liệu chính chứa 60 MB dữ liệu. Đồng thời, giả sử rằng
bạn muốn thu hẹp tệp dữ liệu chính xuống còn 80 MB. Tính toán phần trăm không gian
trống mong muốn còn lại sau khi thu hẹp, 80 MB - 60 MB = 20 MB. Bây giờ, chia 20
MB cho 80 MB = 25% và đây là target_percent của bạn. Tệp nhật ký giao dịch được thu
hẹp tương ứng, để lại 25% hoặc 20 MB không gian trống sau khi cơ sở dữ liệu được thu
hẹp.
b.Kết nối đến SQL Server bằng Query Analyzer, rồi chạy lệnh Transact-SQL sau:
dbcc shrinkdatabase (tempdb, 'target percent')
-- Lệnh này thu hẹp toàn bộ cơ sở dữ liệu tempdb

7


Có các hạn chế đối với việc sử dụng lệnh DBCC SHRINKDATABASE trên cơ sở dữ
liệu tempdb. Kích thước mục tiêu cho tệp dữ liệu và tệp nhật ký không thể nhỏ hơn kích
thước được chỉ định khi cơ sở dữ liệu được tạo ra hoặc kích thước sau cùng được thiết lập
rõ ràng bằng hoạt động thay đổi kích thước tệp, chẳng hạn như ALTER DATABASE với
tuỳ chọn MODIFY FILE hoặc lệnh DBCC SHRINKFILE. Một hạn chế khác của DBCC
SHRINKDATABASE là việc tính toán tham số target_percentage và sự phụ thuộc vào
không gian hiện tại được sử dụng.
3.4.Phương pháp 3 để Thu hẹp Tempdb
Sử dụng lệnh DBCC SHRINKFILE để thu hẹp các tệp tempdb riêng lẻ. DBCC
SHRINKFILE cung cấp tính linh hoạt cao hơn DBCC SHRINKDATABASE vì bạn có

thể sử dụng trên một tệp cơ sở dữ liệu duy nhất mà không ảnh hưởng đến các tệp khác
thuộc cùng cơ sở dữ liệu đó. DBCC SHRINKFILE nhận được tham số kích thước mục
tiêu, là kích thước cuối cùng mong muốn cho tệp cơ sở dữ liệu.
Quan trọng: Bạn phải chạy lệnh DBCC SHRINKFILE trong khi không có hoạt động
nào xảy ra trong cơ sở dữ liệu tempdb. Để đảm bảo rằng các quá trình khác không thể sử
dụng tempdb trong khi DBCC SHRINKFILE thực thi, bạn phải khởi động lại SQL Server
trong chế độ một người dùng. Để biết thêm thông tin về DBCC SHRINKFILE, hãy xem
phần Ảnh hưởng của việc Thực thi DBCC SHRINKDATABASE hoặc
DBCCSHRINKFILE Trong khi Tempdb Đang được Sử dụng trong bài viết này.
a. Xác định kích thước mong muốn cho tệp dữ liệu chính (tempdb.mdf), tệp nhật ký
(templog.ldf), và/hoặc các tệp bổ sung được thêm vào tempdb. Đảm bảo rằng không gian
được sử dụng trong các tệp nhỏ hơn hoặc bằng kích thước mục tiêu mong muốn.
b. Kết nối với SQL Server bằng Query Analyzer, rồi chạy lệnh Transact-SQL sau cho các
tệp cơ sở dữ liệu cụ thể mà bạn cần thu hẹp:
use tempdb
go
dbcc shrinkfile (tempdev, 'target size in MB')
go
-- lệnh này thu hẹp tệp dữ liệu cơ bản

8


dbcc shrinkfile (templog, 'target size in MB')
go
-- lệnh này thu hẹp tệp nhật ký, xem đoạn cuối cùng.
Một lợi thế của DBCC SHRINKFILE là nó có thể giảm kích thước của tệp đến kích
thước nhỏ hơn kích thước ban đầu. Bạn có thể đưa ra DBCC SHRINKFILE trên bất kỳ
tệp dữ liệu hoặc nhật ký nào. Một hạn chế của DBCC SHRINKFILE là bạn không thể
làm cho cơ sở dữ liệu nhỏ hơn kích thước của cơ sở dữ liệu mẫu.

3.5.Ảnh hưởng của việc thực thi DBCC SHRINKDATABASE hoặc
DBCCSHRINKFILE trong khi Tempdb Đang được sử dụng
Nếu tempdb đang được sử dụng và bạn cố gắng thu hẹp bằng cách sử dụng lệnh DBCC
SHRINKDATABASE hoặc DBCC SHRINKFILE, bạn có thể nhận được nhiều lỗi không
nhất quán tương tự với loại sau và hoạt động thu hẹp có thể thất bại:
Máy chủ: Thông báo 2501, Mức 16, Trạng thái 1, Dòng 1 Không thể tìm thấy bảng có tên
'1525580473'. Kiểm tra sysobjects.
hoặc
Máy chủ: Thông báo 8909, Mức 16, Trạng thái 1, Dòng 0 Bảng bị hỏng: ID đối tượng 1,
ID chỉ mục 0, ID trang %S_PGID. PageId trong tiêu đề trang = %S_PGID.
Mặc dù lỗi 2501 có thể không phải là dấu hiệu của bất kỳ hỏng hóc nào trong tempdb, nó
khiến hoạt động thu hẹp thất bại. Mặt khác, lỗi 8909 không thể biểu thị hỏng hóc trong cơ
sở dữ liệu tempdb. Khởi động lại SQL Server để tạo lại tempdb và xoá các lỗi không nhất
quán. Tuy nhiên, hãy nhớ rằng có thể có các lý do khác cho các lỗi hỏng hóc dữ liệu vật
lý như lỗi 8909 và những lỗi bao gồm sự cố hệ thống đầu vào/đầu ra phụ.

II.KIỂM TRA TÍNH TOÀN VẸN TRONG CSDL
1.Toàn vẹn dữ liệu :là việc đặt ra các quy tắc trong một cơ sở dữ liệu nhằm kiểm tra các
giá trị của dữ liệu trước khi được lưu trữ phải đảm bảo tính chính xác và hợp lý bên trong
một cơ sở dữ liệu.

9


Nếu các giá trị dữ liệu nào vi phạm các quy tắc đặt ra thì các dữ liệu đó sẽ không được
lưu vào bảng. Các quy tắc này phần lớn được xây dựng dựa vào các quy tắc hiện hữu
đang tồn tại trong công việc kinh doanh.
Ví dụ :
Trong cơ sở dữ liệu Business (Cơ sở dữ liệu doanh nghiệp) bạn có thể đưa ra một số quy
tắc như sau :

• ID của tài khoản phải là số nguyên không có sai số (miền giá trị)
• Ngày đóng tài khoản phải sau ngày mở tài khoản
• ID của mỗi tài khoản không được trùng nhau (khóa chính).
• Truy vấn tên , ngày sinh khách hàng phải có trong bảng danh sách khách hàng (khóa
ngoại).
• Sản phẩm hay dịch vụ của doanh nghiệp phải có sẵn trong danh mục lưu trữ
Điều gì xảy ra nếu dữ liệu bên trong các bảng có vi phạm các quy tắc ở trên mà vẫn được
lưu trữ vào bên trong cơ sở dữ liệu ? Do đó, trong các hệ cơ sở dữ liệu quan hệ lớn ngày
nay, hệ thống sẽ giúp cho người sử dụng có thể định nghĩa ra các quy tắc thông qua các
từ khóa hoặc thuộc tính có liên quan đến cơ sở dữ liệu nhằm đảm bảo dữ liệu khi lưu trữ
vào cơ sở dữ liệu phải chính xác và hợp lý.
Bên trong cơ sở dữ liệu của Microsoft SQL Server việc kiểm tra tính toàn vẹn dữ liệu sẽ
thông qua hai đối tượng quản lý, đó là các constraint và trigger. Cả hai đối tượng này
đều được liên kết trực tiếp vào bảng dữ liệu.
2.Các loại quy tắc kiểm tra tính toàn vẹn dữ liệu
2.1.Kiểm tra duy nhất dữ liệu
Loại ràng buộc toàn vẹn này cho phép bạn có thể kiểm tra tính duy nhất của dữ liệu bên
trong bảng. Điều này ngăn cản việc người sử dụng tình cờ nhập trùng lại các giá trị dữ
liệu bên trong bảng. Bạn có thể sử dụng hai thành phần PRIMARY KEY hoặc UNIQUE
trong câu lệnh CREATE TABLE để thực hiện việc kiểm tra tính duy nhất của dữ liệu.
Điểm khác biệt chính giữa PRIMARY KEY và UNIQUE là sự xuất hiện của các thành
phần trong câu lệnh CREATE TABLE. Thành phần PRIMARY KEY cho phép bạn tạo
ra cấu trúc bảng có chứa khóa chính. Do một bảng chỉ có một khóa chính, tuy nhiên khóa
chính được phép định nghĩa có nhiều cột tham gia. Vì thế thành phần PRIMARY KEY
chỉ xuất hiện một lần duy nhất khi tạo cấu trúc bảng.
10


Thành phần UNIQUE cho phép bạn kiểm tra tính duy nhất của các cột không tham gia
làm khóa chính của bảng. Thành phần UNIQUE được phép xuất hiện nhiều lần khi tạo

cấu trúc bảng nếu cần kiểm tra tính duy nhất của các cột không làm khóa chính.
Cú pháp :

Trong đó :
• Tên constraint : phải là duy nhất trong cơ sở dữ liệu. Thông thường quy định tên
constraint gồm có 3 phần. Bắt đầu bằng các chữ PRK, kế tiếp là tên bảng và cuối cùng là
tên cột áp dụng quy tắc kiểm tra duy nhất dữ liệu của các cột khóa chính.
• Danh sách cột khóa chính : là danh sách tên các cột tham gia làm khóa chính, tên các
cột được ngăn cách nhau bởi dấu phẩy (,).
Cú pháp :

Trong đó :
• Tên constraint : phải là duy nhất trong cơ sở dữ liệu. Thông thường quy định tên
constraint gồm có 3 phần. Bắt đầu bằng các chữ UNQ, kế tiếp là tên bảng và cuối cùng là
tên cột áp dụng quy tắc kiểm tra duy nhất dữ liệu của các cột không tham gia làm khóa
chính.
• Danh sách cột : là danh sách tên các cột cần kiểm tra duy nhất, tên các cột được ngăn
cách nhau bởi dấu phẩy (,).
Lưu ý :
Mặc định tên các constraint sẽ do hệ thống Microsoft SQL Server tạo ra nhằm đảm bảo
tính duy nhất bên trong cơ sở dữ liệu. Tuy nhiên bạn có thể chủ động đặt tên cho các
constraint khi tạo ra chúng bằng cách đưa thêm từ khóa CONSTRAINT trong các thành
phần định nghĩa các kiểm tra ràng buộc toàn vẹn dữ liệu.
Ví dụ :

11


Tạo bảng SINHVIEN kiểm tra dữ liệu của cột mã sinh viên phải là duy nhất. Trường hợp
chỉ định cột mã sinh viên làm khóa chính của bảng. Bạn thực hiện câu lệnh CREATE

TABLE như sau :

Với cú pháp như trên bảng SINHVIEN có sử dụng một constraint loại PRIMARY KEY
dùng định nghĩa khóa chính của bảng là cột “MaSV”. Tuy nhiên tên của constraint sẽ do
hệ thống Microsoft SQL Server tạo ra.
Trong trường hợp nếu bạn muốn chỉ định tên của constraint do bạn định nghĩa thì bạn
thực hiện câu lệnh CREATE TABLE có sử dụng từ khóa CONSTRAINT như sau :

Khi mà các thành phần của đối tượng constraint xuất hiện ngay phía sau tên cột như hai
ví dụ ở trên thì ràng buộc toàn vẹn dữ liệu sẽ được kiểm tra trên cột dữ liệu. Bạn nên
chọn cách này khi thực hiện việc kiểm tra các ràng buộc toàn vẹn dữ liệu chỉ trên một cột
bên trong bảng dữ liệu.
Trong trường hợp nếu bạn đặt các thành phần của đối tượng constraint bên dưới tất cả các
cột dữ liệu bên trong bảng thì ràng buộc toàn vẹn dữ liệu sẽ được kiểm tra trên bảng. Bạn
nên chọn cách này khi thực hiện việc kiểm tra các ràng buộc toàn vẹn dữ liệu trên nhiều
cột có liên quan bên trong bảng dữ liệu.
Ví dụ :

12


Để tạo bảng có tên HOCPHAN (các môn học phần) gồm có những cột như : Mã LHP có
kiểu dữ liệu là chuỗi và chiều dài 14 ký tự, Tên HP có kiểu chuỗi ký tự thay đổi với chiều
dài 50 , Số tín chỉ là số nguyên dương. Dữ liệu tại các cột không được phép trống. Khóa
chính là Mã LHP. Bạn thực hiện câu lệnh CREATE TABLE như sau :

Hoặc muốn đặt tên của constraint là PRK_HOCPHAN_MALHP

Lưu ý :
Khi sử dụng các loại ràng buộc toàn vẹn dữ liệu được kiểm tra trên cột dữ liệu thì cần

nhớ rằng dấu phẩy (,) luôn được đặt ở vị trí sau cùng của thành phần constraint chứ
không được đặt ở vị trí phía sau tên kiểu dữ liệu của cột.
Ngược lại khi sử dụng các loại ràng buộc toàn vẹn dữ liệu được kiểm tra trên bảng thì
không cần có thêm dấu phẩy (,) ở vị trí phía sau của cột dữ liệu cuối cùng bên trong bảng.
Đôi khi những điều lưu ý này sẽ làm cho bạn cảm thấy khó nhớ. Do vậy để đơn giản khi
tạo cấu trúc bảng, bạn thực hiện hai bước :
Bước 1 : Tạo cấu trúc bảng đơn giản bằng lệnh CREATE TABLE gồm có tên bảng, tên
các cột và các kiểu dữ liệu mong muốn.
Bước 2 : Thêm các loại constraint tương ứng bằng lệnh ALTER TABLE ADD
CONSTRAINT để áp dụng các kiểm tra ràng buộc toàn vẹn dữ liệu cho bảng dữ liệu.
2.2.Kiểm tra tồn tại dữ liệu

13


Loại ràng buộc toàn vẹn này cho phép bạn có thể kiểm tra tính tồn tại của dữ liệu (khóa
ngoại), bắt buộc phải có bên một bảng khác, còn gọi là bảng tham chiếu. Điều này ngăn
cản việc người sử dụng nhập một giá trị dữ liệu không có trong một bảng dữ liệu khác.
Bạn có thể sử dụng thành phần FOREIGN KEY trong câu lệnh CREATE TABLE để
thực hiện việc kiểm tra tính tồn tại của dữ liệu.
Trong một bảng được phép có nhiều khóa ngoại, tuy nhiên các cột tham chiếu phải được
định nghĩa là khóa chính trong các bảng tham chiếu trước đó. Vì thế thành phần
FOREIGN KEY được phép xuất hiện nhiều lần khi tạo cấu trúc bảng nếu bạn cần kiểm
tra tính tồn tại của nhiều cột khác nhau trong các bảng khác nhau.
Cú pháp :

Trong đó :
• Tên constraint : phải là duy nhất trong cơ sở dữ liệu. Thông thường quy định tên
constraint gồm có 3 phần. Bắt đầu bằng các chữ : FRK, kế tiếp là tên bảng và cuối cùng
là tên cột áp dụng quy tắc kiểm tra tồn tại dữ liệu.

• Danh sách cột khóa ngoại : là danh sách tên các cột tham gia làm khóa ngoại, tên các
cột được ngăn cách nhau bởi dấu phẩy (,).
• Tên bảng tham chiếu : là tên của bảng tham chiếu để kiểm tra tính tồn tại dữ liệu bên
bảng tham chiếu.
• Danh sách cột tham chiếu : là danh sách tên các cột tham chiếu trong bảng tham
chiếu, tên các cột ngăn cách nhau bởi dấu phẩy (,). Lưu ý rằng danh sách các cột khóa
ngoại và danh sách các cột tham chiếu phải tương xứng nhau.
Ví dụ :
Tạo DIEMSV có bổ sung thêm hai ràng buộc toàn vẹn dữ liệu khóa ngoại : mã sinh viên
tham chiếu qua bảng SINHVIEN, nghĩa là giá trị dữ liệu tại cột số đặt hàng phải tồn tại
trong bảng SINHVIEN và mã LHP tham chiếu qua bảng HOCPHAN, nghĩa là giá trị dữ
liệu tại cột mã vật tư phải tồn tại trong bảng HOCPHAN. Thực hiện câu lệnh CREATE
TABLE như sau :

14


Hoặc muốn đặt tên cho các constraint liên quan

2.3.Kiếm tra miền giá trị
Loại ràng buộc toàn vẹn này cho phép bạn có thể kiểm tra miền giá trị của các cột dữ liệu
bên trong bảng. Điều này ngăn cản việc người sử dụng nhập một giá trị dữ liệu vượt ra
khỏi phạm vi mà bạn quy định trước đó. Bạn có thể sử dụng thành phần CHECK trong
câu lệnh CREATE TABLE để thực hiện việc kiểm tra miền giá trị của dữ liệu.
Có thể thực hiện việc kiểm tra để so sánh giá trị của một cột bên trong bảng với một giá
trị cụ thể hoặc một hàm tính toán của Microsoft SQL Server mà kiểu trả về của hàm phải
khớp với kiểu dữ liệu của cột. Ngoài ra bạn cũng có thể kiểm tra giá trị của nhiều cột có
liên quan trong cùng một bảng dữ liệu.

15



Cú pháp :

Trong đó :
• Tên constraint : phải là duy nhất trong cơ sở dữ liệu. Thông thường quy định tên
constraint gồm có 3 phần. Bắt đầu bằng các chữ : CHK, kế tiếp là tên bảng và cuối cùng
là tên cột áp dụng quy tắc kiểm tra miền giá trị dữ liệu.
• Biểu thức luận lý : là một biểu thức chỉ định quy tắc kiểm tra dữ liệu trong bảng.
Thông thường biểu thức luận lý sẽ là biểu thức so sánh.
Ví dụ :
Trong bảng DIEMSV (Điểm sinh viên) kiểm tra quy tắc giá trị dữ liệu của cột điểm bằng
số tối thiểu là 0 và không lớn hơn 10. Có nghĩa là cột điểm sinh viên >=0 và <=10, giá trị
mặc định sẽ là 0 khi người sử dụng không cung cấp giá trị cột số lượng đặt.
Hoặc muốn đặt tên cho các constraint liên quan

16


Thay vì tạo cấu trúc bảng bằng duy nhất một câu lệnh CREATE TABLE với nhiều thành
phần của các đối tượng constraint khó nhớ bên trong đó, bạn có thể tạo ra cấu trúc bảng
đơn giản và sau đó thêm vào các constraint mới trong bảng dùng để thực hiện quy tắc
kiểm tra cho các loại ràng buộc toàn vẹn dữ liệu trên bảng.
2.4.Thêm vào constraint mới trong bảng
Với cú pháp ALTER TABLE tổng quát bên dưới cho phép bạn thêm vào các loại quy
tắc kiểm tra toàn vẹn dữ liệu thông qua các đối tượng constraint bên trong bảng.
Cú pháp :

Trong đó :
• Tên constraint : phải là duy nhất bên trong cơ sở dữ liệu. Thông thường quy định tên

của một constraint bao gồm 3 phần nhỏ. Bắt đầu bằng các chữ : PRK, FRK, UNQ, CHK,
DEF chỉ các loại constraint tương ứng sẽ là khóa chính, khóa ngoại, duy nhất, miền giá
trị, giá trị mặc định, kế sau đó là tên của bảng và cuối cùng là tên cột sẽ áp dụng quy tắc
kiểm tra dữ liệu.
• Loại : là các từ khóa tương ứng cho các thành phần theo từng loại constraint như kiểm
tra tính duy nhất (PRIMARY KEY, UNIQUE), kiểm tra khóa ngoại (FOREIGN KEY),
kiểm tra miền giá trị (CHECK), giá trị mặc định (DEFAULT).
• Các tham số : là các tham số cần thiết đi kèm theo với các từ khóa của từng loại
constraint tương ứng.
Cú pháp chi tiết từng loại constraint :

17


Ví dụ :
Tạo cấu trúc bảng MONHOC (môn học) với khóa chính là cột mã môn học. Trước tiên ta
tạo cấu trúc bảng đơn giản.

Sau đó thêm vào các quy tắc kiểm tra duy nhất của dữ liệu tại khóa chính của bảng là cột
mã môn học bằng lệnh ALTER TABLE ADD CONSTRAINT.

Bạn có thể thêm một quy tắc mới dùng để kiểm tra tính duy nhất dữ liệu tại cột địa chỉ
của bảng nhà cung cấp và đưa vào giá trị mặc định cho cột điện thoại của bảng nhà cung
cấp là "Chưa có" bằng các câu lệnh như sau :

18


Lưu ý :Trong lệnh ALTER TABLE ADD CONSTRAINT khi cần định nghĩa giá trị
mặc định cho một cột dữ liệu bên trong bảng thì bắt buộc bạn phải có thêm từ khóa FOR

tên cột để chỉ định giá trị mặc định được tạo ra sẽ áp dụng cho cột dữ liệu nào.
Ví dụ :
Sử dụng các câu lệnh CREATE TABLE để tạo ra cấu trúc các bảng SINHVIEN (danh
sách sinh viên), HOCPHAN(môn học) và DIEMSV (Điểm sinh viên)
Bảng SINHVIEN có các quy tắc kiểm tra toàn vẹn dữ liệu :
• Khóa chính là cột mã sinh viên .
• Giá trị dữ liệu duy nhất tại cột địa chỉ .
• Giá trị mặc định cho STT là 1.
. Giá trị của ngày sinh nằm trong khoảng từ 1-1-1900 đến 31-12-1999

Hoặc đầu tiên tạo bảng có cấu trúc đơn giản và sau đó thêm vào các ràng buộc toàn vẹn
dữ liệu.

19


Bảng HOCPHAN có các quy tắc kiểm tra toàn vẹn dữ liệu :
• Khóa chính là cột mã Lớp học phần (LHP)
• Giá trị dữ liệu duy nhất tại Tên môn học
• Giá trị mặc định cho cột số TC là 0

Hoặc đầu tiên tạo bảng có cấu trúc đơn giản và sau đó thêm vào các ràng buộc toàn vẹn
dữ liệu.

20


Bảng DIEMSV có các quy tắc kiểm tra toàn vẹn dữ liệu :
• Khóa chính là cột mã bảng điểm
• Giá trị mặc định cho các cột ngày cập nhật là thời gian hiện tại

• Kiểm tra tính tồn tại dữ liệu của cột mã sinh viên bên bảng sinh viên và mã lớp học
phần bên bảng học phần

21


Hoặc đầu tiên tạo bảng có cấu trúc đơn giản và sau đó thêm vào các ràng buộc toàn vẹn
dữ liệu.

Lưu ý :Khi thực hiện tạo bảng có cấu trúc đơn giản và sau đó thêm vào các ràng buộc
toàn vẹn dữ liệu thì bạn phải luôn luôn thêm từ khóa NOT NULL phía sau các cột tham
gia làm khóa chính của bảng khi tạo cấu trúc bằng lệnh CREATE TABLE.
2.5.Hủy bỏ constraint đã có trong bảng
Với cú pháp ALTER TABLE bên dưới cho phép bạn hủy bỏ các quy tắc kiểm tra tòan
vẹn dữ liệu thông qua các đối tượng constraint có bên trong bảng đã tạo trước đó. Các
quy tắc mà bạn hủy bỏ sẽ không còn thực hiện việc kiểm tra tính toàn vẹn dữ liệu bên
trong của bảng cho đến khi bạn phải tạo mới lại nó.
Muốn hủy bỏ được các đối tượng constraint bắt buộc bạn phải ghi nhớ được tên của các
constraint lúc tạo ra nó. Hoặc xem lại trong màn hình thuộc tính của bảng. Do vậy khi tạo
ra các quy tắc để kiểm tra các ràng buộc toàn vẹn dữ liệu bạn nên chủ động đặt tên cho
các đối tượng constraint bên trong cơ sở dữ liệu Microsoft SQL Server .
Cú pháp :

Trong đó :
22


• Tên constraint : phải tồn tại trong cơ sở dữ liệu mà bạn muốn hủy bỏ. Do đó đối với
tên của các constraint mà bạn chủ động đặt khi sử dụng từ khóa CONSTRAINT thì sẽ
giúp bạn dễ dàng gợi nhớ hơn tên của các constraint do hệ thống tự đặt.


III. ĐẶT RA GIỚI HẠN TIÊU THỤ TÀI NGUYÊN
1.Khái niệm giới hạn tài nguyên
Giới hạn tài nguyên là một thuật ngữ công nghệ thông tin được sử dụng trong môi trường
điện toán đám mây mô tả một tình huống trong đó các nhà cung cấp phục vụ cho nhiều
khách hàng, khách hàng hoặc “thuê” với các dịch vụ tạm thời và khả năng mở rộng.
Những dịch vụ này có thể được điều chỉnh cho phù hợp với nhu cầu của từng khách hàng
mà không có bất kỳ thay đổi được rõ ràng cho người sử dụng của khách hàng hay kết
thúc.
Ý tưởng đằng sau tổng hợp tài nguyên là thông qua hệ thống khả năng mở rộng hiện đại
liên quan đến điện toán đám mây và phần mềm như một dịch vụ (SaaS), nhà cung cấp có
thể tạo ra một cảm giác của các nguồn tài nguyên vô hạn hay có ngay lập tức bằng cách
kiểm soát các điều chỉnh tài nguyên ở mức meta. Điều này cho phép khách hàng để thay
đổi cấp độ của họ về dịch vụ tại sẽ không phải chịu bất kỳ sự hạn chế của các nguồn lực
vật lý hay ảo.
Các loại dịch vụ có thể áp dụng cho một chiến lược tổng hợp tài nguyên bao gồm các
dịch vụ lưu trữ dữ liệu, dịch vụ xử lý và các dịch vụ băng thông cung cấp. Điều khoản
liên quan khác bao gồm độ đàn hồi nhanh chóng, mà còn liên quan đến việc cung cấp
năng động của dịch vụ, và theo yêu cầu tự phục vụ, nơi khách hàng có thể thay đổi mức
độ của dịch vụ mà không thực sự liên hệ với một nhà cung cấp dịch vụ. Tất cả các trình
lập dự phòng dịch vụ tự động này là rất n hiều nhưu các loại khác của quá trình kinh
doanh tự động hóa, thay thế, chiến lược thâm dụng lao động truyền thống hơn với sáng
kiến mới mà dựa trên các mạng ảo ngày càng mạnh mẽ và nguồn lực xử lý dữ liệu.Trong
những trường hợp này, mục tiêu là để tách các trải nghiệm của khách hàng từ chính thực
tế của tài sản, do đó quá trình giao hàng là đục và các dịch vụ dường như là tự động và vô
cùng có sẵn.
2.Tại sao sử dụng giới hạn tài nguyên.
Giới hạn tài nguyên cho phép bạn ủy quyền kiểm soát các nguồn tài nguyên của một máy
chủ (hoặc một nhóm), nhưng những lợi ích rõ ràng khi bạn sử dụng giới hạn tài nguyên
để tất cả các nguồn lực trong một nhóm. Tạo nhiều vùng tài nguyên như trẻ em trực tiếp

của chủ nhà hoặc cụm và cấu hình chúng. Sau đó bạn có thể ủy quyền kiểm soát các giới
hạn tài nguyên cho các cá nhân hoặc các tổ chức khác.
23


Sử dụng giới hạn tài nguyên có thể dẫn đến những lợi ích sau đây:
- Linh hoạt tổ chức , thêm phân cấp, loại bỏ hoặc sắp xếp lại hồ tài nguyên hoặc phân bổ
nguồn lực thay đổi khi cần thiết
- Cô lập giữa hồ, chia sẻ trong quản trị giới hạn Top – level có thể làm cho một giới hạn
của nguồn lực sẵn có để quản trị một bộ phận cấp. Thay đổi phân bổ được nội bộ để một
giới quan khác
- Kiểm soát truy cập và đoàn đại biểu cấp khi một quản trị viên cấp cao làm cho một giới
hạn tài nguyên có sẵn cho một quản trị viên bộ phận cấp quản trị viên có thể sau đó thực
hiện tất cả tạo máy ảo và quản lý trong phạm vi ranh giới của các tài nguyên mà hệ thống
tài nguyên được hưởng bởi hiện tại cổ phiếu, đặt phòng, và các thiết lập giới hạn. Phái
đoàn thường được thực hiện cùng với các thiết lập quyền truy cập.
- Tách các nguồn lực từ phần cứng nếu bạn đang sử dụng các cụm kích hoạt cho DRS,
các nguồn lực của tất cả các host luôn gán cho cụm. Điều đó có nghĩa là các quản trị viên
có thể thực hiện quản lý tài nguyên độc lập với các host thực tế góp phần vào các nguồn
tài nguyên. Nếu bạn thay thế ba máy 2GB với hai host 3GB, bạn không cần phải thay đổi
để phân bổ nguồn lực của bạn.
- Quản lý của bộ máy ảo chạy nhiều dịch vụ - máy ảo group cho một dịch vụ nhiều tầng
trong một giới hạn tài nguyên. Bạn cần phải thiết lập các nguồn tài nguyên trên mỗi máy
ảo. Thay vào đó, bạn có thể kiểm soát việc phân bổ tổng hợp các nguồn lực để tập hợp
các máy ảo bằng cách thay đổi các thiết lập trên giới hạn tài nguyên kèm theo của họ.

3.Tài nguyên server
Resource Governor cho phép bạn quản lý SQL Server khối lượng công việc và các nguồn
lực bằng cách xác định giới hạn về tài nguyên tiêu thụ bởi yêu cầu đến. Trong bối cảnh
Resource Governor, khối lượng công việc là một tập hợp của các truy vấn kích thước

tương tự hoặc yêu cầu có thể và nên được, coi như là một thực thể duy nhất. Đây không
phải là một yêu cầu, nhưng đồng đều hơn các mô hình sử dụng tài nguyên của một khối
lượng công việc, lợi ích hơn bạn có khả năng xuất phát từ Resource Governor. Giới hạn
tài nguyên có thể được cấu hình lại trong thời gian thực với tác động tối thiểu về khối
lượng công việc được thực hiện.
Trong một môi trường mà nhiều khối lượng công việc riêng biệt được trình bày trên cùng
một máy chủ, Resource Governor cho phép bạn phân biệt các khối lượng công việc và
24


phân bổ tài nguyên chia sẻ khi họ được yêu cầu, dựa trên những giới hạn mà bạn chỉ
định. Những tài nguyên này CPU, vật lý IO, và bộ nhớ.
4.Việc sử dụng Resource Governor
Cung cấp nhiều kiểu dữ liệu và cô lập nguồn tài nguyên trên các trường hợp duy nhất của
SQL Server mà phục vụ cho nhiều khối lượng công việc của khách hàng. Đó là, bạn có
thể phân chia các nguồn lực sẵn có trên máy chủ trong các khối lượng công việc và giảm
thiểu các vấn đề có thể xảy ra khi khối lượng công việc cạnh tranh cho các nguồn tài
nguyên.
Cung cấp hiệu suất và hỗ trợ dự đoán được SLAs cho thuê khối lượng công việc trong
một đa khối lượng công việc và môi trường đa người dùng.
Cô lập và hạn chế các truy vấn runaway hoặc ga nguồn IO cho các hoạt động như DBCC
CHECKDB có thể thấm vào trong các hệ thống phụ IO và tác động tiêu cực đến khối
lượng công việc khác.
Thêm theo dõi tài nguyên hạt mịn để bồi sử dụng tài nguyên và cung cấp thanh toán dự
đoán được với người tiêu dùng của các nguồn tài nguyên máy chủ.
5.Hạn chế của phiên bản Resource Governor
Quản lý tài nguyên được giới hạn trong SQL Server Database Engine. Thống đốc tài
nguyên không thể được sử dụng cho dịch vụ phân tích, dịch vụ tích hợp, và dịch vụ báo
cáo.
Không có giám sát khối lượng công việc, quản lý khối lượng công việc giữa các trường

hợp SQL Server.
Resource Governor có thể quản lý khối lượng công việc OLTP nhưng những loại truy
vấn, mà thường rất ngắn thời gian, không phải lúc nào trên CPU đủ dài để áp dụng các
điều khiển băng thông. Điều này có thể nghiêng trong thống kê trở cho việc sử dụng CPU
%.
Khả năng quản lý IO chỉ áp dụng cho các hoạt động sử dụng và không phải nhiệm vụ của
hệ thống. Hệ thống nhiệm vụ bao gồm ghi hoạt động để giao dịch đăng nhập và Lazy
Writer hoạt động IO. Các Govenor tài nguyên áp dụng chủ yếu để sử dụng các hoạt động
đọc bởi vì hầu hết ghi các hoạt động thường được thực hiện bởi hệ thống nhiệm vụ.
Bạn không thể đặt ngưỡng IO trên các giới hạn tài nguyên nội bộ.

25


×