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

nhập môn hệ quản trị Cơ sở dữ liệu phần 7 potx

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 (1.18 MB, 21 trang )

Nhp môn H qun tr c s d liu DB2

126

db2 BACKUP DB sample TO C:\BACKUPS

Chú ý rng th mc C:\BACKUPS phi t+n ti trc khi thc thi lnh. C.ng chc chn
là không có kt ni nào n c s d liu khi bn thc thi lnh trên, nu không bn s,
nh#n mt thông báo li bi mt sao lu ngoi tuyn không th c thc hin khi có
các kt ni.

Trong trng hp  tìm ra nhng kt ni n c s d liu, a ra lnh DB2 này t*
trình n Window/Linux:

db2 list applications

/ buc ngt tt c kt ni n c s d liu, a ra lnh t* trình n lnh DB2
Window hoc ca Linux:

db2 force application all

Bn có th không cn chy lnh cui cùng trong môi trng sn xut vi nhiu ngi s
dng, nu không bn s, nh#n nhng cuc g&i t* nhng +ng nghip nóng tính y!
C.ng lu ý rng lnh cui cùng chy theo cách thc không +ng b. Ngh'a là khi bn c
gng chy lnh sao lu ngay sau ó, nó có th không làm vic. /i vài giây, và lp li
lnh sao lu nu bn ã gp li lúc u.

Sau khi thc thi thành công lnh sao lu, mt tp mi cha nh c s d liu sao lu
c to ra. Tên ca tp này theo quy c c ch- trong hình 11.6












Hình 11.6 - Quy c t tên nh sao lu

Loi “0” có ngh'a ó là bn sao lu y . Loi “3” ch!ng hn, ngh'a là ch- mt sao lu
bng biu trng. Nút c c nh vi NODE0000 cho c s d liu không phân tán, là
trng hp cho tt c n bn DB2 tr* n bn thng mi DB2 Enterprise Edition vi
tính nng DPF. Nút catalog c.ng c c nh vi CAT0000. Tham kho sách hng
d%n DB2  có chi tit hn

Khi có vài bn sao lu c ghi li và lu tr trên cùng ng d%n thì mc thi im ghi
li  cui tên tp c s dng  phân bit gia các nh sao lu. Nh chúng ta s,
thy  phn tip theo, lnh RESTORE có th s dng mc thi im này  phc h+i
mt bn sao ã nh.



Nhp môn H qun tr c s d liu DB2

127
Bài tp nhanh #8 - Lp l$ch sao lu

Mc ích:


Mc dù DB2 có mt vài kh nng t ng duy trì c s d liu, nhng ôi khi bn c.ng
mun hiu ch-nh chúng khi có mt hot ng c th di0n ra. Trong phn bài t#p nhanh
này, bn s, hiu ch-nh lch sao lu cho c s d liu EXPRESS.

Các th tc :

1. T* cây i tng  Trung tâm iu khin, bn ch&n All Database. Nhp chut
phi trên c s d liu EXPRESS và ch&n biu tng Backup. Công c t*ng
bc Backup c khi ng.

2. Trong mc Introduction s, tóm tt trng thái hin ti ca c s d liu bao
g+m thi im sao lu cui cùng và phng thc truy c#p. Bm Next  chuyn
ti mc tip theo ca công c Backup.

3. Trong mc Image, ch&n ích n ca d liu s, c sao lu. Thông thng,
bn nên ch&n mt  'a khác vi  'a ang lu c s d liu hin hành. Bây
gi, to mt th mc mi trong h thng có tên là C:\db2backup, ây s, là th
mc cha c s d liu sao lu. Hãy ch&n biu tng File System trong danh
sách th Media Type. Bm nút Add, ch&n th mc bn v*a to ra, r+i bm OK.
Sau ó bm Next  chuyn sang mc tip theo.

4. Bn có th m mc Options and Performance tuy nhiên bn nên  ch 
mc nh vì DB2 mc nh cho phép sao lu  ch  ti u nht. Tip theo bn
ch&n ch&n mc Schedule.

5. Trong mc Schedule, nu nh trình l#p lch cha c kích hot thì bn hãy
kích hot chúng. Ch&n hê thng  to danh mc các công c và thc hin
chúng. Ch- ra mt gin + cho danh mc công c và ch&n  to nó trong c s
d liu EXPRESS hin hành. Danh mc công c s, cha d liu bin i v tt

c các tác v l#p lch. Bm nút OK  tip tc. Bm Next  chuyn sang mc
tip theo sau khi danh mc công c ã c to l#p.



Nhp môn H qun tr c s d liu DB2

128

6. Trong mc Schedule, to ra mt mc lc cho vic thi hành các tác v. L#p lch
sao lu mi ngày vào lúc 1 gi sáng. Bm Next  chuyn sang mc k tip.







7. Trong mc Summary, bn s, xem li các tác v s, c to ra. Sau ó bm
Finish  to ra tác v.

8. Chy Trung tâm tác v (Task Center)  xem hoc sa cha các tác v sao
lu v*a mi to ra.

Nhp môn H qun tr c s d liu DB2

129
11.7 Khôi phc c s d liu
Khôi phc c s d liu bao hàm vic khôi phc c s d liu t* các bn ghi d phòng
và nh#t ký. Nu nh bn ch- khôi phc c s d liu t* bn ghi d phòng thì s, to ra

các c s d liu nh ã t+n ti  thi im sao lu.

Nu vic lu tr bn ghi c cho phép trc vic sao lu, thì bn không ch- khôi phc
li bng cách s dng nh sao lu, mà còn t* các tp nh#t ký. 4 phn tip theo ta s,
thy cách khôi phc d liu cun cho phép bn có th khôi phc t* các bn ghi d
phòng và sau ó ghép vào phn cui cùng ca các tp nh#t ký, hoc mt im c th
theo thi gian
.

Chú ý rng t* khôi phc (recovery) c dùng nhiu trong phn này, nhng lnh khôi
phc li là RESTORE.

11.7.1 Các kiu khôi phc d liu
Có ba loi khôi phc d liu:

Khôi phc d liu h+ng:
Gi thit rng bn ang làm vic vi c s d liu DB2 trên máy tính thì t ngt mt
in, chuyn gì s, xy ra vi c s d liu ca bn?

Khi bn khi ng li máy tính và khi ng DB2, chng trình khôi phc d liu h"ng
s, c t ng thc thi. DB2 s, t ng chy lnh RESTART DATABASE và s, &c
và phc h+i các giao dch khi trc  trng thái kích hot. Sau khi hoàn thành, bn s,
c m bo rng, c s d liu ca bn  trng thái phù hp nht.

Khôi phc d liu phiên bn (hoc khôi phc nh):
Có ngh'a là, bn s, phc h+i c s d liu ca bn t* nh mt bn sao. Do ó c s d
liu ca bn c tr v trng thái ngay trc khi nó c sao lu. M&i tác ng lên c
s d liu ó sau thi im sao lu u b mt.

Khôi phc d liu theo thi gian:

Kiu khôi phc d liu này v*a cho phép bn khôi phc c s d liu t* mt bn sao,
v*a khôi phc d liu ti mt thi im xác nh bng lnh ROLLFORWARD. Khôi phc
d liu kiu này làm gim s mt mát d liu mt cách ti a.
11.7.2 Khôi phc c s d liu
Dùng lnh RESTORE  khôi phc d liu t* mt bn lu. Di ây là cu trúc n
gin nht cho câu lnh này:

RESTORE DATABASE <tên c• s• d• li•u> [from <•••ng d•n>] [taken
at <th•i-•i•m>]

Ví d: Nu bn có mt tp sao lu có tên nh sau:








Bn s, gõ lnh nh sau:


Nhp môn H qun tr c s d liu DB2

130

RESTORE DB sample FROM <•••ng d•n> TAKEN AT 2006314131259
11.8 Các hot ng khác vi BACKUP và RESTORE
Di ây là danh sách mt vài iu bn nên bit v lnh BACKUP và RESTORE. Chúng
tôi khuyên bn nên &c li cun hng d%n v DB2  có thêm thông tin chi tit.


• Sao lu c s d liu  ch  32 bit còn khôi phc d liu  ch  64 bit.
• Khôi phc c c s d liu ang t+n ti.
• Khôi phc d liu ti mt  'a khác vi vùng cn khôi phc.
• Khôi phc hoc sao lu d liu theo không gian bng, thay vi làm vi toàn b c
s d liu.
• Cho phép sao lu nhng thay i (Delta) và sao lu tng dn (incremental).
Cách sao lu thay i ch- sao lu nhng thay i tip theo, trong khi ó cách sao
lu dn tng thì ghi nh#n toàn b nhng thay i và tích hp chúng vào mi nh
sao lu.
• Sao lu các bn “chp” d liu (flash copy) (òi h"i v phn cng tng thích)
• Khôi phc bng ã mt (nu tùy ch&n c l#p cho bng)

Sao lu  h iu hành này và khôi phc  h iu hành khác là không th.
Dùng db2look và db2move cho trng hp này.

Nhp môn H qun tr c s d liu DB2

131
12
Chng 12 - Nhim v bo trì

Trong chng này chúng ta s, bàn v các nhim v cn thit  gi cho CSDL ca bn
duy trì hot ng c tt. Tt c m&i th trong DB2 u t ng thc hin nhng công
vic này. Bn DB2 Express-C c.ng ging nh tt c các bn DB2 hin thi u cha
ng tt c các kh nng t ng này. Kh nng t qun lý là mt li ích ln làm nh"
g&n và làm v*a phi s lng nhân viên trong nhng công ty, nhng ngi không cn
thuê làm liên tc làm qun tr  qun lý máy ch d liu. Khác vi vic làm bng tay,
nu mt ngi qun tr c thuê, anh y hay cô y s, có nhiu thi gian rnh ri 
thc hin vic nâng cao hot ng làm gia tng giá tr cho công ty

.
12.1 REORG, RUNSTATS, REBIND
Có ba công vic duy trì chính trong DB2, nh hình 12.1 mô t: REORG, RUNSTATS và
REBIND.




Hình 12.1 – Các công vic duy trì: REORG, RUNSTATS, REBIND


Hình 12.1 trình bày nhng công vic duy trì c thc hin theo mt chu trình hình tròn.
Nu mt REORG c thc hin, nó c khuyên là nên chy mt RUNSTATS, theo
sau là mt REBIND. Sau mt thi gian, các bng trong mt c s d liu ã c thay
i theo các lnh nh UPDATE, DELETE và INSERT. Ti thi im ó, chu k mi li
c bt u vi REORG.
12.1.1 Lnh REORG
Qua thi gian, bn thc hin các tính toán INSERT, UPDATE, DELETE trên c s d
liu ca bn, d liu ca bn bt u b phân on, chia nh" ra thành các trang c s
d liu. Lnh REORG s, tái ghép nhng mnh vn c.ng nh nhng khong trng li và
s, t chc li d liu  làm cho vic truy vn d liu tr nên hiu qu hn. Các bng
hay thay i s, có li nht khi dùng REORG. Bn có th làm ch- mc REORG nh vi
Nhp môn H qun tr c s d liu DB2

132
các bng, và mt REORG có th c thc hin trc tuyn hay không trc tuyn.


Lnh REORG không trc tuyn thc hin nhanh hn và hiu qu hn, nhng không cho
phép truy nh#p ti bng, trong khi lnh REORG trc tuyn cho phép truy nh#p ti bng,

nhng có th làm tiêu hao mt chút tài nguyên h thng; ây là nhng công vic tt nht
cho nhng bng nh".


Cú pháp:
REORG TABLE <tablename>
Ví d
:

REORG TABLE employee
Lnh REORGCHK có th c dùng trc mt REORG  xác nh bng hay ch- s
cn c sa.
12.1.2 Lnh RUNSTATS
C ch ti u ca DB2 (Optimizer) là “khi óc” ca DB2. Nó tìm nhng ng d%n truy
nh#p hiu qu nht  nh v và truy vn d liu. C ch ti u là h thng ánh giá tri
thc, và s dng phân tích thng kê các i tng c s d liu c lu trong các
bng danh mc cho hiu sut khai thác c s d liu ln nht. Ví d, các bng danh
mc có các phân tích thng kê v có bao nhiêu ct hin din trong mt bng, có bao
nhiêu hàng trong nó, có bao nhiêu và nhng kiu gì ca ch- s s)n có vi mt bng, …

Thông tin v phân tích thng kê không c c#p nh#t t ng. Chính vì thit k kiu
này, nên bn không mun DB2 c#p nh#t nhng thng kê sau mi thao tác trên c s d
liu, nó s, phn tác dng vi yêu cu v hiu nng ca h thng. Thay vào ó, DB2
cung cp lnh RUNSTATS  c#p nh#t nhng thng kê này. Nó gi cho các thng kê
c s d liu luôn c#p nh#t. C ch ti u ca DB2 có th to ra nhng thay i gc r0
c bn trong ng d%n truy nh#p nu bng ch- có mt dòng so vi bng có mt triu
dòng. Khi nhng thng kê c s d liu c c#p nh#t, DB2 có th ch&n mt phng
án truy nh#p tt hn. Tn sut ca các thng kê t#p hp này s, xác nh c d liu
trong bng thay i nh th nào.


Cú pháp:
RUNSTATS ON TABLE <schema.tablename>
Ví d
:

RUNSTATS ON TABLE myschema.employee
12.1.3 BIND/REBIND
Sau khi chy thành công lnh RUNSTATS, không phi tt c các câu truy vn s, c
dùng nhng thng kê mi nht. Nhng s + truy nh#p SQL t'nh c xác nh khi bn
a ra lnh BIND, vì các thng kê c dùng ti thi im ó không ging nhau nh
thi im hin ti. Hình 12.2 s, giúp chúng ta hiu ý tng này.

Nhp môn H qun tr c s d liu DB2

133

Hình 12.2 – Tin trình kt ni SQL t-nh
.
Trong hình 12.2 mt chng trình nhúng vit bng C (c lu tr nh mt tp vi
phn m rng là “sqc”) c tin biên dch. Sau khi tin biên dch, hai tp c sinh ra,
mt tp “.c” cha mã C vi tt c chú thích SQL, và mt tp “.bnd” cha tt c các câu
lnh SQL. Tp C vi phn m rng “.c” c biên dch nh thng l vi trình biên dch
C, to mt “th vin” nh trình bày phía trên bên phi ca hình. Tp “.bnd” ging nh
v#y, nó c óng gói lu trong c s d liu. /óng gói thì tng ng vi biên dch
các câu lnh SQL vi nhng s + truy nh#p tt nht c xác nh trên các thng kê
ã có ti thi im này, và sau ó lu chúng thành gói.

Bây gi, iu gì s, xy ra nu mt triu dòng c chèn vào bên trong bng s dng
trong chng trình nhúng trên? Sau khi chèn, nu mt lnh RUNSTATS c thc thi,
nhng thng kê s, c c#p nh#t, tuy nhiên gói s, không t ng c#p nh#t  tính toán

li ng d%n c s trên nhng thng kê mi nht. Lnh db2rbind có th c dùng 
óng gói li các gói trên vi thng kê mi nht.

Cú pháp:
db2rbind database_alias -l <logfile>
Ví d:
/ óng gói li tt c các gói ca c s d liu sample và lu nó trong nh#t ký ti tp
mylog.txt, thc hin lnh sau:
db2rbind sample -l mylog.txt
12.1.4 Các công vic duy trì t& Trung tâm iu khin
T* Trung tâm iu khin bn có th REORG và RUNSTATS. Hình 12.3 trình bày cách
thc hin.
Nhp môn H qun tr c s d liu DB2

134

Hình 12.3 – REORG và RUNSTATS t& Trung tâm iu khin

Bn ch&n bng mà bn mun t chc li, nhp phi chut và ch&n t chc li (cho
REORG) hay chy thng kê (cho RUNSTATS)

Hin th$ thông s c s d liu:
Khi bn ch&n mt c s d liu, khung nhìn hot ng c s d liu  phía di bên
phi ca Trung tâm iu khin s, cung cp thông tin v c s d liu nh là v kích
thc, ca ln sau cùng, dù nó có c bo trì t ng hay không. Vic hin th này cho
phép bn nhanh chóng xác nh nhng duy trì cn thit cho c s d liu ca bn. Hình
12.4 hin th nhng thông tin này.


Hình 12.4 – Hin th$ thông s c s d liu t& Trung tâm iu khin

Nhp môn H qun tr c s d liu DB2

135
12.2 Các la chn bo trì
Có 3 cách  thc hin vic bo trì h thng.

1. Bo trì th công
Bn thc hin hot ng bo trì này mt cách th công khi có nhu cu phát sinh.

2. To ra mt on kch bn (script)  thc hin vic bo trì h thng.
Bn có th to các kch bn vi nhng lnh bo trì và l#p lch hp lý cho nó hot ng.

3. T ng bo trì
DB2 t ng giám sát công vic bo trì cho bn (bng lch REORG, RUNSTATS,
BACKUP)

Trong phn này, chúng ta t#p trung ch yu vào cách bo trì t ng.

Hot ng bo trì t ng bao g+m nhng bc sau ây:
- Ngi dùng nh ngh'a mt ca s bo trì (khung thi gian) ti thi im ó h
thng s, thc hin công vic bo trì mà không gây ra s xáo trn. Ví d, nu h
thng có ít nht các hot ng vào ngày ch nh#t, t* 2h sáng ti 4h sáng, thì
khung thi gian này s, hot ng nh là mt ca s bo trì.
- Có 2 loi ca s bo trì chính: mt là  thc hin trc tuyn, còn loi kia là 
thc hin ngoi tuyn.
- DB2 ch- thc hin bo trì mt cách t ng khi cn thit và  ang trong thi gian
kích hot ca ca s bo trì.

T* giao din iu khin chính, bn có th m “Configure Automated Maintenance
Wizard” nh hình minh h&a 12.5.



Hình 12.5 – M Configure Automated Maintenance Wizard

Hình 12.6 s, hin ra ca s “Cu hình  bo trì h thng mt cách t ng theo hng
d%n”.

Nhp môn H qun tr c s d liu DB2

136

Hình 12.6 – Cu hình  bo trì h thng mt cách t ng theo hng d%n
Nhp môn H qun tr c s d liu DB2

137
Bài tp nhanh #9 – Cu hình vic bo trì t ng

Mc ích

Trong bài t#p nhanh này, vi vài thao tác n gin, bn s, cu hình cho vic t ng
bo trì trên c s d liu m%u DB2.

Các th tc

1. T* cây i tng ca Trung tâm iu khin, nhn chut phi vào c s
d liu SAMPLE và ch&n mc “Configure Automatic Maintenance”. Nó s,
m ra ca s  thc hin vic bo trì t ng theo hng d%n.

2. Trang Introduction ca “hng d%n” hin th nhng cài t hin thi ca
chc nng t ng bo trì. Nu bn to ra c s d liu vi chc nng t

ng bo trì, khi ó nó s, t ng c cu hình. Bn có th dùng “hng
d%n” này  cu hình li chc nng t ng bo trì. Bm Next  chuyn ti
trang tip theo ca “hng d%n”.

3. Trang Type ca “hng d%n” yêu cu bn ch&n gia vô hiu hóa tt c các
tùy ch&n t ng lu gi và thay i cu hình ca vic t ng bo trì. Ch&n
mt chc nng  thay i cài t hin ti ca t ng lu gi. Bm Next.

4. Trang Timing (thi gian) ca “hng d%n” s, yêu cu bn ch- rõ ca s
bo trì. Cu hình cho ca s ngoi tuyn s, c thc hin vào mi ti th 7
và ch nh#t t* gia êm ti 6h sáng nh hình bên di. Bm nút Change
bên cnh ca s bo trì ngoi tuyn và ch&n thi gian nh mong mun. Sau
khi hoàn thành nhng thông tin cn thit, bm nút OK  tr li “hng d%n”.
Thoát kh"i ca s trc tuyn (bo trì trc tuyn có th m bt k lúc nào).
Bm nút Next.

Nhp môn H qun tr c s d liu DB2

138


5. /n trang Notification (cnh báo) ca “hng d%n”, bn có th cài t mt s
tng tác trong trng hp có mt hot ng t ng bo trì b li. Bây gi
b" qua bc ó. Bm Next.

6. /n trang Actives ca “hng d%n”, bn có th ch&n là có t ng hóa các
công vic cá nhân hay không c.ng nh là c thông báo v các hot ng
c th khác.Trong ví d này, phi chc rng tt c các hp kim “Automate”
u c ch&n và các hp kim “Notify” u không c ch&n. Bm Next.


7. Trc khi thc hin trang k tip ca “hng d%n”, bn nên cu hình v trí
lu d phòng ca c s d liu. Lý tng nht là bn nên lu tr  mt 
'a v#t lý khác trong trng hp 'a b li. T* trang Activies, ch&n chc nng
“Backup database”, sau ó bm nút “Configure Settings”.

8. Trên trang Backup Criteria ca ca s “Configure Settings”, ch&n chc nng
“Balance Database Recoverability with Performance”. Trên trang Backup
Location, ch&n v trí lu d phòng và bm nút “Change”. Ch- ra mt v trí khác
 thc hin lu d phòng (phi bo m là  b nh trong  'a ó). Trên
trang Backup Mode, bo m là “Offline Backup” ã c ch&n. Bm OK 
óng trang Backup Criteria. Bm nút Next.

9. Trang Summary (tóm tt) ca “hng d%n” cha mt bng tóm tt ca nhng
la ch&n mà bn ã ch&n. Bm nút Finish  chp nh#n và thi hành nhng
thay i ó.
Nhp môn H qun tr c s d liu DB2

139
13
Chng 13 – Truy cp ng thi và khóa

Chng này t#p trung tho lu#n làm th nào  cho phép nhiu ngi dùng truy c#p vào
cùng mt d liu ging nhau ti cùng mt thi im mà không làm nh hng l%n nhau,
và gi cho quá trình hot ng ca h& phù hp. Chúng ta s, tho lu#n v khái nim ca
các giao dch, truy c#p +ng thi và khóa.
13.1 Các giao d$ch
Mt giao dch hay mt n v công vic g+m có mt hay nhiu dòng lnh SQL mà khi
thc hin cn phi c coi là mt n v riêng l2. Có ngh'a là nu mt trong nhng
dòng lnh trong giao dch tht bi thì toàn b giao dch tht bi, và bt k dòng lnh nào
c thi hành n im tht bi thì s, c quay lui (h+i x), a d liu v giá tr,

trng thái trc ó. Mt giao dch kt thúc vi dòng lnh COMMIT, nó c.ng có ngh'a là
báo hiu bt u mt giao dch mi. Hình 13.1 cung cp cho chúng ta ví d ca mt giao
dch

Hình 13.1 – Mt ví d v giao d$ch

Trong hình 13.1, ví d bn mun chuyn 100 ô la t* tài khon tit kim (savings) ca
bn sang tài khon séc (checking). Vic ó òi h"i phi thc hin công vic này:

Tr* 100 ô la  tài khon tit kim
Cng 100 ô la vào tài khon séc

Nhp môn H qun tr c s d liu DB2

140
Nu dãy các vic trên không c xem xét nh là mt n v công vic - mt giao dch,
hình dung iu gì s, xy ra nu có li (xy ra) sau khi tr* tin  tài khon tit kim,
nhng không cng c tin vào tài khon séc. Bn s, mt 100 ô la!
13.2 Truy cp ng thi
Truy c#p +ng thi ý nói rng nhiu ngi có th làm vic  cùng mt thi im trên
cùng mt c s d liu. DB2 c thit k nh là mt c s d liu nhiu ngi dùng.
Vic truy c#p d liu phi c kt hp chính xác và rõ rt s dng mt c ch  bo
m tính toàn v7n và chc chn ca d liu. Xem ví d 13.2



Hình 13.2 - Mt ví d ca truy cp ng thi và s cn thit cho vic iu khin
truy cp ng thi

Trong hình 13.2, có 4 ng dng, App A, App B, App C và App D ang c gng truy c#p

n cùng mt dòng (dòng 2) trong bng d liu. Không có iu khin truy c#p +ng thi,
tt c ng dng có th thc hin các thao tác i vi dòng d liu này. Gi nh rng tt
c ng dng ang c#p nh#t ct Age cho dòng 2 vi giá tr khác, ng dng thc hin c#p
nh#t sau cùng s, là "ngi chin thng" trong trng hp này. Hin nhiên trong ví d
này mt iu khin truy c#p +ng thi nào ó c òi h"i  m bo chc chn cho
kt qu. /iu khin truy c#p +ng thi này da vào vic s dng khóa bn ghi.

Khái nim khóa và truy c#p +ng thi có liên quan cht ch, vi nhau. Khóa dùng  tm
thi ngn nhng ng dng thao tác trên chúng cho n khi mt thao tác kt thúc. Nu
chúng ta có nhiu khóa hn trong mt h thng thì vic truy c#p +ng thi s, ít i. Nói
mt cách khác, nu chúng ta có ít khóa hn trong h thng thì s, có nhiu truy c#p +ng
thi hn.

Nhng khóa này s, t ng xut hin  h tr mt thao tác và s, c gii phóng khi
thao tác kt thúc (khi s dng lnh COMMIT hoc ROLLBACK). Các khóa có th t
trên các bng hoc các dòng. Có hai loi khóa c bn:

- Khóa chia s2 (khóa S) - c s dng khi ng dng mun &c và ngn cn c#p
nh#t t* nhng dòng khác
- Khóa dành riêng (khóa X) – c s dng khi mt ng dng c#p nh#t, thêm hay
xóa mt dòng

Bây gi chúng ta  ý n hình 13.3, nó có v2 ging nh hình 13.2 nhng bây gi nó
xut hin thêm mt khóa
Nhp môn H qun tr c s d liu DB2

141

Hình 13.3 – Mt ví d ca truy cp ng thi, và s cn thit ca khóa


Trong ví d hình 13.3, nu App B truy c#p dòng th 2 u tiên, và thc hin vic
UPDATE, App B gi mt khóa dành riêng (khóa X) trên dòng ó. Khi App A, App C và
App D c gng truy c#p vào dòng 2, chúng s, không th UPDATE dòng này bi vì khóa
X. Vic kim tra này giúp bo m tính toàn v7n và chc chn ca d liu.
13.3 Các vn  khi không kim tra truy cp ng thi
Khi không có iu khin truy c#p +ng thi, chúng ta có th gp nhng vn  di ây

• Mt d liu c#p nh#t
• /&c vi không cam kt
• /&c không lp li
• /&c th*a

13.3.1 Mt d liu cp nht
Mt d liu c#p nh#t là mt vn  tng t nh gii thích trc trong mc này, khi ng
dng thc hin c#p nh#t sau cùng s, là “ngi chin thng”.


Hình 13.4 – Mt d liu cp nht

Nhp môn H qun tr c s d liu DB2

1
42
Trong hình 13.4 có hai ng dng c gng c#p nh#t trên cùng mt dòng. Bên trái là App1,
và bên phi là App2. Và chui vic sau ó là:

1. App1 c#p nh#t mt dòng
2. App2 c#p nh#t dòng tng t
3. App1 hoàn tt
4. App2 hoàn tt


D liu c#p nh#t ca App1 s, b mt khi App2 c#p nh#t li nó, do ó xy ra vic “Mt d
liu”
13.3.2 *c vi không cam kt
Mt hành ng &c không cam kt hoc “&c có ý xu”  c#p n vic mt ng dng
&c nhng thông tin mà không c cam kt, và tt nhiên vic này thì không c úng
n.


Hình 13.5 – /&c vi không cam kt

Hình 13.5 kéo theo nhng s vic này:

1. App1 c#p nh#t mt dòng
2. App2 &c giá tr mi ca dòng ó
3. App1 cun li nhng thay i trên dòng ó

App2 thì ang &c vi d liu không c cam kt, và k t* ó d liu không hp l và
c g&i là “&c vi không cam kt”
13.3.3 *c không lp li
/&c không lp li ng ý rng bn không t c kt qu ging nhau sau khi thc hin
vic &c ging nhau vi nhng thao tác ging nhau.
Nhp môn H qun tr c s d liu DB2

143

Hình 13.6 – *c không lp li

Trong hình 13.6, dng nh nu bn c gng ghi mt chuyn bay t* Dallas n
Honolulu. Mt dãy các s vic là:


1. App1 m mt bng (c hiu nh bng kt qu) hin hành nh bn thy trong
hình 13.6
2. App2 xóa mt dòng trong bng (ví d, dòng vi destination “San Jose”)
3. App2 hoàn tt nhng thay i
4. App1 óng và m li bng

Trong trng hp này, t* lúc App1 không c cung cp d liu tng t ang &c lp
li, nó không th sao chép li bng d liu, ó chính là vn  c g&i là “&c không
lp li”
13.3.4 *c th&a
Vn  &c không có thc ging nh vn  &c không lp li, nhng khác nhau là 
nhng l trình k tip, bn có th thu c nhng dòng v*a thêm vào mà úng ra thì
chúng (dòng) ít hn.

Hình 13.7 cung cp cho chúng ta ví d ca vn  này

Hình 13.7 - *c th&a

Nhp môn H qun tr c s d liu DB2

144
Hình 13.7 trình bày chui s kin:

1. App1 m mt bng
2. App2 thêm mt dòng vào c s d liu  ni mà nó có  tiêu chu n ca bng
3. App2 hoàn tt nhng thay i
4. App1 óng và li tip tc m bng

Trong trng hp này, App1 s, không thy d liu tng t nh ang &c lp li, nó s,

ly c nhiu dòng hn. Vn  này c g&i là &c th*a
13.4 Các mc cô lp
Bn có th ngh' các mc cô l#p nh là ni gi các chính sách khóa, da vào s la
ch&n mc cô l#p, bn có th có nhng tác ng khác nhau cho c s d liu khóa mt
ng dng

DB2 cung cp nhng mc  bo v khác nhau  cô l#p d liu:

• /&c vi không cam kt (UR)
• 6n nh con tr" (CS)
• /&c n nh (RS)
• /&c lp li (RR)
13.4.1 *c vi không cam kt
/&c vi không cam kt c.ng c hiu nh &c có ý xu. /ó là mc  cô l#p thp
nht, và cung cp mc  truy c#p +ng thi cao nht. Không có s khóa dòng nào t+n
ti trên nhng thao tác &c, nu các ng dng khác không xâm nh#p  xóa hoc sa
mt bng, và thao tác c#p nh#t gi nhim v nh là nu chúng ta dùng cp  cô l#p n
nh con tr".

Nhng vn  v%n t+n ti vi cp  cô l#p này:
• /&c vi không cam kt
• /&c không lp li
• /&c th*a

Nhng vn  c ngn ng*a vi cp  cô l#p này là:
• Mt d liu khi c#p nh#t
13.4.2 (n $nh con tr+
6n nh con tr" là cp  cô l#p mc nh. Nó cung cp mt mc  khóa ti thiu. V
c bn, vi mc cô l#p này thì dòng “hin hành” ca con tr" (cursor) b khóa. Nu ó là
dòng ch- &c, thì khóa s, c gi cho n khi mt dòng mi c np hoc n v làm

vic c kt thúc. Nu dòng c c#p nh#t, chic khóa s, c gi cho n khi n v
làm vic c kt thúc

Nhng vn  v%n t+n ti vi mc  cô l#p này:
• /&c không lp li
• /&c th*a

Nhng vn  c ngn ng*a vi mc  cô l#p này
• Mt d liu c#p nh#t
• /&c không cam kt
Nhp môn H qun tr c s d liu DB2

145
13.4.3 *c n $nh
Vi &c n nh, tt c các dòng mà ng dng làm vic trong mt phm vi u b khóa.
Cho mt con tr", nó khóa tt c các dòng  tiêu chu n trong t#p hp kt qu. Ví d nu
bn có mt bng cha 10.000 dòng và câu truy vn tr v 10 dòng, sau ó ch- có 10
dòng ó b khóa. C ch &c n nh s dng mt mc  khóa v*a phi.

Vn  v%n t+n ti vi mc  cô l#p này:
• /&c th*a

Nhng vn  c hn ch vi mc  cô l#p này là:
• Mt d liu c#p nh#t
• /&c vi không cam kt
• /&c không lp li
13.4.4 *c lp li
C ch &c lp li là mc  cô l#p cao nht. Nó cung cp cp  khóa cao nht, và truy
c#p +ng thi ti thiu nht. Khóa c gi trên tt c các dòng, x lý vic xây dng
mt t#p hp kt qu. Tc là nhng dòng không cn thit trong t#p hp kt qu cui

cùng có th b khóa. Không mt chng trình nào khác có th c#p nh#t, xóa, hoc thêm
mi mt dòng mà có th nh hng n t#p hp kt qu cho n khi mt n v công
vic c hoàn tt. C ch &c lp li bo m rng nhng câu truy vn tng t nhau
c a ra bi mt ng dng trong mt n v làm vic s, nh#n c kt qu ging
nhau ti mi thi im.

Vn  v%n còn t+n ti vi mc  cô l#p này:
• không có

Nhng vn  c ngn ng*a vi mc  cô l#p này:
• Mt d liu khi c#p nh#t
• /&c không cam kt
• /&c không lp li
• /&c th*a
13.4.5 So sánh các mc  cô lp d liu
Hình 13.8 so sánh s khác nhau mà các mc  cô l#p mang li. Trong hình, chúng ta
nhìn thy mc  cô l#p “&c không cam kt” không khóa gì c. Mc  cô l#p n nh
con tr" gi mt cái khóa dòng 1 khi nó ang ly dòng ó v, nhng s, gii phóng nó
sm r+i nó ly dòng 2 v,… /i vi mc  cô l#p &c n nh hoc &c lp li, bt c
dòng nào ly v s, b khóa, và khóa s, không c gii phóng cho n khi kt thúc mt
giao tác (khi hoàn tt)

Nhp môn H qun tr c s d liu DB2

146

Hình 13.8 – So sánh các mc  cô lp
13.4.6 *t mc cô lp
Nhng mc cô l#p có th c ch- rõ ti nhiu mc :
• Phiên làm vic trong ng dng

• Kt ni
• Câu lnh

Nhng mc cô l#p bình thng c xác nh ti phiên hoc ti mc ng dng. Nu
không ch- rõ c mc cô l#p trong ng dng ca các bn, nó mc nh ti con tr" n
nh. Ch!ng hn, bng 13.1 cho thy nhng mc cô l#p kh d' cho mt chng trình
.NET hay JDBC và làm sao khi t nhng thuc tính này phi phù hp vi mt mc cô
l#p ca DB2:













Mc cô l#p c phát biu có th dùng vi mnh  WITH {mc cô l#p}. Ch!ng hn
nh:

SELECT … WITH {UR | CS | RS | RR}


Table 13.1 – S so sánh ca thut ng t mc cô lp


×