Tải bản đầy đủ (.pdf) (61 trang)

Tài liệu Hoc SQL 2000 ppt

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 (868.21 KB, 61 trang )

HC SQL SERVER 2000 1



MC LC


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

HC SQL SERVER 2000 2

Overview of SQL Server 2000
Ð đc và hiu bài vit này bn phi có kin thc cn bn v SQL và Access Database
Gii Thiu SQL Server 2000
SQL Server 2000 là mt h thng qun lý c s d liu (Relational Database
Management System (RDBMS) ) s dng Transact-SQL đ trao đi d liu gia
Client computer và SQL Server computer. Mt RDBMS bao gm databases,
database engine và 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 2000 đc ti u đ có th chy trên môi trng c s d liu rt
ln (Very Large Database Environment) lên đn Tera-Byte và có th phc v
cùng lúc cho hàng ngàn user. SQL Server 2000 có th kt hp "n ý" vi các
server khác nh Microsoft Internet Information Server (IIS), E-Commerce
Server, Proxy Server....
SQL Server có 7 editions:
• Enterprise : Cha đy đ các đc trng ca SQL Server và có th chy
tt trên h thng lên đn 32 CPUs và 64 GB RAM. Thêm vào đó nó có các


dch v giúp cho vic phân tích d liu rt hiu qu (Analysis Services)
• Standard : Rt thích hp cho các công ty va và nh vì giá thành r hn
nhiu so vi Enterprise Edition, nhng li b gii hn mt s chc nng
cao cp (advanced features) khác, edition này có th chy tt trên h
thng lên đn 4 CPU và 2 GB RAM.
• Personal: đc ti u hóa đ chy trên PC nên có th cài đt trên hu
ht các phiên bn windows k c Windows 98.
• Developer : Có đy đ các tính nng ca Enterprise Edition nhng đc
ch to đc bit nh gii hn s lng ngi kt ni vào Server cùng mt
lúc.... Ðây là edition mà các bn mun hc SQL Server cn có. Chúng ta
s dùng edition này trong sut khóa hc. Edition này có th cài trên
Windows 2000 Professional hay Win NT Workstation.
• Desktop Engine (MSDE): Ðây ch là mt engine chy trên desktop và
không có user interface (giao din). Thích hp cho vic trin khai ng
dng  máy client. Kích thc database b gii hn khong 2 GB.
HC SQL SERVER 2000 3

• Win CE : Dùng cho các ng dng chy trên Windows CE
• Trial: Có các tính nng ca Enterprise Edition, download free, nhng gii
hn thi gian s dng.
Cài Ðt SQL Server 2000 (Installation)
Các bn cn có Developer Edition và ít nht là 64 MB RAM, 500 MB hard disk
đ có th install SQL Server. Bn có th install trên Windows Server hay
Windows XP Professional, Windows 2000 Professional hay NT Workstation nhng
không th install trên Win 98 family.
Vì mt trong nhng đc đim ca các sn phm Microsoft là d install nên chúng
tôi không trình bày chi tit v cách install hay các bc install mà ch trình bày
các đim cn lu ý khi install mà thôi. Nu các bn gp tr ngi trong vic install
thì có th đa lên forum đ hi thêm. Khi install bn cn lu ý các đim sau:
 màn hình th hai bn chn Install Database Server. Sau khi install xong

SQL Server bn có th install thêm Analysis Service nu bn thích.
 màn hình Installation Definition bn chn Server and Client Tools.
Sau đó bn nên chn kiu Custom và chn tt c các b phn ca SQL Server.
Ngoài ra nên chn các giá tr mc đnh (default)
 màn hình Authentication Mode nh chn Mixed Mode . Lu ý vì SQL
Server có th dùng chung ch đ bo mt (security) vi Win NT và cng có th
dùng ch đ bo mt riêng ca nó. Trong Production Server ngi ta thng
dùng Windows Authetication vì đ an toàn cao hn và d dàng cho ngi qun
lý mng và c cho ngi s dng. Ngha là mt khi bn đc chp nhn
(authenticated) kt ni vào domain thì bn có quyn truy cp d liu (access
data) trong SQL Server. Tuy nhiên ta nên chn Mixed Mode đ d dàng cho vic
hc tp.
Sau khi install bn s thy mt icon nm  góc phi bên di màn hình, đây
chính là Service Manager. Bn có th Start, Stop các SQL Server services d
dàng bng cách double-click vào icon này.
Mt chút kin thc v các Version ca SQL Server
SQL Server ca Microsoft đc th trng chp nhn rng rãi k t version 6.5.
Sau đó Microsoft đã ci tin và hu nh vit li mt engine mi cho SQL Server
7.0. Cho nên có th nói t version 6.5 lên version 7.0 là mt bc nhy vt. Có
mt s đc tính ca SQL Server 7.0 không tng thích vi version 6.5. Trong khi
HC SQL SERVER 2000 4

đó t Version 7.0 lên version 8.0 (SQL Server 2000) thì nhng ci tin ch yu là
m rng các tính nng v web và làm cho SQL Server 2000 đáng tin cy hn.
Mt đim đc bit đáng lu ý  version 2000 là Multiple-Instance. Nói cho d
hiu là bn có th install version 2000 chung vi các version trc mà không cn
phi uninstall chúng. Ngha là bn có th chy song song version 6.5 hoc 7.0
vi version 2000 trên cùng mt máy (điu này không th xy ra vi các version
trc đây). Khi đó version c trên máy bn là Default Instance còn version
2000 mi va install s là Named Instance.

Các thành phn quan trng trong SQL Server 2000
SQL Server 2000 đc cu to bi nhiu thành phn nh Relational Database
Engine, Analysis Service và English Query.... Các thành phn này khi phi hp
vi nhau to thành mt gii pháp hoàn chnh giúp cho vic lu tr và phân tích
d liu mt cách d dàng.

Relational Database Engine - Cái lõi ca SQL Server:
Ðây là mt engine có kh nng cha data  các quy mô khác nhau di dng
table và support tt c các kiu kt ni (data connection) thông dng ca
Microsoft nh ActiveX Data Objects (ADO), OLE DB, and Open Database
Connectivity (ODBC). Ngoài ra nó còn có kh nng t điu chnh (tune up) ví d
HC SQL SERVER 2000 5

nh s dng thêm các tài nguyên (resource) ca máy khi cn và tr li tài
nguyên cho h điu hành khi mt user log off.
Replication - C ch to bn sao (Replica):
Gi s bn có mt database dùng đ cha d liu đc các ng dng thng
xuyên cp nht. Mt ngày đp tri bn mun có mt cái database ging y ht
nh th trên mt server khác đ chy báo cáo (report database) (cách làm này
thng dùng đ tránh nh hng đn performance ca server chính). Vn đ là
report server ca bn cng cn phi đc cp nht thng xuyên đ đm bo
tính chính xác ca các báo cáo. Bn không th dùng c ch back up and restore
trong trng hp này. Th thì bn phi làm sao? Lúc đó c ch replication ca
SQL Server s đc s dng đ bo đm cho d liu  2 database đc đng b
(synchronized). Replication s đc bàn k trong bài 12
Data Transformation Service (DTS) - Mt dch v chuyn dch data vô cùng
hiu qu
Nu bn làm vic trong mt công ty ln trong đó data đc cha trong nhiu ni
khác nhau và  các dng khác nhau c th nh cha trong Oracle, DB2 (ca
IBM), SQL Server, Microsoft Access....Bn chc chn s có nhu cu di chuyn

data gia các server này (migrate hay transfer) và không ch di chuyn bn còn
mun đnh dng (format) nó trc khi lu vào database khác, khi đó bn s thy
DTS giúp bn gii quyt công vic trên d dàng nh th nào. DTS s đc bàn
k trong bài 8.
Analysis Service - Mt dch v phân tích d liu rt hay ca Microsoft
D liu (Data) cha trong database s chng có ý ngha gì nhiu nu nh bn
không th ly đc nhng thông tin (Information) b ích t đó. Do đó Microsoft
cung cp cho bn mt công c rt mnh giúp cho vic phân tích d liu tr nên
d dàng và hiu qu bng cách dùng khái nim hình khi nhiu chiu (multi-
dimension cubes) và k thut "đào m d liu" (data mining) s đc chúng tôi
gii thiu trong bài 13.
English Query - Mt dch v mà ngi Vit Nam chc là ít mun dùng :-) (?)
Ðây là mt dch v giúp cho vic query data bng ting Anh "trn" (plain
English).
Meta Data Service:
Dch v này giúp cho vic cha đng và "xào nu" Meta data d dàng hn. Th
thì Meta Data là cái gì vy? Meta data là nhng thông tin mô t v cu trúc ca
data trong database nh data thuc loi nào String hay Integer..., mt ct nào
HC SQL SERVER 2000 6

đó có phi là Primary key hay không....Bi vì nhng thông tin này cng đc
cha trong database nên cng là mt dng data nhng đ phân bit vi data
"chính thng" ngi ta gi nó là Meta Data. Phn này chc là bn phi xem thêm
trong mt thành phn khác ca SQL Server sp gii thiu sau đây là SQL
Server Books Online vì không có bài nào trong lot bài này nói rõ v dch v
này c.
SQL Server Books Online - Quyn Kinh Thánh không th thiu:
Cho dù bn có đc các sách khác nhau dy v SQL server thì bn cng s thy
books online này rt hu dng và không th thiu đc( cho nên Microsoft mi
hào phóng đính kèm theo SQL Server).

SQL Server Tools - Ðây là mt b đ ngh ca ngi qun tr c s d liu
(DBA )
Ái chà nu k chi tit ra thì hi nhiu đy cho nên bn cn đc thêm trong books
online.  đây ngi vit ch k ra mt vài công c thông dng mà thôi.
̇ Ðu tiên phi k đn Enterprise Manager. Ðây là mt công c cho ta
thy toàn cnh h thng c s d liu mt cách rt trc quan. Nó rt hu
ích đc bit cho ngi mi hc và không thông tho lm v SQL.
̇ K đn là Query Analyzer. Ði vi mt DBA gii thì hu nh ch cn
công c này là có th qun lý c mt h thng database mà không cn
đn nhng th khác. Ðây là mt môi trng làm vic khá tt vì ta có th
đánh bt k câu lnh SQL nào và chy ngay lp tc đc bit là nó giúp
cho ta debug my cái stored procedure d dàng.
̇ Công c th ba cn phi k đn là SQL Profiler. Nó có kh nng "chp"
(capture) tt c 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 file rt hu dng trong vic kim soát hot đng
ca SQL Server.
̇ Ngoài mt s công c trc quan nh trên chúng ta cng thng hay dùng
osql và bcp (bulk copy) trong command prompt.
Tóm li trong bài này chúng ta đã do qua mt vòng đ tìm hiu v SQL Server.
Trong bài sau chúng ta cng s tip tc do chi thêm mt chút vi Transact-
SQL trc khi đi sâu vào các đ tài khác.
HC SQL SERVER 2000 7

Transact SQL
Gii Thiu S Lc V Transact SQL (T-SQL)
Transact-SQL là ngôn ng SQL m rng da trên SQL chun ca ISO
(International Organization for Standardization) và ANSI (American National
Standards Institute) đc s dng trong SQL Server khác vi P-SQL (Procedural-
SQL) dùng trong Oracle.
Trong bài này chúng ta s tìm hiu s qua v T-SQL. Chúng đc chia làm 3

nhóm:
Data Definition Language (DDL):
Ðây là nhng lnh dùng đ qun lý các thuc tính ca mt database nh đnh
ngha các hàng hoc ct ca mt table, hay v trí data file ca mt
database...thng có dng

Create
object_Name


Alter
object_Name

• Drop
object_Name

Trong đó
object_Name
có th là mt table, view, stored procedure, indexes...
Ví d:
Lnh Create sau s to ra mt table tên Importers vi 3 ct
CompanyID,CompanyName,Contact
USE Northwind

CREATE TABLE Importers(
CompanyID int NOT NULL,
CompanyName varchar(40) NOT NULL,
Contact varchar(40) NOT NULL
)
Lnh

Alter sau đây cho phép ta thay đi đnh ngha ca mt table nh thêm(hay
bt) mt ct hay mt Constraint...Trong ví d này ta s thêm ct ContactTitle
vào table Importers
USE Northwind
HC SQL SERVER 2000 8


ALTER TABLE Importers
ADD ContactTitle varchar(20) NULL
Lnh
Drop sau đây s hoàn toàn xóa table khi database ngha là c đnh
ngha ca table và data bên trong table đu bin mt (khác vi lnh
Delete ch xóa data nhng table vn tn ti).
USE Northwind

DROP TABLE Importers
Data Control Language (DCL):
Ðây là nhng lnh qun lý các quyn truy cp lên tng object (table, view,
stored procedure...). Thng có dng sau:
• Grant
• Revoke
• Deny
Ví d:
Lnh sau s cho phép user trong Public Role đc quyn Select đi vi table
Customer trong database Northwind (Role là mt khái nim ging nh Windows
Group s đc bàn k trong phn Security)
USE Northwind
GRANT SELECT
ON Customers
TO PUBLIC

Lnh sau s t chi quyn Select đi vi table Customer trong database
Northwind ca các user trong Public Role
USE Northwind
DENY SELECT
ON Customers
TO PUBLIC
Lnh sau s xóa b tác dng ca các quyn đc cho phép hay t chi trc đó
USE Northwind
REVOKE SELECT
ON Customers
TO PUBLIC

HC SQL SERVER 2000 9

Data Manipulation Language (DML):
Ðây là nhng lnh ph bin 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ì phn này khá cn bn nên chúng tôi thit ngh không cn gii thích nhiu.
Chú ý trong lnh
Delete bn có th có ch From hay không đu đc.
Nhng mà chúng ta s chy th các ví d trên  đâu?
Ð chy các câu lnh thí d  trên bn cn s dng và làm quen vi Query
Analyser
HC SQL SERVER 2000 10



Cú Pháp Ca T-SQL:
Phn này chúng ta s bàn v các thành phn to nên cú pháp ca T-SQL
Identifiers
Ðây chính là tên ca các database object. Nó dùng đ xác đnh mt object. (Chú
ý khi nói đn Object trong SQL Server là chúng ta mun đ cp đn table, view,
stored procedure, index.....Vì hu nh mi th trong SQL Server đu đc thit
k theo kiu hng đi tng (object-oriented)). Trong ví d sau TableX,
KeyCol, Description là nhng identifiers
CREATE TABLE TableX
(KeyCol INT PRIMARY KEY, Description NVARCHAR(80))
Có hai loi Identifiers mt loi thông thng (Regular Identifier) và mt loi
gi là Delimited Identifier, loi này cn có du "" hay du [] đ ngn cách.
Loi Delimited đc dùng đi vi các ch trùng vi t khóa ca SQL Server

(reserved keyword) hay các ch có khong trng.
HC SQL SERVER 2000 11

Ví d:
SELECT * FROM [My Table]
WHERE [Order] = 10
Trong ví d trên ch Order trùng vi keyword Order nên cn đt trong du
ngoc vuông [].
Variables (Bin)
Bin trong T-SQL cng có chc nng tng t nh trong các ngôn ng lp trình
khác ngha là cn khai báo trc loi d liu trc khi s dng. Bin đc bt
đu bng du @ (Ði vi các global variable thì có hai du @@)
Ví d:
USE Northwind
DECLARE @EmpIDVar INT
SET @EmpIDVar = 3
SELECT * FROM Employees
WHERE EmployeeID = @EmpIDVar + 1
Functions (Hàm)
Có 2 loi hàm mt loi là built-in và mt loi user-defined
Các hàm Built-In đc chia làm 3 nhóm:
• Rowset Functions : Loi này thng tr v mt object và đc
đi x nh mt table. Ví d nh hàm OPENQUERY s tr v mt
recordset và có th đng v trí ca mt table trong câu lnh Select.
• Aggregate Functions : Loi này làm vic trên mt s giá tr và
tr v mt giá tr đn hay là các giá tr tng. Ví d nh hàm AVG s
tr v giá tr trung bình ca mt ct.
• Scalar Functions : Loi này làm vic trên mt giá tr đn và tr
v mt giá tr đn. Trong loi này li chia làm nhiu loi nh nh
các hàm v toán hc, v thi gian, x lý kiu d liu String....Ví d

nh hàm MONTH('2002-09-30') s tr v tháng 9.
Các hàm User-Defined (đc to ra bi câu lnh CREATE FUNCTION và phn
body thng đc gói trong cp lnh BEGIN...END) cng đc chia làm các
nhóm nh sau:
• Scalar Functions : Loi này cng tr v mt giá tr đn bng câu
lnh RETURNS.
• Table Functions : Loi này tr v mt table
HC SQL SERVER 2000 12

Data Type (Loi D Liu)
Các loi d liu trong SQL Server s đc bàn k trong các bài sau
Expressions
Các Expressions có dng Identifier + Operators (nh +,-,*,/,=...) + Value
Các thành phn Control-Of Flow
Nh BEGIN...END, BREAK, CONTINUE, GOTO, IF...ELSE, RETURN, WHILE.... Xin
xem thêm Books Online đ bit thêm v các thành phn này.
Comments (Chú Thích)
T-SQL dùng du
-- đ đánh du phn chú thích cho câu lnh đn và dùng /*...*/
đ chú thích cho mt nhóm
Thc Thi Các Câu Lnh SQL
Thc thi mt câu lnh đn:
Mt câu lnh SQL đc phân ra thành các thành phn cú pháp nh trên bi mt
parser, sau đó SQL Optimizer (mt b phn quan trng ca SQL Server) s phân
tích và tìm cách thc thi (Execute Plan) ti u nht ví d nh cách nào nhanh và
tn ít tài nguyên ca máy nht... và sau đó SQL Server Engine s thc thi và tr
v kt qu.
Thc Thi mt nhóm lnh (Batches)
Khi thc thi mt nhóm lnh SQL Server s phân tích và tìm bin pháp ti u cho
các câu lnh nh mt câu lnh đn và cha execution plan đã đc biên dch

(compiled) trong b nh sau đó nu nhóm lnh trên đc gi li ln na thì SQL
Server không cn biên dch mà có th thc thi ngay điu này giúp cho mt batch
chy nhanh hn.
Lnh GO
Lnh này ch dùng đ gi mt tín hiu cho SQL Server bit đã kt thúc mt batch
job và yêu cu thc thi. Nó vn không phi là mt lnh trong T-SQL.
Tóm li trong phn này chúng ta đã tìm hiu v Transact- SQL là ngôn ng chính
đ giao tip vi SQL Server. Trong bài sau chúng ta s tip tc bàn v cu trúc
bên trong ca SQL Server .
HC SQL SERVER 2000 13

Design and Implement a SQL Server Database
Cu Trúc Ca SQL Server
Nh đã trình bày  các bài trc mt trong nhng đc đim ca SQL Server
2000 là Multiple-Instance nên khi nói đn mt (SQL) Server nào đó là ta nói
đn mt Instance ca SQL Server 2000, thông thng đó là Default Instance.
Mt Instance ca SQL Server 2000 có 4 system databases và mt hay nhiu user
database. Các system databases bao gm:
• Master : Cha tt c nhng thông tin cp h thng (system-level
information) bao gm thông tin v các database khác trong h
thng nh v trí ca các data files, các login account và các thit
đt cu hình h thng ca SQL Server (system configuration
settings).
• Tempdb : Cha tt c nhng table hay stored procedure đc tm
thi to ra trong quá trình làm vic bi user hay do bn thân SQL
Server engine. Các table hay stored procedure này s bin mt khi
khi đng li SQL Server hay khi ta disconnect.
• Model : Database này đóng vai trò nh mt bng km (template)
cho các database khác. Ngha là khi mt user database đc to ra
thì SQL Server s copy toàn b các system objects (tables, stored

procedures...) t Model database sang database mi va to.
• Msdb : Database này đc SQL Server Agent s dng đ hoch
đnh các báo đng và các công vic cn làm (schedule alerts and
jobs).

Cu Trúc Vt Lý Ca Mt SQL Server Database
Mi mt database trong SQL Server đu cha ít nht mt data file chính
(primary), có th có thêm mt hay nhiu data file ph (Secondary) và mt
transaction log file.
• Primary data file (thng có phn m rng .mdf) : đây là file
chính cha data và nhng system tables.
• Secondary data file (thng có phn m rng .ndf) : đây là file
ph thng ch s dng khi database đc phân chia đ cha trên
nhiu da.
• Transaction log file (thng có phn m rng .ldf) : đây là file
ghi li tt c nhng thay đi din ra trong mt database và cha
đy đ thông tin đ có th roll back hay roll forward khi cn.
HC SQL SERVER 2000 14

Data trong SQL Server đc cha thành tng Page 8KB và 8 page liên tc to
thành mt Extent nh hình v di đây:

Trc khi SQL Server mun lu data vào mt table nó cn phi dành riêng mt
khong trng trong data file cho table đó. Nhng khong trng đó chính là các
extents. Có 2 loi Extents: Mixed Extents (loi hn hp) dùng đ cha data
ca nhiu tables trong cùng mt Extent và Uniform Extent (loi thun nht)
dùng đ cha data ca mt table. Ðu tiên SQL Server dành các Page trong
Mixed Extent đ cha data cho mt table sau đó khi data tng trng thì SQL
dành hn mt Uniform Extent cho table đó.
Nguyên Tc Hot Ðng Ca Transaction Log Trong SQL Server

Transaction log file trong SQL Server dùng đ ghi li các thay đi xy ra trong
database. Quá trình này din ra nh sau: đu tiên khi có mt s thay đi data
nh Insert, Update, Delete đc yêu cu t các ng dng, SQL Server s ti
(load) data page tng ng lên memory (vùng b nh này gi là data cache),
sau đó data trong data cache đc thay đi(nhng trang b thay đi còn gi là
dirty-page
). Tip theo mi s thay đi đu đc ghi vào transaction log file cho
nên ngi ta gi là
write-ahead
log. Cui cùng thì mt quá trình gi là Check
Point Process s kim tra và vit tt c nhng transaction đã đc commited
(hoàn tt) vào da cng (flushing the page).
HC SQL SERVER 2000 15


Ngoài Check Point Process nhng dirty-page còn đc đa vào da bi mt Lazy
writer. Ðây là mt anh chàng làm vic âm thm ch thc gic và quét qua phn
data cache theo mt chu k nht đnh sau đó li ng yên ch ln quét ti.
Xin gii thích thêm mt chút v khái nim transaction trong database. Mt
transaction hay mt giao dch là mt lot các hot đng xy ra đc xem nh
mt công vic đn (unit of work) ngha là hoc thành công toàn b hoc không
làm gì c (all or nothing). Sau đây là mt ví d c đin v transaction:
Chúng ta mun chuyn mt s tin $500 t account A sang
account B nh vy công vic này cn làm các bc sau:
1. Tr $500 t account A
2. Cng $500 vào account B
Tuy nhiên vic chuyn tin trên phi đc thc hin di dng mt
transaction ngha là giao dch ch đc
xem là hoàn tt (commited) khi c hai bc trên đu thc hin thành
công. Nu vì mt lý do nào đó ta ch

có th thc hin đc bc 1 (chng hn nh va xong bc 1 thì đin
cúp hay máy b treo) thì xem nh giao
dch không hoàn tt và cn phi đc phc hi li trng thái ban đu
(roll back).
Th thì Check Point Process hot đng nh th nào đ có th đm bo mt
transaction đc thc thi mà không làm "d" database.
HC SQL SERVER 2000 16


Trong hình v trên, mt transaction đc biu din bng mt mi tên. Trc nm
ngang là trc thi gian. Gi s mt Check Point đc đánh du vào thi đim
gia transaction 2 và 3 nh hình v và sau đó s c xãy ra trc khi gp mt
Check point k tip. Nh vy khi SQL Server đc restart nó s da trên nhng
gì ghi trong transaction log file đ phc hi data (xem hình v).
Ðiu đó có ngha là SQL Server s không cn làm gì c đi vi transaction 1 vì ti
thi đim Check point data đã đc lu vào da ri. Trong khi đó transaction 2
và 4 s đc roll forward vì tuy đã đc commited nhng do s c xy ra trc
thi đim check point k tip nên data cha kp lu vào da. Tc là da trên
nhng thông tin đc ghi trên log file SQL Server hoàn toàn có đy đ c s đ
vit vào da cng. Còn transaction 3 và 5 thì cha đc commited (do b down
bt ng) cho nên SQL Server s roll back hai transaction này da trên nhng gì
đc ghi trên log file.
Cu Trúc Logic Ca Mt SQL Server Database
Hu nh mi th trong SQL Server đc t chc thành nhng objects ví d nh
tables, views, stored procedures, indexes, constraints.... Nhng system objects
trong SQL Server thng có bt đu bng ch
sys
hay
sp
. Các objects trên s

đc nghiên cu ln lt trong các bài sau do đó trong phn này chúng ta ch
bàn s qua mt s system object thông dng trong SQL Server database mà
thôi.
HC SQL SERVER 2000 17

Mt s Sytem objects thng dùng:
System Stored Procedure ng dng
Sp_help ['object']
Cung cp thông tin v mt database object (table, view...) hay mt data
type.
Sp_helpdb ['database'] Cung cp thông tin v mt database c th nào đó.
Sp_monitor Cho bit đ bn rn ca SQL Server
Sp_spaceused ['object',
'updateusage' ]
Cung cp thông tin v các khong trng đã đc s dng cho mt object
nào đó
Sp_who ['login'] Cho bit thông tin v mt SQL Server user
Ví d:
sp_helpdb 'Northwind' s cho kt qu có dng nh bng di đâ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 bit thông tin v table Customer:

name rows reserved data index_size unused
------------------------------------- ------------------------------------------
Customers 91 104 KB 24 KB 80 KB 0 KB

To Mt User Database
Chúng ta có th to mt database d dàng dùng SQL Server Enterprise bng
cách right-click lên trên "database" và chn "New Database" nh hình v sau:
HC SQL SERVER 2000 18


Sau đó chúng ta ch vic đánh tên ca database và click OK.
Ngoài ra đôi khi chúng ta cng dùng SQL script đ to mt database. Khi đó ta
phi ch rõ v trí ca 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 to mt database tên là Products vi logical file name là
prods_dat và physical file name là prods.mdf, kích thc ban đu là 4 MB và
data file s t đng tng lên mi ln 1 MB cho ti ti đa là 10 MB. Nu ta không
HC SQL SERVER 2000 19


ch đnh mt transaction log file thì SQL s t đng to ra 1 log file vi kích
thc ban đu là 1 MB.
Lu Ý:
Khi to ra mt database chúng ta cng phi lu ý mt s đim sau: Ði vi các
h thng nh mà  đó vn đ tc đ ca server không thuc loi nhy cm thì
chúng ta thng chn các giá tr mc đnh (default) cho Initial size,
Automatically growth file. Nhng trên mt s production server ca các h
thng ln kích thc ca database phi đc ngi DBA c lng trc tùy
theo tm c ca business, và thông thng ngi ta không chn Autogrowth(t
đng tng trng) và Autoshrink(t đng nén). Câu hi đc đt ra  đây là vì
sao ta không đ SQL Server chn mt giá tr khi đu cho datafile và sau đó khi
cn thì nó s t đng ni rng ra mà li phi c lng trc? Nguyên nhân là
nu chn Autogrowth (hay Autoshrink) thì chúng ta có th s gp 2 vn đ sau:
• Performance hit: nh hng đáng k đn kh nng làm vic ca
SQL Server. Do nó phi thng xuyên kim tra xem có đ khong
trng cn thit hay không và nu không đ nó s phi m rng
bng cách dành thêm khong trng t da cng và chính quá trình
này s làm chm đi hot đng ca SQL Server.
• Disk fragmentation : Vic m rng trên cng s làm cho data
không đc liên tc mà cha  nhiu ni khác nhau trong da cng
điu này cng gây nh hng lên tc đ làm vic ca SQL Server.
Trong các h thng ln ngi ta có th d đoán trc kích thc ca database
bng cách tính toán kích thc ca các tables, đây cng ch là kích thc c
đoán mà thôi (xin xem "Estimating the size of a database" trong SQL Books
Online đ bit thêm v cách tính) và sau đó thng xuyên dùng mt s câu lnh
SQL (thng dùng các câu lnh bt đu bng DBCC .Phn này s đc bàn qua
trong các bài sau) kim tra xem có đ khong trng hay không nu không đ ta
có th chn mt thi đim mà SQL server ít bn rn nht (nh ban đêm hay sau
gi làm vic) đ ni rng data file nh th s không làm nh hng ti

performance ca Server.
Chú ý gi s ta dành sn 2 GB cho datafile, khi dùng Window Explorer đ xem ta
s thy kích thc ca file là 2 GB nhng data thc t có th ch chim vài chc
MB mà thôi.
Nhng Ðim Cn Lu Ý Khi Thit K Mt Database
Trong phm vi bài này chúng ta không th nói sâu v lý thuyt thit k database
mà ch đa ra mt vài li khuyên mà bn nên tuân theo khi thit k.
HC SQL SERVER 2000 20

Trc ht bn phi nm vng v các loi data type. Ví d bn phi bit rõ s
khác bit gia char(10), nchar(10) varchar(10), nvarchar(10). Loi d liu
Char là mt loi string có kích thc c đnh ngha là trong ví d trên nu data
đa vào "This is a really long character string" (ln hn 10 ký t) thì SQL Server
s t đng ct phn đuôi và ta ch còn "This is a". Tng t nu string đa vào
nh hn 10 thì SQL s thêm khong trng vào phía sau cho đ 10 ký t. Ngc
li loi varchar s không thêm các khong trng phía sau khi string đa vào ít
hn 10. Còn loi data bt đu bng ch n cha d liu dng unicode.
Mt lu ý khác là trong SQL Server ta có các loi Integer nh : tinyint,
smallint, int, bigint. Trong đó kích thc tng loi tng ng là 1,2,4,8 bytes.
Ngha là loi smallint tng đng vi Integer và loi int tng đng vi
Long trong VB.
Khi thit k table nên:
• Có ít nht mt ct thuc loi ID dùng đ xác đnh mt record d
dàng.
• Ch cha data ca mt entity (mt thc th)
Trong ví d sau thông tin v Sách và Nhà Xut Bn đc cha trong
cùng mt 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



HC SQL SERVER 2000 21


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 ct có cha NULL và nên luôn có giá tr Default cho
các ct
• Tránh lp li mt giá tr hay ct nào đó
Ví d mt cun sách có th đc vit bi hn mt tác gi và nh th ta
có th dùng mt trong 2 cách sau đ cha 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 vic lp đi lp li ct Author s to nhiu vn đ sau này.
Chng hn nh nu cun sách có nhiu hn 3 tác gi thì chúng ta s gp phin
phc ngay....Trong ví d này ta nên cht ra thành 3 table nh sau:




HC 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 mt trong nhng điu quan trng là phi bit rõ quan h
(Relationship) gia các table:
• One-to-One Relationships : trong mi quan h này thì mt
hàng bên table A không th liên kt vi hn 1 hàng bên table B và
ngc li.
• One-to-Many Relationships : trong mi quan h này thì mt
hàng bên table A có th liên kt vi nhiu hàng bên table B.
• Many-to-Many Relationships : trong mi quan h này thì mt
hàng bên table A có th liên kt vi nhiu hàng bên table B và mt
hàng bên table B cng có th liên kt vi nhiu hàng bên table A.
Nh ta thy trong ví d trên mt cun sách có th đc vit bi
nhiu tác gi và mt tác gi cng có th vit nhiu cun sách. Do
đó mi quan h gia Books và Authors là quan h Many to Many.
Trong trng hp này ngi ta thng dùng mt table trung gian
đ gii quyt vn đ (table AuthorBook).
HC SQL SERVER 2000 23

Ð có mt database tng đi hoàn ho ngha là thit k sao cho data cha
trong database không tha không thiu bn cn bit thêm v các th thut
Normalization. Tuy nhiên trong phm vi khóa hc này chúng tôi không mun
bàn sâu hn v đ tài này, bn có th xem thêm trong các sách dy lý thuyt c
s d liu.
Tóm li trong bài này chúng ta đã tìm hiu v cu trúc ca mt SQL Server
database và mt s vn đ cn bit khi thit k mt database. Trong bài sau
chúng ta s bàn v Backup và Restore database nh th nào.
HC SQL SERVER 2000 24

Backup And Restore SQL Server
Chin Lc Phc Hi D Liu (Data Restoration Strategy)
Có mt điu mà chúng ta phi chú ý là hu nh bt k database nào cng cn

đc phc hi vào mt lúc nào đó trong sut chu k sng ca nó. Là mt ngi
Database Administrator bn cn phi gim ti đa s ln phi phc hi d liu,
luôn theo dõi, kim tra thng xuyên đ phát hin các trc trc trc khi nó xy
ra. Phi d phòng các bin c có th xy ra và bo đm rng có th nhanh
chóng phc hi d liu trong thi gian sm nht có th đc.
Các dng bin c hay tai ha có th xy ra là:
• Ða cha data file hay Transaction Log File hay system file b mt
• Server b h hng
• Nhng thm ha t nhiên nh bão lt, đng đt, ha hon
• Toàn b server b đánh cp hoc phá hy
• Các thit b dùng đ backup - restore b đánh cp hay h hng
• Nhng li do vô ý ca user nh l tay delete toàn b table chng
hn
• Nhng hành vi mang tính phá hoi ca nhân viên nh c ý đa vào
nhng thông tin sai lc.
• B hack (nu server có kt ni vi internet).
Bn phi t hi khi các vn đ trên xy ra thì bn s làm gì và phi luôn có bin
pháp đ phòng c th cho tng trng hp c th. Ngoài ra bn phi xác đnh
thi gian ti thiu cn phc hi d liu và đa server tr li hot đng bình
thng.
Các Loi Backup
Ð có th hiu các kiu phc hi d liu khác nhau bn phi bit qua các loi
backup trong SQL Server
• Full Database Backups : Copy tt c data files trong mt
database . Tt c nhng user data và database objects nh system
tables, indexes, user-defined tables đu đc backup.
HC SQL SERVER 2000 25

• Differential Database Backups : Copy nhng thay đi trong tt
c data files k t ln full backup gn nht.

• File or File Group Backups : Copy mt data file đn hay mt file
group.
• Differential File or File Group Backups : Tng t nh
differential database backup nhng ch copy nhng thay đi trong
data file đn hay mt file group.
• Transaction Log Backups : Ghi nhn mt cách th t tt c các
transactions cha trong transaction log file k t ln transaction log
backup gn nht. Loi backup này cho phép ta phc hi d liu tr
ngc li vào mt thi đim nào đó trong quá kh mà vn đm
bo tính đng nht (consistent).
Trong lúc backup SQL Server cng copy tt c các hot đng ca database k c
hot đng xy ra trong quá trình backup cho nên ta có th backup trong khi SQL
đang chy mà không cn phi ngng li.
Recovery Models
• Full Recovery Model : Ðây là model cho phép phc hi d liu
vi ít ri ro nht. Nu mt database  trong mode này thì tt c
các hot đng không ch insert, update, delete mà k c insert
bng Bulk Insert, hay bcp đu đc log vào transaction log file.
Khi có s c thì ta có th phc hi li d liu ngc tr li ti mt
thi đim trong quá kh. Khi data file b h nu ta có th backup
đc transaction log file thì ta có th phc hi database đn thi
đim transaction gn nht đc commited.
• Bulk-Logged Recovery Model :  mode này các hot đng
mang tính hàng lot nh Bulk Insert, bcp, Create Index, WriteText,
UpdateText ch đc log minimum vào transaction log file đ đ
cho bit là các hot đng này có din ra mà không log toàn b chi
tit nh trong Full Recovery Mode. Các hot đng khác nh Insert,
Update, Delete vn đc log đy đ đ dùng cho vic phc hi sau
này.
• Simple Recovery Model :  mode này thì Transaction Log File

đc truncate thng xuyên và không cn backup. Vi mode này
bn ch có th phc hi ti thi đim backup gn nht mà không
th phc hi ti mt thi đim trong quá kh.
Mun bit database ca bn đang  mode nào bn có th Right-click lên mt
database nào đó trong SQL Server Enterprise Manager chn Properties-
>Options->Recovery

Tài liệu bạn tìm kiếm đã sẵn sàng tải về

Tải bản đầy đủ ngay
×