HC SQL SERVER 2000 1
MC LC
Overview of SQL Server 2000 ........................................................................................... 2
Transact SQL ...................................................................................................................... 7
Backup And Restore SQL Server ..................................................................................... 24
Stored Procedure and Advanced T-SQL........................................................................... 41
Triggers And Views.......................................................................................................... 51
HC SQL SERVER 2000 2
Overview of SQL Server 2000
Ð đc và hiu bài vit này bn phi có kin thc cn bn v SQL và Access Database
Gii Thiu SQL Server 2000
SQL Server 2000 là mt h thng qun lý c s d liu (Relational Database
Management System (RDBMS) ) s dng Transact-SQL đ trao đi d liu gia
Client computer và SQL Server computer. Mt RDBMS bao gm databases,
database engine và các ng dng dùng đ qun lý d liu và các b phn khác
nhau trong RDBMS.
SQL Server 2000 đc ti u đ có th chy trên môi trng c s d liu rt
ln (Very Large Database Environment) lên đn Tera-Byte và có th phc v
cùng lúc cho hàng ngàn user. SQL Server 2000 có th kt hp "n ý" vi các
server khác nh Microsoft Internet Information Server (IIS), E-Commerce
Server, Proxy Server....
SQL Server có 7 editions:
• Enterprise : Cha đy đ các đc trng ca SQL Server và có th chy
tt trên h thng lên đn 32 CPUs và 64 GB RAM. Thêm vào đó nó có các
dch v giúp cho vic phân tích d liu rt hiu qu (Analysis Services)
• Standard : Rt thích hp cho các công ty va và nh vì giá thành r hn
nhiu so vi Enterprise Edition, nhng li b gii hn mt s chc nng
cao cp (advanced features) khác, edition này có th chy tt trên h
thng lên đn 4 CPU và 2 GB RAM.
• Personal: đc ti u hóa đ chy trên PC nên có th cài đt trên hu
ht các phiên bn windows k c Windows 98.
• Developer : Có đy đ các tính nng ca Enterprise Edition nhng đc
ch to đc bit nh gii hn s lng ngi kt ni vào Server cùng mt
lúc.... Ðây là edition mà các bn mun hc SQL Server cn có. Chúng ta
s dùng edition này trong sut khóa hc. Edition này có th cài trên
Windows 2000 Professional hay Win NT Workstation.
• Desktop Engine (MSDE): Ðây ch là mt engine chy trên desktop và
không có user interface (giao din). Thích hp cho vic trin khai ng
dng máy client. Kích thc database b gii hn khong 2 GB.
HC SQL SERVER 2000 3
• Win CE : Dùng cho các ng dng chy trên Windows CE
• Trial: Có các tính nng ca Enterprise Edition, download free, nhng gii
hn thi gian s dng.
Cài Ðt SQL Server 2000 (Installation)
Các bn cn có Developer Edition và ít nht là 64 MB RAM, 500 MB hard disk
đ có th install SQL Server. Bn có th install trên Windows Server hay
Windows XP Professional, Windows 2000 Professional hay NT Workstation nhng
không th install trên Win 98 family.
Vì mt trong nhng đc đim ca các sn phm Microsoft là d install nên chúng
tôi không trình bày chi tit v cách install hay các bc install mà ch trình bày
các đim cn lu ý khi install mà thôi. Nu các bn gp tr ngi trong vic install
thì có th đa lên forum đ hi thêm. Khi install bn cn lu ý các đim sau:
màn hình th hai bn chn Install Database Server. Sau khi install xong
SQL Server bn có th install thêm Analysis Service nu bn thích.
màn hình Installation Definition bn chn Server and Client Tools.
Sau đó bn nên chn kiu Custom và chn tt c các b phn ca SQL Server.
Ngoài ra nên chn các giá tr mc đnh (default)
màn hình Authentication Mode nh chn Mixed Mode . Lu ý vì SQL
Server có th dùng chung ch đ bo mt (security) vi Win NT và cng có th
dùng ch đ bo mt riêng ca nó. Trong Production Server ngi ta thng
dùng Windows Authetication vì đ an toàn cao hn và d dàng cho ngi qun
lý mng và c cho ngi s dng. Ngha là mt khi bn đc chp nhn
(authenticated) kt ni vào domain thì bn có quyn truy cp d liu (access
data) trong SQL Server. Tuy nhiên ta nên chn Mixed Mode đ d dàng cho vic
hc tp.
Sau khi install bn s thy mt icon nm góc phi bên di màn hình, đây
chính là Service Manager. Bn có th Start, Stop các SQL Server services d
dàng bng cách double-click vào icon này.
Mt chút kin thc v các Version ca SQL Server
SQL Server ca Microsoft đc th trng chp nhn rng rãi k t version 6.5.
Sau đó Microsoft đã ci tin và hu nh vit li mt engine mi cho SQL Server
7.0. Cho nên có th nói t version 6.5 lên version 7.0 là mt bc nhy vt. Có
mt s đc tính ca SQL Server 7.0 không tng thích vi version 6.5. Trong khi
HC SQL SERVER 2000 4
đó t Version 7.0 lên version 8.0 (SQL Server 2000) thì nhng ci tin ch yu là
m rng các tính nng v web và làm cho SQL Server 2000 đáng tin cy hn.
Mt đim đc bit đáng lu ý version 2000 là Multiple-Instance. Nói cho d
hiu là bn có th install version 2000 chung vi các version trc mà không cn
phi uninstall chúng. Ngha là bn có th chy song song version 6.5 hoc 7.0
vi version 2000 trên cùng mt máy (điu này không th xy ra vi các version
trc đây). Khi đó version c trên máy bn là Default Instance còn version
2000 mi va install s là Named Instance.
Các thành phn quan trng trong SQL Server 2000
SQL Server 2000 đc cu to bi nhiu thành phn nh Relational Database
Engine, Analysis Service và English Query.... Các thành phn này khi phi hp
vi nhau to thành mt gii pháp hoàn chnh giúp cho vic lu tr và phân tích
d liu mt cách d dàng.
Relational Database Engine - Cái lõi ca SQL Server:
Ðây là mt engine có kh nng cha data các quy mô khác nhau di dng
table và support tt c các kiu kt ni (data connection) thông dng ca
Microsoft nh ActiveX Data Objects (ADO), OLE DB, and Open Database
Connectivity (ODBC). Ngoài ra nó còn có kh nng t điu chnh (tune up) ví d
HC SQL SERVER 2000 5
nh s dng thêm các tài nguyên (resource) ca máy khi cn và tr li tài
nguyên cho h điu hành khi mt user log off.
Replication - C ch to bn sao (Replica):
Gi s bn có mt database dùng đ cha d liu đc các ng dng thng
xuyên cp nht. Mt ngày đp tri bn mun có mt cái database ging y ht
nh th trên mt server khác đ chy báo cáo (report database) (cách làm này
thng dùng đ tránh nh hng đn performance ca server chính). Vn đ là
report server ca bn cng cn phi đc cp nht thng xuyên đ đm bo
tính chính xác ca các báo cáo. Bn không th dùng c ch back up and restore
trong trng hp này. Th thì bn phi làm sao? Lúc đó c ch replication ca
SQL Server s đc s dng đ bo đm cho d liu 2 database đc đng b
(synchronized). Replication s đc bàn k trong bài 12
Data Transformation Service (DTS) - Mt dch v chuyn dch data vô cùng
hiu qu
Nu bn làm vic trong mt công ty ln trong đó data đc cha trong nhiu ni
khác nhau và các dng khác nhau c th nh cha trong Oracle, DB2 (ca
IBM), SQL Server, Microsoft Access....Bn chc chn s có nhu cu di chuyn
data gia các server này (migrate hay transfer) và không ch di chuyn bn còn
mun đnh dng (format) nó trc khi lu vào database khác, khi đó bn s thy
DTS giúp bn gii quyt công vic trên d dàng nh th nào. DTS s đc bàn
k trong bài 8.
Analysis Service - Mt dch v phân tích d liu rt hay ca Microsoft
D liu (Data) cha trong database s chng có ý ngha gì nhiu nu nh bn
không th ly đc nhng thông tin (Information) b ích t đó. Do đó Microsoft
cung cp cho bn mt công c rt mnh giúp cho vic phân tích d liu tr nên
d dàng và hiu qu bng cách dùng khái nim hình khi nhiu chiu (multi-
dimension cubes) và k thut "đào m d liu" (data mining) s đc chúng tôi
gii thiu trong bài 13.
English Query - Mt dch v mà ngi Vit Nam chc là ít mun dùng :-) (?)
Ðây là mt dch v giúp cho vic query data bng ting Anh "trn" (plain
English).
Meta Data Service:
Dch v này giúp cho vic cha đng và "xào nu" Meta data d dàng hn. Th
thì Meta Data là cái gì vy? Meta data là nhng thông tin mô t v cu trúc ca
data trong database nh data thuc loi nào String hay Integer..., mt ct nào
HC SQL SERVER 2000 6
đó có phi là Primary key hay không....Bi vì nhng thông tin này cng đc
cha trong database nên cng là mt dng data nhng đ phân bit vi data
"chính thng" ngi ta gi nó là Meta Data. Phn này chc là bn phi xem thêm
trong mt thành phn khác ca SQL Server sp gii thiu sau đây là SQL
Server Books Online vì không có bài nào trong lot bài này nói rõ v dch v
này c.
SQL Server Books Online - Quyn Kinh Thánh không th thiu:
Cho dù bn có đc các sách khác nhau dy v SQL server thì bn cng s thy
books online này rt hu dng và không th thiu đc( cho nên Microsoft mi
hào phóng đính kèm theo SQL Server).
SQL Server Tools - Ðây là mt b đ ngh ca ngi qun tr c s d liu
(DBA )
Ái chà nu k chi tit ra thì hi nhiu đy cho nên bn cn đc thêm trong books
online. đây ngi vit ch k ra mt vài công c thông dng mà thôi.
̇ Ðu tiên phi k đn Enterprise Manager. Ðây là mt công c cho ta
thy toàn cnh h thng c s d liu mt cách rt trc quan. Nó rt hu
ích đc bit cho ngi mi hc và không thông tho lm v SQL.
̇ K đn là Query Analyzer. Ði vi mt DBA gii thì hu nh ch cn
công c này là có th qun lý c mt h thng database mà không cn
đn nhng th khác. Ðây là mt môi trng làm vic khá tt vì ta có th
đánh bt k câu lnh SQL nào và chy ngay lp tc đc bit là nó giúp
cho ta debug my cái stored procedure d dàng.
̇ Công c th ba cn phi k đn là SQL Profiler. Nó có kh nng "chp"
(capture) tt c các s kin hay hot đng din ra trên mt SQL server và
lu li di dng text file rt hu dng trong vic kim soát hot đng
ca SQL Server.
̇ Ngoài mt s công c trc quan nh trên chúng ta cng thng hay dùng
osql và bcp (bulk copy) trong command prompt.
Tóm li trong bài này chúng ta đã do qua mt vòng đ tìm hiu v SQL Server.
Trong bài sau chúng ta cng s tip tc do chi thêm mt chút vi Transact-
SQL trc khi đi sâu vào các đ tài khác.
HC SQL SERVER 2000 7
Transact SQL
Gii Thiu S Lc V Transact SQL (T-SQL)
Transact-SQL là ngôn ng SQL m rng da trên SQL chun ca ISO
(International Organization for Standardization) và ANSI (American National
Standards Institute) đc s dng trong SQL Server khác vi P-SQL (Procedural-
SQL) dùng trong Oracle.
Trong bài này chúng ta s tìm hiu s qua v T-SQL. Chúng đc chia làm 3
nhóm:
Data Definition Language (DDL):
Ðây là nhng lnh dùng đ qun lý các thuc tính ca mt database nh đnh
ngha các hàng hoc ct ca mt table, hay v trí data file ca mt
database...thng có dng
•
Create
object_Name
•
Alter
object_Name
• Drop
object_Name
Trong đó
object_Name
có th là mt table, view, stored procedure, indexes...
Ví d:
Lnh Create sau s to ra mt table tên Importers vi 3 ct
CompanyID,CompanyName,Contact
USE Northwind
CREATE TABLE Importers(
CompanyID int NOT NULL,
CompanyName varchar(40) NOT NULL,
Contact varchar(40) NOT NULL
)
Lnh
Alter sau đây cho phép ta thay đi đnh ngha ca mt table nh thêm(hay
bt) mt ct hay mt Constraint...Trong ví d này ta s thêm ct ContactTitle
vào table Importers
USE Northwind
HC SQL SERVER 2000 8
ALTER TABLE Importers
ADD ContactTitle varchar(20) NULL
Lnh
Drop sau đây s hoàn toàn xóa table khi database ngha là c đnh
ngha ca table và data bên trong table đu bin mt (khác vi lnh
Delete ch xóa data nhng table vn tn ti).
USE Northwind
DROP TABLE Importers
Data Control Language (DCL):
Ðây là nhng lnh qun lý các quyn truy cp lên tng object (table, view,
stored procedure...). Thng có dng sau:
• Grant
• Revoke
• Deny
Ví d:
Lnh sau s cho phép user trong Public Role đc quyn Select đi vi table
Customer trong database Northwind (Role là mt khái nim ging nh Windows
Group s đc bàn k trong phn Security)
USE Northwind
GRANT SELECT
ON Customers
TO PUBLIC
Lnh sau s t chi quyn Select đi vi table Customer trong database
Northwind ca các user trong Public Role
USE Northwind
DENY SELECT
ON Customers
TO PUBLIC
Lnh sau s xóa b tác dng ca các quyn đc cho phép hay t chi trc đó
USE Northwind
REVOKE SELECT
ON Customers
TO PUBLIC
HC SQL SERVER 2000 9
Data Manipulation Language (DML):
Ðây là nhng lnh ph bin dùng đ x lý data nh Select, Update, Insert,
Delete
Ví d:
Select
USE Northwind
SELECT CustomerID, CompanyName, ContactName
FROM Customers
WHERE (CustomerID = 'alfki' OR CustomerID = 'anatr')
ORDER BY ContactName
Insert
USE Northwind
INSERT INTO Territories
VALUES (98101, 'Seattle', 2)
Update
USE Northwind
UPDATE Territories
SET TerritoryDescription = 'Downtown Seattle'
WHERE TerritoryID = 98101
Delete
USE Northwind
DELETE FROM Territories
WHERE TerritoryID = 98101
Vì phn này khá cn bn nên chúng tôi thit ngh không cn gii thích nhiu.
Chú ý trong lnh
Delete bn có th có ch From hay không đu đc.
Nhng mà chúng ta s chy th các ví d trên đâu?
Ð chy các câu lnh thí d trên bn cn s dng và làm quen vi Query
Analyser
HC SQL SERVER 2000 10
Cú Pháp Ca T-SQL:
Phn này chúng ta s bàn v các thành phn to nên cú pháp ca T-SQL
Identifiers
Ðây chính là tên ca các database object. Nó dùng đ xác đnh mt object. (Chú
ý khi nói đn Object trong SQL Server là chúng ta mun đ cp đn table, view,
stored procedure, index.....Vì hu nh mi th trong SQL Server đu đc thit
k theo kiu hng đi tng (object-oriented)). Trong ví d sau TableX,
KeyCol, Description là nhng identifiers
CREATE TABLE TableX
(KeyCol INT PRIMARY KEY, Description NVARCHAR(80))
Có hai loi Identifiers mt loi thông thng (Regular Identifier) và mt loi
gi là Delimited Identifier, loi này cn có du "" hay du [] đ ngn cách.
Loi Delimited đc dùng đi vi các ch trùng vi t khóa ca SQL Server
(reserved keyword) hay các ch có khong trng.
HC SQL SERVER 2000 11
Ví d:
SELECT * FROM [My Table]
WHERE [Order] = 10
Trong ví d trên ch Order trùng vi keyword Order nên cn đt trong du
ngoc vuông [].
Variables (Bin)
Bin trong T-SQL cng có chc nng tng t nh trong các ngôn ng lp trình
khác ngha là cn khai báo trc loi d liu trc khi s dng. Bin đc bt
đu bng du @ (Ði vi các global variable thì có hai du @@)
Ví d:
USE Northwind
DECLARE @EmpIDVar INT
SET @EmpIDVar = 3
SELECT * FROM Employees
WHERE EmployeeID = @EmpIDVar + 1
Functions (Hàm)
Có 2 loi hàm mt loi là built-in và mt loi user-defined
Các hàm Built-In đc chia làm 3 nhóm:
• Rowset Functions : Loi này thng tr v mt object và đc
đi x nh mt table. Ví d nh hàm OPENQUERY s tr v mt
recordset và có th đng v trí ca mt table trong câu lnh Select.
• Aggregate Functions : Loi này làm vic trên mt s giá tr và
tr v mt giá tr đn hay là các giá tr tng. Ví d nh hàm AVG s
tr v giá tr trung bình ca mt ct.
• Scalar Functions : Loi này làm vic trên mt giá tr đn và tr
v mt giá tr đn. Trong loi này li chia làm nhiu loi nh nh
các hàm v toán hc, v thi gian, x lý kiu d liu String....Ví d
nh hàm MONTH('2002-09-30') s tr v tháng 9.
Các hàm User-Defined (đc to ra bi câu lnh CREATE FUNCTION và phn
body thng đc gói trong cp lnh BEGIN...END) cng đc chia làm các
nhóm nh sau:
• Scalar Functions : Loi này cng tr v mt giá tr đn bng câu
lnh RETURNS.
• Table Functions : Loi này tr v mt table
HC SQL SERVER 2000 12
Data Type (Loi D Liu)
Các loi d liu trong SQL Server s đc bàn k trong các bài sau
Expressions
Các Expressions có dng Identifier + Operators (nh +,-,*,/,=...) + Value
Các thành phn Control-Of Flow
Nh BEGIN...END, BREAK, CONTINUE, GOTO, IF...ELSE, RETURN, WHILE.... Xin
xem thêm Books Online đ bit thêm v các thành phn này.
Comments (Chú Thích)
T-SQL dùng du
-- đ đánh du phn chú thích cho câu lnh đn và dùng /*...*/
đ chú thích cho mt nhóm
Thc Thi Các Câu Lnh SQL
Thc thi mt câu lnh đn:
Mt câu lnh SQL đc phân ra thành các thành phn cú pháp nh trên bi mt
parser, sau đó SQL Optimizer (mt b phn quan trng ca SQL Server) s phân
tích và tìm cách thc thi (Execute Plan) ti u nht ví d nh cách nào nhanh và
tn ít tài nguyên ca máy nht... và sau đó SQL Server Engine s thc thi và tr
v kt qu.
Thc Thi mt nhóm lnh (Batches)
Khi thc thi mt nhóm lnh SQL Server s phân tích và tìm bin pháp ti u cho
các câu lnh nh mt câu lnh đn và cha execution plan đã đc biên dch
(compiled) trong b nh sau đó nu nhóm lnh trên đc gi li ln na thì SQL
Server không cn biên dch mà có th thc thi ngay điu này giúp cho mt batch
chy nhanh hn.
Lnh GO
Lnh này ch dùng đ gi mt tín hiu cho SQL Server bit đã kt thúc mt batch
job và yêu cu thc thi. Nó vn không phi là mt lnh trong T-SQL.
Tóm li trong phn này chúng ta đã tìm hiu v Transact- SQL là ngôn ng chính
đ giao tip vi SQL Server. Trong bài sau chúng ta s tip tc bàn v cu trúc
bên trong ca SQL Server .
HC SQL SERVER 2000 13
Design and Implement a SQL Server Database
Cu Trúc Ca SQL Server
Nh đã trình bày các bài trc mt trong nhng đc đim ca SQL Server
2000 là Multiple-Instance nên khi nói đn mt (SQL) Server nào đó là ta nói
đn mt Instance ca SQL Server 2000, thông thng đó là Default Instance.
Mt Instance ca SQL Server 2000 có 4 system databases và mt hay nhiu user
database. Các system databases bao gm:
• Master : Cha tt c nhng thông tin cp h thng (system-level
information) bao gm thông tin v các database khác trong h
thng nh v trí ca các data files, các login account và các thit
đt cu hình h thng ca SQL Server (system configuration
settings).
• Tempdb : Cha tt c nhng table hay stored procedure đc tm
thi to ra trong quá trình làm vic bi user hay do bn thân SQL
Server engine. Các table hay stored procedure này s bin mt khi
khi đng li SQL Server hay khi ta disconnect.
• Model : Database này đóng vai trò nh mt bng km (template)
cho các database khác. Ngha là khi mt user database đc to ra
thì SQL Server s copy toàn b các system objects (tables, stored
procedures...) t Model database sang database mi va to.
• Msdb : Database này đc SQL Server Agent s dng đ hoch
đnh các báo đng và các công vic cn làm (schedule alerts and
jobs).
Cu Trúc Vt Lý Ca Mt SQL Server Database
Mi mt database trong SQL Server đu cha ít nht mt data file chính
(primary), có th có thêm mt hay nhiu data file ph (Secondary) và mt
transaction log file.
• Primary data file (thng có phn m rng .mdf) : đây là file
chính cha data và nhng system tables.
• Secondary data file (thng có phn m rng .ndf) : đây là file
ph thng ch s dng khi database đc phân chia đ cha trên
nhiu da.
• Transaction log file (thng có phn m rng .ldf) : đây là file
ghi li tt c nhng thay đi din ra trong mt database và cha
đy đ thông tin đ có th roll back hay roll forward khi cn.
HC SQL SERVER 2000 14
Data trong SQL Server đc cha thành tng Page 8KB và 8 page liên tc to
thành mt Extent nh hình v di đây:
Trc khi SQL Server mun lu data vào mt table nó cn phi dành riêng mt
khong trng trong data file cho table đó. Nhng khong trng đó chính là các
extents. Có 2 loi Extents: Mixed Extents (loi hn hp) dùng đ cha data
ca nhiu tables trong cùng mt Extent và Uniform Extent (loi thun nht)
dùng đ cha data ca mt table. Ðu tiên SQL Server dành các Page trong
Mixed Extent đ cha data cho mt table sau đó khi data tng trng thì SQL
dành hn mt Uniform Extent cho table đó.
Nguyên Tc Hot Ðng Ca Transaction Log Trong SQL Server
Transaction log file trong SQL Server dùng đ ghi li các thay đi xy ra trong
database. Quá trình này din ra nh sau: đu tiên khi có mt s thay đi data
nh Insert, Update, Delete đc yêu cu t các ng dng, SQL Server s ti
(load) data page tng ng lên memory (vùng b nh này gi là data cache),
sau đó data trong data cache đc thay đi(nhng trang b thay đi còn gi là
dirty-page
). Tip theo mi s thay đi đu đc ghi vào transaction log file cho
nên ngi ta gi là
write-ahead
log. Cui cùng thì mt quá trình gi là Check
Point Process s kim tra và vit tt c nhng transaction đã đc commited
(hoàn tt) vào da cng (flushing the page).
HC SQL SERVER 2000 15
Ngoài Check Point Process nhng dirty-page còn đc đa vào da bi mt Lazy
writer. Ðây là mt anh chàng làm vic âm thm ch thc gic và quét qua phn
data cache theo mt chu k nht đnh sau đó li ng yên ch ln quét ti.
Xin gii thích thêm mt chút v khái nim transaction trong database. Mt
transaction hay mt giao dch là mt lot các hot đng xy ra đc xem nh
mt công vic đn (unit of work) ngha là hoc thành công toàn b hoc không
làm gì c (all or nothing). Sau đây là mt ví d c đin v transaction:
Chúng ta mun chuyn mt s tin $500 t account A sang
account B nh vy công vic này cn làm các bc sau:
1. Tr $500 t account A
2. Cng $500 vào account B
Tuy nhiên vic chuyn tin trên phi đc thc hin di dng mt
transaction ngha là giao dch ch đc
xem là hoàn tt (commited) khi c hai bc trên đu thc hin thành
công. Nu vì mt lý do nào đó ta ch
có th thc hin đc bc 1 (chng hn nh va xong bc 1 thì đin
cúp hay máy b treo) thì xem nh giao
dch không hoàn tt và cn phi đc phc hi li trng thái ban đu
(roll back).
Th thì Check Point Process hot đng nh th nào đ có th đm bo mt
transaction đc thc thi mà không làm "d" database.
HC SQL SERVER 2000 16
Trong hình v trên, mt transaction đc biu din bng mt mi tên. Trc nm
ngang là trc thi gian. Gi s mt Check Point đc đánh du vào thi đim
gia transaction 2 và 3 nh hình v và sau đó s c xãy ra trc khi gp mt
Check point k tip. Nh vy khi SQL Server đc restart nó s da trên nhng
gì ghi trong transaction log file đ phc hi data (xem hình v).
Ðiu đó có ngha là SQL Server s không cn làm gì c đi vi transaction 1 vì ti
thi đim Check point data đã đc lu vào da ri. Trong khi đó transaction 2
và 4 s đc roll forward vì tuy đã đc commited nhng do s c xy ra trc
thi đim check point k tip nên data cha kp lu vào da. Tc là da trên
nhng thông tin đc ghi trên log file SQL Server hoàn toàn có đy đ c s đ
vit vào da cng. Còn transaction 3 và 5 thì cha đc commited (do b down
bt ng) cho nên SQL Server s roll back hai transaction này da trên nhng gì
đc ghi trên log file.
Cu Trúc Logic Ca Mt SQL Server Database
Hu nh mi th trong SQL Server đc t chc thành nhng objects ví d nh
tables, views, stored procedures, indexes, constraints.... Nhng system objects
trong SQL Server thng có bt đu bng ch
sys
hay
sp
. Các objects trên s
đc nghiên cu ln lt trong các bài sau do đó trong phn này chúng ta ch
bàn s qua mt s system object thông dng trong SQL Server database mà
thôi.
HC SQL SERVER 2000 17
Mt s Sytem objects thng dùng:
System Stored Procedure ng dng
Sp_help ['object']
Cung cp thông tin v mt database object (table, view...) hay mt data
type.
Sp_helpdb ['database'] Cung cp thông tin v mt database c th nào đó.
Sp_monitor Cho bit đ bn rn ca SQL Server
Sp_spaceused ['object',
'updateusage' ]
Cung cp thông tin v các khong trng đã đc s dng cho mt object
nào đó
Sp_who ['login'] Cho bit thông tin v mt SQL Server user
Ví d:
sp_helpdb 'Northwind' s cho kt qu có dng nh bng di đây
name db_size owner dbid created status .....
---------------------------------------------------------------------------------------------------
----------------------------- -------
Northwind 3.94 MB sa 6 Aug 6 2000 Status=ONLINE,
Updateability=READ_WRITE, .....
stored procedure
sp_spaceused nh ví d sau
USE Northwind
Go
sp_spaceused 'Customers'
s cho bit thông tin v table Customer:
name rows reserved data index_size unused
------------------------------------- ------------------------------------------
Customers 91 104 KB 24 KB 80 KB 0 KB
To Mt User Database
Chúng ta có th to mt database d dàng dùng SQL Server Enterprise bng
cách right-click lên trên "database" và chn "New Database" nh hình v sau:
HC SQL SERVER 2000 18
Sau đó chúng ta ch vic đánh tên ca database và click OK.
Ngoài ra đôi khi chúng ta cng dùng SQL script đ to mt database. Khi đó ta
phi ch rõ v trí ca primary data file và transaction log file.
Ví d:
USE master
GO
CREATE DATABASE Products
ON
( NAME = prods_dat,
FILENAME = 'c:\program files\microsoft SQL
server\mssql\data\prods.mdf',
SIZE = 4,
MAXSIZE = 10,
FILEGROWTH = 1
)
GO
Trong ví d trên ta to mt database tên là Products vi logical file name là
prods_dat và physical file name là prods.mdf, kích thc ban đu là 4 MB và
data file s t đng tng lên mi ln 1 MB cho ti ti đa là 10 MB. Nu ta không
HC SQL SERVER 2000 19
ch đnh mt transaction log file thì SQL s t đng to ra 1 log file vi kích
thc ban đu là 1 MB.
Lu Ý:
Khi to ra mt database chúng ta cng phi lu ý mt s đim sau: Ði vi các
h thng nh mà đó vn đ tc đ ca server không thuc loi nhy cm thì
chúng ta thng chn các giá tr mc đnh (default) cho Initial size,
Automatically growth file. Nhng trên mt s production server ca các h
thng ln kích thc ca database phi đc ngi DBA c lng trc tùy
theo tm c ca business, và thông thng ngi ta không chn Autogrowth(t
đng tng trng) và Autoshrink(t đng nén). Câu hi đc đt ra đây là vì
sao ta không đ SQL Server chn mt giá tr khi đu cho datafile và sau đó khi
cn thì nó s t đng ni rng ra mà li phi c lng trc? Nguyên nhân là
nu chn Autogrowth (hay Autoshrink) thì chúng ta có th s gp 2 vn đ sau:
• Performance hit: nh hng đáng k đn kh nng làm vic ca
SQL Server. Do nó phi thng xuyên kim tra xem có đ khong
trng cn thit hay không và nu không đ nó s phi m rng
bng cách dành thêm khong trng t da cng và chính quá trình
này s làm chm đi hot đng ca SQL Server.
• Disk fragmentation : Vic m rng trên cng s làm cho data
không đc liên tc mà cha nhiu ni khác nhau trong da cng
điu này cng gây nh hng lên tc đ làm vic ca SQL Server.
Trong các h thng ln ngi ta có th d đoán trc kích thc ca database
bng cách tính toán kích thc ca các tables, đây cng ch là kích thc c
đoán mà thôi (xin xem "Estimating the size of a database" trong SQL Books
Online đ bit thêm v cách tính) và sau đó thng xuyên dùng mt s câu lnh
SQL (thng dùng các câu lnh bt đu bng DBCC .Phn này s đc bàn qua
trong các bài sau) kim tra xem có đ khong trng hay không nu không đ ta
có th chn mt thi đim mà SQL server ít bn rn nht (nh ban đêm hay sau
gi làm vic) đ ni rng data file nh th s không làm nh hng ti
performance ca Server.
Chú ý gi s ta dành sn 2 GB cho datafile, khi dùng Window Explorer đ xem ta
s thy kích thc ca file là 2 GB nhng data thc t có th ch chim vài chc
MB mà thôi.
Nhng Ðim Cn Lu Ý Khi Thit K Mt Database
Trong phm vi bài này chúng ta không th nói sâu v lý thuyt thit k database
mà ch đa ra mt vài li khuyên mà bn nên tuân theo khi thit k.
HC SQL SERVER 2000 20
Trc ht bn phi nm vng v các loi data type. Ví d bn phi bit rõ s
khác bit gia char(10), nchar(10) varchar(10), nvarchar(10). Loi d liu
Char là mt loi string có kích thc c đnh ngha là trong ví d trên nu data
đa vào "This is a really long character string" (ln hn 10 ký t) thì SQL Server
s t đng ct phn đuôi và ta ch còn "This is a". Tng t nu string đa vào
nh hn 10 thì SQL s thêm khong trng vào phía sau cho đ 10 ký t. Ngc
li loi varchar s không thêm các khong trng phía sau khi string đa vào ít
hn 10. Còn loi data bt đu bng ch n cha d liu dng unicode.
Mt lu ý khác là trong SQL Server ta có các loi Integer nh : tinyint,
smallint, int, bigint. Trong đó kích thc tng loi tng ng là 1,2,4,8 bytes.
Ngha là loi smallint tng đng vi Integer và loi int tng đng vi
Long trong VB.
Khi thit k table nên:
• Có ít nht mt ct thuc loi ID dùng đ xác đnh mt record d
dàng.
• Ch cha data ca mt entity (mt thc th)
Trong ví d sau thông tin v Sách và Nhà Xut Bn đc cha trong
cùng mt table
Books
BookID Title Publisher PubState PubCity PubCountry
1 Inside SQL Server 2000 Microsoft Press CA Berkely USA
2 Windows 2000 Server New Riders MA Boston USA
3
Beginning Visual Basic
6.0
Wrox CA
Berkely
USA
Ta nên tách ra thành table Books và table Publisher nh sau:
Books
BookID Title PublisherID
1 Inside SQL Server 2000 P1
2 Windows 2000 Server P2
3 Beginning Visual Basic 6.0 P3
HC SQL SERVER 2000 21
và
Publishers
PublisherID
Publisher PubState PubCity PubCountry
P1
Microsoft Press CA Berkely USA
P2
New Riders MA Boston USA
P3
Wrox CA
Berkely
USA
• Tránh dùng ct có cha NULL và nên luôn có giá tr Default cho
các ct
• Tránh lp li mt giá tr hay ct nào đó
Ví d mt cun sách có th đc vit bi hn mt tác gi và nh th ta
có th dùng mt trong 2 cách sau đ cha data:
Books
BookID Title Authors
1 Inside SQL Server 2000 John Brown
2 Windows 2000 Server
Matthew Bortniker, Rick Johnson
3 Beginning Visual Basic 6.0
Peter Wright, James Moon, John
Brown
hay
Books
BookID Title Author1 Author2 Author3
1 Inside SQL Server 2000 John Brown Null Null
2 Windows 2000 Server
Matthew
Bortniker
Rick Johnson
Null
3
Beginning Visual Basic
6.0
Peter Wright James Moon John Brown
Tuy nhiên vic lp đi lp li ct Author s to nhiu vn đ sau này.
Chng hn nh nu cun sách có nhiu hn 3 tác gi thì chúng ta s gp phin
phc ngay....Trong ví d này ta nên cht ra thành 3 table nh sau:
HC SQL SERVER 2000 22
Books
BookID Title
1 Inside SQL Server 2000
2 Windows 2000 Server
3 Beginning Visual Basic 6.0
Authors
AuthID First Name Last Name
A1
John Brown
A2
Matthew Bortniker
A3
Rick Johnson
A4
Peter Wright
A5
James Moon
AuthorBook
BookID
AuthID
1 A1
2 A2
2 A3
3 A4
3 A5
3 A1
Ngoài ra mt trong nhng điu quan trng là phi bit rõ quan h
(Relationship) gia các table:
• One-to-One Relationships : trong mi quan h này thì mt
hàng bên table A không th liên kt vi hn 1 hàng bên table B và
ngc li.
• One-to-Many Relationships : trong mi quan h này thì mt
hàng bên table A có th liên kt vi nhiu hàng bên table B.
• Many-to-Many Relationships : trong mi quan h này thì mt
hàng bên table A có th liên kt vi nhiu hàng bên table B và mt
hàng bên table B cng có th liên kt vi nhiu hàng bên table A.
Nh ta thy trong ví d trên mt cun sách có th đc vit bi
nhiu tác gi và mt tác gi cng có th vit nhiu cun sách. Do
đó mi quan h gia Books và Authors là quan h Many to Many.
Trong trng hp này ngi ta thng dùng mt table trung gian
đ gii quyt vn đ (table AuthorBook).
HC SQL SERVER 2000 23
Ð có mt database tng đi hoàn ho ngha là thit k sao cho data cha
trong database không tha không thiu bn cn bit thêm v các th thut
Normalization. Tuy nhiên trong phm vi khóa hc này chúng tôi không mun
bàn sâu hn v đ tài này, bn có th xem thêm trong các sách dy lý thuyt c
s d liu.
Tóm li trong bài này chúng ta đã tìm hiu v cu trúc ca mt SQL Server
database và mt s vn đ cn bit khi thit k mt database. Trong bài sau
chúng ta s bàn v Backup và Restore database nh th nào.
HC SQL SERVER 2000 24
Backup And Restore SQL Server
Chin Lc Phc Hi D Liu (Data Restoration Strategy)
Có mt điu mà chúng ta phi chú ý là hu nh bt k database nào cng cn
đc phc hi vào mt lúc nào đó trong sut chu k sng ca nó. Là mt ngi
Database Administrator bn cn phi gim ti đa s ln phi phc hi d liu,
luôn theo dõi, kim tra thng xuyên đ phát hin các trc trc trc khi nó xy
ra. Phi d phòng các bin c có th xy ra và bo đm rng có th nhanh
chóng phc hi d liu trong thi gian sm nht có th đc.
Các dng bin c hay tai ha có th xy ra là:
• Ða cha data file hay Transaction Log File hay system file b mt
• Server b h hng
• Nhng thm ha t nhiên nh bão lt, đng đt, ha hon
• Toàn b server b đánh cp hoc phá hy
• Các thit b dùng đ backup - restore b đánh cp hay h hng
• Nhng li do vô ý ca user nh l tay delete toàn b table chng
hn
• Nhng hành vi mang tính phá hoi ca nhân viên nh c ý đa vào
nhng thông tin sai lc.
• B hack (nu server có kt ni vi internet).
Bn phi t hi khi các vn đ trên xy ra thì bn s làm gì và phi luôn có bin
pháp đ phòng c th cho tng trng hp c th. Ngoài ra bn phi xác đnh
thi gian ti thiu cn phc hi d liu và đa server tr li hot đng bình
thng.
Các Loi Backup
Ð có th hiu các kiu phc hi d liu khác nhau bn phi bit qua các loi
backup trong SQL Server
• Full Database Backups : Copy tt c data files trong mt
database . Tt c nhng user data và database objects nh system
tables, indexes, user-defined tables đu đc backup.
HC SQL SERVER 2000 25
• Differential Database Backups : Copy nhng thay đi trong tt
c data files k t ln full backup gn nht.
• File or File Group Backups : Copy mt data file đn hay mt file
group.
• Differential File or File Group Backups : Tng t nh
differential database backup nhng ch copy nhng thay đi trong
data file đn hay mt file group.
• Transaction Log Backups : Ghi nhn mt cách th t tt c các
transactions cha trong transaction log file k t ln transaction log
backup gn nht. Loi backup này cho phép ta phc hi d liu tr
ngc li vào mt thi đim nào đó trong quá kh mà vn đm
bo tính đng nht (consistent).
Trong lúc backup SQL Server cng copy tt c các hot đng ca database k c
hot đng xy ra trong quá trình backup cho nên ta có th backup trong khi SQL
đang chy mà không cn phi ngng li.
Recovery Models
• Full Recovery Model : Ðây là model cho phép phc hi d liu
vi ít ri ro nht. Nu mt database trong mode này thì tt c
các hot đng không ch insert, update, delete mà k c insert
bng Bulk Insert, hay bcp đu đc log vào transaction log file.
Khi có s c thì ta có th phc hi li d liu ngc tr li ti mt
thi đim trong quá kh. Khi data file b h nu ta có th backup
đc transaction log file thì ta có th phc hi database đn thi
đim transaction gn nht đc commited.
• Bulk-Logged Recovery Model : mode này các hot đng
mang tính hàng lot nh Bulk Insert, bcp, Create Index, WriteText,
UpdateText ch đc log minimum vào transaction log file đ đ
cho bit là các hot đng này có din ra mà không log toàn b chi
tit nh trong Full Recovery Mode. Các hot đng khác nh Insert,
Update, Delete vn đc log đy đ đ dùng cho vic phc hi sau
này.
• Simple Recovery Model : mode này thì Transaction Log File
đc truncate thng xuyên và không cn backup. Vi mode này
bn ch có th phc hi ti thi đim backup gn nht mà không
th phc hi ti mt thi đim trong quá kh.
Mun bit database ca bn đang mode nào bn có th Right-click lên mt
database nào đó trong SQL Server Enterprise Manager chn Properties-
>Options->Recovery