MS SQL Server vµ Postgre SQL
Đồ án môn học :Công nghệ phần mềm
Sinh viên thực hiện:
Nguyễn Tuấn Anh
Đỗ Minh Ngọc
Phạm Hồng Phúc
Nguyễn Hoàng Tú
Lớp Tin 7- K44
Phần I. Giới thiệu chung.
1. SQL là gì?
SQL là viết tắt của Structure Query Language, nó là một công cụ quản lý dữ liệu
được sử dụng phổ biến ở nhiều lĩnh vực. Hầu hết các ngôn ngữ bậc cao đều có trình
hỗ trợ SQL như Visual Basic,Oracle,Visual C
Trong Oracle tất cả các chương trình và người sử dụng phải sử dụng SQL để truy
nhập vào dữ liệu trong CSDL của Oracle. Các chương trình ứng dụng và các công cụ
Oracle cho phép người sử dụng truy nhập tới CSDL mà không cần sử dụng trực tiếp
SQL. Nhưng những ứng dụng đó khi chạy phải sử dụng SQL.
2.Lịch sử phát triển:
SQL được phát triển từ ngôn ngữ SEQUEL2 bởi IBM theo mô hình Codd tại trung
tâm nghiên cứu của IBM ở California vào những năm 70 cho hệ thống quản trị cơ sở
lớn.
Ban đầu SQL được sử dụng trong các ngôn ngữ quản lý CSDL và chạy trên các máy
đơn lẻ. Song do sự phát triển nhanh chóng của nhu cầu xây dựng những CSDL lớn
1
MS SQL Server vµ Postgre SQL
theo mô hình khách chủ( trong mô hình này toàn bộ CSDL được tập trung trên máy
chủ (Server)). Mọi thao tác xử lý dữ liệu được thực hiện trên máy chủ bằng các lệnh
SQL máy trạm chỉ dùng để cập nhập hoặc lấy thông tin từ máy chủ). Ngày nay trong
các ngôn ngữ lập trình bậc cao đều có sự trợ giúp của SQL. Nhất là trong lĩnh vực
phát triển của Internet ngôn ngữ SQL càng đóng vai trò quan trọng hơn. Nó được sử
dụng để nhanh chóng tạo các trang Web động
SQL đã được viện tiêu chuẩn quốc gia Mỹ (ANSI) và tổ chức tiêu chuẩn quốc tế
(ISO) chấp nhận như một ngôn ngữ chuẩn cho CSDL quan hệ. Nhưng cho đến nay
chuẩn này chưa đưa ra đủ 100%. Nên các SQL nhúng trong các ngôn ngữ lập trình
khác nhau đã được bổ xung mở rộng cho SQL chuẩn cho phù hợp với các ứng dụng
của mình. Do vậy có sự khác nhau rõ ràng giưã các SQL.
3 Đối tượng làm việc của SQL:
Là các bảng ( tổng quát là các quan hệ dữ liệu hai chiều). Các bảng này bao gồm
một hoặc nhiều cột và hàng. Các cột gọi là các trường, các hàng gọi là các bản ghi.
Cột với tên gọi và kiểu dữ liệu (kiểu dl của mỗi cột là duy nhất)xác định tạo nên cấu
trúc của bảng ( ta có thể dùng lệnh Desc[ribe] TABLE-name để xem cấu trúc của
bảng, phần tuỳ chọn[] có thể được bỏ trong Oracle). Khi bảng đã được tổ chức hệ
thống cho một mục đích nào đó có một CSDL
SQL thực hiện thao tác trên các bảng này bằng những câu lệnh truy vấn. Chúng có
tác dụng bao gồm tìm ra những quan hệ theo yêu cầu hay tạo ra những bảng mới,
những quan hệ mới Do đề tài là tìm hiểu SQL server nên chúng em không đi chi tiết
vào những vấn đề này.
II. Giới thiệu chung SQL Server
SQL Server là một sản phẩm của tập đoàn phần mềm nổi tiếng Microsoft. Nó được
thị trường chấp nhận một cách rộng rãi vào những phiên bản 6.5 trở lên. Khi ra đời
phiên bản 7.0, hãng này có tuyên bố họ thay đổi toàn bộ engine bên trong cho server
và tạo ra một bước nhảy vọt. Một số đặc tính vốn có của các version trước không còn
tương thích với version 7.0. Từ phiên bản 7.0 lên đến 8.0 ( tức là Microsoft SQL
Server 2000) có sự tăng cường mạnh mẽ về các tính năng thao tác trên các Web site
và làm cho nó đáng tin cậy hơn.
Một trong những đặc điểm được coi là nổi bật của phiên bản 2000 là khả năng cài đa
phiên bản trong cùng một máy mà không cần gỡ bỏ các phiên bản trước nếu có.
Người ta gọi đấy là Mutliple-Instance. Khi đó các phiên bản cũ trên máy là Default-
Instance còn phiên bản 2000 vừa cài có tên là Named Instance.
Để tiện theo kịp công nghệ mới, bắt đầu từ đây trở đi, chúng em xin trình bày về
những đặc điểm trong SQL Server 2000.
2
MS SQL Server vµ Postgre SQL
Phần 2 SQL Server.
I. SQL server 2000.
1. Khái niệm.
SQL server là một hệ thống quản lý cơ sở dữ liệu ( RDBMS – Relational Database
Management System ) và sử dụng Transact-SQL để thao tác dữ liệu trên các
máy khách và máy chủ.
Một RDBMS bao gồm những database, data engine, các ứng dụng dùng quản lý dữ
liệu và các bộ phận khác nhau trong RDBMS.
SQL server được tối ưu nhằm tăng khả năng quản lý một khối lượng cơ sở dữ liệu
rất lớn ( very large database environment). Cỡ vào khoảng hàng Tera-Byte và đồng
thời phục vụ hàng ngàn user. Ngoài ra, SQL server còn có thể cùng thao tác với các
loại server khác như IIS ( Microsoft Internet Information Server), E-Commerce
2. Các ấn bản của SQL server 2000
a. Enterprise: có đầy đủ tính năng của một SQL Server. Cho phép chạy tốt
trên hệ thống 32 CPUs và 64 GB RAM. Nó được tích hợp các dịch vụ phân
tích dữ liệu hiệu quả (Analysis Service).
b. Standard: phù hợp cho các công ty vừa và nhỏ do giá thành rẻ hơn
nhiều Enterprise, tất nhiên không thể có đầy đủ các tính năng như ấn bản
trên. Song nó cũng chạy tốt trên hệ thống 4 CPUs và 2 GB Ram.
c. Personal: đây là một ấn bản tối ưu cho phép chạy trên các máy tính cá
nhân và được cài trên hầu hết các phiên bản Window.
d. Developer: có đầy đủ tính năng như ấn bản Enterprise nhưng giới hạn số
lượng người dùng kết nối. Đây là một ấn bản nên cài đặt với người mới sử
dụng trên Window 2000 hay Window NT
e. Desktop Engine: là một engine chạy trên desktop không giao diện người
dùng, kích thước cơ sở dữ liệu giới hạn khoảng 2GB.
3
MS SQL Server vµ Postgre SQL
f. Win CE: dùng cho các ứng dụng trên Window CE
g. Trial: một ấn bản dùng thử, có đầy đủ khả năng của ấn bản Enterprise,
cho phép dùng miễn phí nhưng chỉ được dùng trong khoảng thời gian cho
trước.
3. Các thành phần cơ bản trong hệ thống SQL Server
Một hệ thống SQL Server có tương đối nhiều thành phần. Dưới đây mô tả chúng.
4
Web Application Business
Administration
Tools
DMO / DSO / WMI
MDX ADO/OLE DB/ HTTP / ODBC XML Transact-SQL
Analysis Services Relational Database
Engine Enterprise
Edition
Query
Data Transformation
Service
Replication
OLTP
Database
Remote OLE DB Data
Source
OLAP Data
WareHouse
Relational Database
Engine Enterprise
Mobile Disconnected
Users or Desktop
Database
Relational Database
Engine Personal Edition
or Desktop Engine
Local Database Local Database
Mutli
-Dimensio
n Cube
MS SQL Server vµ Postgre SQL
a. Relational Database Engine: đây là thành phần cơ bản nhất của SQL Server. Nó
có khả năng chứa dữ liệu ở các quy mô khác nhau như dạng bảng hay các kiểu kết
nối thông dụng của Microsoft ( ADO-Activex Data Object, OLE DB, ODBC- Open
Database Connectivity). Bên cạnh đó, nó có khả năng tự điều chỉnh như thêm tài
nguyên của máy khi cần và trả lại tài nguyên cho hệ điều hành khi user log off.
b. Replication: khả năng nhân bản. Nếu một user có một database dùng chứa dữ
liệu được các ứng dụng thường truy cập tới. Tuy nhiên, có lúc user muốn dùng
database này trên server khác để tạo ra một báo cáo nhằm tránh ảnh hưởng cho
server chính. Điều này gây ra một khó khăn là làm thế nào để cập nhập database này
trên server chính. Cơ chế nhân bản cho phép thực hiện
điều này.
c. DTS ( Data Transformation Service): dịch vụ chuyển giao dữ liệu. Khi có người
dùng sử dụng trong một công ty có các dữ liệu được lưu trữ tại nhiều nơi và tại các
dạng khác nhau như Oracle, Microsoft Access, DB2 thì làm thế nào để chuyển dữ
liệu giữa các server có các dữ liệu khác nhau về định dạng như thế này? Chức năng
DTS cho phép chuyển đổi cả về vị trí lẫn chuyển giao các định dạng cho nhau.
d. Analysis Service: dịch vụ phân tích dữ liệu. Đây là một dịch vụ được cung cấp rất
hiệu quả trong việc tìm được những thông tin cần thiết trong database dựa vào khái
niệm khối đa chiều (multiple-dimension cube) và khai phá dữ liệu (data-mining)
e. English Query: những người đã từng học SQL thì rõ ràng đây là một phần không
thể thiếu. Chúng là những câu lệnh truy vấn thao tác cơ sơ dữ liệu.
f . Meta Data Service: đây là một dịch vụ giúp cho lưu trữ và xử lý Meta data dễ dàng
hơn. Chúng ta nên hiểu rằng Meta data là những thông tin mô tả cấu trúc của dữ liệu
trong database như dữ liệu kiểu cột nào có thuộc tính khoá chính Những kiểu dữ
liệu này cũng được lưu trữ trong database nhưng khác với những loại dữ liệu thông
thường nên gọi là Meta data.
g. SQL Server Tools: những công cụ cho người quản trị cơ sở dữ liệu. Chúng có một
số công cụ dưới đây:
- Enterprise Manager: cho người dùng toàn cảnh hệ thống cơ sở dữ liệu một
cách trực quan. Nó quan trọng với những người mới học SQL.
- Query Analyzer: cho phép sửa lỗi câu lệnh SQL rất quan trọng đối với những
người quản trị hệ thống.
5
MS SQL Server vµ Postgre SQL
- SQL Profiler: có khả năng bắt các sự kiện hay hoạt động diễn ra trên một SQL
server và lưu lại dưới dạng text hữu dụng trong việc kiểm soát server.
h. Data Warehousing Framework: là tập hợp các thành phần và các API thực thi các
tính năng lưu trữ dữ liệu của SQL Server 2000. Nó cung cấp một giao diện chung vốn
được sử dụng bởi nhiều thành phần khác nhau để tạo và sử dụng một nơi lưu trữ dữ
liệu.
4. Những tính năng trong SQL Server 2000
♣ Tăng cường khả năng liên kết với Internet. Cho phép xuất các kết quả của
Transact-SQL ra dạng XML với Web hoặc các trình ứng dụng kinh doanh
bằng API ADO và OLE DB.
♣ Bao gồm một ISAPI DLL cho phép các gốc ảo trong Microsoft Internet
Information (IIS) liên kết với một instance của SQL Server. Các trình ứng
dụng Internet có thể tạo các chuỗi URL để tham chiếu tới một gốc ảo của SQL
Server và chứa một câu lệnh Transact-SQL. Câu lệnh này được gởi tới một
instance của SQL Server và cho kết quả dạng XML.
♣ Có các tính năng tối ưu hoá cao, hỗ trợ cho môi trường có khối lượng cơ sở
dữ liệu lớn. Các phiên bản cũ hơn 6.5 có thể hỗ trợ các cơ sở dữ liệu từ
200GB - 300GB, còn đối với 7.0 trở lên là terabyte.
♣ Trình cơ sở dữ liệu quan hệ SQL Server hỗ trợ tạo các index trên các khung
nhìn. Tập hợp kết quả index được xác định lúc index được tạo ra và được
bảo lưu lúc dữ liệu nền tảng được sửa chữa. Nhờ tạo ra một index trên một
khung nhìn, việc thực hiện các phép tính phức tạp trên số lượng dữ liệu lớn
có thể được gia tăng về tốc độ các query liên tiếp theo thứ tự độ rộng.
♣ SQL Server tự động cấu hình khi chạy. Nhiều user cùng kết nối với SQL
Server thì nó có thể sử dụng tài nguyên bổ sung. Nếu các trình ứng dụng
khác cùng chạy trên server thì SQL Server sẽ giảm sử dụng bộ nhớ ảo để
dành các trình ứng dụng kia
♣ Có các tính năng bảo vệ đầy đủ đối với các môi trường nhằm đảm bảo tính an
toàn ngăn các sự cố như nhiều user cùng cố cập nhập cùng một loại dữ liệu
trong một thời điểm.
♣ Nhiều instance SQL Server 2000 có thể cùng chạy trên cùng một máy tính.
Chẳng hạn, 1 công ty cung cấp các dịch vụ cơ sở dữ liệu cho nhiều khách
hàng khác có thể chạy 1 instance của SQL Server cho mỗi khách hàng.
6
MS SQL Server vµ Postgre SQL
♣ Các trình ứng dụng SQL Server có thể chạy trên cùng máy tính với SQL
Server.
II. Transact SQL
1. Khái niệm về Transact SQL (T-SQL)
Thực chất T-SQL là một dạng mở rộng của chuẩn SQL theo ISO ( International
Organization for Standardization) và ANSI ( American National Standards Institute)
được sử dụng trong các SQL Server (nó khác với Procedural-SQL dùng trong
Oracle).
Có thể hiểu T-SQL là một ngôn ngữ chính giúp người dùng giao tiếp với SQL Server.
2. Phân loại.
T-SQL bao gồm 3 nhóm sau đây
a. Data Definition Language ( DDL): chứa các lệnh quản lý thuộc tính của database
như hàng, cột, tạo bảng mới Chúng thường có dạng.
Để tạo ra một đối tượng có tên là name_Object
Creat name_Object
Để thay đổi định nghĩa bảng tên là name_Object
Alter name_Object
Để xoá bảng tên name_Object
Drop name_Object
b. Data Control Language ( DCL): đây là các lệnh trên từng Object. Chúng có các
lệnh như là Grant, Revoke, Deny
c. Data Manipulation Language ( DML): đây là các lệnh cho phép thao tác dữ liệu.
Chúng có dạng Select, Delete, Update, Insert
Select Name, Class
From Customers
Where (ClassName=’Tin7-K44’)
Trong ví dụ trên là, chọn Name, Class trong bảng Customers có ClassName là chuỗi
Tin7-K44.
7
MS SQL Server vµ Postgre SQL
3. Cú pháp của T-SQL
a. Identifiers: là tên của các đối tượng cơ sở dữ liệu. Các đối tượng ở đây là những
table, view, index Có 2 loại identifier: regular identifier và delimited identifier (loại
này cần phải có dấu ngoặc vuông đi kèm [])
Select * From [My Table]
Where [Order]=40
Lý do đặt Order trong dấu ngoặc vuông như trên là tránh va chạm với từ khoá Order.
b. Variances: biến trong SQL phải khai báo kiểu. Bắt đầu một biến luôn có @. Trong
trường hợp biến là toàn cục cần 2 dấu @@.
DECLARE @IdClass
SET @IdClass=3
SELECT * FROM Customers
WHERE IdClassRoom=@IdClass + 2
c. Function: bao gồm những hàm có sẵn và những hàm do người dùng tự xây dựng
Hàm có sẵn lại thuộc vào 3 loại sau:
- Rowset Functions: trả về một đối tượng như là recordset.
- Aggregate Functions: thực hiện tính toán và trả về các giá trị như tổng,
tích, trung bình
- Scalar Functions: làm việc trên các giá trị đơn và trả về giá trị đơn. Nó,
chẳng hạn, cắt lấy phần tháng trong kiểu date
d. Comment: những lời chú thích được đặt trong /* */
4. Thực thi lệnh trong SQL Server.
a. Lệnh đơn.
Đầu tiên, 1 lệnh đơn được phân tích cú pháp thông qua một bộ phân tích cú pháp là
Parser. Tiếp đến, SQL Optimizer sẽ thực thi tối ưu câu lệnh nhằm tăng tốc độ và ít
tốn tài nguyên. Sau đó, SQL Server Engine sẽ thực hiện và trả về kết quả.
b. Tập nhóm lệnh.
SQL Server cũng thực hiện tối ưu cho tập lệnh như các lệnh đơn và tìm cách thực thi
tối ưu nhất. Đồng thời, chứa các lệnh trên đã biên dịch trong bộ nhớ. Sau đó, nếu các
lệnh trên được gọi lại thì nó sẽ được chạy nhanh hơn nhờ không phải biên dịch lại.
8
MS SQL Server vµ Postgre SQL
Bên cạnh đó, còn 1 lệnh mà không thuộc T-SQL. Đó là lệnh GO. Lệnh này thông báo
cho biết kết thúc một tập nhóm lệnh để thực thi tập lệnh.
III. Cơ sở dữ liệu trên SQL Server
1. Cấu trúc của SQL Server.
SQL Server có là một hệ thống multiple-instance như đã nói ở trên. Do vậy, chúng ta
khi nói đến instance nào đó của Server thì hiểu rằng đang nói tới Default instance.
Một instance bất kì của Server bao gồm 4 cơ sở dữ liệu hệ thống và có 1 hay nhiều
cơ sở dữ liệu người dùng.
4 cơ sở dữ liệu hệ thống bao gồm:
- Master: chứa thông tin hệ thống, các thông tin về database khác trong hệ
thống, vị trí các file dữ liệu, thiết kế cấu hình hệ thống, các mã số khi đăng
nhập.
- Tempdb: chứa các bảng biểu hay các hàm lưu trữ tạm thời trong quá
trình làm việc bởi các user hay chính do SQL Server Engine. Các bảng này
tự động biến mất khi khởi động lại SQL Server hay cắt kết nối.
- Model: có vai trò như một bản mẫu cho các database khác. Khi mà user
tạo ra một database cho mình thì SQL sẽ copy những thông tin này vào
database của user vừa tạo.
- Msdb: những dữ liệu này được SQL Server Agent sử dụng hoặch định
các báo động và các công việc làm cần thiết.
2. Cấu trúc của một SQL Server Database
Mỗi một database trong SQL Server bao giờ cũng có ít nhất 1 file chính và có thể có
1 hay nhiều file phụ đồng thời có 1 file transaction log.
- Primary Data File (file chính): có phần mở rộng là .mdf. Nó chứa dữ liệu
và các bảng hệ thống.
- Secondary Data File (file phụ): có phần mở rộng là .ndf. Thường được
dùng khi database phân chia trên nhiều đĩa.
- Transaction Log File : thường có phần mở rộng là .ldf. Chứa những sự
thay đổi trong database và đầy đủ thông tin để có thể roll back hay roll
forward.
Trong SQL Server thì dữ liệu được lưu trữ theo từng Page 8KB và 8 Page liên tục tạo
ra một phần mở rộng.
9
MS SQL Server vµ Postgre SQL
Trong SQL Server, muốn lưu trữ dữ liệu vào 1 bảng thì chúng ta phải dành một
khoảng trống cho bảng đó. Những khoảng trống đó là các mở rộng ở trên. Có 2 loại
mở rộng: phần mở rộng hỗn hợp ( mixed extend - cho phép chứa nhiều bảng
trong cùng một mở rộng) và phần đồng bộ ( uniform extend - chỉ chứa dữ liệu của
một bảng table). Đầu tiên, SQL Server thực hiện phần mở rộng hỗn hợp cho dữ liệu
của một bảng và khi dữ liệu tăng trưởng thì chuyển sang phần đồng bộ.
3. Nguyên tắc hoạt động của file Transaction Log.
Như đã nói ở trên, file này ghi nhận sự thay đổi trong cơ sở dữ liệu. Quá trình thực
hiện: khi có sự thay đổi data bằng các lệnh Insert, Update, Delete từ các trình ứng
dụng của người dùng, SQL Server sẽ tải trang dữ liệu tương ứng lên bộ nhớ ( vùng
bộ nhớ này còn gọi là data cache). Tại đây, dữ liệu trên trang này được thay đổi
( những trang này đựơc gọi là dirty page) và những sữ thay đổi này được ghi vào file
này. Sau cùng có một quá trình kiểm tra và ghi vào đĩa cứng nội dung của file này.
Quá trình đó được gọi là Check Point Process. Tuy nhiên, không chỉ có quá trình
trên, còn một quá trình khác mang tên Lazy writer cũng ghi nội dung của file log vào
đĩa theo từng chu kì.
10
database
!"
#$
%
&
'
#$
MS SQL Server vµ Postgre SQL
Chúng ta tiếp tục đi kỹ một chút về tiến trình Check Point này. Transaction nghĩa là
giao dịch. Nhưng giao dịch nhiều khi gây nên những lỗi nguy hiểm. Vậy Check Point
phải có cơ chế thực hiện thích hợp để không gây nhiễu database. Sơ đồ dưới đây
minh hoạ điều này.
Có thể giải thích sơ đồ này như sau:
Trong sơ đồ trên, mỗi transaction được biểu diễn bởi 1 mũi tên. Trục nằm ngang là
trục thời gian. Tại transaction 2 và 3 có điểm Check Point. Tiếp đến, nó gặp sự cố hệ
thống. Khi SQL Server được khôi phục trở lại, nó sẽ dựa vào những thông tin trên file
log để phục hồi dữ liệu.
Như vậy, đối với transaction 1 thì Server không cần làm gì cả khi hệ thống bị sụp đổ
vì tại Check Point nó đã được ghi vào đĩa rồi. Đối với transaction 2 và 4 sẽ được roll
forward còn transaction 3 và 5 được roll back.
4. Cấu trúc logic của một SQL Server Database.
Trong SQL Server, mọi thứ đều được cụ thể hoá theo hướng đối tượng. Có những
đối tượng dễ biết như table, view và có những đối tượng thuộc hệ thống. Đối tượng
thuộc hệ thống luôn bắt đầu với cụm từ sys hay sp. Chẳng hạn,
Sp_help[‘object’] : cho biết thông tin của object. Object ở đây là những table,
view
11
'
(
)
*
+
,
-.
-.
.! "
MS SQL Server vµ Postgre SQL
Sp_helpdb[‘database’]: cung cấp thông tin của một database nào đó.
Sp_helpdb[‘login’]: cho biết thông tin của user
IV Sao lưu và phục hồi dữ liệu.
1. Chiến lược phục hồi dữ liệu.
Chúng ta nên biết việc phục hồi dữ liệu là cực kì quan trọng. Khi những sự cố
thường xuyên xảy ra như người dùng vô ý xoá đi một file cơ sở dữ liệu, file hệ thống,
file transaction, bị tấn công bởi virus phải đảm bảo hệ thống phục hồi đầy đủ trong
thời gian sớm nhất. Bởi vậy, cần phải luôn kiểm tra trước khi hệ thống xảy ra sự cố
và tránh số lần sao lưu dự phòng.
2 Một số phương pháp Back Up có trong SQL Server
- Full Database Backups: copy toàn bộ các file trong cơ sở dữ liệu. Như
vậy, mọi thông tin về user, database object, system object đều được sao lưu
đề phòng. Làm như thế này giúp cho khôi phục toàn bộ thông tin nhưng gây
tốn bộ nhớ và tốn thời gian thực hiện.
- Differential Database Backups: copy toàn bộ thay đổi trong database sau
lần full database backup trước đó.
- File or File Group Backups: copy một data file đơn hay một nhóm file
- Differantial File or File Group Backups: copy sự thay đổi của một file hay
một nhóm file.
- Transaction Log Backups: ghi lại những transaction trong transaction
log file kể từ lần transaction log backup gần nhất. Phương pháp này cho ta
phục hồi dữ liệu vào một thời điểm nào đó trong quá khứ mà vẫn đảm bảo tính
đồng nhất.
Trong khi thực hiện quá trình sao lưu, mọi hoạt động của cơ sở dữ liệu cũng được
back up nên có thể sao lưu ngay khi SQL đang chạy.
3. Một số mô hình phục hồi.
12
MS SQL Server vµ Postgre SQL
- Full Recovery Model: phục hồi dữ liệu ít rủi ro nhất. Mọi hoạt động trong
chế độ này như insert, update, delete kể cả insert bằng bulk insert hay bcp
cũng được đưa vào file transaction log. Khi có sự cố ta có thể phục hồi dữ liệu
tại một thời điểm nào đó trong quá khứ. Khi dữ liệu bị hỏng, sẽ được back up
lại từ file transaction log.
- Bulk-Logged Recovery Model: phục hồi mang tính hành động. Có nghĩa
là những hoạt động như bulk insert, bcp, creat index, write text, update text
chỉ được đưa vào transaction log file một lượng ít nhất thông tin nhằm cho biết
hoạt động này có diễn ra mà không đi chi tiết về hoạt động đó. Còn những
hoạt động của lệnh insert, update, delete vẫn được đưa đầy đủ vào file trên để
tiện cho việc phục hồi.
- Simple Recovery Model: trong chế độ này file transaction log luôn được
cập nhập nhưng lại không back up. Do vậy, chỉ có thể hồi phục dữ liệu trong 1
thời điểm gần đây nhất mà thôi.
Có thể hình dung một cách đơn giản qua ví dụ dưới đây.
Chủ Nhật
Thứ Hai
Thứ Ba
Thứ Tư
Thứ Năm
Thứ Sáu
Thứ Bảy
13
/0-"
$.1
0
0-"$.1
23
4
56
7892"
MS SQL Server vµ Postgre SQL
Có thể giải thích như sau:
Các ngày trong tuần đều được đưa vào trong file transaction log. Trong đó riêng
ngày chủ nhật được thực hiện Full Database BackUp còn 2 ngày thứ 3 và thứ 5 thực
hiện lưu trữ những thay đổi. Không may, đến ngày thứ 6, máy tính hỏng đĩa cứng.
Quá trình khôi phục bắt đầu được tiến hành. Chúng ta phải thống nhất rằng file
transaction log được lưu trữ trong một đĩa cứng khác, nghĩa là file này không bị hỏng
cùng với đĩa cứng lưu trữ dữ liệu. Trước tiên, file transaction log này được khôi phục.
Sau đó, phục hồi dữ liệu từ ngày chủ nhật. Copy toàn bộ file dữ liệu vào từ đĩa
backup đến đĩa mới và thực hiện toàn bộ transaction trong transaction log file. Tiếp
tục, lphục hồi dữ liệu ( differental database backup) ngày thứ 5. Cuối cùng, phục hồi
trong các file transaction log sau ngày thứ 5. Người ta gọi đây là quá trình Data
Recovery.
4. BackUp Database
Đây là quá trình cất giữ dữ liệu đề phòng sự cố. Trong SQL Server, chúng ta có thể
tạo ra những backup device hay backup file để thực hiện lưu trữ dữ liệu. Các backup
device thường là cố định để tiện cho việc lưu trữ nhiều lần. Dưới đây là một số thuật
ngữ trong lưu trữ.
Backup: copy toàn bộ một phần hay toàn bộ dữ liệu hay file transaction
log, 1 file hay nhóm file để tạo ra một backup set. Backup set này thường
chứa trên các backup device.
Backup device: thường là một file hay một đĩa để ghi backup set vào
backup media.
Backup file: chứa backup set.
Backup media: là đĩa hay băng từ chứa một hay nhiều backup set.
V. Tính toàn vẹn dữ liệu.
Khi nói đến tính toàn vẹn dữ liệu là nói đến độ chính xác, tin cậy của dữ liệu. Đảm
bảo dữ liệu có độ tin cậy cao là một vấn đề quan trọng trong cơ sở dữ liệu.
1. Phương pháp đảm bảo an toàn dữ liệu.
Trong SQL Server có một số cách nhằm đảm bảo tính an toàn dữ liệu.
14
MS SQL Server vµ Postgre SQL
Data Type: trong khi thiết lập cơ sở dữ liệu, cần phải chọn kiểu dữ liệu
cho từng cột. Như vậy, nếu cột ClassName, chẳng hạn, là kiểu String thì
không thể nào đặt số thực vào giá trị cho cột này.
Default Definition: một cột trong bảng được đặt dữ liệu mặc định trong
bảng thì khi không có dữ liệu đưa vào nó dùng giá trị mặc định này để đưa
vào bảng.
Not Null Definition: khi một cột thực hiện cấm “not null” thì cột đấy phải
có giá trị đưa vào. Nên biết, giá trị Null không phải là một string rỗng hay số
nguyên 0.
Identity Properties: data thuộc dạng ID đảm bảo tính duy nhất dữ liệu
trong bảng.
Contraints: là những ràng buộc đảm bảo tính chính xác của dữ liệu đưa
vào.
Rule: là Object mang tính backward-compatible nhằm giúp tương thích
với các phiên bản trước đây của SQL Server. Rule tương đương với Check
Constraint trong SQL Server 2000 nhưng dùng Check Constraint có tính chính
xác cao hơn nhiều. Có thể sử dụng nhiều Constraint lên một cột trong khi chỉ
có thể dùng một Rule lên một côt trong bảng. Check constraint là một thuộc
tính của bảng trong khi Rule là một đối tượng riêng.
Trigger: đây là một thủ tục lưu trữ đặc biệt được thực hiện khi một bảng
được Update, Insert, hay Delete. Chẳng hạn, khi bán một món hàng thì tổng
lượng hàng trong kho phải giảm đi một. Chức năng này do trigger quản lý.
Dưới đây đi vào một số chi tiết.
2. Constraints.
Đây là những thuộc tính mà bảng khi có sẽ tránh được các dữ liệu không chính xác
đưa vào bảng. Bản thân, các giá trị Default hay Null cũng là những constraint. Có 4
loại constraint cơ bản. Đó là Primary Key Constraint, Unique Constraint, Foreign Key
Constraint và Check Constraint.
a. Primary Key Constraint (thuộc tính khoá chính).
Trong một bảng thường có một hay nhiều cột có giá trị mang tính chất duy nhất để
xác định một hàng bất trong bảng. Đó là cột có thuộc tính khoá chính. Chỉ một cột
duy nhất được có thuộc tính này. Nhiều cột có thể cùng tham gia để tạo nên thuộc
tính này. Khi Primary Key được tạo ra thì Unique Index sẽ tự động tạo ra để duy trì
tính duy nhất. Nếu trong bảng chưa có Clustered Index một Unique và Clustered
Index sẽ được tạo ra. Có nhiều cách cho phép tạo ra thuộc tính Primary Key cho một
cột.
15
MS SQL Server vµ Postgre SQL
CREATE TABLE MyTable (
StudentID INT PRIMARY KEY,
StudentName VARCHAR(30)
)
b Unique Constraint (thuộc tính duy nhất).
Tạo thuộc tính này cho bảng nhằm bảo đảm giá trị của một cột nào đó không bị lặp
lại. Cho dù có những điểm tương đồng giữa Unique và Primary Key nhưng chúng có
những cách dùng khác nhau. Trong một bảng có thể có nhiều Unique nhưng chỉ duy
nhất một Primary Key. Một cột cho phép chứa giá trị Null, thì Unique được đặt lên cột
này nhưng Primary Key thì không.
c. Foreign Key Constraint (thuộc tính khoá ngoài).
Một cột hay nhiều cột được thiết lập thuộc tính này để liên kết với dữ liệu trong bảng
khác. Có thể đặt nhiều Foreign Key trong cùng một bảng để liên kết với bảng khác.
Foreign Key của một bảng này sẽ giữ thuộc tính khoá chính cho bảng khác hay tham
chiếu với cột có tính Unique. Foreign Key có thể có chứa NULL. Mặc dù mục đích
của Foreign Key là quản lý một bảng con nhưng thực tế nó kiểm soát luôn cả bảng
cha. Bởi lẽ, khi ta xoá dữ liệu trong bảng cha thì bảng con không thể liên kết với bảng
cha. Cho nên khi xoá thuộc tính Foreign Key phải kiểm soát vấn đề này.
d. Check Constraint.
Dùng để kiểm soát hay giới hạn giá trị đưa vào trong bảng dữ liệu. Tương tự như
Foreign Key kiểm soát giá trị đưa vào một cột nhưng nó không dựa vào bảng cha để
xác định mà nó dựa vào một biểu thức để xác định điều này.
CREATE TABLE MyTable(
StudentID INT PRIMARY KEY,
StudentName VARCHAR(30),
StudentScore INT limit_amount CHECK ( StudentScore BETWEEN 5
AND 8)
)
Có thể tạo nhiều Check Constraint trên một cột.
VI. Truy vấn nâng cao.
1. Dạng của câu lệnh truy vấn nâng cao.
SELECT Select_List
[ INTO New_Table]
FROM Table_Source
[ WHERE Search_Condition]
16
MS SQL Server vµ Postgre SQL
[ GROUP BY Group_By_Expression]
[ HAVING Search_Condition]
[ ORDER BY Order_Expression[ASC | DESC]]
a. SELECT: đây là lựa chọn trong bảng những trường quan trọng theo yêu cầu. Có 3
chức năng trong trường chọn này.
- Distinct: cho phép chọn các cột có giá trị không trùng nhau.
- Top n: cho phép chọn n hàng đầu tiên trong bảng.
- As: dùng thay thế cho dễ đọc hơn với câu truy vấn.
SELECT IdentityCol AS "Employee ID",HomePhone
FROM Northwind.dbo.Employees
ORDER BY LastName, FirstName ASC
b INTO: đây là chọn dữ liệu từ một bảng hay nhiều bảng sau đó đưa dữ liệu vào
trong một bảng mới.
SELECT FirstName, LastName
INTO EmployeeNames
FROM Employers
Dãy lệnh trên thực hiện lấy dữ liệu hai cột FirstName và LastName từ bảng
Employers vào trong bảng EmployeeNames.
c. GROUP BY và HAVING: là những dãy điều kiện đi kèm khi ta chọn dữ liệu trong
bảng.
SELECT FirstName, LastName
INTO EmployeeNames
FROM Employers
GROUP BY FirstName
HAVING LastName=’Do’
cũng như trên nhưng bây giờ có thêm điều kiện LastName là chuỗi Do và được
nhóm lại bởi FirstName.
d. UNION: kết nối 2 hay nhiều queries thành một kết quả.
SELECT * MyTableOne
UNION ALL
17
MS SQL Server vµ Postgre SQL
SELECT * MyTableTwo
thực hiện việc ghép nối 2 bảng có các cột và kiểu dữ liệu giống hệt nhau, chỉ khác
nhau về giá trị trong các cột. Những hàng giống nhau được ghép mà không bị xoá
bỏ.
2. Lệnh Joins.
Lệnh này cho phép ghép nối các bảng có chung một hay nhiều cột lại với nhau. Có
nhiều Joins. Dưới đây trình bày một số dạng.
a. Inner Joins.
Lệnh này giúp chọn dữ liệu từ 2 hay bảng có chung 1 hay nhiều cột. Các giá trị được
này phải có ở cả 2 bảng.
SELECT t.Title, p.Pub_name
FROM Publishers AS p INNER JOIN Titles AS t
ON p.Pub_id = t.Pub_id
b. Left Outer Joins.
Lệnh này lựa chọn dữ liệu từ 2 hay nhiều bảng mà những cột bảng thứ nhất không
có bên bảng thứ 2 cộng với những cột có được từ Inner Joins. Số cột được chọn
bằng số cột bảng thứ 1.
SELECT a.Au_fname, a.Au_lname, p.Pub_name
FROM Authors a LEFT OUTER JOIN Publishers p
ON a.City = p.City
18
inner joins
MS SQL Server vµ Postgre SQL
c. Right Outer Joins.
Lệnh này có tác dụng như trên nhưng lại thuộc về bảng 2.
d. Full Outer Joins.
SELECT a.Au_fname, a.Au_lname, p.Pub_name
FROM Authors a FULL OUTER JOIN Publishers p
ON a.City = p.City
Lệnh này chọn tất cả những dữ liệu từ 2 hay nhiều bảng trong đó tất cả các cột của
bảng thứ 1 và bảng thứ 2 đều được chọn các giá trị giống nhau chỉ lấy một lần.
VII. Kỹ thuật Import và Export Data.
1. Import dùng lệnh bcp và BULK INSERT.
bcp là lệnh của command promt dùng để import dữ liệu từ các file dữ liệu như
file text, file excel vào SQL Server. Thậm chí nó có thể xuất dữ liệu từ SQL Server ra
các file này. Từ đó, muốn chuyển giao dữ liệu từ Oracle sang SQL Server thì trước
tiên dùng bcp xuất dữ liệu sang file text sau đó nhập lại vào SQL Server.
Bulk Insert cũng là lệnh cho phép nhập dữ liệu vào SQL nhưng không thể xuất được
dữ liệu.
Khi nhập dữ liệu, thì bản thân file cho dữ liệu phải có dạng bảng hay cột. Đồng thời,
trong SQL Server cũng phải tồn tại một bảng để lưu trữ dữ liệu được nhập vào. Còn
khi xuất thì một file được tạo nếu nó chưa tồn tại hay được ghi đè nếu không tồn tại.
bcp PracticeDB Orders out c:\Orders.txt -c –T –t;
Lệnh này được gõ trong cửa sổ Dos. Đây là xuất dữ liệu từ bảng Orders trong
database PracticeDB ra file dạng văn bản Orders.txt, các cột ngăn với nhau bởi dấu ;
19
MS SQL Server vµ Postgre SQL
Để xuất dữ liệu dùng “out” còn nhập dữ liệu dùng “in”.
-c: là để chỉ xuất kiểu dữ liệu character. Nếu không có, mặc định là dùng TAB
để phân cột và dùng xuống dòng để phân định hàng (“\n”).
T: kết nối với cơ sở dữ liệu. Nếu user được phép vào hệ thống Window thì
cũng được dùng SQL Server.
t; : dấu đi sau t để dùng phân định cột.
bcp "Select * From practiceDB Orders" queryout c:\Orders.txt -c -SVinhtai
-Usa –Pabc
queryout: cho biết đầu ra là query chứ không là bảng.
-S: tên của SQL Server
-U: tên người dùng
-P: mật khẩu người dùng.
2. Truy vấn phân tán.
Khi muốn lựa chọn dữ liệu từ các hệ cơ sở dữ liệu như Access, DB2, Oracle hay một
SQL Server khác dùng truy vấn phân tán để thực thi. Để thực hiện điều này, ta
dùng đến Linked Server hoặc Ad Hoc Computer Name.
a. Linked Server.
Đây là dùng một server ảo để truy nhập vào các hệ cơ sở dữ liệu khác. Sau khi cài
đặt, nó bao gồm 4 phần:
Linked_Server_Name.Catalog.Shema.Object_Name.
VD:
Select * from OPENQUERY(LinkedPracticeDB,'Select * from Customers')
20
2%" 2%0
2%-:
2%8;"<
MS SQL Server vµ Postgre SQL
b. Ad Hoc Computer Name.
Đối với hệ thống cần thường xuyên truy nhập tới các hệ cơ sở khác chúng ta dùng
Linked Server còn nếu ít hơn thì nên dùng Ad Hoc Computer Name.
VD:
Select * from OPENROWSET('Microsoft.jet.oledb.4.0', 'C:\PracticeDB.mdb'; 'admin';'',
Customers)
3. Stored Procedure.
Khi dùng Query Analyzer, có thể lưu các lệnh đã được biên dịch vào trong SQL
Server dưới dạng stored proecedure. Như vậy, stored procedure là một nhóm câu
lệnh T-SQL đã được biên dịch và chứa trong SQL Server dưới một cái tên nào đó và
được xử lý như một đơn vị. Chú ý, đây không phải là các câu lệnh riêng lẻ.
Các lệnh này làm tăng tốc độ tính toán cho hệ thống vì nó không cần phải kiểm tra cú
pháp, biên dịch. Những điều này đã được thực hiện trước khi nó được lưu vào hệ
thống.
Có 5 loại stored procedure.
System Stored Procedure: đây là những lệnh chứa trong master
database thường bắt đầu bằng sp_ và chúng thuộc diện những hàm có sẵn
nhằm quản lý, an ninh cho hệ thống.
Local Stored Procedure: đây là loại thông dụng nhất. Nó có trong user
database để thực hiện công việc của người dùng
Temporary Stored Procedure: loại này tương tự như loại trên nhưng
mang tính chất tạm thời. Nó sẽ bị mất đi khi mà kết nối tạo ra nó ngắt hay
SQL Server ngừng hoạt động. Bản thân loại này lại chia ra 3 loại nhỏ hơn.
Loại cho cục bộ bắt đầu bằng dấu # và sẽ mất khi kết nối tạo ra nó mất. Loại
cho toàn cục bắt đầu bằng ##, tồn tại cho nhiều kết nối. Và loại được tạo trực
tiếp trên TempDB có thể thiết lập được quyền, nó chỉ mất khi hệ thống tắt còn
vẫn hoạt động khi mất đi kết nối.
Extended Stored Procedure: đây là loại sử dụng chương trình bên ngoài
đã được biên dịch trở thành một thư viện động để tăng cường chức năng cho
SQL Server. Loại này bắt đầu bằng xp_.
Remote Stored Procedure: đây là loại dùng để gọi stored procedure của
các server khác.
VIII. SQL Server và mạng.
21
MS SQL Server vµ Postgre SQL
SQL Server trong thực tế sử dụng một cách rất đa dạng. Nó có thể ghép nối với các
SQL Server khác, liên kết với các client, hoặc thực hiện cùng trình ứng dụng ngay
trên một máy tính
1. Các Server SQL được liên kết với nhau.
Với những trang Web có cơ sở dữ liệu lớn vượt quá tải trọng của SQL Server riênglẻ
thì việc kết hợp các SQL Server vào với nhau là một việc quan trọng. Để kết nối các
SQL Server gần nhau, người ta dùng các mạng SAN nhằm hỗ trợ cấp độ chuyển
thông báo cao, giảm tải trọng của CPU, và thời gian chờ thông báo của các SAN
đáng tin cậy hơn LAN hay WAN.
2 SQL Server dưới dạng quản lý cơ sở dữ liệu trong mạng.
22
,.=,>
,?,
@$""
ABCC ! @@
@@
"=@@>
@"
0-"
MS SQL Server vµ Postgre SQL
Các user chạy trình ứng dụng trên máy tính của mình kết nối đến một instance của
SQL Server đang chạy trên một máy tính server. Mô hình quản lý dữ liệu ở vị trí trung
tâm này có nhiều điểm thuận lợi. Mỗi hạng mục dữ liệu đều được lữu trữ ở vị trí trung
tâm và các user đều có thể làm việc với nó. Điều này loại đi các sự cố xảy ra với các
user đang thực hiện trên một thông tin.
3 SQL Server dưới dạng quản lý cơ sở dữ liệu cùng ứng dụng trong
desktop.
23
SQL Server
0-"
0".
MS SQL Server vµ Postgre SQL
Các trình ứng dụng cùng thực hiện chung với SQL Server trên một máy tính tương tự
như các user thực hiện trình ứng dụng của họ kết nối với trình cơ sở dữ liệu đang
chạy trên server từ xa. Sự khác biệt cơ bản là các kết nối cục bộ được thực hiện qua
các IPC cục bộ.
4. Quá trình trao đổi thông tin giữa một trình ứng dụng SQL Server chạy trên cùng
một máy tính với một instance của SQL Server.
SQL Server 2000 sử dụng các thành phần được gọi là client Net-Libraris để ngăn
OLE DB Provider, SQL Server ODBC driver và DB-Library DLL không trao đổi thông
tin với các IPC. Quá trình quản lý trao đổi thông tin giữa SQL Server và các client
diễn ra như sau:
- Trình ứng dụng gọi đến OLE DB, ODBC, DB-Library, hay Embedded SQL API.
Điều này làm cho OLE DB Provider, SQL Server ODBC driver và DB-Library
DLL được SQL Server sử dụng để trao đổi thông tin.
- OLE DB, ODBC driver, DB-Library DLL gọi một client Net-Library. Sau đó,
client Net-Library gọi một IPC API.
- Các cuộc gọi của client Net-Library chuyển đến một server Net-Library và tiếp
tục chuyển tới instance của SQL Server.
- Quá trình truyền tin từ SQL Server tới client diễn ra ngược lại.
Hình vẽ dưới đây mô tả quá trình này.
24
A0$
A0$
0$D-
A0$
A0$
0$D-
0
B,D
-
B,D
-
B,D
-
B
B,D-
A0
MS SQL Server vµ Postgre SQL
5. Quá trình trao đổi thông tin giữa một trình ứng dụng trên client với một instance
SQL Server trên một máy tính riêng lẻ.
Hình vẽ dưới đây minh hoạ một ví dụ đơn giản đường dẫn trao đổi thông tin khi một
trình ứng dụng SQL Server kết nối qua mạng LAN hay WAN sang một instance của
SQL Server trên một máy tính riêng rẽ.
25
A0$
A0$
,
!",D
-
A0$
A0$
BD
,D
-
,.
,.
,$1@
,.
2!?@!,.
,
!",-
,
!",-
,
!",-
A0"
0$D-
0$D-0
2!?@!
.,D
-