Professional Documents
Culture Documents
SQL Server
SQL Server
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 cc ng dng dng qun l d liu v cc b phn khc nhau trong RDBMS. SQL Server 2000 c ti u c th chy trn mi trng c s d liu rt ln (Very Large Database Environment) ln n Tera-Byte v c th phc v cng lc cho hng ngn user. SQL Server 2000 c th kt hp "n " vi cc server khc nh Microsoft Internet Information Server (IIS), E-Commerce Server, Proxy Server.... SQL Server c 7 editions:
Enterprise : Cha y cc c trng ca SQL Server v c th chy tt trn h thng ln n 32 CPUs v 64 GB RAM. Thm vo n c cc dch v gip cho vic phn tch d liu rt hiu qu (Analysis Services) Standard : Rt thch hp cho cc cng ty va v nh v gi thnh r hn nhiu so vi Enterprise Edition, nhng li b gii hn mt s chc nng cao cp (advanced features) khc, edition ny c th chy tt trn h thng ln n 4 CPU v 2 GB RAM. Personal: c ti u ha chy trn PC nn c th ci t trn hu ht cc phin bn windows k c Windows 98. Developer : C y cc tnh nng ca Enterprise Edition nhng c ch to c bit nh gii hn s lng ngi kt ni vo Server cng mt lc.... y l edition m cc bn mun hc SQL Server cn c. Chng ta s dng edition ny trong sut kha hc. Edition ny c th ci trn Windows 2000 Professional hay Win NT Workstation. Desktop Engine (MSDE): y ch l mt engine chy trn desktop v khng c user interface (giao din). Thch hp cho vic trin khai ng dng my client. Kch thc database b gii hn khong 2 GB. Win CE : Dng cho cc ng dng chy trn Windows CE Trial: C cc tnh nng ca Enterprise Edition, download free, nhng gii hn thi gian s dng.
Production Server ngi ta thng dng Windows Authetication v an ton cao hn v d dng cho ngi qun l mng v c cho ngi s dng. Ngha l mt khi bn c chp nhn (authenticated) kt ni vo domain th bn c quyn truy cp d liu (access data) trong SQL Server. Tuy nhin ta nn chn Mixed Mode d dng cho vic hc tp. Sau khi install bn s thy mt icon nm gc phi bn di mn hnh, y chnh l Service Manager. Bn c th Start, Stop cc SQL Server services d dng bng cch double-click vo icon ny.
1.3.3. Data Transformation Service (DTS) - Mt dch v chuyn dch data v cng
hiu qu Nu bn lm vic trong mt cng ty ln trong data c cha trong nhiu ni khc nhau v cc dng khc 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 cc server ny (migrate hay transfer) v khng ch di chuyn bn cn mun nh dng (format) n trc khi lu vo database khc, khi bn s thy DTS gip bn gii quyt cng vic trn d dng nh th no. DTS s c bn k trong bi 8.
1.3.5. English Query - Mt dch v m ngi Vit Nam chc l t mun dng :-) (?)
y l mt dch v gip cho vic query data bng ting Anh "trn" (plain English).
1.3.7. SQL Server Books Online - Quyn Kinh Thnh khng th thiu:
Cho d bn c c cc sch khc nhau dy v SQL server th bn cng s thy books online ny rt hu dng v khng th thiu c( cho nn Microsoft mi ho phng nh km theo SQL Server).
u tin phi k n Enterprise Manager. y l mt cng c cho ta thy ton cnh h thng c s d liu mt cch rt trc quan. N rt hu ch c bit cho ngi mi hc v khng thng tho lm v SQL. K n l Query Analyzer. i vi mt DBA gii th hu nh ch cn cng c ny l c th qun l c mt h thng database m khng cn n nhng th khc. y l mt mi trng lm vic kh tt v ta c th nh bt k cu lnh SQL no v chy ngay lp tc c bit l n gip cho ta debug my ci stored procedure d dng. Cng c th ba cn phi k n l SQL Profiler. N c kh nng "chp" (capture) tt c cc s kin hay hot ng din ra trn mt SQL server v lu li di dng text file rt hu dng trong vic kim sot hot ng ca SQL Server. Ngoi mt s cng c trc quan nh trn chng ta cng thng hay dng osql v bcp (bulk copy) trong command prompt.
Trong object_Name c th l mt table, view, stored procedure, indexes... V d: Lnh Create sau s to ra mt table tn 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 php ta thay i nh ngha ca mt table nh thm(hay bt) mt ct hay mt Constraint...Trong v d ny ta s thm ct ContactTitle vo table Importers USE Northwind ALTER TABLE Importers ADD ContactTitle varchar(20) NULL Lnh Drop sau y s hon ton xa table khi database ngha l c nh ngha ca table v data bn trong table u bin mt (khc vi lnh Delete ch xa data nhng table vn tn ti). USE Northwind DROP TABLE Importers
V d: Lnh sau s cho php user trong Public Role c quyn Select i vi table Customer trong database Northwind (Role l mt khi nim ging nh Windows Group s c bn 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 cc user trong Public Role USE Northwind DENY SELECT ON Customers TO PUBLIC Lnh sau s xa b tc dng ca cc quyn c cho php hay t chi trc USE Northwind REVOKE SELECT ON Customers TO PUBLIC
WHERE TerritoryID = 98101 V phn ny kh cn bn nn chng ti thit ngh khng cn gii thch nhiu. Ch trong lnh Delete bn c th c ch From hay khng u c. Nhng m chng ta s chy th cc v d trn u? chy cc cu lnh th d trn bn cn s dng v lm quen vi Query Analyser
C Php Ca T-SQL: Phn ny chng ta s bn v cc thnh phn to nn c php ca T-SQL Identifiers y chnh l tn ca cc database object. N dng xc nh mt object. (Ch khi ni n Object trong SQL Server l chng 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 thng thng (Regular Identifier) v mt loi gi l Delimited Identifier, loi ny cn c du "" hay du [] ngn cch. Loi Delimited c dng i vi cc ch trng vi t kha ca SQL Server (reserved keyword) hay cc ch c khong trng.
V d: SELECT * FROM [My Table] WHERE [Order] = 10 Trong v d trn ch Order trng vi keyword Order nn cn t trong du ngoc vung []. Variables (Bin) Bin trong T-SQL cng c chc nng tng t nh trong cc ngn ng lp trnh khc ngha l cn khai bo trc loi d liu trc khi s dng. Bin c bt u bng du @ (i vi cc global variable th c hai du @@) V d: USE Northwind DECLARE @EmpIDVar INT SET @EmpIDVar = 3 SELECT * FROM Employees WHERE EmployeeID = @EmpIDVar + 1 Functions (Hm) C 2 loi hm mt loi l built-in v mt loi user-defined Cc hm Built-In c chia lm 3 nhm:
Rowset Functions : Loi ny thng tr v mt object v c i x nh mt table. V d nh hm OPENQUERY s tr v mt recordset v c th ng v tr ca mt table trong cu lnh Select. Aggregate Functions : Loi ny lm vic trn mt s gi tr v tr v mt gi tr n hay l cc gi tr tng. V d nh hm AVG s tr v gi tr trung bnh ca mt ct. Scalar Functions : Loi ny lm vic trn mt gi tr n v tr v mt gi tr n. Trong loi ny li chia lm nhiu loi nh nh cc hm v ton hc, v thi gian, x l kiu d liu String....V d nh hm MONTH('2002-09-30') s tr v thng 9.
Cc hm User-Defined (c to ra bi cu lnh CREATE FUNCTION v phn body thng c gi trong cp lnh BEGIN...END) cng c chia lm cc nhm nh sau:
Scalar Functions : Loi ny cng tr v mt gi tr n bng cu lnh RETURNS. Table Functions : Loi ny tr v mt table
Data Type (Loi D Liu) Cc loi d liu trong SQL Server s c bn k trong cc bi sau Expressions Cc Expressions c dng Identifier + Operators (nh +,-,*,/,=...) + Value Cc thnh phn Control-Of Flow Nh BEGIN...END, BREAK, CONTINUE, GOTO, IF...ELSE, RETURN, WHILE.... Xin xem thm Books Online bit thm v cc thnh phn ny.
Comments (Ch Thch) T-SQL dng du -- nh du phn ch thch cho cu lnh n v dng /*...*/ ch thch cho mt nhm Thc Thi Cc Cu Lnh SQL Thc thi mt cu lnh n: Mt cu lnh SQL c phn ra thnh cc thnh phn c php nh trn bi mt parser, sau SQL Optimizer (mt b phn quan trng ca SQL Server) s phn tch v tm cch thc thi (Execute Plan) ti u nht v d nh cch no nhanh v tn t ti nguyn ca my nht... v sau SQL Server Engine s thc thi v tr v kt qu. Thc Thi mt nhm lnh (Batches) Khi thc thi mt nhm lnh SQL Server s phn tch v tm bin php ti u cho cc cu lnh nh mt cu lnh n v cha execution plan c bin dch (compiled) trong b nh sau nu nhm lnh trn c gi li ln na th SQL Server khng cn bin dch m c th thc thi ngay iu ny gip cho mt batch chy nhanh hn. Lnh GO Lnh ny ch dng gi mt tn hiu cho SQL Server bit kt thc mt batch job v yu cu thc thi. N vn khng phi l mt lnh trong T-SQL.
CREATE PROCEDURE AddNewOrder @OrderID smallint, @ProductName varchar(50), @CustomerName varchar(50), @Result smallint=1 Output AS DECLARE @CustomerID smallint BEGIN TRANSACTION If not Exists(SELECT CustomerID FROM Customers WHERE [Name]=@CustomerName) BEGIN SET @CustomerID= (SELECT Max(CustomerID) FROM Customers) SET @CustomerID=@CustomerID+1 INSERT INTO Customers VALUES(@CustomerID,@CustomerName) If Exists(SELECT OrderID FROM [Orders] WHERE OrderID=@OrderID) BEGIN SELECT @Result=1 ROLLBACK TRANSACTION END Else BEGIN INSERT INTO [Orders](OrderID,ProductName,CustomerID) VALUES(@OrderID,@ProductName,@CustomerID) SELECT @Result=0 COMMIT TRANSACTION
END
If Exists(SELECT OrderID FROM [Orders] WHERE OrderID=@OrderID) BEGIN SELECT @Result=1 ROLLBACK TRANSACTION END Else BEGIN INSERT INTO [Orders](OrderID,ProductName,CustomerID) VALUES(@OrderID,@ProductName,@CustomerID) SELECT @Result=0 COMMIT TRANSACTION END END Print @Result Return 9. Using VB 6 or VB.NET to execute the AddNewOrder stored procedure 10. Using xp_cmdshell extended stored procedure to send a message (xp_cmdshell net send Hello)
Master : Cha tt c nhng thng tin cp h thng (system-level information) bao gm thng tin v cc database khc trong h thng nh v tr ca cc data files, cc login account v cc thit t cu hnh h thng ca SQL Server (system configuration settings). Tempdb : Cha tt c nhng table hay stored procedure c tm thi to ra trong qu trnh lm vic bi user hay do bn thn SQL Server engine. Cc table hay stored procedure ny s bin mt khi khi ng li SQL Server hay khi ta disconnect. Model : Database ny ng vai tr nh mt bng km (template) cho cc database khc. Ngha l khi mt user database c to ra th SQL Server s copy ton b cc system objects (tables, stored procedures...) t Model database sang database mi va to. Msdb : Database ny c SQL Server Agent s dng hoch nh cc bo ng v cc cng vic cn lm (schedule alerts and jobs).
Primary data file (thng c phn m rng .mdf) : y l file chnh 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 phn chia cha trn 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 thng tin c th roll back hay roll forward khi cn.
Data trong SQL Server c cha thnh tng Page 8KB v 8 page lin tc to thnh mt Extent nh hnh v di y:
Trc khi SQL Server mun lu data vo mt table n cn phi dnh ring mt khong trng trong data file cho table . Nhng khong trng chnh l cc extents. C 2 loi Extents: Mixed Extents (loi hn hp) dng cha data ca nhiu tables trong cng mt Extent v Uniform Extent (loi thun nht) dng cha data ca mt table. u tin SQL Server dnh cc Page trong Mixed Extent cha data cho mt table sau khi data tng trng th SQL dnh hn mt Uniform Extent cho table .
Ngoi Check Point Process nhng dirty-page cn c a vo da bi mt Lazy writer. y l mt anh chng lm vic m thm ch thc gic v qut qua phn data cache theo mt chu k nht nh sau li ng yn ch ln qut ti. Xin gii thch thm mt cht v khi nim transaction trong database. Mt transaction hay mt giao dch l mt lot cc hot ng xy ra c xem nh mt cng vic n (unit of work) ngha l hoc thnh cng ton b hoc khng lm g c (all or nothing). Sau y l mt v d c in v transaction: Chng ta mun chuyn mt s tin $500 t account A sang account B nh vy cng vic ny cn lm cc bc sau: 1. Tr $500 t account A 2. Cng $500 vo account B Tuy nhin vic chuyn tin trn phi c thc hin di dng mt transaction ngha l giao dch ch c xem l hon tt (commited) khi c hai bc trn u thc hin thnh cng. Nu v mt l do no ta ch c th thc hin c bc 1 (chng hn nh va xong bc 1 th in cp hay my b treo) th xem nh giao dch khng hon tt v cn phi c phc hi li trng thi ban u (roll back). Th th Check Point Process hot ng nh th no c th m bo mt transaction c thc thi m khng lm "d" database.
Trong hnh v trn, mt transaction c biu din bng mt mi tn. Trc nm ngang l trc thi gian. Gi s mt Check Point c nh du vo thi im gia transaction 2 v 3 nh hnh v v sau s c xy ra trc khi gp mt Check point k tip. Nh vy khi SQL Server c restart n s da trn nhng g ghi trong transaction log file phc hi data (xem hnh v). iu c ngha l SQL Server s khng cn lm g c i vi transaction 1 v ti thi im Check point data c lu vo 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 nn data cha kp lu vo da. Tc l da trn nhng thng tin c ghi trn log file SQL Server hon ton c y c s vit vo da cng. Cn transaction 3 v 5 th cha c commited (do b down bt ng) cho nn SQL Server s roll back hai transaction ny da trn nhng g c ghi trn log file.
Sp_monitor
Sp_spaceused ['object',
'updateusage' ]
Sp_who ['login'] 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 thng tin v table Customer: name rows reserved data index_size unused ------------------------------------- -----------------------------------------Customers 91 104 KB 24 KB 80 KB 0 KB
Sau chng ta ch vic nh tn ca database v click OK. Ngoi ra i khi chng ta cng dng 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 trn ta to mt database tn l Products vi logical file name l prods_dat v physical file name l prods.mdf, kch thc ban u l 4 MB v data file s t ng tng ln mi ln 1 MB cho ti ti a l 10 MB. Nu ta khng ch nh mt transaction log file th SQL s t ng to ra 1 log file vi kch thc ban u l 1 MB. Lu :
Khi to ra mt database chng ta cng phi lu mt s im sau: i vi cc h thng nh m vn tc ca server khng thuc loi nhy cm th chng ta thng chn cc gi tr mc nh (default) cho Initial size, Automatically growth file. Nhng trn mt s production server ca cc h thng ln kch thc ca database phi c ngi DBA c lng trc ty theo tm c ca business, v thng thng ngi ta khng chn Autogrowth(t ng tng trng) v Autoshrink(t ng nn). Cu hi c t ra y l v sao ta khng 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? Nguyn nhn l nu chn Autogrowth (hay Autoshrink) th chng ta c th s gp 2 vn sau:
Performance hit: nh hng ng k n kh nng lm vic ca SQL Server. Do n phi thng xuyn kim tra xem c khong trng cn thit hay khng v nu khng n s phi m rng bng cch dnh thm khong trng t da cng v chnh qu trnh ny s lm chm i hot ng ca SQL Server. Disk fragmentation : Vic m rng trn cng s lm cho data khng c lin tc m cha nhiu ni khc nhau trong da cng iu ny cng gy nh hng ln tc lm vic ca SQL Server.
Trong cc h thng ln ngi ta c th d on trc kch thc ca database bng cch tnh ton kch thc ca cc tables, y cng ch l kch thc c on m thi (xin xem "Estimating the size of a database" trong SQL Books Online bit thm v cch tnh) v sau thng xuyn dng mt s cu lnh SQL (thng dng cc cu lnh bt u bng DBCC .Phn ny s c bn qua trong cc bi sau) kim tra xem c khong trng hay khng nu khng ta c th chn mt thi im m SQL server t bn rn nht (nh ban m hay sau gi lm vic) ni rng data file nh th s khng lm nh hng ti performance ca Server. Ch gi s ta dnh sn 2 GB cho datafile, khi dng Window Explorer xem ta s thy kch thc ca file l 2 GB nhng data thc t c th ch chim vi chc MB m thi.
C t nht mt ct thuc loi ID dng xc nh mt record d dng. Ch cha data ca mt entity (mt thc th) Trong v d sau thng tin v Sch v Nh Xut Bn c cha trong cng mt table Books BookID Title Publisher PubState PubCity PubCountry
1 2 3
Inside SQL Server 2000 Microsoft Press Windows 2000 Server Beginning Visual Basic 6.0 New Riders Wrox
CA MA CA
Ta nn tch ra thnh table Books v table Publisher nh sau: Books BookID 1 2 3 v Publishers PublisherID Publisher P1 P2 P3 Microsoft Press New Riders Wrox PubState CA MA CA PubCity Berkely Boston Berkely PubCountry USA USA USA Title Inside SQL Server 2000 Windows 2000 Server Beginning Visual Basic 6.0 PublisherID P1 P2 P3
V d mt cun sch c th c vit bi hn mt tc gi v nh th ta c th dng mt trong 2 cch sau cha data: Books BookID 1 2 3 hay Books BookID Title 1 2 3 Author1 Matthew Bortniker Peter Wright Author2 Null Rick Johnson James Moon Author3 Null Null John Brown Title Inside SQL Server 2000 Windows 2000 Server Beginning Visual Basic 6.0 Authors John Brown Matthew Bortniker, Rick Johnson Peter Wright, James Moon, John Brown
Inside SQL Server 2000 John Brown Windows 2000 Server Beginning Visual Basic 6.0
Tuy nhin vic lp i lp li ct Author s to nhiu vn sau ny. Chng hn nh nu cun sch c nhiu hn 3 tc gi th chng ta s gp phin phc ngay....Trong v d ny ta nn cht ra thnh 3 table nh sau: Books BookID 1 2 3 Title Inside SQL Server 2000 Windows 2000 Server Beginning Visual Basic 6.0 Authors AuthID A1 A2 A3 A4 A5 First Name John Matthew Rick Peter James AuthorBook BookID 1 2 2 3 3 3 AuthID A1 A2 A3 A4 A5 A1 Last Name Brown Bortniker Johnson Wright Moon
Ngoi ra mt trong nhng iu quan trng l phi bit r quan h (Relationship) gia cc table:
One-to-One Relationships : trong mi quan h ny th mt hng bn table A khng th lin kt vi hn 1 hng bn table B v ngc li. One-to-Many Relationships : trong mi quan h ny th mt hng bn table A c th lin kt vi nhiu hng bn table B. Many-to-Many Relationships : trong mi quan h ny th mt hng bn table A c th lin kt vi nhiu hng bn table B v mt hng bn table B cng c th lin kt vi nhiu hng bn table A. Nh ta thy trong v d trn mt cun sch c th c vit bi nhiu tc gi v mt tc gi cng c th vit nhiu cun sch. Do mi quan h gia Books v Authors l quan h Many to Many. Trong trng hp ny ngi ta thng dng mt table trung gian gii quyt vn (table AuthorBook).
c mt database tng i hon ho ngha l thit k sao cho data cha trong database khng tha khng thiu bn cn bit thm v cc th thut Normalization. Tuy nhin trong phm vi kha hc ny chng ti khng mun bn su hn v ti ny, bn c th xem thm trong cc sch dy l thuyt c s d liu.
a cha data file hay Transaction Log File hay system file b mt Server b h hng Nhng thm ha t nhin nh bo lt, ng t, ha hon Ton b server b nh cp hoc ph hy Cc thit b dng backup - restore b nh cp hay h hng Nhng li do v ca user nh l tay delete ton b table chng hn Nhng hnh vi mang tnh ph hoi ca nhn vin nh c a vo nhng thng tin sai lc. B hack (nu server c kt ni vi internet).
Bn phi t hi khi cc vn trn xy ra th bn s lm g v phi lun c bin php phng c th cho tng trng hp c th. Ngoi ra bn phi xc nh thi gian ti thiu cn phc hi d liu v a server tr li hot ng bnh thng.
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. 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 cch th t tt c cc transactions cha trong transaction log file k t ln transaction log backup gn nht. Loi backup ny cho php ta phc hi d liu tr ngc li vo mt thi im no trong qu kh m vn m bo tnh ng nht (consistent).
Trong lc backup SQL Server cng copy tt c cc hot ng ca database k c hot ng xy ra trong qu trnh backup cho nn ta c th backup trong khi SQL ang chy m khng cn phi ngng li.
Full Recovery Model : y l model cho php phc hi d liu vi t ri ro nht. Nu mt database trong mode ny th tt c cc hot ng khng ch insert, update, delete m k c insert bng Bulk Insert, hay bcp u c log vo 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 ny cc hot ng mang tnh hng lot nh Bulk Insert, bcp, Create Index, WriteText, UpdateText ch c log minimum vo transaction log file cho bit l cc hot ng ny c din ra m khng log ton b chi tit nh trong Full Recovery Mode. Cc hot ng khc nh Insert, Update, Delete vn c log y dng cho vic phc hi sau ny. Simple Recovery Model : mode ny th Transaction Log File c truncate thng xuyn v khng cn backup. Vi mode ny bn ch c th phc hi ti thi im backup gn nht m khng th phc hi ti mt thi im trong qu kh.
Mun bit database ca bn ang mode no bn c th Right-click ln mt database no trong SQL Server Enterprise Manager chn Properties->Options->Recovery Tuy nhin c th ti y bn cm thy rt kh hiu v nhng iu trnh by trn. Chng ta hy dng mt v d sau lm r vn . V d: Chng ta c mt database c p dng chin lc backup nh hnh v sau:
Trong v d ny ta schedule mt Full Database Backup vo ngy Ch Nht v Differential Backup vo cc ngy th Ba v Th Nm. Transaction Log Backup c schedule hng ngy. Vo mt ngy Th Su "en ti" mt s c xy ra l a cha data file ca database b h v l mt DBA bn c yu cu phi phc hi d liu v a database tr li hot ng bnh thng. Bn phi lm sao? Trc ht bn phi backup ngay Transaction Log File (Trong v d ny Transaction Log File c cha trong mt a khc vi a cha Data File nn khng b h v vn cn hot ng). Ngi ta cn gi file backup trong trng hp ny l " the tail of the log" (ci ui). Nu Log File c cha trn cng mt a vi Data file th bn c th s khng backup c "ci ui" v nh vy bn phi dng n log file backup gn nht. Khi backup "ci ui" ny bn cn phi dng option NO_TRUNCATE bi v thng thng cc Transaction Log Backup s truncate(xo) nhng phn khng cn dng n trong transaction log file, l nhng transaction c commited v c vit vo database (cn gi l inactive portion of the transaction log) gim kch thc ca log file. Tuy nhin khi backup phn ui khng c truncate m bo tnh consistent (nht qun) ca database.
K n bn phi restore database t Full Backup File ca ngy Ch Nht. N s lm 2 chuyn : copy data, log, index... t a backup vo Data Files v sau s ln lt thc thi cc transaction trong transaction log. Lu ta phi dng option WITH NORECOVERY trong trng hp ny (tc l option th 2 "Leave database nonoperational but able to restore additional transaction logs" trong Enterprise Manager). Ngha l cc transaction cha hon tt (incomplete transaction) s khng c roll back. Nh vy database lc ny s trong tnh trng inconsistent v khng th dng c. Nu ta chn WITH RECOVERY (hay "Leave database operational. No additional transaction logs can be restored " trong Enterprise Manager) th cc incomplete transaction s c roll back v database trng thi consistent nhng ta khng th no restore cc transaction log backup c na. Tip theo bn phi restore Differential Backup ca ngy Th Nm. Sau ln lt restore cc Transaction Log Backup k t sau ln Differential Backup cui cng ngha l restore Transaction Log Backup ca ngy Th Nm v "Ci ui". Nh vy ta c th phc hi data tr v trng thi trc khi bin c xy ra. Qu trnh ny gi l Database Recovery. Cng xin lm r cch dng t Database Restoration v Database Recovery trong SQL Server. Hai t ny nu dch ra ting Vit u c ngha l phc hi c s d liu nhng khi c sch ting Anh phi cn thn v n c ngha hi khc nhau. Nh trong v d trn Khi ta restore database t mt file backup ngha l ch n gin ti to li database t nhng file backup v thc thi li nhng transaction c commit nhng database c th trong trng thi inconsistent v khng s dng c. Nhng khi ni n recover ngha l ta khng ch phc hi li data m cn bo m cho n trng thi consistent v s dng c (usable). C th bn s hi consistent l th no? Phn ny s c ni r trong bi sau v Data Integrity. Nhng cng xin dng mt v d n gin gii thch. Trong v d v th no l mt transaction bi 3 : Gi s s tin $500 c tr khi account A nhng li khng c cng vo account B v nu database khng c qu trnh khi phc d liu t ng (automatic recovery process) ca SQL rollback th n s trng thi inconsistent. Nu database trng thi ging nh trc khi tr tin hoc sau khi cng $500 thnh cng vo account B th gi l consistent. Cho nn vic backup Transaction Log File s gip cho vic recovery data ti bt k thi im no trong qu kh. i vi Simple Recovery Model ta ch c th recover ti ln backup gn nht m thi. Nh vy khi restore database ta c th chn option WITH RECOVERY roll back cc transaction cha c commited v database c th hot ng bnh thng nhng ta khng th restore thm backup file no na, thng option ny c chn khi restore file backup cui cng trong chui backup. Nu chn option WITH NORECOVERY cc transaction cha c commited s khng c roll back do SQL Server s khng cho php ta s dng database nhng ta c th tip tc restore cc file backup k tip, thng option ny c chn khi sau ta cn phi restore cc file backup khc. Khng l ch c th chn mt trong hai option trn m thi hay sao? Khng hon ton nh vy ta c th chn mt option trung lp hn l option WITH STANDBY (tc l option 3 "Leave database readonly and able to restore additional transaction logs" trong Enterprise Manager). Vi option ny ta s c lun c tnh ca hai option trn : cc incomplete transaction s c roll back m bo database consistent v c th s dng c nhng ch di dng Read-only m thi, ng thi sau ta c th tip tc restore cc file backup cn li (SQL Server s log cc transaction c roll back trong undo log file v khi ta restore backup file k tip SQL Server s tr li trng thi no recovery t nhng g ghi trn undo file). Ngi ta dng option ny khi mun restore database tr li mt thi im no (a point in time) nhng khng r l c phi l thi im m h mun khng, cho nn h s restore tng backup file dng Standby v kim chng mt s data xem c phi l thi im m h mun restore hay khng (chng hn nh trc khi b delete hay trc khi mt transaction no c thc thi) trc khi chuyn sang Recovery option.
Thut Ng
Gii Thch
Backup
Qu trnh copy ton b hay mt phn ca database, transaction log, file hay file group hnh thnh mt backup cha trn backup media (tape or disk) bng cch s dng mt backup device (tape drive name hay physical file
Mt file vt l (nh C:\SQLBackups\Full.bak) hay tape drive c th (nh \\.\Tape0) dng record mt back media. File cha mt backup set
Disk hay tape c s dng cha mt backup set. Backup media c th cha nhiu backup sets (v d nh 2000 backups v t nhiu Windows 2000 backups). Mt b backup t mt ln backup n c cha trn backup media.
Chng ta c th to mt backup device c nh (permanent) hay to ra mt backup file mi cho mi ln backup. Thng thng chng ta s to mt backup device c nh c th dng i dng li c bit cho vic t ng ha cng vic backup. to mt backup device dng Enterprise Manager bn chn Management->Backup ri Right-click->New Backup Device. Ngoi ra bn c th dng sp_addumpdevice system stored procedure nh v d sau: USE Master Go Sp_addumpdevice 'disk' , 'FullBackupDevice' , 'E:\SQLBackups\Full.bak' backup database bn c th dng Backup Wizard hoc click ln trn database mun backup sau Right-click->All Tasks->Backup Database... s hin ra window nh hnh v sau:
Sau da ty theo yu cu ca database m chn cc option thch hp. Ta c th schedule cho SQL Server backup nh k.
Nu bn restore t mt instance khc ca SQL Server hay t mt server khc bn c chn From device option v chn backup device (file backup) tng ng . Lu nu bn mun overwrite database c sn vi data c backup bn c th chn option Force restore over existing database nh hnh v sau:
Bn c th chn leave database operational hay nonoperational ty theo trng hp nh gii thch trn.
Bi 5: Data Integrity and Advanced Query Technique Ni n Data Integrity l ta ni n tnh ton vn ca mt database hay ni mt cch khc l data cha trong database phi chnh xc v ng tin cy. Nu data cha trong database khng chnh xc ta ni database mt tnh ton vn (lost data integrity). Trong bi ny chng ta s bn qua cc phng php gi cho database c ton vn.
Data Type : Data type cng c th m bo tnh ton vn ca data v d bn khai bo data type ca mt ct l Integer th bn khng th a gi tr thuc dng String vo c. Not Null Definitions : Null l mt loi gi tr c bit, n khng tng ng vi zero, blank hay empty string " " m c ngha l khng bit (unknown) hay cha c nh ngha (undefined). Khi thit k database ta nn lun cn thn trong vic cho php mt ct c Null hay Not Null v vic cha Null data c th lm cho mt s ng dng vn khng xa l null data k lng b "t". Default Definitions : Nu mt ct c cho mt gi tr default th khi bn khng a vo mt gi tr c th no th SQL Server s dng gi tr mc nh ny. Bn phi dng Default i vi Not Null definition. Identity Properties : Data thuc dng ID s m bo tnh duy nht ca data trong table. Constraints : y s l phn m ta o su trong bi ny. Constraint tm dch l nhng rng buc m ta dng m bo tnh ton vn ca data. Constraints l nhng quy lut m ta p t ln mt ct m bo tnh chnh xc ca d liu c nhp vo. Rules : y l mt object mang tnh backward-compatible ch yu tng thch vi cc version trc y ca SQL Server. Rules tng ng vi CHECK Constraint trong SQL Server 2000 nhng ngi ta c xu hng s dng CHECK Constraint v n chnh xc hn v c th t nhiu Constraints ln mt ct trong khi ch c mt rule cho mt ct m thi. Ch rule l mt object ring v sau lin kt vi mt ct no ca table trong khi CHECK constraint l mt thuc tnh ca table nn c th c to ra vi lnh CREATE TABLE. Triggers : Mt loi stored procedure c bit c thc thi mt cch t ng khi mt table c Update, Insert, hay Delete. V d ta mun khi mt mn hng c bn ra th tng s hng ha trong kho phi c gim xung (-1) chng hn khi ta c th dng trigger m bo chuyn . Triggers s c bn k trong cc bi sau. Indexes : s c bn n trong bi ni v Indexes.
5.2. Constraints
Constraints l nhng thuc tnh (property) m ta p t ln mt table hay mt ct trnh vic lu d liu khng chnh xc vo database (invalid data). Tht ra NOT NULL hay DEFAULT cng c xem l mt dng constraint nhng chng ta khng bao gm hai loi ny y m ch trnh by 4 loi constraints l Primary Key Constraint, Unique Constraint, Foreign Key Constraint v Check Constraint. Primary Key Constraint: Mt table thng c mt hay nhiu ct c gi tr mang tnh duy nht xc nh mt hng bt k trong table. Ta thng gi l Primary Key v c to ra khi ta Create hay Alter mt table vi Primary Key Constraint. Mt table ch c th c mt Primary Key constraint. C th c nhiu ct tham gia vo vic to nn mt Primary Key, cc ct ny khng th cha Null v gi tr trong cc ct thnh vin c th trng nhau nhng gi tr ca tt c cc ct to nn Primary Key phi mang tnh duy nht.
Khi mt Primary Key c to ra mt Unique Index s c t ng to ra duy tr tnh duy nht. Nu trong table cha c Clustered Index th mt Unique + Clustered Index s c to ra. C th to ra Primary Key Constraints nh sau: CREATE TABLE Table1 (Col1 INT PRIMARY KEY, Col2 VARCHAR(30) ) hay CREATE TABLE Table1 (Col1 INT, Col2 VARCHAR(30), CONSTRAINT table_pk PRIMARY KEY (Col1) ) Unique Constraint Bn c th to Unique Constraint m bo gi tr ca mt ct no khng b trng lp. Tuy Unique Constraint v Primary Key Constraint u m bo tnh duy nht nhng bn nn dng Unique Constraint trong nhng trng hp sau:
Nu mt ct (hay mt s kt hp gia nhiu ct) khng phi l primary key. Nn nh ch c mt Primary Key Constraint trong mt table trong khi ta c th c nhiu Unique Constraint trn mt table. Nu mt ct cho php cha Null. Unique constraint c th p t ln mt ct cha gi tr Null trong khi primary key constraint th khng.
Cch to ra Unique Constraint cng tng t nh Primary Key Constraint ch vic thay ch Primary Key thnh Unique. SQL Server s t ng to ra mt non-clustered unique index khi ta to mt Unique Constraint. Foreign Key Constraint Foreign Key l mt ct hay mt s kt hp ca nhiu ct c s dng p t mi lin kt data gia hai table. Foreign key ca mt table s gi gi tr ca Primary key ca mt table khc v chng ta c th to ra nhiu Foreign key trong mt table. Foreign key c th reference (tham chiu) vo Primary Key hay ct c Unique Constraints. Foreign key c th cha Null. Mc d mc ch chnh ca Foreign Key Constraint l kim sot data cha trong table c Foreign key (tc table con) nhng thc cht n cng kim sot lun c data trong table cha Primary key (tc table cha). V d nu ta delete data trong table cha th data trong table con tr nn "m ci" (orphan) v khng th reference ngc v table cha. Do Foreign Key constraint s m bo iu khng xy ra. Nu bn mun delete data trong table cha th trc ht bn phi drop hay disable Foreign key trong table con trc. C th to ra Foreign Key Constraints nh sau: CREATE TABLE Table1 (Col1 INT PRIMARY KEY, Col2 INT REFERENCES Employees(EmployeeID) ) hay
CREATE TABLE Table1 (Col1 INT PRIMARY KEY, Col2 INT, CONSTRAINT col2_fk FOREIGN KEY (Col2) REFERENCES Employees (EmployeeID) ) i khi chng ta cng cn Disable Foreign Key Constraint trong trng hp:
Insert hay Update: Nu data insert vo s vi phm nhng rng buc c sn (violate constraint) hay constraint ca ta ch mun p dng cho data hin thi m thi ch khng phi data s insert. Tin hnh qu trnh replicate. Nu khng disable Foreign Key Constraint khi replicate data th c th cn tr qu trnh copy data t source table ti destination table mt cch khng cn thit.
Check Constraint Check Constraint dng gii hn hay kim sot gi tr c php insert vo mt ct. Check Constraint ging Foreign Key Constraint ch n kim sot gi tr a vo mt ct nhng khc ch Foreign Key Constraint da trn gi tr table cha cho php mt gi tr c chp nhn hay khng trong khi Check Constraint da trn mt biu thc logic (logic expression) kim tra xem mt gi tr c hp l khng. V d ta c th p t mt Check Constraint ln ct salary ch chp nhn tin lng t $15000 n $100000/nm. Ta c th to ra nhiu Check Constraint trn mt ct. Ngoi ra ta c th to mt Check Constraint trn nhiu ct bng cch to ra Check Constraint mc table (table level). C th to ra Check Constraint nh sau: CREATE TABLE Table1 (Col1 INT PRIMARY KEY, Col2 INT CONSTRAINT limit_amount CHECK (Col2 BETWEEN 0 AND 1000), Col3 VARCHAR(30) ) Trong v d ny ta gii hn gi tr chp nhn c ca ct Col2 t 0 n 1000. V d sau s to ra mt Check Constraint ging nh trn nhng table level: CREATE TABLE Table1 (Col1 INT PRIMARY KEY, Col2 INT, Col3 VARCHAR(30), CONSTRAINT limit_amount CHECK (Col2 BETWEEN 0 AND 1000) ) Tng t nh Foreign Key Constraint i khi ta cng cn disable Check Constraint trong trng hp Insert hay Update m vic kim sot tnh hp l ca data khng p dng cho data hin ti. Trng hp th hai l replication. Mun xem hay to ra Constraint bng Enterprise Manager th lm nh sau: Click ln trn mt table no v chn Design Table-> Click vo icon bn phi "Manage Constraints..."
Distinct : Khi c keyword ny vo th s cho kt qu cc ct khng trng nhau. V d trong Orders table ca Norwind database (database mu di km vi SQL Server) cha gi tr trng lp (duplicate value) trong ct ShipCity. Nu ta mun select mt danh sch ShipCity trong mi city ch xut hin mt ln trong kt qu nhn c ta dng nh sau: SELECT DISTINCT ShipCity, ShipRegion FROM Orders ORDER BY ShipCity
Top n : Nu ta mun select n hng u tin m thi ta c th dng Top keyword. Nu c thm ORDER BY th kt qu s c order trc sau mi select. Chng ta cng c th select s hng da trn phn trm bng cch thm Keyword Percent vo. V d sau s select 10 hng u tin theo th t: SELECT DISTINCT TOP 10 ShipCity, ShipRegion FROM Orders ORDER BY ShipCity
As : i khi chng ta mun cho SELECT statement d c hn mt cht ta c th dng mt alias (tc l t thay th hay t vit tt) vi keyword As hay khng c keyword As: table_name As table_alias hay table_name table_alias. V d: USE pubs SELECT p.pub_id, p.pub_name AS PubName FROM publishers AS p
Ngoi ra trong Select list ta c th select di dng mt expression nh sau: SELECT FirstName + ' ' + LastName AS "Employee Name", IDENTITYCOL AS "Employee ID", HomePhone,
Region FROM Northwind.dbo.Employees ORDER BY LastName, FirstName ASC Trong v d trn ta select ct "Employee Name" l sn phm ghp li ca ct FirstName v LastName c cch nhau bng mt khong trng. Mt gi tr thuc loi identity lm ct "Employee ID". Kt qu s c sp theo th t t nh ti ln (ASC) (cn DESC l t ln ti nh) trong ct LastName c sp trc ri mi ti ct FirstName. The INTO Clause INTO Clause cho php ta select data t mt hay nhiu table sau kt qu s c insert vo mt table mi. Table ny c to ra do kt qu ca cu lnh SELECT INTO. V d: SELECT FirstName, LastName INTO EmployeeNames FROM Employers Cu lnh tn s to ra mt table mi c tn l EmployeeNames vi 2 ct l FirstName v LastName sau kt qu select c t table Employers s c insert vo table mi ny. Nu table EmployeeNames tn ti SQL Server s bo li. Cu lnh ny thng hay c s dng select mt lng data ln t nhiu table khc nhau vo mt table mi (thng dng cho mc ch tm thi (temporary table)) m khi phi thc thi cu lnh Insert nhiu ln. Mt cch khc cng select data t mt hay nhiu table v insert vo mt table khc l dng "Insert Into...Select...". Nhng cu lnh ny khng to ra mt table mi. Ngha l ta table phi tn ti trc. V d: INSERT INTO EmployeeNames SELECT FirstName, LastName FROM Employers Ch l khng c ch "Value" trong cu Insert ny. The GROUP BY and HAVING Clauses GROUP BY dng to ra cc gi tr tng (aggregate values) cho tng hng trong kt qu select c. Ch c mt hng cho tng gi tr ring bit (distinct) ca tng ct. Cc ct c select u phi nm trong GROUP BY Clause. Hy xem v d phc tp sau: SELECT OrdD1.OrderID AS OrderID, SUM(OrdD1.Quantity) AS "Units Sold", SUM(OrdD1.UnitPrice * OrdD1.Quantity) AS Revenue FROM [Order Details] AS OrdD1 WHERE OrdD1.OrderID in (SELECT DISTINCT OrdD2.OrderID FROM [Order Details] AS OrdD2 WHERE OrdD2.UnitPrice > $100) GROUP BY OrdD1.OrderID HAVING SUM(OrdD1.Quantity) > 100 Trong v d trn u tin ta select nhng order ring bit (distinct) t Order Details table vi gi > 100. Sau tip tc select OrderID, "Units Sold", Revenue t kt qu trn trong "Units Sold" v Revenue l nhng aggregate columns (cho gi tr tng mt ct ca nhng hng c cng OrderID). HAVING Clause ng vai tr nh mt filter dng lc li cc gi tr cn select m thi. HAVING Clause thng i chung vi GROUP BY mc d c th xut hin ring l. UNION
Uninon keyword c nhim v ghp ni kt qu ca 2 hay nhiu queries li thnh mt kt qu. V d: Gi s c table1(ColumnA varchar(10), ColumnB int) v table2(ColumnC varchar(10), ColumnD int). Ta mun select data t table1 v ghp vi data t table2 to thnh mt kt qu duy nht ta lm nh sau: SELECT * FROM Table1 UNION ALL SELECT * FROM Table2 Nu khng c keyword ALL th nhng hng ging nhau t 2 table s ch xut hin mt ln trong kt qu. Cn khi dng ALL th cc hng trong 2 table u c trong kt qu bt chp vic lp li. Khi Dng Union phi ch hai chuyn: s ct select 2 queries phi bng nhau v data type ca cc ct tng ng phi compatible (tng thch).
Th t t tri sang phi: Inner Join, Left Outer Join, Right Outer Join, Full Outer Join Inner Joins Dng Inner Join select data t 2 hay nhiu tables trong gi tr ca cc ct c join phi xut hin c 2 tables tc l phn gch cho trn hnh. V d: SELECT t.Title, p.Pub_name FROM Publishers AS p INNER JOIN Titles AS t ON p.Pub_id = t.Pub_id ORDER BY Title ASC Left Outer Joins Dng Left Outer Join select data t 2 hay nhiu tables trong tt c ct bn table th nht v khng tn ti bn table th hai s c select cng vi cc gi tr ca cc ct c inner join. S ct select c s bng vi s ct ca table th nht. Tc l phn t mu trn hnh. V d: USE Pubs SELECT a.Au_fname, a.Au_lname, p.Pub_name FROM Authors a LEFT OUTER JOIN Publishers p ON a.City = p.City ORDER BY p.Pub_name ASC, a.Au_lname ASC, a.Au_fname ASC Right Outer Joins
Dng Right Outer Join select data t 2 hay nhiu tables trong tt c ct bn table th hai v khng tn ti bn table th nht s c select cng vi cc gi tr ca cc ct c inner join. S ct select c s bng vi s ct ca table th hai. Tc l phn t mu trn hnh. V d: USE Pubs SELECT a.Au_fname, a.Au_lname, p.Pub_name FROM Authors a RIGHT OUTER JOIN Publishers p ON a.City = p.City ORDER BY p.Pub_name ASC, a.Au_lname ASC, a.Au_fname ASC Full Outer Joins Dng Full Outer Join select data t 2 hay nhiu tables trong tt c ct bn table th nht v th hai u c chn cc gi tr bn hai table bng nhau th ch ly mt ln. Tc l phn t mu trn hnh. V d: USE Pubs SELECT a.Au_fname, a.Au_lname, p.Pub_name FROM Authors a FULL OUTER JOIN Publishers p ON a.City = p.City ORDER BY p.Pub_name ASC, a.Au_lname ASC, a.Au_fname ASC Cross Joins Dng Cross Join ghp data t hai table trong s hng thu c bng vi s hng ca table th nht nhn vi s hng ca table th hai. V d: USE pubs SELECT au_fname, au_lname, pub_name FROM authors CROSS JOIN publishers WHERE authors.city = publishers.city ORDER BY au_lname DESC l trong cu lnh ny khng c keyword "On". Mun hiu r hn v cc loi join bn cho chy th trn SQL Server v lm phn bi tp s 1. Tm li trong bi ny chng ta tm hiu data integrity trong SQL Server bng cch dng cc loi Constraint. Ngoi ra Chng ta cng bit qua v mt s k thut query nng cao. Sau bi hc ny cc bn cn lm bi tp s 1 h thng ha li kin thc hc t bi 1 n bi 5 trc khi bn hc tip bi s 6. Khi lm bi tp nh phi lm theo th t v tun th theo cc yu cu ca bi tp t ra. Khng nn b qua bc no.
Trong v d ny ta select ton b data trong Orders table ra mt text file dng query v SQL Server authentication.
queryout : cho bit y l mt query ch khng phi l table. -S : tn ca SQL Server (hay tn ca mt Instance) -U : SQL user name dng log on -P : password dng log on. V d 3 : dng BULK INSERT bulk copy data t text file vo SQL Server database. M Query Analyser (BULK INSERT l mt T-SQL command ch khng phi l mt command prompt utility) v nh vo cc dng sau : BULK INSERT PracticeDB..Orders FROM 'c:\Orders.txt ' WITH (DATAFILETYPE = 'CHAR') Trong v d trn DATAFILETYPE= 'CHAR' cho bit data c cha dng Char data type. N mun dng data type dng unicode th dng 'WIDECHAR' Ch : Cc switch trong bcp command l case-sensitive. Ngha l ch hoa v ch thng s c ngha khc nhau.
Select * from OPENQUERY(LinkedPracticeDB,'Select * from Customers') Trong v d trn ta thy function OPENQUERY s tr v mt data set v c th nm sau keyword FROM nh mt table. Khi dng OPENQUERY function ta cn cho bit tn ca Linked Server v query m ta mun thc hin. Lu : function trong SQL Server c dng tng t nh l stored procedure. Ad Hoc Computer Name Ngoi cch dng Linked Server nh trnh by trn ta c th dng ad hoc computer name (ad hoc ngha l lm thi, tm thi). Ngha l i vi nhng database system m ta thng xuyn query th dng Linked Server cn i vi nhng query lu lu mi dng n th ta c th select data bng OPENROWSET hay OPENDATASOURCE functions V d: ta cng s select data t Access database nh trn dng OPENROWSET Select * from OPENROWSET('Microsoft.jet.oledb.4.0','C:\PracticeDB.mdb'; 'admin'; '', Customers) Trong v d trn khi dng OPENROWSET ta cn phi a vo tt c nhng thng tin cn thit connect vo database nh tn ca Provider, v tr ca file, username, password (trng hp ny khng c password) v tn ca table m ta mun select. Mi ln ta thc thi cu lnh trn SQL Server u kim tra security trong khi nu dng Linked Server th ch kim ta mt ln m thi. OPENROWSET tng t nh OPENQUERY ch n tr v mt rowset v c th t vo v tr ca mt table trong cu lnh query. Ngoi cch dng trn ta cng c th dng OPENDATASOURCE query nh sau: Select * from OPENDATASOURCE('Microsoft.jet.oledb.4.0', 'Data Source = C:\PracticeDB.mdb; User ID = Admin; Password = ') ...Customers Trong v d trn ta thy OPENDATASOURCE tr v mt phn ca four-part name (ngha l tng ng vi tn ca Linked Server) cho nn ta phi dng thm ba du chm.
6.3. Cursors
Nu gii thch mt cch ngn gn th cursor tng t nh recordset hay dataset trong programming. Ngha l ta select mt s data vo memory sau c th ln lt lm vic vi tng record bng cch Move Next... C 3 loi cursors l Transact- SQL Cursors, API Cursors v Client Cursors. Trong Transact-SQL v API thuc loi Server Cursors ngha l cursors c load ln v lm vic bn pha server. Trong khun kh bi hc ny ta ch nghin cu Transact-SQL cursors. Transact-SQL cursors c to ra trn server bng cc cu lnh Transact-SQL v ch yu c dng trong stored procedures v triggers. Trc ht hy xem qua mt v d v cursor: DECLARE @au_lname varchar(40), @au_fname varchar(20) DECLARE Employee_Cursor CURSOR FOR SELECT LastName, FirstName FROM Northwind.dbo.Employees OPEN Employee_Cursor
FETCH NEXT FROM Employee_Cursor INTO @au_lname, @au_fname WHILE @@FETCH_STATUS = 0 BEGIN PRINT 'Author:' + @au_fname + ' ' + @au_lname FETCH NEXT FROM Employee_Cursor INTO @au_lname, @au_fname END CLOSE Employee_Cursor DEALLOCATE Employee_Cursor Trong v d trn ta s select LastName v FirstName t Employees table ca Northwind database v load vo Employee_Cursor sau ln lt in tn ca cc employee ra mn hnh. lm vic vi mt cursor ta cn theo cc bc sau: 1. 2. 3. Dng cu lnh DECLARE CURSOR khai bo mt cursor. Khi khai bo ta cng phi cho bit cu lnh SELECTs c thc hin ly data. Dng cu lnh OPEN a data ln memory (populate data). y chnh l lc thc hin cu lnh SELECT vn c khai bo trn. Dng cu lnh FETCH ly tng hng data t record set. C th l ta phi gi cu lnh FETCH nhiu ln. FETCH tng t nh lnh Move trong ADO recordset ch n c th di chuyn ti lui bng cu lnh FETCH FIRST, FETCH NEXT, FETCH PRIOR, FETCH LAST, FETCH ABSOLUTE n, FETCH RELATIVE n nhng khc ch l n ly data b vo trong variable (FETCH...FROM...INTO variable_name). Thng thng ta FETCH data trc sau loop cho ti record cui ca Cursor bng vng lp WHILE bng cch kim tra global variable @@FETCH_STATUS (=0 ngha l thnh cng). Khi ta ving thm tng record ta c th UPDATE hay DELETE ty theo nhu cu (trong th d ny ch dng lnh PRINT) Dng cu lnh CLOSE ng cursor. Mt s ti nguyn (memory resource) s c gii phng nhng cursor vn cn c khai bo v c th OPEN tr li. Dng cu lnh DEALLOCATE phng thch hon ton cc ti nguyn dnh cho cursor (k c tn ca cursor).
4. 5. 6.
Lu l trong v d trn trc khi dng Cursor ta cng declare mt s variable (@au_fname v @au_lname) cha cc gi tr ly c t cursor. Bn c th dng Query Analyzer chy th v d trn.
Performance : Khi thc thi mt cu lnh SQL th SQL Server phi kim tra permission xem user gi cu lnh c c php thc hin cu lnh hay khng ng thi kim tra c php ri mi to ra mt execute plan v thc thi. Nu c nhiu cu lnh nh vy gi qua network c th lm gim i tc lm vic ca server. SQL Server s lm vic hiu qu hn nu dng stored procedure v ngi gi ch gi mt cu lnh n v SQL Server ch kim tra mt ln sau to ra mt execute plan v thc thi. Nu stored procedure c gi nhiu ln th execute plan c th c s dng li nn s lm vic nhanh hn. Ngoi ra c php ca cc cu lnh SQL c SQL Sever kim tra trc khi save nn n khng cn kim li khi thc thi.
Programming Framework : Mt khi stored procedure c to ra n c th c s dng li. iu ny s lm cho vic bo tr (maintainability) d dng hn do vic tch ri gia business rules (tc l nhng logic th hin bn trong stored procedure) v database. V d nu c mt s thay i no v mt logic th ta ch vic thay i code bn trong stored procedure m thi. Nhng ng dng dng stored procedure ny c th s khng cn phi thay i m vn tng thch vi business rule mi. Cng ging nh cc ngn ng lp trnh khc stored procedure cho php ta a vo cc input parameters (tham s) v tr v cc output parameters ng thi n cng c kh nng gi cc stored procedure khc. Security : Gi s chng ta mun gii hn vic truy xut d liu trc tip ca mt user no vo mt s tables, ta c th vit mt stored procedure truy xut d liu v ch cho php user c s dng stored procedure vit sn m thi ch khng th "ng" n cc tables mt cch trc tip. Ngoi ra stored procedure c th c encrypt (m ha) tng cng tnh bo mt.
2.
3.
4.
5.
no) v CustomerName (ai order). Sau ta tr v kt qu cho bit vic insert c thnh cng hay khng. Result = 0 l insert thnh cng. CREATE PROCEDURE AddNewOrder @OrderID smallint, @ProductName varchar(50), @CustomerName varchar(50), @Result smallint=1 Output AS DECLARE @CustomerID smallint BEGIN TRANSACTION If not Exists(SELECT CustomerID FROM Customers WHERE [Name]=@CustomerName) --This is a new customer. Insert this customer to the database BEGIN SET @CustomerID= (SELECT Max(CustomerID) FROM Customers) SET @CustomerID=@CustomerID+1 INSERT INTO Customers VALUES(@CustomerID,@CustomerName) If Exists(SELECT OrderID FROM [Orders] WHERE OrderID=@OrderID) --This order exists and could not be added any more so Roll back BEGIN SELECT @Result=1 ROLLBACK TRANSACTION END Else --This is a new order insert it now BEGIN INSERT INTO [Orders](OrderID,ProductName,CustomerID) VALUES(@OrderID,@ProductName,@CustomerID) SELECT @Result=0 COMMIT TRANSACTION END END Else --The customer exists in DB go ahead and insert the order BEGIN If Exists(SELECT OrderID FROM [Orders] WHERE OrderID=@OrderID) --This order exists and could not be added any more so Roll back BEGIN SELECT @Result=1 ROLLBACK TRANSACTION END Else --This is a new order insert it now BEGIN INSERT INTO [Orders](OrderID,ProductName,CustomerID) VALUES(@OrderID,@ProductName,@CustomerID) SELECT @Result=0 COMMIT TRANSACTION END END Print @Result Return
to ra mt stored procedure ta dng lnh CREATE PROCEDURE theo sau l tn ca n (nu l temporary stored procedure th thm du # trc tn ca procedure. Nu mun encrypt th dng WITH ENCRYPTION trc ch AS) v cc input hoc ouput parameters. Nu l output th thm keyword OUTPUT ng sau parameter. Ta c th cho gi tr default cng lc vi khai bo data type ca parameter. K t sau ch AS l phn body ca stored procedure. Trong v d trn trc ht ta khai bo mt bin @CustomerID sau bt u mt transaction bng BEGIN TRANSACTION (ton b cng vic insert ny c thc hin trong mt Transaction ngha l hoc l insert thnh cng hoc l khng lm g c- all or nothing). Trc ht ta kim tra xem ngi khch hng l ngi mi hay c. Nu l ngi mi th ta "tin tay" insert vo Customers table lun cn nu khng th ch insert vo Orders table m thi. Nu l ngi customer mi ta ly CustomerID ln nht t Customers table b vo bin @CustomerID v sau tng ln mt n v dng cho vic Insert Customer dng k tip. Sau khi insert ngi customer mi ta tip tc cng vic bng vic kim tra xem Order mun insert c tn ti cha (v nu order tn ti th khi insert SQL Server s bo li do OrderID l Primary key). Nu nh order trn v l do no c trong DB th ta roll back v tr kt qu =1 cn nu khng th ta insert mt order mi vo v commit transaction vi kt qu tr v =0. Tng t nh vy nu ngi customer tn ti (sau ch else u tin) th ta ch vic insert order ging nh trn. Trong mi trng hp k trn ta u in ra kt qu v return. V d trn y ch mang tnh hc hi cn trn thc t database c th phc tp hn nhiu nn vic vit stored procedure i hi kin thc vng chc v SQL v k nng v programming. Mun hiu r hn v bi hc ny bn cn lm bi tp s 2. Tm li trong bi ny chng ta tm hiu mt s k thut import v export data . ng thi bit qua cc cch select data t cc database system khc dng distributed query. Nhng quan trng nht v thng dng nht l cc stored procedures. Bn cn hiu r vai tr ca stored procedure v bit cch to ra chng. V kin thc v database ni chung v SQL Server ni ring kh rng nn trong khun kh mt bi hc chng ti khng th trnh by cn k tng chi tit v i khi c hi dn p cho nn bn cn c i c li nhiu ln nm c chnh v phi xem thm sch (nu khng c sch th phi xem thm SQL Books Online). Sau bi hc ny cc bn cn lm bi tp s 2 h thng ha li kin thc hc. Khi lm bi tp nn lm theo th t v tun th theo cc yu cu ca bi tp t ra. Khng nn b qua bc no.
Mc Lc
Bi 1: Gii Thiu SQL Server 2000 .................................................................................................... 1 1.1. Ci t SQL Server 2000 (Installation) .................................................................................... 1 1.2. Mt cht kin thc v cc Version ca SQL Server .................................................................... 2 1.3. Cc thnh phn quan trng trong SQL Server 2000................................................................... 2 1.3.1. Relational Database Engine ............................................................................................ 3 1.3.2. Replication ................................................................................................................... 3 1.3.3. Data Transformation Service (DTS ................................................................................... 3 1.3.4. Analysis Service - .......................................................................................................... 3 1.3.5. English Query - ............................................................................................................. 3 1.3.6. Meta Data Service: ....................................................................................................... 3 1.3.7. SQL Server Books Online - .............................................................................................. 3 1.3.8. SQL Server Tools - ........................................................................................................ 4 Bi 2: Gii Thiu S Lc V Transact SQL (T-SQL) ............................................................................. 5 2.1. Data Definition Language (DDL):............................................................................................ 5 2.2. Data Control Language (DCL): ............................................................................................... 5 2.3. Manipulation Language (DML): .............................................................................................. 6 Bi 3: Design and Implement a SQL Server Database ........................................................................ 12 3.1. Cu Trc Ca SQL Server .................................................................................................... 12 3.2. Cu Trc Vt L Ca Mt SQL Server Database ...................................................................... 12 3.3. Nguyn Tc Hot ng Ca Transaction Log Trong SQL Server ................................................ 13 3.4. Cu Trc Logic Ca Mt SQL Server Database ........................................................................ 15 3.5. Cch to mt User Database ............................................................................................... 16 3.6. Nhng im Cn Lu Khi Thit K Mt Database ................................................................. 18 Bi 4: Backup And Restore SQL Server ............................................................................................ 21 4.1. Chin Lc Phc Hi D Liu (Data Restoration Strategy) ........................................................ 21 4.2. Cc Loi Backup ................................................................................................................ 21 4.3. Recovery Models ................................................................................................................ 21 4.4. Backup Database ............................................................................................................... 24 4.5. Restore Database............................................................................................................... 25 Bi 5: Data Integrity and Advanced Query Technique ........................................................................ 28 5.1. Cc Phng Php m Bo Data Integrity ............................................................................. 28 5.2. Constraints ....................................................................................................................... 28 5.3. Advanced Query Techniques................................................................................................ 31 5.4. Using JOINS...................................................................................................................... 33 Bi 6: Stored Procedure and Advance T-SQL .................................................................................... 35 6.1. S dng bcp v BULK INSERT import data ........................................................................ 35 6.2. Distributed Queries ............................................................................................................ 36
6.3. Cursors ............................................................................................................................ 37 6.4. Stored Procedures.............................................................................................................. 38 6.4.1. u im Ca Stored Procedure ..................................................................................... 38 6.4.2. Cc Loi Stored Procedure ............................................................................................ 39 6.4.3. Vit Stored Procedure .................................................................................................. 39 Bi 7: Triggers And Views .............................................................................................................. 42