You are on page 1of 142

Khoa CNTT & Truyn Thng Trng i Hc Cn Th

MC LC
TNG QUAN MN HC ............................................................................................... 6

Phn l thuyt
Chng 1 Cc bin php bo v CSDL ......................................................................... 8 1 Cc bin php bo v bng my tnh........................................................................ 8 2 Cp quyn................................................................................................................. 9 2.1 Lnh SQL cp quyn: .................................................................................. 9 2.2 Lnh SQL thu hi quyn: ........................................................................... 10 3 Khung nhn ............................................................................................................. 10 3.1 Lnh dng to view: ................................................................................... 10 3.2 Lnh dng xa view ................................................................................... 11 3.3 Thun li v bt li ca vic s dng view .................................................... 11 4 Sao lu v phc hi ................................................................................................ 12 5 Ton vn d liu ..................................................................................................... 12 6 Mt ho d liu ...................................................................................................... 13 7 RAID (Redundancy Array of Independent Disks) ................................................. 14 8 Cc khi nim v cu trc lu tr CSDL Oracle ................................................... 16 8.1 Gii thiu ........................................................................................................ 16 8.2 Database v Instance ....................................................................................... 16 8.3 Cu trc lu tr ca CSDL Oracle.................................................................. 17 8.4 Schema v schema objects .............................................................................. 23 8.5 Data dictionary ................................................................................................ 23 9 M/tt CSDL v th hin (startup/shutdown) ........................................................ 23 9.1 Gii thiu ........................................................................................................ 23 9.2 M CSDL........................................................................................................ 24 9.3 Tt CSDL ........................................................................................................ 25 10 Oracle Net .............................................................................................................. 25 11 Cc bin php bo v CSDL Oracle ...................................................................... 26 11.1 Qun l ngi dng ........................................................................................ 26 11.2 Qun l quyn ................................................................................................. 29 11.3 Qun l Role (vai tr) ..................................................................................... 33 11.4 Import v export.............................................................................................. 37 11.5 Oracle Data Pump ........................................................................................... 39 Chng 2 Ngn ng SQL & PL/SQL trong Oracle........................................................ 41 1 Bng d liu v cc i tng lin quan ................................................................ 41 1.1 Qun l bng ................................................................................................... 41 1.2 Sequence ......................................................................................................... 43 1.3 Index ............................................................................................................... 44 1.4 Biu thc chnh quy (regular expression) ....................................................... 45

Gio Trnh H Qun Tr C S D Liu trang 1

Khoa CNTT & Truyn Thng Trng i Hc Cn Th


Cc kiu d liu trong Oracle ................................................................................ 46 Cu trc chng trnh PL/SQL .............................................................................. 47 3.1 Cu trc lp trnh trong Oracle ....................................................................... 47 3.2 Cc dng chng trnh PL/SQL...................................................................... 47 3.3 Cu trc khi PL/SQL v danh....................................................................... 48 4 Cc kiu d liu c bn ca PL/SQL ..................................................................... 49 5 Thuc tnh .............................................................................................................. 50 6 Kiu d liu phc ................................................................................................... 50 6.1 Kiu d liu con do ngi dng nh ngha ................................................... 50 6.2 Kiu TABLE ................................................................................................... 51 7 Cc loi mnh .................................................................................................... 51 7.1 Mnh gn.................................................................................................... 51 7.2 Mnh lnh (SQL command) ...................................................................... 52 8 Cc cu trc iu khin .......................................................................................... 52 8.1 Cu trc r nhnh ............................................................................................ 52 8.2 Cu trc lp ..................................................................................................... 54 8.3 Cu trc Ngoi l (Exception) ........................................................................ 55 9 Kiu con tr (Cursor) ............................................................................................. 57 9.1 C php khai bo con tr: ............................................................................... 57 9.2 C php m con tr:........................................................................................ 58 9.3 C php ly d liu ......................................................................................... 58 9.4 C php ng con tr ...................................................................................... 58 9.5 Mt s thuc tnh ca con tr: ........................................................................ 59 9.6 Mnh SELECT FOR UPDATE trong Cursor ............................................ 59 9.7 Mnh WHERE CURRENT OF trong Cursor ............................................ 59 10 Th tc, hm v trigger .......................................................................................... 60 10.1 Th tc ............................................................................................................ 61 10.2 Hm ................................................................................................................. 62 10.3 Trigger ............................................................................................................ 63 Chng 3. Qun l giao dch & phc hi ....................................................................... 67 1 Giao dch (transaction) ........................................................................................... 67 1.1 nh ngha Giao dch: ..................................................................................... 67 1.2 Trng thi ca Giao dch:................................................................................ 68 1.3 Cc thuc tnh ca mt GD............................................................................. 68 2 iu khin cnh tranh (Concurrency control) ........................................................ 70 2.1 S cn thit phi c qun l cnh tranh .......................................................... 70 2.2 Lch trnh (schedule): ...................................................................................... 72 2.3 Tnh kh tun t ca mt lch trnh ................................................................. 75 2.4 Tnh kh phc hi ca lch trnh ..................................................................... 75 2.5 Cc k thut qun l cnh tranh...................................................................... 76 2.6 Cc k thut lc quan (optimistic techniques) ................................................ 84 2.7 mn ca mc d liu (data granularity) ..................................................... 85 3 Phc hi CSDL ...................................................................................................... 88 2 3

Gio Trnh H Qun Tr C S D Liu trang 2

Khoa CNTT & Truyn Thng Trng i Hc Cn Th


3.1 S cn thit phi phc hi d liu .................................................................. 88 3.2 Cc GD v s phc hi ................................................................................... 88 3.3 Cc tin ch phc hi .................................................................................. 89 4 Qun l giao dch trong Oracle: ............................................................................. 93 4.1 Tng quan ....................................................................................................... 93 5 Sao lu, phc hi trong Oracle: ............................................................................. 97 5.1 Sao lu ............................................................................................................ 98 5.2 Phc hi (recovery) ....................................................................................... 102

Phn thc hnh


BI 1. LM QUEN VI ORACLE ............................................................................. 105 1 Ni dung ............................................................................................................... 105 2 Bi tp c hng dn............................................................................................ 105 3 Bi tp t lm ....................................................................................................... 115 BI 2. QUN L BNG D LIU............................................................................ 116 1 Ni dung ............................................................................................................... 116 2 Bi tp c hng dn............................................................................................ 116 3 Bi tp t lm ....................................................................................................... 118 BI 3. LP TRNH PL/SQL ........................................................................................ 120 1 Ni dung ............................................................................................................... 120 2 Bi tp c hng dn............................................................................................ 120 3 Bi tp t lm ....................................................................................................... 125 BI 4. HM TH TC ............................................................................................ 127 1 Ni dung ............................................................................................................... 127 2 Bi tp c hng dn............................................................................................ 127 3 Bi tp t lm ....................................................................................................... 128 BI 5. TRIGGER ......................................................................................................... 130 1 Ni dung ............................................................................................................... 130 2 Bi tp c hng dn............................................................................................ 130 3 Bi tp t lm ....................................................................................................... 132 BI 6. QUN L GIAO DCH, SAO LU V PHC HI ..................................... 133 1 Ni dung ............................................................................................................... 133 2 Bi tp c hng dn............................................................................................ 133 3 Bi tp t lm ....................................................................................................... 135 N TP ........................................................................................................................ 136 1 Ni dung ............................................................................................................... 136 2 Bi tp .................................................................................................................. 136 Ph lc........................................................................................................................... 139 1 Cc li thng gp ............................................................................................... 139 2 Cc hm x l d liu .......................................................................................... 140

Gio Trnh H Qun Tr C S D Liu trang 3

Khoa CNTT & Truyn Thng Trng i Hc Cn Th

DANH MC HNH
Hnh 1. Cc mc RAID ........................................................................................ 15 Hnh 2. Database Instance .................................................................................... 17 Hnh 3. Mi quan h gia Data block, extend v Segment .................................. 20 Hnh 4. Mi tng quan gia Tablespace v Datafiles ........................................ 21 Hnh 5. Quan h gia cu trc lun l v vt l trong CSDL .............................. 21 Hnh 6. Cp pht thm vng lu tr cho CSDL ................................................... 22 Hnh 7. Quy trnh m/tt CSDL Oracle ................................................................ 24 Hnh 8. Role trong database.................................................................................. 34 Hnh 9. Cu trc mt khi PL/SQL ...................................................................... 47 Hnh 10. Hai dng khi chng trnh PL/SQL ..................................................... 48 Hnh 11. V tr lu tr cc chng trnh trong schema ........................................ 61 Hnh 12. Cc s kin ca Trigger ......................................................................... 64 Hnh 13. T chc lu tr trong qu trnh thc hin giao dch cp nht CSDL .... 67 Hnh 14. Biu trng thi tng ng vi mt GD ............................................. 68 Hnh 15. Cc thnh phn lin quan vic qun l GD trong HQTCSDL .............. 70 Hnh 16. Cc lch trnh tun t ............................................................................. 72 Hnh 17. th ch c chu trnh .......................................................................... 82 Hnh 18. S phn cp ca mn ......................................................................... 87 Hnh 19. S c xy ra khi cc GD ang thc hin cnh tranh ............................. 89 Hnh 20. Cc la chn sao lu ton CSDL........................................................... 99 Hnh 21. Mt chin lc sao lu tng dn chnh lch ....................................... 101 Hnh 22. Mt chin lc sao lu tng dn tch ly ............................................ 101 Hnh 23. Nguyn l sao lu, hon li v phc hi CSDL .................................. 103 Hnh 24. Oracle Net Manager ............................................................................. 105 Hnh 25. t Net Service Name ......................................................................... 106 Hnh 26. Chn giao thc mng c s dng .................................................... 106 Hnh 27. Cc thit lp ca giao thc................................................................... 106 Hnh 28. Thit lp tn service ............................................................................. 107 Hnh 29. Kim tra kt ni ................................................................................... 107 Hnh 30. Thng bo kt ni thnh cng ............................................................. 107 Hnh 31. Giao din SQL Developer ................................................................... 108 Hnh 32. Kt ni trc tip ................................................................................... 108 Hnh 33. Kt ni thng qua Oracle Net .............................................................. 109 Hnh 34. Ca s chnh ca Oracle SQL Developer ............................................ 109 Hnh 35. Li ng nhp do cha c quyn kt ni n CSDL ........................... 110 Hnh 36. Dng cc bin ...................................................................................... 120 Hnh 37. Ca s nhp d liu ............................................................................. 120

Gio Trnh H Qun Tr C S D Liu trang 4

Khoa CNTT & Truyn Thng Trng i Hc Cn Th

DANH MC BNG
Bng 1. Mt s quyn h thng thng dng ......................................................... 30 Bng 2. Mt s quyn trn i tng thng dng ................................................ 32 Bng 3. Cc roles c nh ngha sn ................................................................ 36 Bng 4. Thng tin v cc roles ............................................................................. 37 Bng 5. Cc tham s trong lnh imp v exp ......................................................... 38 Bng 6. Cc tham s tng ng gia imp/exp v Oracle Data Pump .............. 40 Bng 7. Cc mu biu thc chnh quy .................................................................. 45 Bng 8. Cc kiu d liu trong Oracle ................................................................. 47 Bng 9. Cc ngoi l thng xy ra..................................................................... 57 Bng 10. Din gii cc thuc tnh ca con tr ...................................................... 59 Bng 11. Lch trnh cnh tranh ............................................................................. 71 Bng 12. Lch trnh gy mt d liu cp nht....................................................... 73 Bng 13. Lch trnh ph thuc vo GD khng hon tt ........................................ 74 Bng 14. Lch trnh phn tch khng nht qun. .................................................. 74 Bng 15. Lch trnh khng kh phc hi .............................................................. 75 Bng 16. Giao thc 2PL gii quyt vn mt d liu cp nht. ................... 79 Bng 17. Giao thc 2PL gii quyt vn ph thuc vo GD khng hon tt.... 79 Bng 18. Giao thc 2PL gii quyt vn phn tch khng nht qun. .............. 80 Bng 19. Lch trnh cun nhiu tng (cascade rollback). .................................... 80 Bng 20. Tnh trng kha cht .............................................................................. 81 Bng 21. S tng thch ca cc kha trong c ch kha a ht ......................... 87 Bng 22. Mt on ca tp tin nht k. ................................................................ 90 Bng 23. Cc mc c lp v cc hin tng c .................................................. 94 Bng 24. Bng tng thch ca cc kho ............................................................. 96

Gio Trnh H Qun Tr C S D Liu trang 5

Khoa CNTT & Truyn Thng Trng i Hc Cn Th

TNG QUAN MN HC
Mc ch yu cu Mn H qun tr CSDL l mt mn hc gip sinh vin nm c cc kin thc v cc k nng c bn qun tr mt CSDL quan h c phn quyn v bo mt. ng thi, sinh vin c kh nng s dng ngn ng lp trnh tng tc mnh m vi CSDL thng qua vic thit k v s dng th tc, hm v trigger. a s cc h qun tr s dng ph bin trn th trng hin nay u h tr cc tnh nng trnh by trong gio trnh ny. minh ha, phn mm c chn thc hnh l h qun tr CSDL Oracle 10g R2. Sinh vin s thc hnh trong 6 bui (30 tit) ng vi 6 bi thc hnh vi cc ch khc nhau. Sau khi hon tt hc phn ny, sinh vin c th: Kt ni, qun l CSDL (to/xa/khi ng/tt CSDL) . Qun l v cp quyn cho ngi dng v sao chp CSDL. Thc hin cc thao tc c bn trn CSDL (to bng, ci t rng buc trn bng; thm, sa, xa d liu). Lp trnh to hm, th tc, trigger vi ngn ng PL/SQL. Hiu c s iu khin cnh tranh gia cc giao dch. Qun l sao lu, phc hi. Hiu v ci t cc bin php bo v h thng CSDL. Ni dung ct li Ti liu gm 3 chng l thuyt v 6 bi thc hnh. Mi bi thc hnh s tp trung vo mt s ni dung vi cc bi tp c hng dn v bi tp t lm. Kin thc tin quyt Nh mt mn bt buc, mn hc ny c a vo ging dy cho sinh vin chuyn ngnh Cng Ngh Thng Tin vi yu cu sinh vin hon thnh hc phn H C S D Liu (CT106). Phng php hc tp Vi mc tiu nng cao kh nng t hc tp v t nghin cu ca sinh vin, ngi son c gng lng ghp vo ni dung cc v d minh ha n gin, c th; ng thi b tr b cc vi mong mun to s d hiu cho sinh vin v ngi c. hc tt mn hc ny, trc ht sinh vin cn phi: Tham gia y cc bui hc l thuyt trn lp v cc bui thc hnh trn phng my. Trc mi bui thc hnh, SV t nghin cu v lm phn bi tp c hng dn nh. Trong mi bui thc hnh, sinh vin ch thc hin phn bi tp khng c hng dn. Sinh vin cn lu li tt c cc cu lnh lm mi bi s dng cho cc bi sau. Gio Trnh H Qun Tr C S D Liu trang 6

Khoa CNTT & Truyn Thng Trng i Hc Cn Th Thi lng b tr cho tng chng, tng bi Chng I: Cc bin php bo v CSDL Chng II: Ngn ng SQL & PL/SQL 6t 2 bui LT 3t 1 bui LT

Chng III: Qun l giao dch, sao lu v phc hi 6t 2 bui LT Phn thc hnh: Bi 1: Lm quen vi Oracle, qun l ngi dng, 5t 1 bui TH import/export Bi 2: DDL & DML Bi 3: Ngn ng PL/SQL Bi 4: Hm, th tc Bi 5: Trigger Bi 6: Qun l giao dch & sao lu, phc hi CSDL 5t 1 bui TH 5t 1 bui TH 5t 1 bui TH 5t 1 bui TH 5t 1 bui TH

Mt s quy c to s d dng trong vic theo di gio trnh, cc phn quan trng c vit theo cc nh dng khc nhau v quy c nh sau: Phn quan trng CODE Cc k hiu trnh by trong c php ca cc cu lnh c ngha nh sau: CH HOA t kha ch thng t do ngi dng nh ngha, cn thay th khi vit lnh c th. {A | B} mc ny bt buc phi c, nhng c th chn A hoc B. [A] mc A ny khng bt buc. A ... mc A c th xut hin nhiu ln. ::= c thay bng

Gio Trnh H Qun Tr C S D Liu trang 7

Khoa CNTT & Truyn Thng Trng i Hc Cn Th

Chng 1 Cc bin php bo v CSDL


Trong chng ny t mc 1 n mc 7 l l thuyt tng qut v cc bin php bo v CSDL bng my tnh. Ty theo tng HQTCSDL m mc v cch thc ci t cc bin php ny khc nhau. T mc 8 ca chng tr v sau s dng HQTCSDL Oracle minh ha cc bin php c th ny.

1 Cc bin php bo v bng my tnh


An ton trong CSDL (DB security) l s bo v CSDL khi nhng e da c ch hay v tnh thng qua cc bin php c s dng my tnh hoc khng c s dng my tnh Vic xem xt an ton khng ch p dng cho d liu trong CSDL, m cn bao gm c phn cng, phn mm v con ngi. Chng ta xem xt an ton CSDL trong cc tnh hung sau: CSDL b nh cp hay gian ln CSDL mt i tnh bo mt CSDL mt tnh ring t CSDL mt tnh ton vn CSDL mt tnh sn sng Nguy c (threat) l nhng tnh hung hay s kin, c th l c hay v tnh, s nh hng bt li n mt h thng v v vy nh hng n c t chc. Nguy c c th l hu hnh nh mt mt v phn cng, phn mm, d liu, hay v hnh nh s tn nhim ca khch hng. Mi nguy c phi c xem nh mt s vi phm an ninh c th xy ra. T chc phi nhn nh c tt c cc nguy c tim n, hay t ra l cc nguy c quan trng, t a ra cc k hoch phng trnh cng nh bin php i ph ph hp. Khi xy dng cc bin php ny cn lu chi ph thc hin v mc cn tr i vi ngi dng. C rt nhiu bin php bo v h thng khc nhau c th chia thnh 2 loi l cc bin php khng s dng my tnh v nhng bin php c s dng my tnh. Cc bin php khng s dng my tnh bao gm cc b tr thit b mt cch an ton, qun tr nhn s, chnh sch an ninh cng nh k hoch i ph vi nhng bt ng, Trong khun kh ca gio trnh ny, ta ch quan tm nhng bin php bo v c s dng my tnh. Cc bin php bo v bng my tnh cp trong gio trnh ny bao gm: Cp quyn (authorization) Khung nhn (Views) Sao lu v phc hi (Backup and restore) Ton vn d liu (Integrity) Mt ha (Encryption) Cng ngh RAID

Gio Trnh H Qun Tr C S D Liu trang 8

Khoa CNTT & Truyn Thng Trng i Hc Cn Th

2 Cp quyn
Cp quyn l s gn quyn cho mt ngi dng hay chng trnh c th truy cp vo mt h thng hay mt i tng ca h thng. Chng thc ngi dng (authentication) l c ch xc nh mt ngi dng l ai. C ch chng thc ngi dng ph bin nht l s dng nh danh ngi dng cng vi mt khu, mc d cch ny khng th m bo mt cch hon ton. V vy, cn phi c nhng th tc i km nng cao tnh an ton cho h thng nh: Mt khu phi c gi kn v thay i nh k. nh danh v mt khu lu trong h thng phi dng m ha. a ra cc qui nh v thnh phn ca mt khu. ra cc th tc cn thit v theo di st vic cp quyn cho ngi dng. Mt s HQTCSDL s dng cc nh danh ngi dng ring, mt s s dng cc nh danh ngi dng ca h iu hnh bn di hoc h tr c hai. Ch s hu (ownership) ca mt i tng trong CSDL l ngi to ra i tng . Cc i tng c sn trong HQTCSDL s thuc v bn thn HQTCSDL m i din l nh qun tr CSDL (DBA). Ch s hu c mi quyn (privileges) trn i tng ca mnh v c th gn quyn trn i tng cho ngi khc. HQTCSDL ghi nhn tt c cc quyn gn cho ngi dng no v gn bi ai; c th duy tr ng n tp quyn trn tng ngi dng khi quyn c g b. Cc HQTCSDL c th h tr nhiu mc cp quyn khc nhau (mc ngi dng user hoc nhm ngi dng - role). nh danh ngi dng thng c u tin cao hn nh danh nhm. Mi ngi dng c to ra c th c gn 2 loi quyn: Quyn i tng (Object Privileges). Cc quyn ny cho php ngi dng thc hin cc thao tc no trn mt i tng ca CSDL; chng hn quyn SELECT, INSERT, UPDATE,.. d liu trong mt bng no . Quyn h thng (System Privileges): Cc quyn ny cho php ngi dng thc hin thao tc no trong CSDL nhng khng gn vi mt i tng tn ti no; chng hn quyn to bng, to view,..

2.1 Lnh SQL cp quyn:


Cc quyn nh ngha bi chun ISO: SELECT, INSERT, UPDATE, DELETE, REFERENCES, USAGE Gn quyn trn i tng cho ngi dng bng lnh:
GRANT {danh_sch_quyn | ALL PRIVILEGES} ON tn_i tng TO {danh_sch_nh_danh_c_cp | PUBLIC} [WITH GRANT OPTION]

Ty chn WITH GRANT OPTION cho php ngi dng c cp tip tc cp nhng quyn ny cho ngi khc. Lnh gn quyn h thng thng thng cng c cc H QTCSDL ci t tng t nhng b i mnh ON.

Gio Trnh H Qun Tr C S D Liu trang 9

Khoa CNTT & Truyn Thng Trng i Hc Cn Th

2.2 Lnh SQL thu hi quyn:


Lnh REVOKE c dng g b quyn trn i tng khi ngi dng c cp:
REVOKE [GRANT OPTION FOR] {ds_quyn| ALL PRIVILEGES} ON i_tng FROM {danh_sch_nh_danh_c_cp | PUBLIC} [RESTRICT | CASCADE]

RESTRICT: mc nh, s ngng thc thi lnh Revoke nu kt qu cu lnh lm nh hng n cc i tng ph thuc. CASCADE: Cc i tng ph thuc s b xa hoc g ra. Lnh thu hi quyn h thng thng thng cng c cc H QTCSDL ci t tng t nhng b i mnh ON.

3 Khung nhn
Khung nhn l kt qu ng ca mt hoc nhiu thao tc quan h trn cc quan h c s (base table) sinh ra mt quan h khc. Mt khung nhn l mt bng o (virtual table), n khng thc s tn ti trong CSDL. Mt ngi dng c th c gn cc quyn thch hp trn mt khung nhn nh ngha trn nhiu bng. Bng cch ny ta s m bo tnh an ton cho d liu tt hn l gn quyn trn nhiu bng c s.

3.1 Lnh dng to view:


CREATE VIEW tn_view [(tn_ct [,...])] AS cu_truy_vn [WITH [CASCADED | LOCAL] CHECK OPTION]

Cc dng i vo v ra khi view c gi l cc dng di c (migrating rows). WITH CHECK OPTION l ty chn m bo rng cc dng khng di c ra khi view qua cc thao tc insert v update trn view (ngha l, nu mt dng khng tha iu kin WHERE trong cu truy vn ca view th dng s khng c cp nht vo bng c s). Nu chn CASCADE th vic m bo ny cng p dng trn cc view nh ngha trn view ny (y l ch mc nh). Nu chn LOCAL th vic m bo ny cng p dng trn cc view nh ngha trn view ny tr khi dng cng di c khi view hay table nn ca view ny. V d minh ha sau y cho thy lnh UPDATE s khng c thc thi v n lm cho dng mun cp nht c sno = SG37 di c ra khi view high_salary.

Gio Trnh H Qun Tr C S D Liu trang 10

Khoa CNTT & Truyn Thng Trng i Hc Cn Th

3.2 Lnh dng xa view


DROP VIEW tn_view [RESTRICT | CASCADE]

Nu c cc i tng khc tham chiu view ny th trng hp c:


RESTRICT: lnh ny s khng c thc hin CASCADE: lnh ny s xa lun c cc i tng kia.

3.3 Thun li v bt li ca vic s dng view


Cc thun li khi s dng view l: c lp d liu: Mt view gip th hin mt bc tranh nht qun, khng i v cu trc ca CSDL, thm ch khi cc bng ngun bn di c thay i (nh thm, bt ct; mi quan h thay i; cc bng c tch ra, cu trc li, i tn). Tnh mi nht: mi s thay i d liu trong cc bng nn ngay lp tc c phn nh trong view. Nng cao tnh an ton: Nu mi ngi dng c cp quyn truy cp vo CSDL ch thng qua mt tp nh cc views cha d liu thch hp th s gii hn v qun l s truy cp ca ngi dng vo CSDL tt hn. Gim s phc tp: Mt view c th n gin ho cu truy vn, thay v phi truy vn trn nhiu bng th tr thnh truy vn trn mt bng. Thun tin: To s n gin cho ngi dng khi nhn vo CSDL ch thy nhng g h cn. Kh nng ty bin: view cung cp c ch tu chnh din mo ca CSDL, v vy c th to nhiu cch nhn khc nhau vo cng mt CSDL. Ton vn d liu: Nu mnh WITH CHECK OPTION c dng khi to view, th SQL m bo khng c dng no khng tho mnh WHERE trong nh ngha view m c cp nht thng qua view . Bt li: Hn ch cp nht: mi cp nht trong mt bng nn phi c phn nh ngay tc th trong tt c cc view c tham chiu n bng ny. Tng t nh vy, nu ta cp nht d liu thng qua view th cc bng nn cng thay i. Tuy nhin, c mt s gii hn nh sau: Gio Trnh H Qun Tr C S D Liu trang 11

Khoa CNTT & Truyn Thng Trng i Hc Cn Th Ch cho php cp nht trn cc view nh ngha trn 1 bng v c cha cc thuc tnh kho chnh hoc kho ng vin (kho duy nht). Khng cho php cp nht trn view lin quan n nhiu bng. Tuy nhin, iu ny c th khc phc bng cch s dng instead of trigger. Khng cho php cp nht trn view c kt tp hay nhm d liu. Hn ch cu trc: cu trc ca view c xc nh thi im to ra n. Nu trong nh ngha, ta dng SELECT * FROM th view s ly tt c cc ct. Nhng nu sau bng nn c thm ct mi th ct mi ny s khng c mt trong view tr khi ta xo view v to li n. Hiu qu hot ng: Khi s dng view ta phi mt mt t thi gian thc thi cu lnh select trong view. Trong mt s trng hp, thi gian ny khng ng k; trong nhng trng hp khc n c th l mt vn .

4 Sao lu v phc hi
Sao lu l qu trnh sao chp CSDL v cc tp tin nht k (c th k c chng trnh) vo cc thit b lu tr d phng mt cch nh k. y l cng vic ca cc nh qun tr CSDL v cn phi thc hin mt cch c t chc, cc qui nh, bc thc hin sao lu phi c m t r rng. Sao lu l mt cch bo v d liu chng li cc li ng dng v s mt mt d liu khng mong i. Nu d liu gc b mt, chng c th c xy dng li t bn sao lu. Thng tin v phin bn sao lu phi chnh xc. Bn sao lu phi c lu tr nhiu ni. Ni lu tr cc bn sao lu phi c m bo an ton. Cc HQTCSDL ngy nay thng h tr chc nng t ng thc hin sao lu theo lch trnh nh trc ca nh qun tr. Ta c th la chn thc hin sao lu ton b CSDL (complete backup) hoc ch sao lu cc thay i mi din ra (incremental backup) k t ln sao lu trc. Thng thng, cc bn sao lu ny c lu trong b lu tr offline nh bng t. Nu c s c lm cho CSDL b hng, cc bn sao chp d phng v cc chi tit lu trong cc tp tin nht k s c s dng phc hi li h thng v tnh trng n nh gn nht c th. Qu trnh phc hi ny cng cn phi c m t r rng v phi t chc kim th thng xuyn m bo h thng c th phc hi nu c s c. im kim tra (checkpoint): L im din ra s ng b gia CSDL v tp tin nht k giao dch. Ti thi im ny, tt c cc vng m s c ghi ra b lu tr th cp v mt mu tin kim tra s c ghi vo trong nht k. C ch ny gip cho cc cp nht ang din ra trn CSDL c ghi ra ngoi a. Cc k thut ny s c tho lun chi tit hn trong chng qun l giao dch.

5 Ton vn d liu
Vic qun l ton vn cng gp phn duy tr mt h thng CSDL an ton, bo v d liu lun lun hp l, khng b sai. RBTV thng c chia lm 4 loi v cc HQTCSL hin nay h tr nhiu cng c cho php ci t hu ht cc rng buc ny trong CSDL thay v phi lp trnh trong ng dng nh trc kia: Gio Trnh H Qun Tr C S D Liu trang 12

Khoa CNTT & Truyn Thng Trng i Hc Cn Th Rng buc v kha hay rng buc thc th: PRIMARY KEY, UNIQUE KEY Rng buc v min tr: CHECK CONSTRAINT, DEFAULT VALUE Rng buc v tham chiu: FOREIGN KEY Rng buc khc: PROCEDURE, FUNCTION, TRIGGER Cc cng c ci t ba loi rng buc u c hc trong hc phn H CSDL. Trong hc phn ny s tip tc hc cc cng c ci t loi rng buc cn li.

6 Mt ho d liu
Nu h CSDL lu gi cc d liu quan trng th cn lu m ho d liu trnh cc nguy c t bn ngoi hay truy cp tri php c th xy ra. Mt s h QTCSDL cung cp tin ch m ha nhm mc ch ny. Mt ha l s m ha d liu bng mt gii thut c bit lm cho d liu khng th c c nu khng c kha gii m (decryption key). C nhiu k thut m ha d liu, c th chia thnh 2 loi: Kh o (reversible): C th gii m d liu v nh ban u. Bt kh o (irreversible): khng cho php gii m d liu v nh ban u. Mt h thng mt ha kh o bao gm: kha m, gii thut m ha, kha gii m v gii thut gii m. C hai loi h thng mt ha: i xng (symmetric): H thng i xng s dng cng 1 kha m v gii m chng hn nh DES (Data Encryption Standard) do IBM pht trin. Gii thut chuyn mi khi vn bn 64-bit s dng kho 56-bit. DES c cho l cha an ton lm, cn phi c kho di hn na. H m ho PGP (Pretty Good Privacy) v vy s dng kho 128-bit. Bt i xng (asymmetric): s dng cc kha khc nhau m v gii m. in hnh l h thng mt ha kha cng cng public key cryptosystems nh RSA, mi i tng s c 2 kho: kho ring (private key) v kho cng cng (public key). Ngi A mun gi thng ip n ngi B s dng kho cng cng ca B m ho, khi ch c B mi c th c c thng ip v B mi c kho ring tng ng gii m. H m ho ny cng c dng gi ch k in t km theo thng ip chng t thng ip n t ngi k ln thng ip. Thng thng, gii thut i xng chy nhanh hn. Nhng trong thc t, ta thng dng phi hp c hai loi. H thng dng kho cng cng m ho mt kho sinh ra ngu nhin, v kho ngu nhin ny c gii thut i xng dng m ho thng ip.

Gio Trnh H Qun Tr C S D Liu trang 13

Khoa CNTT & Truyn Thng Trng i Hc Cn Th

7 RAID (Redundancy Array of Independent Disks)


Mt trong cc phn cng c nguy c b h v nh hng nghim trng n h CSDL l cc a cng. m bo cho h thng vn c th hot ng cho d s c c xy ra, mt gii php ra i, l cng ngh RAID. RAID hot ng bng cch sp xp mt dy cc a c lp ci tin tin cy v tng hiu sut hot ng cho h thng. Hiu sut c tng ln nh k thut tho ri d liu (data stripping): d liu c chia thnh cc phn bng nhau v c phn phi cho nhiu a mt cch trong sut. iu ny to cho ta c v nh c mt a ln, vi tc nhanh t cc a nh hn. K thut ny ci tin hiu sut vo/ra a bng cch cho php nhiu dch v vo/ra thc hin song song. ng thi cng cn bng ti gia cc a. tin cy c ci tin nh vic lu tr thng tin lp li trn nhiu a s dng c ch chn l (parity) hay c ch sa li (error-correcting). Mi byte c lu km thm 1 bit cho bit s bit 1 trong byte l chn hay l. Nu c bit no b li th gi tr ca bit chn l s khng cn trng khp vi s bit 1 trong byte. C ch sa li th cn thm vi bit na cho mi byte c th phc hi li bn gc khi c 1 bit b h. C nhiu mc RAID ng vi nhiu mc cu hnh a khc nhau: RAID 0 Khng d tha (Nonredundant): khng lu d liu lp li do to hiu sut ghi tt nht v khng cn phi lp li vic cp nht. Vic chia d liu c thc hin mc khi. RAID 1 phn chiu (mirror): Mc ny duy tr hai phin bn d liu ging ht nhau trn cc a khc nhau. duy tr tnh nht qun khi c li xy ra, vic ghi c th khng c thc hin ng thi. y l gii php lu tr t tin nht. RAID 0 + 1 Gii php ny kt hp c phn chia v phn chiu. RAID 2 Memory-style error-correcting codes (MSECC): Vi mc ny, n v phn chia l bit v m Hamming c s dng nh l c ch d tha c th sa li. RAID 3 Bit-interleaved Parity: Mc ny cung cp d tha bng cch lu tr thng tin chn l trn mt a trong dy a. Thng tin ny c th c s dng phc hi d liu trn cc a kia nu chng b h. Mc ny s dng t khng gian lu tr hn RAID 1 nhng a chn l c th tr thnh mt nt c chai. RAID 4 Block-interleaved Parity: Vi mc ny, n v chia d liu l 1 khi a Khi chn l c duy tr trn mt a ring bit cho cc khi tng ng t mt s a khc. Nu mt trong cc a b li, khi chn l c dng kt hp vi cc khi tng ng t cc a khc phc hi li cc khi a h. RAID 5 Block-interleaved Distributed Parity: Mc ny s dng d liu chn l tng t nh mc 3 nhng chia d liu chn l c chia ra lu trn nhiu a, tng t nh cch chia d liu ngun. iu ny trnh tnh trng nt c chai a chn l nh mc 3. RAID 6 P+Q Redundancy: Mc ny tng t nh mc 5 nhng c thm d liu d tha bo v h thng khi c nhiu li xut hin trn a. Khi m sa li s c dng thay cho m chn l. Vic chn la mc RAID no ci t cho h thng ph thuc vo nhiu yu t nh bn cht d liu, chi ph, mc quan trng ca d liu,v.v.

Gio Trnh H Qun Tr C S D Liu trang 14

Khoa CNTT & Truyn Thng Trng i Hc Cn Th

Hnh 1. Cc mc RAID. Cc con s biu th cho cc khi d liu tun t v cc k t ch cc phn on ca mt khi d liu.

Gio Trnh H Qun Tr C S D Liu trang 15

Khoa CNTT & Truyn Thng Trng i Hc Cn Th

8 Cc khi nim v cu trc lu tr CSDL Oracle


8.1 Gii thiu
Oracle Database l phn mm HQTCSDL c cung cp bi cng ty Oracle. Nhn chung, cc HQTCSDL u c kh nng qun l mt cch tin cy s lng ln d liu trong mi trng a ngi dng, sao cho nhiu ngi dng c th truy cp ng thi cng mt d liu m vn gi c tnh nht qun ca d liu . HQTCSDL cng cn c bo v chng li cc xm nhp tri php v c kh nng phc hi d liu khi c li xy ra. Bn pht hnh gn y nht ca Oracle Database l 11g, bn ny gm cc phin bn sau: Standard Edition One (SE1) cung cp cc tnh nng d s dng, mnh m cho cc nhm lm vic, cc n v phng ban v cc ng dng web. Standard Edition (SE) c thit k cho cc my ch n hoc phn tn. Enterprise Edition (EE) cung cp qun l d liu mt cch hiu qu, tin cy v bo mt cho cc ng dng x l giao dch trc tuyn (OLTP), cc ng dng qun l ni dung v web 2.0. C 3 phin ca Oracle Database 11g u c xy dng da trn kin trc chung v hon ton tng thch vi nhau. Cc phin bn ny u c kh nng trin khai trn cc h iu hnh khc nhau (Windows, Linux, Unix) v km theo rt nhiu cng c h tr pht trin ng dng cng nh cc th vin lp trnh. Ch g trong Oracle Database 11g l vit tt cm t Grid Computing (tnh ton li GC). y l kin trc mi ca ngnh cng ngh thng tin trong thit k v ci t cc h thng thng tin. Vi GC, nhm cc phn cng c lp cng vi cc thnh phn phn mm c kt ni nhau v c phn phi theo yu cu thay i ca ti cng vic (workloads). So vi cc kin trc trc y, GC cung cp dch v c cht lng cao hn v chi ph thp hn. Dch v c cht lng cao v GC khng c s c do mt thnh phn n l gy ra v c mt kin trc bo mt mnh m. Chi ph thp do GC gia tng ti a kh nng s dng cc ti nguyn h thng. Cc phn cng hoc thnh phn phn mm rnh ri khng cn tn hin cho mt tc v chuyn bit m s c cp pht cho cc tc v khc c nhu cu s dng. V hc phn ny c xem nh l phn nhp mn, cung cp cho sinh vin cc kin thc c bn v H qun tr CSDL ni chung v H qun tr Oracle ni ring, chng ti thit k cc bi thc hnh trn phin bn Oracle 10g R2 vi y cc tnh nng c bn v i hi cu hnh my thc hnh nh nhng hn so vi cc phin bn Oracle 11g.

8.2 Database v Instance


Cc HQTCSDL u dng c b nh my tnh v cc thit b lu tr nh cng hot ng. Cc cng cung cp kh nng lu tr lu di v mt khng gian rng ln cha hng triu mu tin c th ln n hng gigabyte. Tuy nhin, truy cp d liu t cng chm hn nhiu so vi truy cp t b nh. V th cc h CSDL u s dng b nh vo vic np trc d liu nhm tng tc truy vn. Gio Trnh H Qun Tr C S D Liu trang 16

Khoa CNTT & Truyn Thng Trng i Hc Cn Th Trong Oracle, mt CSDL (database) l mt tp hp cc tp tin h thng lu tr d liu do ngi dng hoc chng trnh a vo v thng tin v cu trc ca CSDL (metadata). c th truy vn v cp nht CSDL, Oracle phi khi ng mt s tin trnh nn v cp pht mt vi vng nh s dng trong sut qu trnh thao tc trn CSDL. Khi mt CSDL c khi ng (start), mt SGA (System Global Area) c cp pht v cc tin trnh nn (Oracle background processes) c khi ng. S kt hp gia SGA v cc tin trnh nn c gi l th hin CSDL (Database Instance hoc Oracle Instance). SGA l mt vng nh chia s dng lu tr d liu v cc thng tin iu khin ca mt th hin (instance). Khi kt ni n server, ngi dng c chia s cc d liu c trong SGA. Vng nh ny s c gii phng khi th hin c tt (shutdown) v mi th hin c mt SGA ring bit. Mt tin trnh l mt c ch hot ng trong h iu hnh, n thc hin mt dy cc bc lin tip nhau v c mt vng nh ring. Cc tin trnh nn trong Oracle c chia thnh 2 dng: tin trnh ngi dng (user process) v tin trnh my ch (server process). Tin trnh ngi dng c to ra v duy tr nhm thc thi cc m lnh ca cc trnh ng dng (nh Oracle Forms, ...) hay cc cng c Oracle (nh Oracle Enterprise Manager, Database Configuration Assistance, ...). Tin trnh my ch c nhim v iu khin cc yu cu t cc tin trnh ngi dng c kt ni. Khi tin trnh my ch khi ng, Oracle cng cp pht mt vng m b nh PGA (Program Global Area) cha ng d liu v thng tin iu khin cho mi tin trnh ny. Nhn chung, mi th hin c mt tp hp cc tin trnh duy tr v thc p mi quan h gia cu trc vt l ca CSDL v cu trc b nh. S lng cc tin trnh ph thuc vo cu hnh ca mi th hin CSDL. Trong mt server, nhiu CSDL c th tn ti song song. V vy, khng b ln ln gia cc CSDL khc nhau, mi th hin CSDL c nhn dng bng mt SID ring bit (System Identifier). Mt CSDL c th c m (open hay mount) bi nhiu hn mt th hin, nhng mt th hin ch c th m nhiu nht mt CSDL m thi.

Hnh 2. Database Instance

8.3 Cu trc lu tr ca CSDL Oracle


Trong h qun tr Oracle, mt CSDL c cu thnh bi 2 cu trc: lun l v vt l. Cu trc lun l m t cc vng nh dng lu tr cc i tng nh cc Gio Trnh H Qun Tr C S D Liu trang 17

Khoa CNTT & Truyn Thng Trng i Hc Cn Th bng, cc hm Ngc li, cu trc vt l c xc nh bi cc tp tin h thng hnh thnh nn CSDL. 8.3.1 Cu trc vt l (physical database structure) Cu trc vt l lin quan n cc tp tin c lu tr trn thit b phn cng, chng lin quan n vn lu tr d liu, cc tham s, nht k, lu vt, sao lu m bo h thng hot ng n nh. 8.3.1.1Datafiles Oracle lu tr d liu trong cc datafiles (c phn m rng *.dbf) tng ng vi tablespace. Bn cht ca mt CSDL l mt tp hp cc datafiles c lu tr trn cc thit b khc nhau nh a t, a quang hc Datafile c cc tnh cht sau: Mi datafile ch lin kt vi mt CSDL. Datafile c mt s c tnh c th m rng t ng khi ln ca CSDL vt qu gii hn. Mt hoc nhiu datafiles to thnh mt n v lu tr lun l c gi l tablespace. D liu trong datafile c c trong lc thc thi ca CSDL v c lu tr trong b nh m ca phn mm Oracle nhm tng tc truy cp. D liu c thm mi hoc sa i khng nht thit c ghi ngay lp tc ln datafile. gim s lng truy cp thit b lu tr v tng hiu qu thc thi, cc d liu ny c lu tm trong b nh v c ghi ng lot ln cc datafile vo mt thi im nh sn. Nhim v ny c m trch bi tin trnh nn Database Background Writer (DBWn). 8.3.1.2Control Files Cc Control Files c phn m rng *.ctl. Mi th hin CSDL c t nht 1 tp tin dng ny. N rt cn thit cho hot ng bnh thng ca CSDL. Cc tp tin ny c cp nht thng xuyn trong qu trnh hot ng ca CSDL, v vy n lun c t vo ch ghi khi CSDL c m. V l do no cc tp tin khng truy cp c, CSDL s khng hot ng ng n. Cc Control Files ghi nhn cc thng tin ca CSDL nh tn CSDL, cc thng tin v tablespace v cc redo-log file Control File cn c dng trong thao tc phc hi d liu. 8.3.1.3Redo Log Files Cc tp tin Redo Log c phn m rng *.rdo hoc *.log. Mi th hin CSDL duy tr mt tp hp cc tp tin dng ny ghi li ton b cc giao dch (transaction) v cc thay i trn datafiles. Khi CSDL b li, cc tp tin ny c dng phc hi li d liu n thi im mu tin redo cui cng c ghi. Mi CSDL duy tr t nht 2 nhm tp tin Redo Log v mi tp tin ch thuc vo mt nhm. Ti mi thi im, ch mt nhm tp tin trng thi hin thi ghi nhn cc mu tin redo. Khi dung lng vt qu gii hn, nhm ny s chuyn trng thi hin thi sang nhm khc. 8.3.1.4Archived Redo Log Files V Oracle s dng xoay vng cc nhm tp tin redo log, nn c kh nng mt nhm tp tin c cha cc mu tin redo b ghi v nh vy thng tin redo b tht Gio Trnh H Qun Tr C S D Liu trang 18

Khoa CNTT & Truyn Thng Trng i Hc Cn Th lc. V vy, Oracle phi m bo cc tp tin ny khng b ghi nu cha c lu ra tp tin Archived Redo Log. Khi mt th hin CSDL c thc thi di ch ARCHIVELOG, tin trnh ARCH ca Oracle s dng cc tp tin dng ny lu li cc mu tin redo trn nhm tp tin redo log. 8.3.1.5Parameter Files Tp tin ny lu tr cc thng s cu hnh cho th hin v CSDL nh: ln ca datablock, ng dn n ni lu tr datafiles, ln ca vng nh SGA, s sessions, s processes Ngoi ra, CSDL Oracle cn c Server Parameter File (SPFILE) lu tr cc thng s khi ng ca CSDL, nh qun tr c th thay i cc thng s trc tip trn tp tin ny theo nhu cu h thng. 8.3.1.6Alert v Trace Log Files Mi tin trnh nn v my ch u c th lu vt hot ng trn mt Trace Log File tng ng. Mi khi c mt li ni ti trong tin trnh, thng tin v li c ghi ra tp tin. Phn ln thng tin ghi ra Trace Log File dnh cho nh qun tr CSDL, cc thng tin khc phc v cho dch v h tr ca Oracle (Oracle Support Service). Cc thng tin ny cn c dng iu chnh cc ng dng v th hin CSDL. 8.3.1.7Backup Files y l cc tp tin c nh dng c bit c nh ngha bi Oracle. Cc tp tin ny phc v cho qu trnh khi phc CSDL mi khi c s c v thit b lu tr hay li do ngi dng gy ra. 8.3.2 Cu trc lun l (logical database structure) Cu trc lun l bao gm data block, extend, segment v tablespace; m t cc vng nh lu tr d liu v cho php Oracle iu khin vic s dng a cng n mc nh nht. 8.3.2.1Data blocks n v lu tr nh nht c dng trong CSDL, c xc nh bi mt s bytes nht nh trong vng nh vt l ca CSDL. ln ca data block c xc nh khi CSDL c to ra v c nh ngha bi tham s khi to DB_BLOCK_SIZE. 8.3.2.2Extends n v lu tr lun l nh nht c cp pht cho mt i tng CSDL, bao gm mt dy lin tc cc khi d liu (data blocks) c cp pht lu tr mt kiu thng tin nht nh. 8.3.2.3Segments

Gio Trnh H Qun Tr C S D Liu trang 19

Khoa CNTT & Truyn Thng Trng i Hc Cn Th Tp hp cc extent c cp pht lu tr cc cu trc d liu nht nh v cc extent ny c lu tr trong cng mt tablespace. V d, d liu ca mt bng c lu trong mt table segment, cc ch mc c lu trong cc index segment Khi cc extent cp pht cho segment y d liu, Oracle s cp pht thm extent cho segment . V cc extent c cp pht khi cn thit nn cc extent trong cng mt segment c th khng lin tc trong b nh. Mt s loi segments c nh ngha trong Oracle: Data segment: d liu ca cc bng c lu trong cc extends ca data segment. Index segment: lu tr cc thng tin v ch mc. Temporary segment: c t Hnh 3. Mi quan h gia Data block, ng to ra bi Oracle mi extend v Segment khi cu lnh SQL cn mt vng lu tr d liu tm thi hon tt thc thi. Khi cu lnh SQL kt thc hot ng, vng nh ny c gii phng v tr li h thng cho cc yu cu khc. Rollback segment: khng cha cc i tng CSDL, m cha hnh nh trc (before image) ca d liu c thay i trong khi mt giao tc cha hon thnh. Cc thay i trn d liu c th c cun li bng cch s dng segment ny. 8.3.2.4Tablespace Mt CSDL c chia thnh cc phn vng lun l c gi l tablespaces. Tt c cc i tng ca CSDL u c lu tr trong cc tablespace. V mt vt l, mi tablespace bao gm mt hoc nhiu datafiles. T phin bn 10g tr i, mt CSDL Oracle c t nht mt tablespace mang tn SYSTEM cha t in d liu (data dictionary) v mt mang tn SYSAUX nhm chia ti vi SYSTEM. Cc tablespace khc c to ra nhm phc v cho cc ng dng v cc tc v khc nhau.

Gio Trnh H Qun Tr C S D Liu trang 20

Khoa CNTT & Truyn Thng Trng i Hc Cn Th

Hnh 4. Mi tng quan gia Tablespace v Datafiles

Cc tablespace c th t ch smallfile hoc bigfile khi c to ra. Smallfile l ch truyn thng, tablespace c th n 1022 datafiles. Bigfile l ch c t phin bn 10g, tablespace ch cha 1 datafile nhng c ln n 232 data blocks, ty theo ln ca data block, bigfile tablespace c ln n 8 exabytes (1 exabyte = 1018 bytes). Ch ny cho php Oracle s dng kh nng ca h thng 64bit to v qun l cc tp tin c dung lng cc ln.

Hnh 5. Quan h gia cu trc lun l v vt l trong CSDL

Tablespace c th t ch online (truy cp c) hoc offline (khng truy cp c). Tablespace thng c t ch online ngi dng c th truy cp d liu. Tuy nhin, i khi nh qun tr cn t mt tablespace ch offline nhm mc ch bo tr, ngi dng ch khng truy cp c tablespace ny nhng vn truy cp c cc tablespaces khc trong CSDL. Oracle nh ngha 3 loi tablespaces khc nhau: Tablespaces c nh (permanent tablespace) cha cc i tng CSDL tn ti lu di (persistent schema objects), cc i tng ny c lu trong datafile. Undo tablespace l mt kiu khng gian d liu c nh c dng qun l vic hon tc d liu (undo data) nu CSDL c t di ch qun l hon tc t ng (automatic undo management). Oracle khuyn co s dng undo tablespace thay v s dng rollback segment cho vic hon tc d liu. Tablespaces tm thi (temporary tablespace) cha cc i tng CSDL trong mt phin lm vic. Tablespace dng ny c dng qun l vng nh cho cc thao tc sp xp (sort operations) trn CSDL. V d, nu ta kt ni hai Gio Trnh H Qun Tr C S D Liu trang 21

Khoa CNTT & Truyn Thng Trng i Hc Cn Th bng d liu rt ln, Oracle khng th thc hin thao tc sp xp trong b nh, mt vng nh s c cp pht trong temporary tablespace thc hin thao tc ny. Cc lnh SQL cn cung cp vng nh thc hin thao tc sp xp gm: CREATE INDEX, ANALYZE, Select DISTINCT, ORDER BY, GROUP BY, UNION, INTERSECT, MINUS, Tablespace lu tr nhiu loi i tng gin (schema object) nh bng, ch mc, hm, th tc, trigger, Bng d liu ch l mt loi i tng gin , c nh danh duy nht bi tn v bao gm nhiu hng lu tr d liu, mi hng c gi l 1 tuple hay 1 record. Mt bng d liu c th c nhiu ct. Mi ct c nh ngha bi 1 tn v 1 kiu d liu, m t thuc tnh ca 1 b (tuple). Mt bng d liu c th c ti a 254 ct c kiu d liu ging nhau hoc khc nhau. 8.3.3 Cp pht thm vng lu tr cho CSDL Ta c 3 cch m rng vng lu tr cho CSDL : B sung thm datafile cho tablespace. To mt tablespace mi. Tng vng nh ca datafile.

B sung thm datafile

To tablespace mi

Tng vng nh ca Datafile


Hnh 6. Cp pht thm vng lu tr cho CSDL

Gio Trnh H Qun Tr C S D Liu trang 22

Khoa CNTT & Truyn Thng Trng i Hc Cn Th

8.4 Schema v schema objects


Schema l mt tp hp cc i tng CSDL (database object hoc schema object) thuc v mt ngi dng. Mi ngi dng trong 1 CSDL s hu duy nht mt schema c tn trng vi tn ngi dng, ngc li mi schema ch tng ng vi mt ngi dng m thi. Schema Object l cu trc lun l lin quan trc tip n d liu ca CSDL, bao gm cc cu trc nh bng (table), khung nhn (view), cc th tc tr sn (stored procedure) Cc schema objects thng dng: Bng d liu: n v lu tr d liu c bn nht trong CSDL Ch mc: cu trc ty chn kt hp vi bng d liu, c s dng nhm tng hiu qu kt xut d liu. Khung nhn: cch biu din d liu t mt hoc nhiu bng hoc cc khung nhn khc. Thc cht, khung nhn khng cha ng d liu m c xem nh mt cu truy vn tr sn (stored query). D liu trong khung nhn c th c cp nht, xa, thm mi nh bng d liu vi mt s hn ch. Mi thay i trn khung nhn nh hng trc tip n cc bng d liu hoc khung nhn khc c lin quan. Synonym: l b danh cho mt schema object bt k hoc mt synonym khc. Thng tin v synonym c lu tr trong t in d liu.

8.5 Data dictionary


T in d liu l mt tp hp cc bng (table) v khung nhn (view) ging nh cc CSDL khc, l ni lu tr cc thng tin v cu trc vt l v lun l ca CSDL. Cc thng tin ny bao gm: Thng tin ngi dng (quyn, vai tr) Rng buc ton vn ca cc bng d liu. Tn v kiu d liu ca cc ct trong bng d liu. Thng tin v vng nh c cp pht v s dng ca cc schema object. Th hin CSDL lun truy cp n t in d liu phn tch c php cu lnh SQL. SYS l ch nhn v l ngi dng duy nht c ton quyn thao tc trn cc bng v khung nhn ca t in d liu. tham kho cc bng v khung nhn ca t in d liu, s dng cu lnh:
SELECT * FROM DICT[IONARY]

9 M/tt CSDL v th hin (startup/shutdown)


9.1 Gii thiu
Mi CSDL Oracle trng thi thc thi u kt hp vi mt th hin CSDL ( database instance). Khi CSDL c khi ng trn mt my ch, Oracle cp pht vng nh SGA v khi ng cc tin trnh nn ca phn mm. S kt hp gia SGA v cc tin trnh c gi l th hin CSDL. Sau khi khi ng th hin, Oracle kt hp th hin vi CSDL tng ng, lc ny ta ni CSDL c lin kt (mounted database). Khi , CSDL sn sng c m (open) ngi dng truy cp. Gio Trnh H Qun Tr C S D Liu trang 23

Khoa CNTT & Truyn Thng Trng i Hc Cn Th Ch duy nht nh qun tr CSDL c quyn khi ng th hin v m CSDL, cng nh tt CSDL v gii phng th hin. Alter database open
MOUNT

OPEN

SHUTDOW

Ch : vic m/tt c s d liu bng lnh c thc hin trong chng trnh SQL*Plus.

9.2 M CSDL
Cch n gin nht m CSDL l s dng dng lnh startup, dng lnh ny s a CSDL t trng thi shutdown ln open. Trng thi nomount Khi thc hin lnh startup, u tin CSDL i vo trng thi nomount. Trong sut trng thi ny, Oracle c tp tin cha cc thng s khi ng (init.ora) ly thng tin v cu hnh CSDL nh ln vng nh SGA, Tip theo, Oracle khi ng th hin CSDL vo cui trng thi nomount. i vi mt s thao tc khi phc (recovery) yu cu CSDL phi trng thi nomount, chng ta dng lnh startup nomount. Nu s dng lnh startup, CSDL s tip tc t ng chuyn sang trng thi mount. Trng thi mount Khi vo trng thi ny, Oracle m tp tin iu khin (control file) c thng tin v v tr ca cc data files v cc thng tin v cu trc vt l khc. Khi nh dng v tr ca cc data files, CSDL sn sng c m. i vi mt s thao tc khi phc (recovery) yu cu CSDL phi trng thi mount, chng ta dng lnh startup mount. Nu th hin c khi ng bng lnh startup nomount, vo trng thi mount, chng ta dng lnh alter database mount. Nu s dng lnh startup, CSDL s tip tc t ng chuyn sang trng thi open. Trng thi open Nu CSDL ang trng thi mount, chng ta dng lnh alter database open vo trng thi open. Khi a CSDL vo trng thi open, Oracle truy cp n tt c cc data file lin quan n CSDL. Khi , Oracle m bo tnh nht qun ca tt c data files. Vo lc ny, CSDL sn sng cho ngi dng truy cp d liu. Gio Trnh H Qun Tr C S D Liu trang 24

STARTUP

Alter database mount Startup nomount


SHUTDOWN NOMOUNT

Hnh 7. Quy trnh m/tt CSDL Oracle

Khoa CNTT & Truyn Thng Trng i Hc Cn Th Ngoi cch khi ng thng thng, chng ta c th khi ng CSDL ch hn ch (restrict mode) bng cu lnh cu lnh startup restrict. ch ny, ch nhng ngi dng c quyn c bit (SYS, SYSTEM) mi c th truy cp CSDL. Nu CSDL c m, chng ta dng lnh alter system enable restrict session a CSDL vo trng thi ny. Ngc li, ta dng lnh alter system disable restrict session.

9.3 Tt CSDL
Mt s thao tc yu cu nh qun tr phi ng CSDL nh thay i cu hnh, sao lu d liu hay nng cp phn mm Oracle. Khi , ta s dng lnh shutdown. ng CSDL cng tri qua mt s trng thi theo quy trnh ngc li so vi m CSDL. Tuy nhin, ta ch c th a CSDL v trng thi shutdown m khng dng li cc trng thi trung gian c. ng CSDL: Oracle ghi tt c thng tin d liu t SGA ra data files v redo log files. Tip theo, tt c data files v redo log files c ng li. V th, CSDL khng cn truy cp c. Tuy nhin, control files vn cn c m v CSDL vn c lin kt. Ngt lin kt (unmount): Oracle ngt lin kt gia th hin v CSDL. Lc ny, control files c ng li v th hin vn cn trong b nh. Tt th hin: th hin c gii phng khi vng nh v cc tin trnh nn kt thc thc thi. CSDL Oracle c th c ng 3 ch khc nhau: Ch bnh thng (normal): dng lnh shutdown. y l ch mc nh, CSDL ch tt khi tt c cc thao tc trn CSDL kt thc. Tt c thay i trn d liu u c ghi ln data files. Tuy nhin, ch ny t dng v i hi Oracle phi ch i tt c ngi dng log off khi CSDL. Nu mt ngi dng no ng nhp v qun tt phin lm vic, CSDL c kh nng khng bao gi tt c. Ch tc khc (immediate): dng lnh shutdown immediate. Ch ny ngn chn cc truy cp mi, cun li tt c cc giao dch cha hon tt v tt CSDL. Tt c thay i trn d liu u c ghi ln data files Ch d b (abort): dng lnh shutdown abort. y l cch tt CSDL p buc, cch ny t c s dng v nh hng n d liu v mi thay i s khng c ghi ra data files v cc giao dch khng c cun li. y l la chn cui cng nu CSDL khng tt c bng cc ch khc.

10 Oracle Net
Oracle Net l mt middleware c ci t trn Oracle Client v Oracle Database Server. Oracle Net cung cp cc gii php kt ni trong mi trng tin hc khng ng nht v phn tn, gip cho vic cu hnh v qun l mng d dng hn. Oracle Net cho php thit lp mt phin kt ni mng (network session) t mt ng dng trnh khch (Client Application) n my ch CSDL (Database Server). Mt khi phin kt ni mng c thit lp, Oracle Net ng vai tr nh mt knh trao i d liu Gio Trnh H Qun Tr C S D Liu trang 25

Khoa CNTT & Truyn Thng Trng i Hc Cn Th gia ng dng khch v my ch. N c nhim v thit lp, qun l kt ni mng v trao i cc thng ip (messages) gia trnh khch v my ch. Phin kt ni mng c thit lp thng qua listener module, mt tin trnh c lp ca my ch CSDL. Listener nhn cc yu cu kt ni ca trnh khch v qun l vic dn ng n my ch. Mi khi trnh khch yu cu kt ni, listener nhn yu cu ny. Nu thng tin cung cp bi trnh khch tng ng vi cc thng tin ca listener, trnh khch c php truy cp n my ch. i vi client, database l mt dch v (service) thc thi cng vic thay cho client. y dch v m database cung cp cho client chnh l lu tr d liu v gi li d liu khi cn. Khi kt ni, client nhn bit database qua tn dch v (service name) mc nh trng vi global database name (kt hp ca tn CSDL v tn min). yu cu thit lp kt ni, ngi dng phi gi i tn ti khon, mt khu cng nh danh (identifier) ca dch v cn kt ni. nh danh ny c gi l nh danh kt ni cho php xc nh: Dch v cn kt ni. ng dn mng n dch v ny. nh danh kt ni c th c biu th bng nhiu cch. Cch thc c p dng rng ri nht l tn dch v mng (net service name) tng ng vi mt m t kt ni (connect descriptor). M t ny cha ng cc thng tin v dch v cn kt ni v ng dn mng. Dch v c xc nh bi tn ca dch v (tn ca CSDL). ng dn mng cung cp cc thng tin v a ch mng, cng hot ng v giao thc mng s dng ca Listener. Khi yu cu kt ni, client gi phng thc Service Naming thit lp lin lc vi Listener c ch nh trong m t kt ni hay net service name. Listener chp nhn kt ni vi client thng qua mt giao thc mng. N so snh cc thng tin do client cung cp vi cc thng tin tng ng c cung cp bi dch v CSDL, nu cc thng tin ny khp nhau, kt ni s c php thit lp gia client v database server. Phng thc giao tip mng (network protocol) thng c s dng trong mng Oracle l TCP/IP, c cng mc nh 1521. Ngoi ra, i vi lp trnh vin v qun tr vin, ng dng pha trnh khch (application client) l ng dng ca nh pht trin th ba (third party), cung cp mt giao din tng tc thn thin vi h qun tr Oracle. Hin nay, cc ng dng ny c pht trin rt nhiu trn th gii nh Maestro, SQL Navigator, Oracle SQL Developer

11 Cc bin php bo v CSDL Oracle


11.1 Qun l ngi dng
Vic phn quyn s dng l cn thit trong cng vic qun tr. C 2 user accounts c t ng to ra ngay t khi to database v c gn quyn DBA (DataBase Administration) l: SYS v SYSTEM. SYS: c to t ng v gn quyn DBA. Mt khu mc nh l change_on_install. C quyn s hu cc bng v cc khung nhn ca t in d liu trong CSDL.

Gio Trnh H Qun Tr C S D Liu trang 26

Khoa CNTT & Truyn Thng Trng i Hc Cn Th SYSTEM: c t ng to ra vi mt khu ban u l manager v cng c gn quyn DBA. Tuy nhin, SYSTEM cn c s hu c mt s table, view m rng cha cc thng tin s dng cho cc tools ca Oracle. Lu : Ngay khi to CSDL, Oracle to sn mt quyn gi l "DBA". Quyn ny cho php thc hin cc thao tc qun tr i vi CSDL. Ngi dng c quyn DBA c th can thip c ti cc quyn ca cc user khc s dng trong h thng. V th, nhng qun tr vin database cn thay i mt khu ca mnh trnh s dng mt khu mc nh do Oracle cung cp v user khc c th bit v s dng truy nhp vo h thng mt cch tri php, gy xo trn h thng. Khi to mt ti khon mi, ta cn xc nh cc thng s sau cho ti khon : Default Tablespace (tablespace mc nh) Default Tablespace l tablespace mc nh cha cc segments c tin trnh ca ngi dng s dng lu tr d liu trong trng hp ngi dng khng ch r tn tablespace ngay khi to segment. Tablespace Quotas (hn mc tablespace) Tablespace quotas l dung lng lu tr ti a ng vi kh nng lu tr vt l c php ca ngi dng ny trong CSDL. Temporary Tablespace (tablespace trung gian) Temporary tablespace l ni Oracle server cp pht cc extends phc v cho cng vic sp xp (sort) d liu mi khi ngi dng thc hin lnh truy vn c sp xp. Account Locking (kho account) Cc Accounts c th b kho (locked) ngn cn vic ngi dng thm nhp vo CSDL. Vic ny c th c thc hin mt cch t ng hoc do iu khin ca nh qun tr CSDL. Resource Limits (hn ch ti nguyn) L nhng gii hn c a ra cho ngi dng ny v cc ti nguyn ca h thng nh: thi gian s dng CPU, truy xut vo ra, s lng cc sessions c m ti a,... 11.1.1 Cc bc thc hin khi to mi ngi dng La chn username (tn user dng truy cp CSDL) v c ch xc nhn i vi user ny. Ch ra cc tablespaces cho user dng lu tr d liu. Gn cc default tablespace v temporary tablespace. Phn b hn mc s dng trn tng tablespace. Phn quyn truy nhp (privileges - quyn hoc roles vai tr) cho user va to lp.

11.1.2 To mi ngi dng C php


CREATE USER tn_user IDENTIFIED {BY mt_khu | EXTERNALLY} [ DEFAULT TABLESPACE tn_tablespace ]

Gio Trnh H Qun Tr C S D Liu trang 27

Khoa CNTT & Truyn Thng Trng i Hc Cn Th


[ TEMPORARY TABLESPACE tn_ tblsp] [ QUOTA {s_nguyn [K | M ] | UNLIMITED } ON tablespace [ QUOTA { s_nguyn [K | M ] | UNLIMITED } ON tn_tablespace ] ...]

Vi: Tn truy nhp ca ngi dng. BY mt_khu Xc nh c ch xc nhn bi CSDL vi mt khu truy nhp l mt_khu. EXTERNALLY Xc nh c ch xc nhn user bi h iu hnh. DEFAULT/TEMPORARY tn_tblsp Xc nh tablespace mc nh/tm thi cho ngi dng. QUOTA Xc nh lng khng gian ti a cp pht cho ngi dng lu tr cc i tng trong tng tablespace. T kho UNLIMITED cho bit khng gii hn khng gian cp pht. V d : To mt ngi dng c tn v password l userTest, cp Quota 1M trn tablespace USERS
tn_user CREATE USER userTest IDENTIFIED BY usertest DEFAULT TABLESPACE USERS TEMPORARY TABLESPACE TEMP QUOTA 1M ON USERS ;

11.1.3 Thay i mt khu ca ngi dng C php:


ALTER USER tn_user [ IDENTIFIED {BY mt_khu | EXTERNALLY }]

V d: i mt khu ca ngi dng userTest thnh ptest


ALTER USER userTest IDENTIFIED BY ptest;

11.1.4 Thay i hn mc (quota) s dng tablespace Trong mt s trng hp, ta c th thay i hn mc s dng tablespace khi: Cc bng ca ngi dng khng th m rng lu tr thm c na. Cc ng dng c ci tin i hi b sung thm cc tables hay indexes. Cc i tng c t chc li v c t trn nhiu tablespaces khc nhau. C php:
ALTER USER tn_user [ DEFAULT TABLESPACE tn_tablespace] [ TEMPORARY TABLESPACE tn_tablespace] [ QUOTA {s_nguyn [K | M] | UNLIMITED } ON tn_tablespace [ QUOTA {s_nguyn [K | M] | UNLIMITED } tn_tablespace ] ... ]

ON

V d: Tng hn mc cho ngi dng userTest thnh 2M


ALTER USER userTest QUOTA 2M ON USERS ;

11.1.5 Xa ngi dng C php: Gio Trnh H Qun Tr C S D Liu trang 28

Khoa CNTT & Truyn Thng Trng i Hc Cn Th


DROP USER tn_user [CASCADE]

Lu : CASCADE s hu tt c cc i tng trong schema trc khi xo ngi dng. N cn c ch r khi schema c cha i tng. Ta khng th hu c cc ngi dng hin ang kt ni ti Oracle server. 11.1.6 Xem thng tin v ngi dng Ta c th ly cc thng tin lin quan ti user trong data dictionary DBA_USERS v DBA_TS_QUOTAS. Vi mi ngi dng, ta c th xc nh c cc thng tin v hn mc. V d: xem cc thng hn mc tin ca ngi dng userTest.
SELECT tablespace_name, blocks, max_blocks, bytes, max_bytes FROM dba_ts_quotas WHERE username = 'userTest';

Nu kt qu tr v c gi tr -1 trong ct MAX_BLOCKS v MAX_BYTES ngha l quota khng gii hn (UNLIMITED). Hoc ta cng c th ly cc thng tin v ti khon ca ngi dng V d:
SELECT username, account_status, temporary_tablespace FROM dba_users;

11.2 Qun l quyn


Mi ngi dng c to ra c th c gn 2 loi quyn: Quyn h thng (System Privileges): Cc quyn ny cho php ngi dng thc hin thao tc no trong CSDL chng hn to bng, to view,.. Quyn i tng (Object Privileges). Cc quyn ny cho php ngi dng thc hin thao tc no trong mt i tng ca CSDL chng hn quyn SELECT, INSERT, UPDATE,.. trong mt bng no . 11.2.1 Quyn h thng

11.2.1.1 Cc loi quyn h thng Oracle database c khong 140 quyn h thng v con s ny ang tip tc tng ln. Cc quyn h thng c th chia ra nh sau: Cc quyn cho php thc hin cc thao tc truy cp, to dung lng lu tr trn h thng v d nh: CREATE SESSION, CREATE TABLESPACE. Cc quyn cho php qun l cc i tng thuc v mt ngi dng v d nh: CREATE TABLE. Cc quyn cho php qun l cc i tng trong bt c mt schema no v d nh cu lnh: CREATE ANY TABLE. C th iu khin cc quyn bng cch cu lnh GRANT hay REVOKE. Phn loi Cc quyn thng dng
CREATE TABLE

Gio Trnh H Qun Tr C S D Liu trang 29

Khoa CNTT & Truyn Thng Trng i Hc Cn Th


CREATE ANY TABLE ALTER ANY TABLE DROP ANY TABLE SELECT ANY TABLE UPDATE ANY TABLE DELETE ANY TABLE CREATE SESSION ALTER SESSION RESTRICTED SESSION CREATE TABLESPACE ALTER TABLESPACE DROP TABLESPACE UNLIMITED TABLESPACE
Bng 1. Mt s quyn h thng thng dng

TABLE

SESSION

TABLESPACE

Ch :
CREATE SESSION l quyn ti thiu nht ca mt user c th kt ni vo

CSDL. Cc quyn nh CREATE TABLE, CREATE PROCEDURE, CREATE TRIGGER bao gm c cc quyn xo cc i tng . CREATE TABLE bao gm cc quyn CREATE INDEX v ANALYZE. Vi quyn ny, ngi dng cn c quota trn tablespace hay phi c gn UNLIMITED TABLESPACE. c th xa ht d liu (truncate) ca cc bng th quyn DROP ANY TABLE phi c s dng. 11.2.1.2 Gn cc quyn h thng S dng c php sau y gn quyn h thng cho ngi dng
GRANT {quyn_h_thng|tn_role}[, {quyn_h_thng|tn_role} ]... TO {tn_user|tn_role|PUBLIC}[, {tn_user|tn_role|PUBLIC} ]... [WITH ADMIN OPTION]

Vi:
quyn_h_thng tn_role PUBLIC WITH ADMIN OPTION

ch nh quyn h thng s dng. ch nh tn Role c gn. gn quyn h thng cho tt c ngi dng. cho php ngi dng c gn quyn c th gn quyn hay Role cho ngi dng khc.

V d:
GRANT CREATE SESSION,CREATE TABLE TO userTest;

Hoc nu mun cho userTest ny c th cp li quyn ca mnh cho user khc, ta s dng thm mnh WITH ADMIN OPTION
GRANT CREATE SESSION,CREATE TABLE TO userTest WITH ADMIN OPTION;

Gio Trnh H Qun Tr C S D Liu trang 30

Khoa CNTT & Truyn Thng Trng i Hc Cn Th Mt s hng dn Ngi dng c gn quyn a vi tu chn WITH ADMIN OPTION th c th tip tc gn quyn a cho mt ngi dng khc, thm ch vi ty chn WITH ADMIN OPTION. Bt c mt ngi dng no c quyn GRANT ANY ROLE c th gn bt k quyn no trong CSDL cho ngi dng khc. Mt ngi dng nu c gn quyn a vi tu chn WITH ADMIN OPTION th c th gn quyn ny hay ly li cc quyn ny t bt c ngi dng hay role no trong database. 11.2.1.3 Thu hi cc quyn h thng S dng c php sau y ly li cc quyn h thng:
REVOKE {quyn_h_thng|tn_role} [,{quyn_h_thng|tn_role} ]... FROM {tn_user|tn_role|PUBLIC} [, {tn_user|tn_role|PUBLIC} ]...

V d:
REVOKE CREATE TABLE FROM userTest;

Ch : Lnh REVOKE ch c th ly li quyn ca ngi dng c gn trc tip bng lnh GRANT. Thu hi cc quyn h thng c th nh hng n mt s cc i tng ph thuc. V d: nu quyn SELECT ANY TABLE c gn cho mt ngi dng v ngi dng c gn cc th tc hay view m s dng cc bng thuc v cc ngi dng khc th vic ly li cc quyn s lm cho cc th tc hay view tr nn khng hp l. 11.2.1.4 Xem thng tin v cc quyn h thng Thng tin v cc quyn c ly t cc view ca data dictionary: DBA_SYS_PRIVS v SESSION_PRIVS. Cc thng tin bao gm:
DBA_SYS_PRIVS: GRANTEE, PRIVILEGE, ADMIN OPTION SESSION_PRIVS: PRIVILEGE

V d 1: Lt k cc quyn h thng c gn cho user v role:


SELECT * FROM DBA_SYS_PRIVS;

V d 2: Mun bit user hin hnh c quyn g.


SELECT * FROM SESSION_PRIVS;

11.2.2

Quyn i tng

11.2.2.1 Cc quyn trn i tng Quyn trn i tng c gn cho ngi dng l thao tc m ngi dng c th thc hin trn i tng . Bng di y lit k cc quyn thng dng c th c gn trn mt i tng:

Gio Trnh H Qun Tr C S D Liu trang 31

Khoa CNTT & Truyn Thng Trng i Hc Cn Th Quyn


ALTER DELETE EXECUTE INSERT SELECT UPDATE X X X X X X

Table
X X

View
X

Procedure

Bng 2. Mt s quyn trn i tng thng dng

11.2.2.2 Gn cc quyn trn i tng S dng c php sau y gn mt quyn trn i tng:
GRANT { quyn_i_tg [(ds_ct)][, quyn_i_tg [(ds_ct)] ]... |ALL [PRIVILEGES]} ON [tn_schema.]tn_i_tng TO {tn_user|tn_role|PUBLIC}[, {tn_user|tn_role|PUBLIC} ]... [WITH GRANT OPTION]

Vi: Ch nh quyn i tng c gn ds_ct Ch nh cc ct ca mt bng hay view (tu chn ny ch s dng khi gn cc quyn INSERT hay UPDATE. ALL Gn tt c cc quyn cho i tng m c gn vi WITH GRANT OPTION. tn_i_tng ch nh i tng trn cc quyn c gn. WITH GRANT OPTION cho php ngi c gn quyn c th gn cc quyn cho mt ngi dng khc. Lu : gn cc quyn trn i tng, i tng phi thuc v schema ca ngi dng thc hin gn hoc ngi dng c quyn WITH GRANT OPTION. Mc nh nu mt i tng thuc v mt ngi dng no th ngi dng c y cc quyn trn i tng . Tu chn WITH GRANT OPTION khng dng cho vic gn cc quyn i tng cho cc Role.
quyn_i_tg

V d: ng nhp vi ti khon ca ngi dng scott v password l tiger, sau thc hin cp quyn xem v cp nht d liu trn bng Emp cho userTest
GRANT select,update ON Emp to userTest;

11.2.2.3 Thu hi cc quyn trn i tng S dng c php sau y ly li quyn cp:
REVOKE { quyn_i_tg [, quyn_i_tg]... | ALL [PRIVILEGES] } ON [tn_schema.]tn_i_tng FROM {tn_user|tn_role|PUBLIC} [, {tn_user|tn_role|PUBLIC}...]

Gio Trnh H Qun Tr C S D Liu trang 32

Khoa CNTT & Truyn Thng Trng i Hc Cn Th


[CASCADE CONSTRAINTS]

Vi:
quyn_i_tg Ch nh quyn trn i tng c gn .

Thu hi ton b cc quyn trn i tng c gn cho ngi dng. ON Ch nh i tng trn cc quyn trn i tng c thu hi. FROM Ch nh ngi dng hay role b thu hi quyn. CASCADE CONSTRAINTS Xo tt c cc tham chiu m vic thu hi c nh ngha do s dng quyn REFERENCES hay ALL.
ALL

V d: ng nhp vi ti khon ca ngi dng scott v password l tiger, sau thc hin thu hi quyn cp nht d liu trn bng Emp t userTest
REVOKE update ON Emp FROM userTest;

11.2.2.4 Thng tin v cc quyn trn i tng Thng tin v cc quyn c lu tr trong cc data dictionary. Mt s thng tin ta cn quan tm:
DBA_TAB_PRIVS: GRANTEE, OWNER, TABLE_NAME, GRANTOR, PRIVILEGE, GRANTABLE DBA_COL_PRIVS: GRANTEE, OWNER, GRANTOR, PRIVILEGE, GRANTABLE TABLE_NAME, COLUMN_NAME,

V d: DBA c th truy vn bng DBA_TAB_PRIVS ly thng tin v cc quyn trn i tng c gn cho ngi dng userTest.
SELECT * FROM dba_tab_privs WHERE GRANTEE='userTest'

11.3 Qun l Role (vai tr)


11.3.1 Khi nim Role Gi s mt CSDL c cp M quyn nh nhau cho N users c cng chc nng trong h thng, nh vy h thng cn thc hin N*M thao tc gn quyn. Hn na, sau mt thi gian, gi s h thng cn thu hi mt quyn no trn N users ny, h thng phi thc hin N thao tc thu quyn. Mt khc, cc thao tc gn quyn v thu quyn ny l nh nhau cho mi user, vic ny c th dn n s nhm chn v mt thi gian trong cng vic. tng y l s dng mt nhm cc quyn, nhm ny s c gn cho cc users c cng chc nng trong h thng, v vic gn hay thu hi quyn trn mt nhm s nh hng trc tip n cc user thuc vo nhm . V th, cng vic gn quyn s tr nn nh nhng v linh ng hn. Theo tng , Oracle cung cp mt cng c cho php qun l mt cch d dng cc quyn thng qua vic s dng vai tr (Role). Role l mt tp hp cc quyn c ch nh bng mt tn ring v c th c gn cho cc user hay Role khc.

Gio Trnh H Qun Tr C S D Liu trang 33

Khoa CNTT & Truyn Thng Trng i Hc Cn Th

Hnh 8. Role trong database

11.3.2

Cc tnh cht ca Role c gn v ly li t ngi dng. C th gn role cho bt c ngi dng no ngoi tr cho chnh n. C th bao gm c quyn h thng (system privileges) v quyn i tng (object privileges). C th enable v disable cc Role c gn cho cc ngi dng. C th yu cu password khi cn enable cc Role. Tn cc Role khng trng vi tn ngi dng v tn cc Role ang tn ti. Khng thuc v bt c ngi dng no v khng thuc v bt c schema no. Li ch ca vic s dng Role

11.3.3

Gim cng vic gn cc quyn: s dng cc Role n gin ho vic qun l cc quyn, bng cch gn mt tp cc quyn cho ngi dng. C th gn cc quyn cho mt Role v sau gn Role cho cc ngi dng. Qun l cc quyn mt cch linh ng: khi thay i cc quyn c trong mt Role th quyn ca tt c cc ngi dng c gn cc Role s b thay i theo. 11.3.4 To role Role c to ra phi m bo khng trng tn vi cc ngi dng hoc role khc. C php:
CREATE ROLE tn_role [NOT IDENTIFIED | IDENTIFIED {BY mt_khu | EXTERNALLY }]

Vi: tn ca Role NOT IDENTIFIED ch nh khng cn kim tra Role khi enable Role BY mt_khu mt khu ngi dng cn cung cp khi enable Role EXTERNALLY ch nh ngi dng phi c xc lp bi dch v bn ngoi (nh h iu hnh hay dch v bn th ba) trc khi kch hot Role. V d: To role c tn StudentsGroup
tn_role

Gio Trnh H Qun Tr C S D Liu trang 34

Khoa CNTT & Truyn Thng Trng i Hc Cn Th


CREATE ROLE StudentsGroup;

11.3.5 Sa cha cc Role C php:


ALTER ROLE tn_role {NOT IDENTIFIED | IDENTIFIED {BY mt_khu | EXTERNALLY }};

Vi:
tn_role NOT IDENTIFIED IDENTIFIED BY mt_khu EXTERNALLY

tn ca Role cn thay i. ch nh khng cn xc nhn khi enable Role ch nh cn xc nhn khi enable cc Role cung cp mt khu xc nhn khi enable Role ch nh user cn c xc nhn bi dch v bn ngoi (c ch xc nhn bi h iu hnh)

11.3.6 Cp quyn cho Role C php ging nh cp quyn cho ngi dng. 11.3.7 Gn cc Role cho ngi dng C php :
GRANT tn_role [, tn_role ]... TO {tn_user|tn_role|PUBLIC} {tn_user|tn_role|PUBLIC} ]... [WITH ADMIN OPTION] [,

Vi : tn ca Role tn_user tn ca user c gn vo Role_name tn_role tn ca Role c gn vo Role_name PUBLIC Gn cho tt c cc ngi dng WITH ADMIN OPTION cho php ngi dng c gn Role c th gn Role tng ng cho ngi dng khc. V d:
tn_role GRANT StudentsGroup TO userTest;

11.3.8 Thu hi cc Role t cc user S dng c php sau y thu hi cc Role t cc ngi dng:
REVOKE tn_role [, tn_role ]... FROM {tn_user|tn_role|PUBLIC} ]... {tn_user|tn_role|PUBLIC}[,

Vi:
tn_role tn_user tn_role

tn ca cc Role cn thu hi. tn ngi dng b thu hi Role. tn ca cc Role b thu hi Role.

Gio Trnh H Qun Tr C S D Liu trang 35

Khoa CNTT & Truyn Thng Trng i Hc Cn Th


PUBLIC

thu hi cc quyn hay Role t tt c cc ngi dng.

V d: Chuyn userTest ra khi role StudentsGroup


REVOKE StudentsGroup FROM userTest;

11.3.9 Xo cc Role xo cc Role t database s dng cu lnh sau:


DROP ROLE role_name;

11.3.10

Cc Role c nh ngha sn Tn Role Din gii Role cung cp sn tng thch vi cc phin bn trc Tt c cc quyn h thng, c tu chn:
WITH ADMIN OPTION

CONNECT RESOURCE DBA EXP_FULL_DATABASE IMP_FULL_DATABASE DELETE_CATALOG_ROLE EXECUTE_CATALOG_ROLE SELECT_CATALOG_ROLE

Quyn export d liu ca database Quyn import d liu vo database Quyn xo d liu Quyn thc hin mt th tc Quyn ly d liu
Bng 3. Cc roles c nh ngha sn

tn DELETE_CATALOG_ROLE, EXCUTE_CATALOG_ROLE v SELECT_CATALOG_ROLE cho php thc hin truy xut ti cc views v cc packages trong data dictionary. Cc Role ny c th gn cho user khng c quyn DBA nhng mun xem thng tin trong cc bng v view thuc data dictionary. 11.3.11 Thng tin v cc role Thng tin v cc Role c ly trong data dictionary. C rt nhiu tables v views cha thng tin v cc quyn c gn cho user. Tn view DBA_ROLES S ROLE_PRIVS DBA_SYS_PRIVS ROLE_SYS_PRIV S ROLE_TAB_PRIV S SESSION_ROLES Cc Role c php ca user hin thi Quyn trn table c gn cho Role Cc Role c gn quyn cho Role khc Quyn h thng gn cho user hay Role Quyn h thng gn cho Role Din gii Tt c cc Role trong CSDL

Cc

Role

DBA_ROLE_PRIV Cc Role c gn quyn cho user hay Role khc

Gio Trnh H Qun Tr C S D Liu trang 36

Khoa CNTT & Truyn Thng Trng i Hc Cn Th


Bng 4. Thng tin v cc roles

V d: Xem thng tin v cc quyn cp pht cho ngi dng


SELECT Role, password_required FROM dba_Roles;

11.4 Import v export


11.4.1 Gii thiu Chc nng export cho php xut ni dung lun l ca mt CSDL vo mt tp tin nh phn nh ngha bi Oracle c gi l tp tin dump. Chc nng import s dng tp tin ny to li cc i tng CSDL trn mt lc c ch nh hoc trn ton b CSDL. Tp tin dump xut ra t mt CSDL c th c dng to li d liu trn cng CSDL hoc trn mt CSDL khc, ngay c khi cc CSDL ny c ci t di nhng cu hnh phn cng v phn mm khc nhau. V d, tp tin dump ca mt CSDL trn h iu hnh Windows c th dng to li cc i tng CSDL trn h iu hnh Linux. thc hin 2 chc nng ny ta dng 2 lnh h thng exp v imp (thc thi bng cng c Command Console ca Windows hoc cng c Terminal ca Linux). T phin bn 10g, Oracle cung cp thm mt tnh nng mi c gi l Oracle Data Pump, c hiu qu thc thi vt tri so vi import v export truyn thng. 11.4.2 Cc phng thc ca chc nng import v export

11.4.2.1 Cp CSDL y l phng thc phc tp nht. Vi chc nng export, tt c cc i tng ca CSDL c xut ra tp tin dump tr cc i tng ca mt s ngi dng nh: SYS, ORDSYS, CTXSYS, MDSYS, v ORDPLUGINS. ng thi, tp tin dump bao gm cc thng tin lin quan n cu trc ca CSDL nh nh ngha cc tablespace v cc segments rollback Vi chc nng import, tt c cc i tng s c to li trong CSDL ch. Tham s FULL cho php xc nh phng thc ny trong cc chc nng import v export. Ch : trong trng hp import c CSDL, cn phi to li tt c ngi dng v cc quyn tng ng trong CSDL ngun. 11.4.2.2 Cp ngi dng Tt c cc i tng ca ngi dng bao gm cc bng d liu, th tc, trigger u c xut ra tp tin dump. Trong chc nng export, tham s OWNER cho php ch nh cc i tng ca ngi dng cn xut. Vi chc nng import, tham s FROMUSER ch nh to li cc i tng ca ngi dng (hoc lc ) no c xut ra v lu tr trong tp tin dump; mt khc, tham s TOUSER ch nh ngi dng (hoc lc ) ch m ti cc i tng CSDL c to li. 11.4.2.3 Cp bng d liu Tt c cc i tng lin quan n bng d liu (index, rng buc, cc quyn) s c xut ra tp tin dump. 11.4.2.4 Cp tablespace Cc metadata ca tablespace v cc i tng CSDL c xut ra tp tin dump. Gio Trnh H Qun Tr C S D Liu trang 37

Khoa CNTT & Truyn Thng Trng i Hc Cn Th 11.4.3 Yu cu v quyn Hnh ng Export schema Export schema ca ngi dng khc Export ton b CSDL hoc tablespace Import cc i tng 11.4.4
Tham s

Quyn hoc vai tr cn thit CREATE SESSION SYSDBA, EXP_FULL_DATABASE v DBA EXP_FULL_DATABASE IMP_FULL_DATABASE

Cc tham s
ngha Gi tr mc nh imp exp

Userid

Chui kt ni CSDL di dng <tn ngi dng>/<mt khu>[@<tn dch v mng>] Imp/Exp cc rng buc Tn tp tin DUMP Tn tp tin nht k Imp/Exp ton b CSDL Exp d liu ra file dump Imp/Exp cc quyn trn i tng Imp/Exp cc ch mc Tn ngi dng cn thc hin Exp nh ngha iu kin lc cc d liu cn Export Cc bng cn Imp/Exp Tn ngi dng c Export Tn ngi dng ch Imp/Exp cc i tng c lu tr trong tablespace
Bng 5. Cc tham s trong lnh imp v exp

Contraints File Log Full Rows Grants Indexes Owner Query Tables Fromuser Touser Tablespace

Y expdat.dmp N Y Y Y userid x x x x x

x x x x x x x x x x x x x x x

V d

Gi s ta to Net Service Name xe v cc ngi dng SYS, SCOTT v TEST c sn trong h thng. Export ton b CSDL (full=y) khng c d liu (rows=n): exp
userid=sys/hqtcsdl@xe log=D:\export_full.log full=y rows=n file=D:\export_full.dmp

Gio Trnh H Qun Tr C S D Liu trang 38

Khoa CNTT & Truyn Thng Trng i Hc Cn Th Export ton b schema ca ngi dng
userid=sys/hqtcsdl@xe owner=scott file=D:\scott.dmp exp SCOTT: log=D:\scott.log

Export bng DEPT trong schema SCOTT: exp userid=scott/tiger@xe


file=D:\scott_dept.dump log=scott_dept.log tables=dept

Import tt c schema: imp userid=system/hqtcsdl@xe file=D:\export_full.dmp log=D:\imp_full.log Import cc i tng ca SCOTT vo schema TEST: imp userid=system/hqtcsdl@xe file=D:\scott.dmp log=D:\imp_scott_test.log fromuser=scott touser=test
imp userid=system/hqtcsdl@xe file=D:\scott_dept.dmp fromuser=scott touser=test tables=scott.dept

Import

bng

DEPT

ca

SCOTT

vo

schema

TEST:

11.5 Oracle Data Pump


c tch hp t phin bng 10g, Oracle Data Pump h tr di chuyn nhanh chng d liu v metadata gia cc CSDL vi nhau. Data Pump tha hng tt c tnh nng ca phng php import/export truyn thng; nhng c tc thc hin nhanh hn imp/exp t nht 2 ln. Khc vi lnh imp, tp tin xut ra t lnh expdp s lu trn server, tp tin d liu m impdp thao tc cng phi lu trn server; v vy, ta cn to mt th mc cha cc tp tin dump ny v qun l thng qua th mc i tng. Ngi dng no c gn quyn c ghi trn th mc ny th mi c th s dng n. 11.5.1 Th mc i tng (Directory Objects) Oracle Data Pump thao tc vi cc tp tin trn server ti cc th mc c nh ngha v cu hnh sn bi nh qun tr. 11.5.2 Qui trnh thc hin Bc 1: Nh qun tr nh ngha cc th mc i tng v gn cc quyn READ, WRITE cho nhng ngi dng lin quan. V d, to mt th mc ngi dng HR v SCOTT thc hin import v export. M ca s Command, g ln lt cc lnh sau: To th mc mi trong h iu hnh, v d D:\backup sqlplus sys/hqtcsdl as sysdba (ng nhp SQLPLUS) CREATE DIRECTORY dpump_dir AS D:\backup; (ch : th mc ny phi c to trc bng cc cng c ca h iu hnh).
GRANT READ,WRITE ON DIRECTORY dpump_dir TO hr, scott;

Bc 2: Ngi dng s dng cc lnh expdp v impdp thc hin pump d liu trong ca s Command nh cc v d sau: HR thc hin export ton schema ca mnh:
expdp hr/hr DIRECTORY=dpump_dir dumpfile=hr.dmp

SCOTT thc hin export ton schema ca mnh:


expdp scott/tiger DIRECTORY=dpump_dir dumpfile=scott.dmp

HR thc hin import bng emp v dept ca SCOTT vo schema ca mnh :


Impdp hr/hr@hqtcsdl DIRECTORY=dpump_dir DUMPFILE=scott.dmp TABLES={scott.emp, scott.dept} REMAP_SCHEMA=scott:h

Gio Trnh H Qun Tr C S D Liu trang 39

Khoa CNTT & Truyn Thng Trng i Hc Cn Th 11.5.3 Cc tham s tng ng gia imp/exp truyn thng v Data Pump
Tham s truyn thng Userid Contraints File Log Full Rows (Y, N) Grants Indexes Owner Query Tables Fromuser Touser Tablespace h> Tham s Data Pump Dng username/password Exclude=Constraint Dumpfile Logfile Full Contents (All, Metadata_Only) Exclude= Grant Exclude=Index Schemas Query Tables REMAP_SCHEMA=<ngun>:<c

Tablespace

Bng 6. Cc tham s tng ng gia imp/exp v Oracle Data Pump

Gio Trnh H Qun Tr C S D Liu trang 40

Khoa CNTT & Truyn Thng Trng i Hc Cn Th

Chng 2 Ngn ng SQL & PL/SQL trong Oracle


Trong hc phn H CSDL, chng ta c gii thiu v ngn ng SQL mt cch y , chng ny ch tp trung minh ha mt phn ca SQL l cc lnh lin quan n vic qun l cng nh cc i tng lin quan n bng d liu trong Oracle. Ngoi ra, tng thm sc mnh ca mnh, cc HQTCSDL thng trang b thm ngn ng cho php ngi dng lp trnh cu trc nh MS SQL Server c thm ngn ng TSQL, Oracle c PL/SQL. Phn cn li ca chng ny s tp trung vo ngn ng PL/SQL.

1 Bng d liu v cc i tng lin quan


1.1 Qun l bng
1.1.1 Lnh to bng d liu
CREATE [GLOBAL TEMPORARY] TABLE [tn_schema.]tn_table ( tn_ct kiu_ct [DEFAULT biu_thc_mc_nh][Cc_rng_buc_trn_ct] [,tn_ct kiu_ct [,...]] [, Cc_rng_buc_trn_bng] ) ;

Cc rng buc (RB) trn ct c th bao gm mt hoc nhiu loi sau:


[CONSTRAINT tn_rng_buc] {UNIQUE|PRIMARY KEY} [CONSTRAINT tn_rng_buc] CHECK(iu_kin_kim_tra) [CONSTRAINT tn_rng_buc] [NOT] NULL [CONSTRAINT tn_rng_buc] REFERENCES [(cc_ct_kha_tham_chiu)] [ON DELETE {CASCADE|SET NULL}]

tn_bng

Cc rng buc trn bng c th bao gm mt hoc nhiu loi sau:


CONSTRAINT tn_rng_buc {UNIQUE|PRIMARY KEY}(tn_ct [,tn_ct...]) CONSTRAINT tn_rng_buc CHECK(iu_kin_kim_tra) CONSTRAINT tn_rng_buc FOREIGN KEY (danh_sch_ct) REFERENCES tn_table [(cc_ct_kha_tham_chiu)] [ON DELETE {CASCADE|SET NULL}]

V d: To 2 bng d liu sau: CUAHANG(MACH,TENCH,DCHI,DTHOAI) NHANVIEN(MANV,TENNV,NGAYSINH,MACH)


CREATE TABLE CUAHANG ( MACH INTEGER PRIMARY KEY, TENCH NVARCHAR2(20), DCHI NVARCHAR2(30), DTHOAI VARCHAR(10) ) ;

Gio Trnh H Qun Tr C S D Liu trang 41

Khoa CNTT & Truyn Thng Trng i Hc Cn Th


CREATE TABLE NHANVIEN( MANV VARCHAR(10) PRIMARY KEY, TENNV NVARCHAR2(30), NGAYSINH DATE, DCHI NVARCHAR2(30), MACH INTEGER CONSTRAINT NV_FK REFERENCES CUAHANG(MACH) ) ;

Ngoi ra, ta c th to ra bng c cu trc ging nh cu trc ca kt qu tr v t cu truy vn SQL v d liu l cc b tr v t cu truy vn , vi c php:
CREATE TABLE tn_bng AS cu_truy_vn_SQL

V d: to bng c cu trc v cha d liu ca bng NHANVIEN


CREATE TABLE NV_BACKUP AS SELECT * FROM NHANVIEN;

1.1.2 Lnh sa i bng d liu


ALTER TABLE tn_bng nh_ngha_thay_i [,nh_ngha_thay_i] ... ;

nh ngha thay i:
ADD (tn_ct kiu_ct[,...]) MODIFY (tn_ct [kiu_d_liu][DEFAULT biu_thc][,...]) DROP COLMUN (tn_ct[,...]) RENAME COLUMN tn_c TO tn_mi DROP PRIMARY KEY [CASCADE] ADD [CONSTRAINT [tn_rng_buc]] PRIMARY KEY (tn_ct[,...]) ADD [CONSTRAINT tn_rng_buc]] FOREIGN KEY (tn_ct[,...]) REFERENCES tn_table [(DS_ct_kha_tham_chiu)] | DROP CONSTRAINT tn_rng_buc [CASCADE] | RENAME TO tn_bng | | | | | |

V d: Xa rng buc kha ngoi ca bng NHANVIEN


ALTER TABLE NHANVIEN DROP CONSTRAINT NV_FK ;

To li rng buc kha ngoi ca bng NHANVIEN


ALTER TABLE NHANVIEN ADD CONSTRAINT NV_FK FOREIGN KEY (MACH) REFERENCES CUAHANG(MACH) ;

1.1.3 Lnh xa bng d liu


DROP TABLE tn_bng [,tn_bng] ... [CASCADE CONSTRAINTS] CASCADE CONSTRAINTS: xa cc rng buc ton vn lin quan n cc kha

chnh trong bng. Nu b qua t kha ny v trong bng c tn ti cc rng buc ton vn lin quan n cc bng khc, Oracle bo li v khng thc thi cu lnh ny. V d:
DROP TABLE NHANVIEN CASCADE CONSTRAINTS ;

Gio Trnh H Qun Tr C S D Liu trang 42

Khoa CNTT & Truyn Thng Trng i Hc Cn Th 1.1.4 Lnh chn record vo bng
INSERT INTO tn_bng [(ct_i, . . . , ct_j>)] VALUES (gi_tr_i, . . . , gi_tr_j>) ;

V d:
INSERT INTO CUAHANG VALUES ( 1, 'CUA HANG 1', '123 LY TU TRONG', '071088822') ;

1.1.5 Lnh cp nht record trong bng


UPDATE tn_bng SET ct_i = biu_thc_i, . . . , ct_j = biu_thc_j> [WHERE iu_kin>];

V d:
UPDATE CUAHANG SET TENCH='CUA HANG CUA TOI' WHERE MACH=1;

1.1.6 Lnh xa record trong bng


DELETE FROM tn_bng [WHERE iu_kin];

V d:
DELETE FROM CUAHANG WHERE MACH=1;

1.1.7 Lnh xa tt c records trong bng i khi, chng ta cn xa tt c cc records trong bng d liu nhng vn mun gi li cu trc ca n. Cch n gin nht l thc hin lnh DROP xa bng v to li bng vi lnh CREATE TABLE cng vi cc lnh khc to cc kha, index v trigger... cc thao tc ny c th lm mt nhiu thi gian. V vy, cc H qun tr u ci t mt lnh DDL c tn TRUNCATE xa tt c cc dng trong bng d liu nhng vn gi li cu trc v cc rng buc ton vn ca bng . Lnh TRUNCATE c th thc hin nhanh hn lnh DELETE trong trng hp ny. Tuy nhin, chng ta khng th ROLLBACK hay s dng FLASHBACK TABLE ly li d liu b xa bi lnh ny. C php:
TRUNCATE TABLE tn_bng ;

ngi dng thc hin c lnh ny, bng phi thuc lc (schema) ca ngi dng hoc ngi dng c gn quyn DROP ANY TABLE. V d:
TRUNCATE TABLE CUAHANG ;

1.2 Sequence Sequence l danh sch tun t cc s nguyn, c qun l t ng bi Oracle sever. Sequence dng to gi tr mt cch t ng cho kha chnh. C th dng chung mt Sequence cho nhiu i tng. Con s sequence ny c chiu di ti a l 38 s. Sequence tng ng vi autonumber trong mt s h qun tr khc. Gio Trnh H Qun Tr C S D Liu trang 43

Khoa CNTT & Truyn Thng Trng i Hc Cn Th 1.2.1 To Sequence


CREATE SEQUENCE tn_sequence INCREMENT BY s_nguyn START WITH s_nguyn [MAXVALUE s_nguyn] [MINVALUE s_nguyn] [CYCLE/NO CYCLE] [CACHE s_nguyn/NOCACHE];

Trong :
INCREMENT BY START WITH MAXVALUE MINVALUE CYCLE/NO CYCLE NO CYCLE CACHE : Ch nh khong cch ca dy s tun t : Ch nh s u tin ca dy s tun t : Gi tr ln nht ca dy tun t : Gi tr nh nht ca dy tun t : Dy tun t c quay vng khi n im cui. Mc nh l : Ch nh bao nhiu s sequence c lu trong b nh.

V d:
CREATE SEQUENCE supplier_seq MINVALUE 1 START WITH 1 INCREMENT BY 1 CACHE 20;

1.2.2 S dng Sequence lm vic vi cc sequence, dng lnh SQL vi cc ct gi (pseudocolumn) sau: CURRVAL Cho gi tri hin thi ca sequence. NEXTVAL Tng gi tri hin thi ca sequence v cho gi tr sau khi tng. V d:
INSERT INTO suppliers (supplier_id, supplier_name) VALUES (supplier_seq.NEXTVAL, 'Kraft Foods');

1.2.3 Sa Sequence
ALTER SEQUENCE tn_sequence INCREMENT BY s_nguyn START WITH s_nguyn [MAXVALUE s_nguyn] [MINVALUE s_nguyn] [CYCLE/NO CYCLE];

1.2.4 Xa Sequence
DROP SEQUENCE tn_sequence;

1.3 Index Index l mt cu trc t chc lu tr d liu, c sever s dng tm mt dng trong bng mt cch nhanh chng. C php:
CREATE INDEX tn_index ON TABLE ( ct [,ct...]);

Mt s nhn xt v Index: Dng index tng tc cu lnh truy vn. Index nhng ct no dng ni gia cc bng ln nhau. Gio Trnh H Qun Tr C S D Liu trang 44

Khoa CNTT & Truyn Thng Trng i Hc Cn Th Khng nn dng Index cho cc bng no ch c vi dng d liu. Primary v unique key t ng c index, nhng nn c index cho foreign key. 1.4 Biu thc chnh quy (regular expression) Biu thc chnh quy l chui k t c bit m t mt mu tm kim kt qu. Biu thc chnh quy c h tr trong hu ht cc ngn ng lp trnh cp cao nh Perl, PHP, Java, .NET Trong chng trnh hc ny, biu thc chnh quy c p dng ci t rng buc min tr cho cc bng.
Mu biu thc chnh quy

Mu * . ? + | ^ $ [] { i }, { i, }, { i, j } \d, \D \s, \S

ngha Xut hin mt hoc nhiu ln Bt c k t g ngoi NOT NULL Xut hin 0 hoc 1 ln Xut hin 1 hoc nhiu ln OR Bt u dng Kt thc dng So khp vi danh sch cc k t So khp i ln, t nht i ln, t nht i ln nhng <= j ln So khp vi k t l s, khng l s So khp vi cc k t khong trng (space, tab, )
Bng 7. Cc mu biu thc chnh quy

Cc hm p dng biu thc chnh quy


REGEXP_LIKE(source, pattern[, options]): tr v true nu source so khp vi pattern. source l chui k t, tn bin hoc tn ct ca bng; pattern l biu thc chnh quy; options c th mang gi tr i (khng phn bit hoa thng), c (phn bit hoa thng). REGEXP_REPLACE(source, pattern, replace[, position, occurrence, options]): tr v chui source vi cc phn so khp c thay th bi chui replace. position xc nh v tr bt u tm, mc nh l 1. occurrence

xc nh chui so khp c thay th ti th t xut hin no, mc nh l 0 (thay th tt c).


REGEXP_INSTR(source, pattern, position, occurrence, begin_end, options): tr v v tr bt u hoc kt thc ca chui so khp trong source, tr v 0 nu khng c phn no so khp. begin_end xc nh gi tr tr v l

v tr bt u hay kt thc ca phn so khp, mc nh l 0 (v tr bt u).


REGEXP_SUBSTR(source, pattern, position, occurrence, options): tr v chui so khp trong source, tr v NULL nu khng tm thy.

Gio Trnh H Qun Tr C S D Liu trang 45

Khoa CNTT & Truyn Thng Trng i Hc Cn Th Cc hm trn (ngoi tr regexp_like) u c th s dng trong mnh SELECT, regex_like c th c t trong mnh WHERE hoc trong lnh ci t rng buc ton vn min tr.
V d

Thay th mi k t s trong chui bng mt k t *


SELECT REGEXP_REPLACE('So DT 1: 01234567890', '\d', '*') FROM dual; 0909123456, So DT 2:

Thay th mi s in thoi di ng trong chui bng mt k t *


SELECT REGEXP_REPLACE('So DT 1: 0909123456, 01234567890', '0\d{9,10}', '*') FROM dual; So DT 2:

Trch ra s in thoi di ng u tin tm thy trong chui


SELECT REGEXP_SUBSTR('So DT 1: 0909123456, 01234567890', '0\d{9,10}') FROM dual; So DT 2:

Tm v tr bt u ca s in thoi th 2 tm thy trong chui


SELECT REGEXP_INSTR('So DT 1: 0909123456, 01234567890', '0\d{9,10}', 1, 2) FROM dual; So DT 2:

nh ngha trng S di ng ca bng Test phi tun theo nh dng bt u bng s 0, tip theo l 9 hoc 10 ch s
CREATE TABLE Test (id INTEGER PRIMARY KEY, name VARCHAR2(50) sodtdd VARCHAR2(11)); ALTER TABLE Test ADD CONSTRAINT check_sodtdd CHECK (REGEXP_LIKE (Sodtdd, 0\d{9,10}));

2 Cc kiu d liu trong Oracle


Tn kiu number(p,s) Integer Float Date Gii thch Kiu s thp phn (10-84 10127) Biu din hng 1894.1204

Kiu s nguyn, tng ng vi 1, 20 Number(38) Kiu s thc, tng ng vi Number Ngy thng (1/1/-4712 31/12/9999) 101.5E5, 0.5E-2 '10-FEB-04', '10/02/04' (ty vo nh dng th hin ngy ca h thng)

Char Nchar Varchar2

K t c di nh c nh v ti a l '50% complete.' 255 k t (khng h tr Unicode) K t c di nh c nh v ti a l Nguyn Vn Minh 255 k t (h tr Unicode) Lng Tm K t c di nh khng c nh v '50% complete.' ti a l 2000 k t (khng h tr Unicode) Gio Trnh H Qun Tr C S D Liu trang 46

Khoa CNTT & Truyn Thng Trng i Hc Cn Th Nvarchar2 K t c di nh khng c nh v Nguyn Vn Minh ti a l 2000 k t (h tr Unicode) Lng Tm
Bng 8. Cc kiu d liu trong Oracle

3 Cu trc chng trnh PL/SQL


3.1 Cu trc lp trnh trong Oracle
Oracle cho php thc hin cc on chng trnh bn trong n. Ngn ng c dng lp trnh cho Oracle c gi l PL/SQL (Procedural Language/SQL). Ngn ng ny va c th x l d liu bng cc c php lp trnh thng thng, va c th thc hin cc cu lnh SQL (DML). Phn sau ta s gii thiu cc cu trc lp trnh ca Oracle s dng PL/SQL. Mc tiu chnh ca PL/SQL l : Tng thm sc mnh ca ngn ng SQL, X l kt qu ca cu lnh truy vn trn tng dng (dng cursor), Pht trin cc chng trnh ng dng trn CSDL dng module, Ti s dng nhng on code (dng procedure), Gim chi ph trong vic bo tr v thay i ng dng.

3.2 Cc dng chng trnh PL/SQL


Cu trc c bn ca mt chng trnh PL/SQL l mt khi (block). C th l khi v danh (anonymous blocks) hoc khi c t tn (function, procedure, package). Khai bo hng, bin, con tr Cc lnh cn thc thi X l li (khng bt
Hnh 9. Cu trc mt khi PL/SQL

Cc khi c t tn s c lu tr ngay trong CSDL Oracle v s c gi theo phng php th tc lu tr sn trong cc ngn ng lp trnh khc nh cc ngn ng .NET, Java, PHP, Cc khi ny s c gii thiu chi tit trong cc bi sau.

Gio Trnh H Qun Tr C S D Liu trang 47

Khoa CNTT & Truyn Thng Trng i Hc Cn Th


Khi v danh

Khi c t tn Hnh 10. Hai dng khi chng trnh PL/SQL

3.3 Cu trc khi PL/SQL v danh


Khi PL/SQL v danh l khi c th thc hin lnh trc tip khng thng qua tn chng trnh con. Mt khi PL/SQL v danh bao gm 3 phn : khai bo bin, thn khi, v x l ngoi l. Cu trc c bn ca khi nh sau :
DECLARE [tn_bin kiu_bin> [NULL | NOT NULL] [DEFAULT tr_mc_nh ]; ] BEGIN cu lnh | khi lnh; [EXCEPTION WHEN tn_ngoi_l THEN cu_lnh; ] END;

Do cc khi c th lng nhau nn ta c mt s lu v tm ca bin trong khi: Khi con s truy xut c bin khai bo trong khi cha. Khi cha khng truy xut c bin c khai bo bn trong khi con. V d:
SET SERVEROUTPUT ON; DECLARE v_deptno NUMBER(2); v_loc VARCHAR2(15); BEGIN DECLARE v_dname VARCHAR(10); BEGIN v_dname := 'SALES'; DBMS_OUTPUT.put_line(v_dname); SELECT deptno, loc INTO v_deptno, v_loc FROM dept WHERE dname = v_dname; -- Cu SQL DBMS_OUTPUT.put_line('v_deptno: ' || v_deptno || ' and v_loc:' || v_loc); END; -- Cu lnh sau y s bo li: DBMS_OUTPUT.put_line(v_dname); END;

Khi con

Khi cha

Gio Trnh H Qun Tr C S D Liu trang 48

Khoa CNTT & Truyn Thng Trng i Hc Cn Th Ch : c php SET SERVEROUTPUT ON c khai bo u khi PL/SQL nhm xut ra mn hnh cc kt qu tr v t server Oracle.

4 Cc kiu d liu c bn ca PL/SQL


PL/SQL h tr nhiu kiu d liu c bn nh sau: BINARY_INTEGER: kiu d liu s nguyn c lu di dng nh phn. Kiu ny c min xc nh t -231 n 231-1. Ngoi ra, Oracle nh ngha thm cc kiu d liu con (subtypes) tha k t kiu BINARY_INTEGER: + NATURAL: kiu s nguyn vi min xc nh [0 .. 231-1]. + POSITIVE: kiu s nguyn vi min xc nh (0 .. 231-1]. + NATURALN, POSITIVEN: tng ng cc kiu NATURAL v POSITIVE nhng cc bin kiu ny khng nhn gi tr NULL. + SIGNTYPE: kiu s nguyn gii hn trong 3 gi tr -1,0,1. NUMBER[(precision, scale)]: kiu s thc c min xc nh t 10-130 n 10126. Ta c th quy nh min gi tr ca bin kiu ny thng qua thng s precision (s ch s nguyn) v scale (s ch s thp phn). + Precision c gi tr ln nht l 38. Mc nh, mt bin kiu ny c phn precision l 38 nu khng c ch ra. + Scale c min xc nh t -84 n 127. Vi scale m, s c lm trn v bn tri du chm thp phn. Vi scale dng, s c lm trn v bn phi du chm thp phn. V d: s thp phn 12345.678 c gi tr l 12300 nu scale = -2, c gi tr l 12345.68 nu scale = 2 v c gi tr l 12345 nu scale = 0. Cc kiu d liu con ca NUMBER l: + DEC, DECIMAL, NUMERIC, DOUBLE PRECISION, FLOAT: kiu s thc c phn precision n 38 ch s thp phn. + INTEGER, INT, SMALLINT: kiu s nguyn n 38 ch s thp phn. BOOLEAN: kiu d liu lun l. Bin kiu BOOLEAN c th gn 3 gi tr l TRUE, FALSE v NULL. CHAR(max_length): l kiu d liu k t, c di cho trc xc nh qua thng s max_length. DATE: kiu d liu ngy thng. y l mt kiu d liu c thuc tnh c bit. N c th chp nhn c s ln ch m t ngy thng. Ngoi ra, n cn cha thng tin v th k, nm, thng, ngy, gi, pht v giy. VARCHAR2 (max_length): kiu d liu chui k t c chiu di thay i, chiu di ti a c xc nh bi max_length (ti a 32767). Tuy nhin, rng ti a ca ct d liu (database column) kiu VARCHAR2 ch gii hn trong 4000 bytes, nn ta khng th chn gi tr kiu VARCHAR2 c di hn 4000 bytes vo ct d liu ny. LONG: kiu d liu chui k t c chiu di thay i ging kiu VARCHAR2 vi chiu di ti a l 32760 bytes. Ta c th chn gi tr kiu VARCHAR2 c di bt k vo ct d liu kiu LONG. Gio Trnh H Qun Tr C S D Liu trang 49

Khoa CNTT & Truyn Thng Trng i Hc Cn Th

5 Thuc tnh
Cc bin trong PL/SQL cng nh cc ct v bng d liu u c cc thuc tnh cho php ta tham chiu n kiu d liu v cu trc ca mt phn t m khng cn lp li nh ngha ca n. Du % c dng nh mt ch th ly thuc tnh. Cc thuc tnh thng dng: %ROWTYPE: thuc tnh dng ly kiu ca kiu ca mu tin trong mt bng d liu no . C php:
tn_bin tn_bng%ROWTYPE

V d: EMP%ROWTYPE tham chiu n kiu ca mu tin trong bng EMP. %TYPE: thuc tnh dng ly kiu ca mt trng hoc mt bin no . Vic s dng thuc tnh ny s mang li nhiu thun li nu kiu ca bin thng xuyn thay i. C php:
tn_bin {tn_ct | tn_bin_khc}%TYPE

V d: EMP.NAME%TYPE tham chiu n kiu d liu ca trng NAME trong bng EMP. Khi trng kiu d liu NAME ca bng EMP b thay i, EMP.NAME%TYPE cng thay i theo. V d:
DECLARE total_sales NUMBER(20,2); monthlySales total_sales%TYPE; /* bin monthlySales s ly kiu t bin total_sales */ vEname employees.last_name%TYPE;/* bin vEname s ly kiu t kiu d liu ca ct last_name trong bng employee */ BEGIN NULL; -- khng lnh no c nn t NULL y END;

6 Kiu d liu phc


Oracle h tr nhiu kiu d liu phc. tuy nhin do thi gian hn hp, gio trnh ch cp n mt s kiu d liu c s dng trong gio trnh.

6.1 Kiu d liu con do ngi dng nh ngha


Mi kiu d liu c bn nh ngha mt tp hp cc gi tr v cc php ton p dng trn cc biu thc kiu ny. Kiu d liu con (subtype) k tha tp hp cc php ton ca kiu d liu cha (base type) nhng n ch xc nh trong mt khong gi tr ca kiu cha. Tuy nhin, kiu d liu con khi c nh ngha khng to ra mt kiu d liu mi, thc cht n ch thay th mt rng buc trn kiu d liu cha. Kiu d liu con c khai bo trong phn nh ngha (declare) ca khi PL/SQL, chng trnh con v package theo c php:
SUBTYPE tn_kiu_con IS tn_kiu_cha [(rang_buc)] [NOT NULL]

V d:
SET SERVEROUTPUT ON;

Gio Trnh H Qun Tr C S D Liu trang 50

Khoa CNTT & Truyn Thng Trng i Hc Cn Th


DECLARE -- nh ngha kiu con BirthDate SUBTYPE BirthDate IS DATE NOT NULL; -- Khai bo bin kiu BirthDate myBirthDate BirthDate := '14-mar-2008'; BEGIN DBMS_OUTPUT.put_line('My birthday is: ' || myBirthdate); END;

6.2 Kiu TABLE


Tng t kiu mng ca ngn ng lp trnh c cu trc. C php khai bo:
TYPE tn_kiu_bng IS TABLE OF kiu [NOT NULL] INDEX BY BINARY_INTEGER; tn_bin tn_kiu_bng;

V d: tm tn nhng nhn vin c lng ln hn 10000.


SET SERVEROUTPUT ON; DECLARE TYPE Hr_Emp IS TABLE OF hr.employees%ROWTYPE INDEX BY BINARY_INTEGER; emp_tab Hr_Emp; x INTEGER; BEGIN SELECT * BULK COLLECT INTO emp_tab FROM hr.employees WHERE salary > 10000; FOR X IN 1..emp_tab.COUNT LOOP dbms_output.put_line(emp_tab(x).FIRST_NAME); END LOOP; END;

7 Cc loi mnh
7.1 Mnh gn
C php:
tn_bin := biu_thc;

V d:
DECLARE total_sales NUMBER(15,2); emp_id VARCHAR2(9); company_number NUMBER DEFAULT 10; -- Gan gia tri mac dinh BEGIN total_sales := 350000; emp_id := 3; dbms_output.put_line('Employee ' || emp_id ||

Gio Trnh H Qun Tr C S D Liu trang 51

Khoa CNTT & Truyn Thng Trng i Hc Cn Th


', sold total product value: ' || total_sales); END;

7.2 Mnh lnh (SQL command)


Mnh SELECT...INTO truy vn gi tr c cha trong bng v lu vo bin. C php:
SELECT tn_ct_1, tn_ct_2... [bin_con_tr] FROM tn_bng_1, tn_bng_2... [WHERE iu_kin_1, iu_kin_2... ] INTO bin1, bin2...

Vi:
INTO bin1, bin2... select vo cc bin. [bin_con_tr]: a kt qu tr v t

V d:
SET SERSEROUTPUT ON; DECLARE v_deptno dept.deptno%TYPE; v_loc dept.loc%TYPE; BEGIN SELECT deptno, loc INTO v_deptno, v_loc FROM dept WHERE dname = 'SALES'; DBMS_OUTPUT.put_line(v_deptno || ' : ' || v_loc ); END ;

Mnh INSERT, DELETE v UPDATE: tng t mnh trong ngn ng SQL. Tuy nhin, cc gi tr tham gia vo mnh c th c ch nh bi cc biu thc. C php: V d:
INSERT INTO counts (sales_set, non_sales_set) VALUES (v_sales_count, v_non_sales);

Trong :
v_sales_count, v_non_sales: cc bin (biu thc).

8 Cc cu trc iu khin
8.1 Cu trc r nhnh
8.1.1 Mnh IF: Mnh IF c 2 c php. C php dnh cho IF ... ELSE... END IF v c php IF...ELSIF...ELSIF... ELSE... END IF. C php u tin ch cho mt iu kin ng hoc sai. C php th hai c th kim tra nhiu iu kin ln lt cho n ht.
IF iu_kin_1 THEN lnh_1; ELSIF iu_kin_2 THEN

Gio Trnh H Qun Tr C S D Liu trang 52

Khoa CNTT & Truyn Thng Trng i Hc Cn Th


lnh_2; ELSE lnh_3 END IF;

V d:
DECLARE grade CHAR(1); BEGIN grade := 'B'; IF grade = 'A' THEN dbms_output.put_line('Excellent'); ELSIF grade = 'B' THEN dbms_output.put_line('Very Good'); ELSIF grade = 'C' THEN dbms_output.put_line('Good'); ELSIF grade = 'D' THEN dbms_output. put_line('Fair'); ELSIF grade = 'F' THEN dbms_output.put_line('Poor'); ELSE dbms_output.put_line('No such grade'); END IF; END;

8.1.2 Mnh CASE: Tng t nh mnh IF, mnh CASE cng ch thc thi mt trong nhng chui lnh cho trc ty theo gi tr ca bin la chn (selector). C php:
[<<tn_nhn>>] CASE bin WHEN biu_thc_1 THEN chui_lnh_1; WHEN biu_thc_2 THEN chui_lnh_2; ... WHEN biu_thc_N THEN chui_lnh_N; [ELSE chui_lnh_N+1;] END CASE [tn_nhn];

V d:
DECLARE grade CHAR(1) BEGIN CASE grade WHEN 'A' THEN WHEN 'B' THEN WHEN 'C' THEN WHEN 'D' THEN WHEN 'F' THEN := 'B';

dbms_output.put_line('Excellent'); dbms_output.put_line('Very Good'); dbms_output.put_line('Good'); dbms_output.put_line('Fair'); dbms_output.put_line('Poor');

Gio Trnh H Qun Tr C S D Liu trang 53

Khoa CNTT & Truyn Thng Trng i Hc Cn Th


ELSE dbms_output.put_line('No such grade'); END CASE; END;

8.1.3 Mnh Search CASE: Tng t nh mnh CASE nhng y khng c bin la chn (selector). C php:
[<<tn_nhn>>] CASE WHEN k_tm_kim_1 THEN chui_lnh_1; WHEN k_tm_kim_2 THEN chui_lnh_2; ... WHEN k_tm_kim_N THEN chui_lnh_N; [ELSE chui_lnh_N+1;] END CASE [tn_nhn];

V d:
DECLARE quantity NUMBER; projected NUMBER; needed NUMBER; BEGIN quantity := -10; <<here>> CASE WHEN quantity is null THEN dbms_output.put_line('So luong rong'); WHEN quantity + projected >= needed THEN dbms_output.put_line('So luong ' || quantity || ' dap ung.'); WHEN quantity >= 0 THEN dbms_output.put_line('So luong ' || quantity || 'khong du.'); END CASE here; EXCEPTION WHEN CASE_NOT_FOUND THEN -- Case khng tm thy dbms_output.put_line('So luong da nho hon 0.'); END;

8.2 Cu trc lp
8.2.1 Mnh LOOP: Mnh LOOP gm c vng lp LOOP khng xc nh cn v vng lp LOOP xc nh cn.
LOOP Lnh; EXIT WHEN iu_kin;

Gio Trnh H Qun Tr C S D Liu trang 54

Khoa CNTT & Truyn Thng Trng i Hc Cn Th


END LOOP;

8.2.2 Mnh WHILE: Gn ging nh mnh LOOP, nhng khc bit ch iu kin ngng vng lp s c kim tra trc mi ln lp.
WHILE iu_kin LOOP Lnh; END LOOP;

8.2.3 Mnh FOR: Xc nh trc cn di v cn trn ca vng lp. C php:


FOR bin_chy IN [REVERSE] cn_di..cn_trn LOOP lnh | chui_lnh; END LOOP;

T kha REVERSE xc nh bin chy ca vng lp i t cn trn n cn di 8.2.4 Mnh GOTO: Lnh lp v iu kin. Khi chng trnh PL/SQL thc hin n lnh ny, con tr chng trnh s chuyn n v tr nhn v thc hin cc lnh tip theo sau nhn. C php:
<<tn_nhn>> lnh; GOTO tn_nhn;

8.3 Cu trc Ngoi l (Exception)


Ngoi l l mt trng thi li c kch hot khi xy ra mt vn no trong chng trnh. Khi ngoi l c kch hot, vic thc thi m lnh c dng li ti dng lnh xy ra ngoi l v iu khin c chuyn cho phn x l ngoi l ca khi lnh tng ng. Nu khi lnh ny khng c phn x l ngoi l th iu khin c chuyn cho phn x l ngoi l ca khi cha. Nh vy, iu khin c chuyn cho phn x l ngoi l ca khi cha nu khi con khng c phn x l ngoi l. Nu vic chuyn iu khin c tip din v khi cha cao nht khng c phn x l ngoi l th vic thc thi kt thc (halted) vi li khng x l ngoi l. Phn x l ngoi l s tr li iu khin sau khi kt thc thc thi, nhng iu khin khng c tr li ngay dng lnh kch hot ngoi l m c tr li cho dng lnh ngay sau khi lnh cha dng lnh gy li. Phn x l ngoi l ca khi l ni khai bo cc dng lnh thc hin: a ra cc thng bo li c ngha hn so vi m li tr v ca ngoi l. Thc hin cc thao tc xa vt cc d liu c thay i trc khi li xy ra trnh vn d liu khng nht qun v sau, nh thc hin lnh ROLLBACK. C php phn x l ngoi l trong khi lnh:

Gio Trnh H Qun Tr C S D Liu trang 55

Khoa CNTT & Truyn Thng Trng i Hc Cn Th


EXCEPTION WHEN {tn_ngoi_l [OR tn_ngoi_l] | OTHERS} THEN lnh | khi_lnh;

ly thng tin ca mt ngoi l, ta c th s dng 2 hm: SQLCODE: tr v m li ca ngoi l. SQLERRM: tr v thng bo li ca ngoi l. V d:
SET SERVEROUTPUT ON DECLARE a NUMBER := 6; b NUMBER; BEGIN BEGIN b := 0; a := a / b; EXCEPTION -- bt u phn x l ngoi l WHEN ZERO_DIVIDE THEN -- bt ngoi l chia cho 0 DECLARE ma_loi NUMBER := SQLCODE; -- ly m ca ngoi l thong_bao VARCHAR2(512) := SQLERRM; -- ly thng bo BEGIN dbms_output.put_line('Ma loi: ' || ma_loi); dbms_output.put_line('Thong bao loi: ' || thong_bao); dbms_output.put_line('Truoc loi. Gia tri cua a = ' || a); dbms_output.put_line('Truoc loi. Gia tri cua b = ' || b); END; WHEN OTHERS THEN dbms_output.put_line('Khong biet loi gi.'); END; b := 7; dbms_output.put_line('Sau loi. Gia tri cua b = ' || b); END;

8.3.1.1.1 Cc ngoi l h thng (system-defined exceptions) thng xy ra

Tn ngoi l
CURSOR_ALREADY_OPEN INVALID_CUSOR NO_DATA_FOUND TOO_MANY_ROW VALUE_ERROR

Din gii m mt con tr ang m con tr sai hoc cha khi to Khi lnh SELECT INTO khng c d liu tr v c nhiu hn mt mu tin c select hay fetch vo mt record, hay mt bin gi tr ca bin b gn sai kiu

Gio Trnh H Qun Tr C S D Liu trang 56

Khoa CNTT & Truyn Thng Trng i Hc Cn Th


ZERO_DIVIDE

thc hin php chia cho 0


Bng 9. Cc ngoi l thng xy ra

8.3.1.1.2 Ngoi l do lp trnh vin nh ngha (programmer-defined exceptions) kch hot hoc x l mt ngoi l t nh ngha, ta phi khai bo v gn tn cho ngoi l . V d:
SET SERVEROUTPUT ON DECLARE sl1 NUMBER := -2; sl2 NUMBER := 3; tong NUMBER := 0; sl_phai_duong EXCEPTION; FUNCTION myFunc(sl NUMBER) RETURN NUMBER IS BEGIN IF(sl > 0) THEN RETURN sl * 20; ELSE RAISE sl_phai_duong; -- Lnh RAISE kch hot ngoi l END IF; END myFunc; BEGIN tong := myFunc(sl2); tong := tong + myFunc(sl1); dbms_output.put_line('Tong = ' || tong); EXCEPTION WHEN sl_phai_duong THEN dbms_output.put_line('(Exception) Tong = ' || tong); dbms_output.put_line('Loi xay ra, so luong phai > 0'); END;

9 Kiu con tr (Cursor)


L kiu d liu c cu trc cho php x l d liu gm nhiu dng. S dng c ly ra x l ph thuc vo lnh x l sau . Trong qu trnh x l, thao tc s tc ng ln tng mu tin ca d liu c np vo con tr. Con tr c th c dch chuyn t mu tin ny n mu tin khc, nh m s dng con tr c th x l c ht d liu ca mt bng d liu. Cc bc s dng bin cursor: Khai bo m cursor ly d liu x l ng cursor

9.1 C php khai bo con tr:


CURSOR tn_con_tr [(ds_tham_s>)] IS lnh_select;

V d 1: Khai bo cursor khng c tham s


DECLARE CURSOR c_Dept1 IS SELECT deptno, dname

Gio Trnh H Qun Tr C S D Liu trang 57

Khoa CNTT & Truyn Thng Trng i Hc Cn Th


FROM dept WHERE deptno>10; BEGIN NULL; END;

V d 2: Khai bo cursor c tham s


CURSOR c_Dept2(p_Deptno NUMBER) IS SELECT deptno, dname FROM dept WHERE deptno>p_Deptno; BEGIN NULL; END;

9.2 C php m con tr:


OPEN [tn_con_tr [(ds_gi_tr_truyn_vo_tham_s)] ];

V d:
OPEN c_Dept1;

-- trng hp CURSOR c khai bo khng c tham s

Hoc:
OPEN c_Dept2(10); -- trng hp CURSOR c khai bo c tham s

9.3 C php ly d liu


FETCH Tn tn_con_tr INTO tn_bin_con_tr;

9.4 C php ng con tr


CLOSE tn_con_tr;

V d:
DECLARE -- Khai bo cursor truy vn d liu CURSOR c_Emp IS SELECT * FROM EMP WHERE deptno = 10; -- Khai bo bin cursor tng ng cha dng d liu v_Emp c_EMP%ROWTYPE; BEGIN -- M cursor OPEN c_Emp; dbms_output.put_line('EMPNO | ENAME | JOB'); LOOP -- Ly dng d liu t cursor FETCH c_Emp INTO v_Emp; -- Thot khi vng lp khi bin v_Emp rng EXIT WHEN c_emp%NOTFOUND; -- Cc cu lnh x l v_Emp

Gio Trnh H Qun Tr C S D Liu trang 58

Khoa CNTT & Truyn Thng Trng i Hc Cn Th


dbms_output.put_line(v_Emp.empno || ' | ' || v_Emp.ename || ' | ' || v_emp.job); END LOOP; CLOSE c_Emp; END;

9.5 Mt s thuc tnh ca con tr:


Thuc tnh
%notfound %found %rowcount %isopen

Din gii Tr v gi tr True nu lnh fetch va thc hin tr v rng Tr v gi tr True nu lnh fetch va thc hin tr v khc rng Tr v s mu tin c lnh fetch truy xut Tr v gi tr True nu CURSOR c m, ngc li tr v False.
Bng 10. Din gii cc thuc tnh ca con tr

9.6 Mnh SELECT FOR UPDATE trong Cursor


Bn th ngh iu g s xy ra khi d liu m ta ang thao tc trn cursor b cp nht bi mt ngi dng khc? trnh tnh trng ny, ta s kha cc mu tin c truy xut bng cch dng mnh FOR UPDATE trong cu lnh SELECT khi khai bo cursor. Cc mu tin s b kha khi ta m cursor v s t ng m kha (unlock) khi gp thao tc COMMIT hoc ROLLBACK k tip. Trong khi cc mu tin b kha, khng ai khc ngoi ngi dng ang gi quyn kha cc mu tin c cp nht cc mu tin ny.
SELECT ... FROM ... FOR UPDATE [OF column_reference];

Trong , [OF column_reference] ch nh cc ct c th s b kha, d nhin cc ct phi c mt trong mnh SELECT. V d: To Cursor truy xut d liu t bng emp v s kha 2 ct lng (sal), thng (comm) khi cursor ny c m.
DECLARE CURSOR c_Emp2 IS SELECT ename, job, sal, comm FROM emp WHERE deptno=10 FOR UPDATE OF sal, comm; BEGIN --cac lenh xu ly END;

9.7 Mnh WHERE CURRENT OF trong Cursor


phn trc ta bit mnh FOR UPDATE cc mu tin ca table c lin quan trong cu SELECT s b kha khi cursor c m. V vy mt vn pht sinh Gio Trnh H Qun Tr C S D Liu trang 59

Khoa CNTT & Truyn Thng Trng i Hc Cn Th l nu trong cursor ta ang thc hin (c s dng FOR UPDATE) li cn cp nht d liu trn chnh bng ! gii quyt vn ny, Oracle cho php ta s dng mnh WHERE CURRENT OF. C php ny ch nh rng cu lnh UPDATE hoc DELETE s c s dng sa i d liu trn nhng dng ca cursor hin hnh c nh ngha FOR UPDATE. C php khai bo:
[lnh_update | lnh_delete] WHERE CURRENT OF tn_con_tr;

Khi s dng WHERE CURRENT OF, ta khng cn phi lp li mnh WHERE c trong cu lnh SELECT. V d :
DECLARE CURSOR c_1 IS SELECT empno, ename, salary FROM emp WHERE comm IS NULL FOR UPDATE OF comm; var_comm NUMBER(10,2); BEGIN FOR r_1 IN c_1 LOOP IF r_1.salary < 5000 THEN var_comm := r_1.salary * 0.25; ELSIF r_1.salary < 10000 THEN var_comm := r_1.salary * 0.20; ELSIF r_1.salary < 30000 THEN var_comm := r_1.salary * 0.15; ELSE var_comm := r_1.salary * 0.12; END IF; UPDATE emp SET comm = var_comm WHERE CURRENT OF c_1; END LOOP; END;

10 Th tc, hm v trigger
Chng trnh c vit bng ngn ng PL/SQL ngoi dng khi v danh nh trn, cn c cc dng sau: Function: chng trnh con l hm hon chnh. Procedure: chng trnh con l th tc hon chnh. Trigger : By c gn kt vo mt bng no nhm kim tra tnh ton vn ca d liu. Package: gi khai bo cha cc hm hoc th tc bn trong. Package Body: cha cc ci t cc hm hoc th tc ca gi c khai bo trong phn package. Trong cc dng trn, hm c lu tr trong cc schema qua node function, th tc c lu trong node procedure.

Gio Trnh H Qun Tr C S D Liu trang 60

Khoa CNTT & Truyn Thng Trng i Hc Cn Th Nh cc ngn ng lp trnh khc, PL /SQL cng bao gm hai loi chng trnh con: hm v th tc. Hm l chng trnh con c kt qu tr v, th tc khng c kt qu tr v.

10.1 Th tc
Th tc l mt nhm cc lnh thc hin cc chc nng no c gom li trong mt khi nhm lm tng kh nng x l, kh nng s dng chung, tng tnh bo mt v an ton d liu v tng tin ch trong pht trin. Th tc c th c lu gi ngay trong CSDL nh mt i tng ca CSDL, sn sng cho vic ti s dng. Th tc cn c gi l Stored Procedure. Vi cc Stored Procedure, ngay khi to chng c bin dch thnh dng p-code v th c th nng cao kh nng thc hin. 10.1.1 To mt th tc
CREATE [OR REPLACE] PROCEDURE tn_th_tc [ (tham_s_1 [IN | OUT | IN OUT] kiu_dl [, tham_s_2> [IN | OUT | IN OUT] kiu_dl [DEFAULT tr_mc_nh])] IS [tn_bin kiu_dl> [NULL | NOT NULL] [DEFAULT tr_mc_nh];] BEGIN [chui_lnh] -- y l khi PL/SQL trong chng trnh [ EXCEPTION -- Phn x l ngoi l WHEN tn_ngoi_l THEN khi_lnh ] END;
Hnh 11. V tr lu tr cc chng trnh trong schema

Cc ty chn IN, OUT, v IN OUT ch nh cch m tham s s c s dng : Ch mc nh l IN. C ngha l tham s c th tham chiu trong thn th tc nhng khng c php thay i. OUT : C th gn gi tr cho tham s ny trong thn th tc nhng gi tr ca n khng c php tham chiu n (thng dng cho kt qu tr v). IN OUT : Cho php c 2 ch trn. V d: Vit mt th tc thc hin vic tng lng cho cc nhn vin vi cc tham s u vo l m phng ban v phn trm lng tng thm.
CREATE PROCEDURE raise_salary(dno NUMBER, percent NUMBER DEFAULT 0.5) IS BEGIN UPDATE scott.emp SET sal = sal * ((100 + percent)/100) WHERE deptno = dno;

Gio Trnh H Qun Tr C S D Liu trang 61

Khoa CNTT & Truyn Thng Trng i Hc Cn Th


COMMIT; END raise_salary;

10.1.2 Gi th tc C php gi chng trnh con trong PL/SQL. Nu chng trnh con b gi cng schema vi chng trnh gi th c th lc b tn_schema . Trong trng hp gi chng trnh con ton cc th cng khng cn tn_schema. Nu gi th tc trong khi lnh PL/SQL th c php l:
Tn_schema.tn_th_tc[(tham_s_1, tham_s_2,)]

Nu gi th tc ngoi khi lnh PL/SQL th c php l:


EXECUTE Tn_schema.tn_th_tc[(tham_s_1, tham_s_2,)]

V d: Gi th tc tng lng 10% cho cc nhn vin lm vic phng s 20.


EXECUTE raise_salary(20,10);

10.1.3 Xa th tc C php xa th tc:


DROP PROCEDURE tn_th_tc

V d: DROP PROCEDURE raise_salary;

10.2 Hm
Tng t nh th tc, hm (function) cng l nhm cc lnh PL/SQL thc hin chc nng no . Khc vi th tc, cc hm s tr v mt gi tr ngay ti li gi ca n. 10.2.1 To mt hm
CREATE [OR REPLACE] FUNCTION tn_hm [(tham_s_1> [IN | OUT | IN OUT] kiu_dl [,tham_s_2 [IN | OUT | IN OUT] kiu_dl [DEFAULT tr_mc_nh])] RETURN kiu_tr_v IS [tn_bin kiu_dl [NULL | NOT NULL] [DEFAULT tr_mc_nh];] BEGIN [chui_lnh] RETURN gi_tr_tr_v ; [EXCEPTION WHEN tn_ngoi_l THEN khi_lnh ] END;

V d: Vit mt hm tr v kt qu l nm ca mt ngy c truyn vo t tham s.


CREATE OR REPLACE FUNCTION GETYEAR(pDate IN Date) RETURN NUMBER IS BEGIN RETURN EXTRACT(year from pDate); EXCEPTION WHEN OTHERS THEN RETURN 0; END;

Gio Trnh H Qun Tr C S D Liu trang 62

Khoa CNTT & Truyn Thng Trng i Hc Cn Th 10.2.2 Gi hm Do hm c kt qu tr v nn vic gi hm phi thng qua mt bin lu kt qu ca hm hoc phi c t vo cu lnh select ging nh cch s dng cc hm ca h thng cung cp sn. V d: Gi th hm GETYEAR va to trn
SELECT hiredate, GETYEAR (hiredate) as HireYear FROM scott.emp;

10.2.3 10.2.4

Xa hm Mt s hn ch khi s dng hm v th tc Khng cho php hm tr v kiu d liu nh RECORD, TABLE. Cc tham s ca hm (v c th tc) chp nhn mi kiu d liu c trong Oracle. Tuy nhin vi kiu char, varchar2, v kiu number th khng ch nh rng. V d, tham s c kiu number(6) s gy ra li khi bin dch v phi c sa li l number. Li ch ca vic s dng hm, th tc Nng cao hiu sut: Trnh vic ti s dng cc cu lnh nhiu ln bi nhiu User khc nhau. Gim thiu thi gian bin dch cu lnh PL/SQL trong pha phn tch cu lnh. Gim thiu s ln gi lnh thc hin trn CSDL, t , lm gim lu lng truyn thng trn mng. Nng cao kh nng bo tr: Ta c th d dng sa ni dung bn trong cc hm, th tc m khng nh hng n vic giao tip ca chng (cc tham s v li gi vn y nguyn). Thay i ni dung ca mt hm, hay th tc c th ng dng c ngay cho nhiu user khc nhau. Tng tnh bo mt v ton vn ca d liu: Vi vic iu khin truy nhp d liu gin tip i vi cc i tng trong CSDL s lm nng cao tnh bo mt ca d liu.

DROP FUNCTION tn_hm

10.2.5

10.3 Trigger
Database trigger l nhng th tc c thc hin ngm nh ngay khi thc hin cc lnh DML nh INSERT, DELETE, UPDATE nhm m bo tnh an ton ca d liu. Thit k cc database trigger nn ch cc vn sau: Ch s dng database trigger i vi cc thao tc trng tm. Khng s dng database trigger thc hin cc rng buc sn c trong CSDL Oracle. V d: dng database trigger thay th cho cc constraint. S dng database trigger c th gy ri, kh khn cho vic bo tr v pht trin h thng ln. V th, ta ch s dng database trigger khi tht cn thit. Khi to database trigger, ta cn xc nh mt s vn nh: Thi im thc hin: BEFORE, AFTER. Hnh ng thc hin: INSERT, UPDATE, DELETE. i tng tc ng: bng d liu no. Gio Trnh H Qun Tr C S D Liu trang 63

Khoa CNTT & Truyn Thng Trng i Hc Cn Th Mc kch hot: kch hot mc dng lnh hay mc dng d liu. Mnh iu kin thc hin. Ni dung ca trigger. 10.3.1 Phn loi TRIGGER Ta c th phn loi trigger theo thi gian thc hin nh: BEFORE v AFTER. BEFORE trigger: c kch hot trc khi thc hin cu lnh. Vic ny c th cho php ta loi bt cc php x l khng cn thit, thm ch c th rollback d liu trong trng hp c th gy ra cc ngoi l (exception). Trigger thuc loi ny thng c s dng i vi cc thao tc INSERT hoc UPDATE. AFTER trigger: cu lnh c thc hin xong th trigger mi c kch hot. Thc hin cc cng vic thng phi lm sau khi thc hin cu lnh. INSTEAD OF trigger: Loi trigger ny cho php ngi s dng c th thay i mt cch trong sut d liu ca mt s view m khng th thc hin thay i trc tip c. Vi INSTEAD OF trigger, ta c th thc hin vi c ba thao tc: insert, update, delete trn view Ta cng c th phn loi trigger theo loi cu lnh kch hot nh: INSERT, UPDATE, DELETE. Trong cc trigger thuc mt trong ba loi lnh: INSERT, UPDATE, DELETE, th trigger UPDATE cn phi ch r thm tn ct d liu kch hot trigger mi khi gi tr d liu trong b thay i. Bn trong Trigger c th c cha cc lnh thao tc d liu. Do , cn phi trnh trng hp lp li theo kiu quy. Mt cch khc ta cng c th phn loi trigger theo mc kch hot. Trigger mc cu lnh: Trigger c kch hot mi khi thc hin cu lnh. Trigger mc dng d liu: Trigger c kch Hnh 12. Cc s kin ca Trigger nhiu ln ng vi mi dng d liu chu nh hng bi thao tc thc hin lnh

Gio Trnh H Qun Tr C S D Liu trang 64

Khoa CNTT & Truyn Thng Trng i Hc Cn Th 10.3.2 To Trigger C php lnh to trigger mc cu lnh
CREATE [OR REPLACE] TRIGGER tn_trigger thi_im tn_bng BEGIN Khi_lnh; END; s_kin_1 [OR s_kin_2 OR s_kin_3] ON

C php lnh to trigger mc dng d liu


CREATE [OR REPLACE] TRIGGER thi_im tn_bng ROW [WHEN iu_kin] BEGIN khi_lnh; END; s_kin_1 [OR tn_trigger s_kin_2 OR s_kin_3] ON

[REFERENCING OLD AS dng_c | NEW AS dng_mi] FOR EACH

Trong : AFTER (sau). UPDATE.


s_kin dng_c, dng_mi trigger _name thi_im

Tn trigger Thi im kch hot trigger: BEFORE (trc), Loi cu lnh kch hot trigger: INSERT, DELETE, Tn bin thay th cho dng d liu trc v sau khi thay i ca dng d liu ang x l. Trigger thuc loi c kch hot ng vi mi dng Ch ra mt s iu kin rng buc thc hin trigger (ch s dng kt hp vi FOR EACH ROW). Tn bng d liu s gn trigger trn . Ni dung khi lnh SQL v PL/SQL trong trigger.

d liu.

FOR EACH ROW WHEN tn_bng khi_lnh

Ch : Ch c trigger mc dng d liu mi c th truy cp gi tr ca cc thuc tnh trong mi dng. Vi update trigger, ta c th ly gi tr c ca thuc tnh (gi tr trc khi cp nht) bng c php :old.tn_ct v gi tr mi ca thuc tnh (gi tr sau khi cp nht) bng c php :new.tn_ct Vi insert trigger, ch c :new.tn_ct c s dng. Vi delete trigger ch c :old.tn_ct c s dng. N lu gi gi tr ca thuc tnh trc khi b xa.

Gio Trnh H Qun Tr C S D Liu trang 65

Khoa CNTT & Truyn Thng Trng i Hc Cn Th Tt c cu lnh SQL v PL/SQL c th s dng trong trigger ngoi tr commit v rollback Raise_application_error l hm cho php trigger kt thc thc thi v tr v thng bo li c cp trong tham s gm m li (l mt s t -20000 n 20999, cc s khc Oracle dnh ring s dng), v mt chui thng bo. Mnh IF c dng kim tra thao tc no xy ra nh di y:
CREATE OR REPLACE TRIGGER tn_trigger AFTER INSERT OR DELETE OR UPDATE ON tn_bng FOR EACH ROW BEGIN IF INSERTING THEN khi_lnh END IF ; IF UPDATING THEN khi_lnh END IF ; IF DELETING THEN khi_lnh END IF ; END;

V d : Vit mt trigger kim tra rng khi ngi dng nhp mi hoc cp nht trn bng Emp th phi tha iu kin : Lng (Sal) phi nhiu hn thng (Comm) Lng mi phi cao hn lng c Khng c tng lng qu 10%
CREATE OR REPLACE TRIGGER check_sal_comm_EMP AFTER INSERT OR UPDATE OF SAL, Comm on EMP FOR EACH ROW BEGIN -- Lng (Sal) phi nhiu hn thng (Comm) IF (:new.SAL < :new.Comm) THEN raise_application_error(-20225,'Luong phai lon hon thuong'); --Lng mi phi cao hn lng c ELSIF (:new.SAL < :old.SAL) THEN raise_application_error(-20230,'Luong moi phai cao hon luong cu'); --Khng c tng lng qu 10% ELSIF (:new.SAL > 1.1 * :old.SAL) THEN raise_application_error(-20235, 'Khong duoc tang qua 10%'); END IF; END;

10.3.3

Xa Trigger Gio Trnh H Qun Tr C S D Liu trang 66

DROP TRIGGER tn_trigger;

Khoa CNTT & Truyn Thng Trng i Hc Cn Th

Chng 3. Qun l giao dch & phc hi


Trong chng ny, cc mc 1, 2 v 3 s trnh by l thuyt chung v qun l giao dch, cnh tranh v phc hi trong cc HQTCSDL. T mc 4 tr i s minh ha cc l thuyt ny bng cng c ca H QTCSDL Oracle.

1 Giao dch (transaction)


1.1 nh ngha Giao dch:
Giao dch (GD) l mt hnh ng hay mt chui cc hnh ng c thc hin bi 1 ngi dng hoc 1 chng trnh ng dng, trong c truy cp hoc thay i ni dung ca mt CSDL. Mt GD l mt n v lun l ca cng vic trn CSDL. N c th l ton b chng trnh, mt phn ca chng trnh, hoc mt lnh n l nh INSERT hay UPDATE, v n c th bao gm nhiu thao tc trn CSDL. Ta xt mt v d: Mt h thng ngn hng gm mt s ti khon v mt tp cc giao dch truy xut v cp nht cc ti khon. Ti thi im hin ti, ta gi thit rng CSDL nm trn a, nhng mt vi phn ca n ang nm tm thi trong b nh. Cc truy xut CSDL c thc hin bi hai hot ng sau: READ(X). chuyn hng mc d liu X t CSDL n buffer ca giao dch thc hin hot ng READ ny. WRITE(X). chuyn hng mc d liu X t buffer ca giao dch thc hin WRITE n CSDL. Trong h CSDL thc, hot ng WRITE khng nht thit dn n s cp nht trc tip d liu trn a; hot ng WRITE c th c lu tm thi trong b nh v c thc hin trn a mun hn. Trong v d, ta gi thit hot ng WRITE cp nht trc tip CSDL. Ti l mt giao Ti : READ(A); dch chuyn 50 t ti A:=A - 50; khon A sang ti khon WRITE(A) B. Giao dch ny c th c xc nh nh sau: Hnh 13. T chc lu tr trong qu trnh READ(B); thc hin giao dch cp nht CSDL B:=B + 50; Nu tt c cc cp nht ny khng c thc hin, WRITE(B); CSDL s trong trng thi khng nht qun: ngha l tng s tin A + B c th b thay i. Mt GD s lun lun chuyn CSDL t mt trng thi nht qun ny sang mt trng thi nht qun khc, mc d chng ta chp nhn s nht qun c th b ph v trong khi GD ang c thc hin. Chng hn nh khi GD ang thc hin, th c nhng thi im m tng A + B thay i. Tuy nhin, khi GD kt thc th tng A + B phi nh c.

Gio Trnh H Qun Tr C S D Liu trang 67

Khoa CNTT & Truyn Thng Trng i Hc Cn Th

1.2 Trng thi ca Giao dch:


Mt giao dch phi trong mt trong cc trng thi sau: Hot ng (Active) Trng thi khi u; giao dch gi trong trng thi ny trong khi n ang thc hin. Hon tt mt phn (Partially Committed) Sau khi lnh cui cng c thc hin. Tht bi (Failed) Sau khi pht hin rng s thc hin khng th tip tc c na. V kt thc vi mt trong hai trng thi: Hy b (Aborted) Sau khi giao dch b cun li (rolled back) v CSDL phc hi li trng thi ca n trc khi khi ng giao dch. Mt GD b hy c th c khi ng li sau , ty thuc vo nguyn nhn gy li, v c th n s thc thi thnh cng v hon tt. Hon tt (Committed) Sau khi hon thnh thnh cng giao dch CSDL t ti trng thi nht qun mi. Mt GD hon tt th khng th b Hnh 14. Biu trng thi tng ng vi mt GD hy b. Nu ta thy vic thc hin GD hon tt l mt sai lm, th ta phi thc hin mt GD khc c hiu ng ngc li, gi l GD b (compensating transaction). Mt HQTCSDL khng c mt cch c hu no bit c nhng cp nht no phi c nhm li thnh mt GD. V vy, n phi cung cp mt phng php gip dng ch ra ranh gii ca mt GD. Cc t kha BEGIN TRANSACTION, COMMIT, ROLLBACK c hu ht cc HQTCSDL a vo ngn ng thao tc d liu phn nh cc GD. Nu khng c cc t ny, th ton b chng trnh s c xem nh mt GD, khi HQTCSDL s t ng thc hin hnh ng COMMIT khi chng trnh kt thc ng n v thc hin ROLLBACK trong trng hp ngc li. Mt GD trng thi hon tt mt phn hon thnh s thc hin ca n, nhng n vn c th b hy b, v kt qu hin ti vn c th cn lu tr tm thi trong b nh chnh v nh th mt s c phn cng vn c th ngn cn s hon tt ca giao dch. H CSDL khi kp vit ln a y thng tin gip vic ti to cc cp nht c thc hin trong qu trnh thc hin giao dch, khi h thng ti khi ng sau s c. Sau khi cc thng tin sau cng ny c vit ln a, giao dch chuyn sang trng thi committed. Vi gi thit s c h thng khng gy ra s mt d liu trn a, mt giao dch i vo trng thi Failed nu h thng xc nh rng giao dch khng th tin trin bnh thng c na (do li phn cng hoc phn mm). Nh vy, giao dch phi c cun li ri chuyn sang trng thi hy b.

1.3 Cc thuc tnh ca mt GD


Tt c cc GD u phi c 4 thuc tnh sau, vit tt l ACID:

Gio Trnh H Qun Tr C S D Liu trang 68

Khoa CNTT & Truyn Thng Trng i Hc Cn Th


a. Tnh nguyn t (Atomicity) hay tnh Tt c hoc khng c g

Mt GD l mt n v khng phn chia c ngha l hoc n c thc hin ton b hoc khng thc hin t g. tng c s m bo tnh nguyn t l nh sau: h CSDL lu vt (trn a) cc gi tr c ca bt k d liu no m giao dch ang thc hin hnh ng ghi, nu giao dch khng hon tt, gi tr c s c khi phc t trng thi ca h thng tr li trng thi trc khi giao dch din ra. Trch nhim: m bo tnh nguyn t l trch nhim ca h qun tr CSDL, v c qun l bi mt thnh phn c gi l thnh phn qun l giao dch (transactionmanagement component).
b. Tnh nht qun (consistency)

Mt GD phi chuyn CSDL t mt trng thi nht qun ny sang mt trng thi nht qun khc. Tnh nht qun ca CSDL yu cu ch c nhng d liu hp l, chnh xc (ngha l khng vi phm cc rng buc d liu) mi c ghi vo CSDL. Chng hn nh trong v d trn th tng ca A v B phi khng thay i bi s thc hin giao dch. Nu khng c yu cu nht qun, tin c th c to ra hay b ph hu bi giao dch. D dng kim nghim rng nu CSDL nht qun trc mt thc hin giao dch, n vn nht qun sau khi thc hin giao dch. Trch nhim: m bo tnh nht qun cho mt giao dch l trch nhim ca ngi lp trnh ng dng hay ngi vit ra giao dch. Nhim v ny c th thc hin nh cc chc nng kim tra t ng cc rng buc ton vn ca h QTCSDL.
c. Tnh c lp (Isolation)

Cc GD phi thc hin c lp nhau. Hay ni cch khc, cc kt qu gia chng ca mt GD cha hon tt th khng th cc GD khc nhn thy. Tnh c lp ca mt giao dch m bo rng cho d nhiu giao dch c thc hin cng lc cng s dn h thng n mt trng thi tng ng vi trng thi c c bng cch thc hin cc giao dch ny mt cch tun t. Trch nhim: m bo tnh c lp l trch nhim ca mt thnh phn ca h QTCSDL c gi l thnh phn qun l cnh tranh (concurrency-control component).
d. Tnh bn vng (Duration)

Tnh cht bn vng m bo rng mi khi mt GD hon tt, tt c cc cp nht thc hin trn CSDL vn cn , ngay c khi xy ra s c h thng sau khi giao dch hon tt. Ta gi s mt s c h thng c th gy ra vic mt d liu trong b nh chnh, nhng d liu trn a th khng mt. C th m bo tnh bn vng bi vic m bo : Hoc cc cp nht c thc hin bi giao dch c vit ln a trc khi giao dch kt thc, Hoc thng tin v s cp nht c thc hin bi giao dch c vit ln a cho php CSDL xy dng li cc cp nht khi h CSDL c khi ng li sau s c.

Gio Trnh H Qun Tr C S D Liu trang 69

Khoa CNTT & Truyn Thng Trng i Hc Cn Th Trch nhim: m bo tnh bn vng l trch nhim ca mt thnh phn ca h QTCSDL gi l thnh phn qun l phc hi (recovery-management component). Hai thnh phn qun l giao dch v qun l phc hi quan h mt thit vi nhau. Hnh 15 c trch ra t kin trc tng qut ca h QTCSDL gm bn thnh phn va cp: qun l GD, iu khin cnh tranh, qun l phc hi v qun l vng m. Qun l GD (transaction manager) s phi hp cc GD thay cho cc chng trnh ng dng. N giao tip vi b lp lch trnh (scheduler), l mt module chu trch nhim v vic thc hin mt chin lc c th iu khin s thc hin cnh tranh ca cc GD. B lp lch trnh i khi cn c gi l b qun l kha cht (lock manager) nu giao thc iu khin cnh tranh l da trn kha cht. Mc tiu ca b lp lch trnh l ti a ha kh nng canh tranh nhng khng cho php cc GD ang thc hin ng thi can thip ln nhau, v nh m bo tnh ton vn v nht qun cho CSDL. Nu c li xy ra trong khi mt GD ang thc hin, th CSDL c th trng thi Hnh 15. Cc thnh phn lin quan vic qun l GD khng nht qun. Nhim v trong HQTCSDL ca b qun l phc hi (recovery manager) l m bo cho CSDL c phc hi v trng thi nht qun trc khi bt u GD. Cui cng, b qun l vng m (buffer manager) chu trch nhim chuyn d liu qua li gia b lu tr ngoi v b nh trong.

2 iu khin cnh tranh (Concurrency control)


Qun l cnh tranh l qu trnh qun l cc thao tc ang din ra ng thi trn CSDL m khng cho php chng can thip ln nhau.

2.1 S cn thit phi c qun l cnh tranh


Mt mc tiu chnh ca vic pht trin CSDL l cho php ngi dng truy cp vo cc d liu chia s mt cch ng thi hay cnh tranh. Cc truy cp cnh tranh th kh d dng nu tt c cc ngi dng ch c d liu, v khng c cch no h c th can thip ln nhau; hoc hai hay nhiu ngi dng ang cp nht cc d liu khc nhau. Nhng khi hai hay nhiu ngi dng ang truy cp mt cch ng thi vo mt d liu v c t nht mt ngi cp nht d liu, th s c kh nng xy ra s can thip

Gio Trnh H Qun Tr C S D Liu trang 70

Khoa CNTT & Truyn Thng Trng i Hc Cn Th dn n s khng nht qun. Tuy nhin, khng phi v th m ta buc cc giao dch ny khng c thc hin song song, hay phi xp hng ch v nhiu li ch: Trc ht, mt giao dch gm nhiu bc. Mt vi bc lin quan ti hot ng I/O; cc bc khc lin quan n hot ng CPU. Ta c th tn dng s hot ng song song ca h thng CPU v I/O chy nhiu giao dch song song nh tnh a chng (multipropramming). Chng hn hai GD c th thc hin ng thi. H thng bt u vi GD th nht cho n khi n t n mt thao tc nhp/xut (I/O). Trong khi thao tc I/O ang c thc hin, CPU tm hon GD th nht v thc thi lnh trong GD th hai. Khi GD th hai t n mt thao tc I/O th iu khin s quay tr li vi GD th nht v cc thao tc ca GD ny s c tip tc li t im m n tm hon. GD th nht s tip tc cho n khi n t n mt thao tc I/O khc. C nh th, cc thao tc trong hai GD xen k vi nhau t c s thc hin cnh tranh. Nh vy s tng thng lng (throughput) ca h thng c ngha l tng s lng giao dch c th c thc hin trong mt khong thi gian cho, cng c ngha l hiu sut s dng b x l v a tng ln. Ngoi ra, c th c s trn ln cc giao dch ang chy trong h thng, ci th di ci th ngn. Nu thc hin tun t, mt qu trnh ngn c th phi ch mt qu trnh di n khi hon tt, iu dn n mt s tr hon khng lng trc c trong vic chy mt giao dch. Nu cc giao dch ang hot ng trn cc phn khc nhau ca CSDL, s tt hn nu ta cho chng chy ng thi, chia s cc chu k CPU v truy xut a gia chng. Thc hin cnh tranh lm gim s tr hon khng lng trc trong vic chy cc giao dch, ng thi lm gim thi gian p ng trung bnh l thi gian mt giao dch c hon tt sau khi c trnh. Tuy nhin, khi thc hin song song, mc d bn thn hai GD c th hon ton ng, s an xen cc thao tc nh m t c th sinh ra cc kt qu khng ng, v vy lm nh hng n tnh ton vn v tnh nht qun ca CSDL. Chng ta s xem xt ba v d v cc vn tim n c th gy ra bi s cnh tranh: Vn v mt d liu cp nht (lost update), Vn v s ph thuc vo cc GD khng hon tt (uncommitted denpendency), Vn phn tch khng nht qun (inconsistent ananlysis). T1 : Read(A); T2 : A:=A-50; Write(A); Read(B); B:=B+50; Write(B); Read(A); Temp:=A*0.1; A:=A-temp; Write(A); Read(B); B:=B+temp; Write(B); minh ha cc vn ny, ta xt h thng ngn hng n gin vi mt s ti khon v mt tp hp cc giao dch truy xut, cp nht cc ti khon ny. Gi s T1 v T2 l hai giao dch chuyn khon t mt ti khon sang mt ti khon khc: T1 chuyn 50$ t ti khon A sang ti khon B. T2 chuyn 10% s d t ti khon A sang ti khon B.

Bng 11. Lch trnh cnh tranh

Gio Trnh H Qun Tr C S D Liu trang 71

Khoa CNTT & Truyn Thng Trng i Hc Cn Th


T1 Read(A); A:=A-50; Write(A); Read(B); B:=B+50; Write(B); Read(A); Temp:=A*0.1; A:=A-temp; Write(A); Read(B); B:=B+temp; Write(B); Lch trnh 1
Hnh 16. Cc lch trnh tun t

T2

T1

T2 Read(A); Temp:=A*0.1; A:=A-temp; Write(A); Read(B); B:=B+temp;

Write(B);
Read(A); A:=A-50; Write(A); Read(B); B:=B+50;

Write(B);
Lch trnh 2

Gi s gi tr hin ti ca A v B tng ng l 1000$ v 2000$. Gi s rng hai giao dch ny c thc hin tun t theo th t T1 ri ti T2 nh trong lch trnh 1. Nh vy, dy thc hin ny l nh hnh 16, trong dy cc bc ch th theo th t t trn xung: Gi tr sau cng ca cc ti khon A v B, sau khi thc hin dy cc ch th theo trnh t ny tng ng l 855$ v 2145$. Nh vy, tng gi tr ca hai ti khon ny (A + B) c bo tn sau khi thc hin c hai giao dch. Tng t, nu hai giao dch c thc hin tun t theo trnh t T2 ri n T1 nh trong lch trnh 2. Khi cc gi tr cui cng ca ti khon A v B tng ng s l 850$ v 2150$.

2.2 Lch trnh (schedule):


Lch trnh l mt chui cc thao tc thc hin bi mt tp hp cc GD cnh tranh m vn m bo th t ca cc thao tc trong tng GD n l. V d, i vi giao dch T1, ch th Write(A) phi xut hin trc ch th Read(B), trong bt k lch trnh hp l no. Lch trnh tun t (serial schedule) l mt lch trnh trong cc thao tc ca mt GD c thc hin lin tip nhau, khng c bt k thao tc no ca cc GD khc xen vo gia. Cc lch trnh trong hnh 16 l tun t. Trong lch trnh tun t, ta s khng c cc giao dch an xen ln nhau, v ch c mt giao dch thc hin ti mt lc. Tuy nhin, khng c bt k s m bo no v kt qu ca tt c cc lch trnh tun t u s ging nhau cho mt tp hp cc giao dch. Chng hn nh hai lch trnh 1 v 2 trong hnh 16 cho kt qu hon ton khc nhau. Lch trnh khng tun t (nonserial schedule) l mt lch trnh trong cc thao tc t mt tp hp cc giao dch cnh tranh an xen ln nhau. Khi , cc lch trnh Gio Trnh H Qun Tr C S D Liu trang 72

Khoa CNTT & Truyn Thng Trng i Hc Cn Th ny c th a CSDL v tnh trng khng nht qun hay cc kt qu khng chnh xc nh phn tch trong cc phn k tip. 2.2.1 Vn 1: Mt d liu cp nht Tnh hung: Kt qu ca mt thao tc cp nht hon tt mt cch thnh cng bi mt ngi dng c th b ghi chng ln bi mt ngi dng khc. V d: Trong bng 12, GD T1 rt khi TK A 10$ ang thc hin cnh tranh vi GD T2 np vo TK A 100$. Gi s ban u A c 100 ng. Nu cc GD ny c thc hin mt cch tun t (serrially), ci ny xong ri n ci kia, khng c cc thao tc xen k, th kt qu cui cng ti khon ny s cn 190 ng, bt k l GD no c thc hin trc. Nhng, nu T1 v T2 thc hin cnh tranh theo lch trnh sau: T1 Begin Transaction x := Read(A); x:=x-10; Write(A); Write(A); Commit Commit T2 Begin Transaction x:=Read(A); x = x + 100 ; TK A 100 100 100 100 100 200 90 90 90

Bng 12. Lch trnh gy mt d liu cp nht

Sau khi thc hin lch trnh 3, ta t ti trng thi trong gi tr cui ca A 90$ (l ra phi l 190). y, ta thy gi tr m T2 cp nht trn A b T1 ghi chng ln. Gii php: Vic nh mt d liu cp nht ca mt GD c th trnh c bng cch ngn khng cho mt GD khc c gi tr ca mc d liu ang c cp nht cho n khi vic cp nht hon tt. 2.2.2 Vn 2: ph thuc vo cc GD khng hon tt Tnh hung: Vn v s ph thuc vo cc GD khng hon tt xy ra khi mt GD cho php cc GD khc nhn thy cc kt qu tm thi trc khi n hon tt. V d: GD T4 cp nht TK A thnh 200 ng, nhng sau n b hy b GD, v v vy A s c phc hi v gi tr ban u ca n l 100 ng. Tuy nhin, trong lc ny, GD T3 c gi tr mi ca T4 (200 ng), v s dng gi tr ny lm c s cho vic tr 10 ng khi ti khon, lm cho gi tr mi khng ng l 190 ng, thay v ch l 90 ng.

Gio Trnh H Qun Tr C S D Liu trang 73

Khoa CNTT & Truyn Thng Trng i Hc Cn Th T3 T4 Begin Read(A); A = A + Write(A); : Rollback TK A 100 100 100 200 200 100 190 190

Begin Read(A); A:=A-10; Write(A); Commit

Bng 13. Lch trnh ph thuc vo GD khng hon tt

Gii php: Vn ny c th trnh c bng cch ngn khng cho mt GD c gi tr ang c cp nht bi mt giao dch cha kt thc khc (ngha l cha hon tt hoc cha hy b). Hai vn trn tp trung vo cc GD cp nht CSDL v s can thip ln nhau ca chng c th lm cho CSDL b sai. Tuy nhin, cc GD ch c CSDL cng c th sai. 2.2.3 Vn 3: Phn tch khng nht qun: Tnh hung: GD ch c c php c mt phn kt qu ca cc GD cha hon tt m cc GD ny cng lc cng ang cp nht CSDL. iu ny gi l dirty read hay unrepeatable read. V d: GD tnh tng T6 ang thc hin cnh tranh vi GD T5: GD T6 cng gi tr ca cc ti khon X (100 ng), ti khon Y (50 ng) v ti khon Z (25 ng). Kt qu ng s l 175 ng. GD T5 chuyn 10 ng t X sang Z Vi lch trnh nh bng 14, ta thy T6 by gi c kt qu sai (nhiu hn 10 ng). T5 T6 X 100 100 100 100 90 90 90 90 90 90 90 90 Y 50 50 50 50 50 50 50 50 50 50 50 50 Z 25 25 25 25 25 25 25 25 35 35 35 35 Sum 0 0 100 100 150 150 150 150 185 185 185 Begin Transaction Begin Transaction Sum = 0 Read(X); Read(X); X = X Write (X); Sum = Sum + Read(Y); Sum = Sum + Read (Z) Z = Z + 10 Write(Z); Commit Read(Z) Sum = Sum + Z Commit

Bng 14. Lch trnh phn tch khng nht qun.

Gii php: Vn ny c th trnh c bng cch ngn khng cho mt GD c gi tr ang c cp nht bi mt GD cha hon tt khc. Gio Trnh H Qun Tr C S D Liu trang 74

Khoa CNTT & Truyn Thng Trng i Hc Cn Th

2.3 Tnh kh tun t ca mt lch trnh


Cc vn ch yu ny sinh khi cho php cc GD thc hin cnh tranh c minh ha nh trn. Mc tiu chnh ca giao thc iu khin cnh tranh l lp lch trnh cho cc GD sao cho c th thc hin cnh tranh nhng vn trnh c cc s can thip ln nhau c th dn n kt qu sai. Ba vn va m t trn l kt qu ca s qun l cnh tranh sai, dn CSDL n tnh trng khng nht qun nh trong tnh hung u, v trnh by cho ngi dng mt kt qu sai nh trong tnh hung th 3. S thc hin tun t s ngn khng cho xut hin cc vn ny. D cho lch trnh tun t no c chn, th s thc hin tun t cng khng bao gi lm cho CSDL tnh trng khng nht qun.
Lch trnh kh tun t (serializable schedule): l cc lch trnh khng tun t cho

php cc GD thc hin cnh tranh nhng vn cho kt qu ging nh lch trnh tun t. Trong thc t, cc HQTCSDL khng kim tra tnh kh tun t ca mt lch trnh. V vic kim tra ny c th l khng thc t, do s xen k ca cc thao tc trong cc giao dch c xc nh bi h iu hnh ch khng phi l HQTCSDL. Thay vo , tip cn thng dng l s dng cc giao thc (protocols) bit to ra cc lch trnh kh tun t. Hai trong s cc giao thc ny s c trnh by trong phn 2.5

2.4 Tnh kh phc hi ca lch trnh


Tnh kh tun t nhn nh cc lch trnh duy tr tnh nht qun ca CSDL, vi gi thit l khng c GD no trong lch trnh b tht bi. Mt kha cnh khc cn kim tra l tnh kh phc hi ca cc giao dch trong lch trnh. Nu mt GD tht bi, tnh nguyn t ca GD yu cu chng ta phi xa b cc tc dng ca giao dch . Ngoi ra, tnh bn vng pht biu rng, mt khi GD hon tt, cc thay i ca n khng th c hy b.
T9 Begin Transaction Read(X) X = X + 100 Write (X) T10

Read(Y); Y = Y 100 Write (Y); Rollback

Begin Transaction Read(X) X = X * 1.1 Write (X) Read(Y) Y = Y * 1.1 Write (Y) Commit

Bng 15. Lch trnh khng kh phc hi

Hy xem xt hai GD trong bng 15, cui GD T9, T9 quyt nh cun ngc tc dng ca n. T10 c gi tr cp nht trn X bi T9, sau cp nht X v commit cc thay i. Ni ng ra, khi hy b T9, ta cn phi hy b T10 v n s dng gi tr X b hy. Tuy nhin, tnh bn vng khng cho php iu ny. Ni cch Gio Trnh H Qun Tr C S D Liu trang 75

Khoa CNTT & Truyn Thng Trng i Hc Cn Th khc, lch trnh ny l khng th phc hi (unrecoverable schedule), cc lch trnh nh vy nn cm thc hin. iu ny dn n nh ngha v lch trnh kh phc hi:
Lch trnh kh phc hi (recoverable schedule) l mt lch trnh trong vi mi

cp GD Ti v Tj, nu Tj c mt mc d liu m trc c ghi bi Ti, th thao tc commit ca Ti phi thc hin trc thao tc commit ca Tj.

2.5 Cc k thut qun l cnh tranh


Tnh kh tun t c th t c bng mt s cch. C hai k thut iu khin cnh tranh c bn cho php cc GD thc hin song song mt cch an ton da trn mt s rng buc no . Hai phng php l: kha cht v nhn thi gian. Mt cch c bn, kha cht v nhn thi gian l cc tip cn thn trng (hay cn gi l bi quan) v cc phng php ny lm cho cc GD b ngng tr khi chng xung t vi cc giao dch khc ti mt thi im no trong tng lai. Cc phng php lc quan, s trnh by trong mc 2.6, th da trn lp lun rng cc xung t th him khi nn chng cho php cc GD c tin hnh khng ng b v ch kim tra xung t vo lc cui, khi giao dch hon tt. 2.5.1 Kha cht (locking) Kha cht l mt th tc c s dng iu khin truy cp cnh tranh n d liu. Khi mt GD ang truy cp vo CSDL, mt kha cht c th t chi truy cp n t cc GD khc nhm trnh cc kt qu khng ng. Cc phng php kha cht c s dng ph bin nht bo m tnh kh tun t ca cc GD cnh tranh. C mt vi s khc bit, nhng tt c cc phng php ny u c chung mt c im c bn, l mt GD phi yu cu mt kha c (cn gi l kha chia s - shared lock) hay kha ghi (cn gi l kha c quyn exclusive lock) trn mt mc d liu trc khi thc hin mt thao tc c hoc ghi trn CSDL tng ng. Kha cht ngn khng cho cc giao dch khc thay i mc d liu hoc thm ch l c n, trong trng hp l kha ghi. Cc mc d liu vi nhiu kch c khc nhau, ln nh ton b CSDL n nh nh mt trng, u c th b kha. Kch c ca cc mc d liu s xc nh tnh tinh vi hay mn (granularity) ca kha. Kha tht s c th c ci t bng mt bit trn mc d liu ch nh rng mt phn ca CSDL b kha, hay bng cch gi mt danh sch cc phn b kha ca CSDL, hay bng cc phng tin khc. Chng ta s xem xt mn ca kha trong phn 2.7. hiu cc quy lut c bn ca kha cht, ta cn hiu cc khi nim sau:
Kha c (read lock): Nu mt GD c mt kha c trn mt mc d liu, n c

th c nhng khng th cp nht mc d liu .


Kha ghi (write lock) Nu mt GD c mt kha ghi trn mt mc d liu, n c

th c v cp nht mc d liu . Bi v cc thao tc c khng th xung t, nn c th c nhiu GD gi kha c mt cch ng thi trn cng mt mc d liu. Ngc li, mt kha ghi cho php mt GD c quyn truy cp trn mc d liu . V vy, ngay khi mt GD gi mt kha ghi trn mc d liu, th khng mt GD no khc c th c hoc cp nht mc d liu . Cc kha c s dng theo cc cch sau y: Gio Trnh H Qun Tr C S D Liu trang 76

Khoa CNTT & Truyn Thng Trng i Hc Cn Th Bt k mt GD no cn truy cp mt mc d liu, trc ht n phi kha mc li, bng cch yu cu mt kha c cho truy cp ch c hoc kha ghi cho truy cp c c c v ghi. Nu mc d liu ny cha b kha bi mt GD no khc, th kha s c cp. Nu mc d liu ny ang b kha, HQTCSDL s xc nh kha ang yu cu ny c tng thch vi kha c hay khng. Nu mt kha c ang c yu cu trn mt mc m ang b kha bng mt kha c, th yu cu ny s c p ng; bng khng th GD buc phi i cho n khi kha c c gii phng. Mt GD tip tc gi mt kha cho n khi n gii phng kha mt cch tng minh lc ang thc thi hoc lc n kt thc (hy b hoc hon tt). Ch khi no kha ghi c gii phng th hiu ng ca thao tc ghi mi c nhn thy bi cc giao dch khc. Ngoi cc lut ny ra, mt s h thng cho php mt GD c mt kha c trn mt mc v sau nng cp (upgrade) kha ln thnh kha ghi. iu ny cho php mt GD xem xt mt d liu trc ri sau mi quyt nh liu n c mun cp nht d liu hay khng. Nu kh nng nng cp khng c h tr, mt GD phi gi cc kha ghi trn tt c cc mc d liu m n c th phi cp nht trong sut qu trnh thc hin GD, v v vy c th lm gim mc cnh tranh trong h thng. Cng v l do ny, mt s h thng cho php mt GD gi mt kha ghi v sau ging cp (downgrade) kha xung thnh kha c. Tuy nhin, nu ch s dng kha trong qun l cc GD cnh tranh nh m t bn trn, th khng m bo tnh kh tun t ca cc lch trnh nh trong v d sau y. V d: Lch trnh kha cht khng ng: Xt li hai GD trong bng 15, gi s T9 commit cui GD ca n. Mt lch trnh hp l c th c thc hin bng cch s dng cc lut kha cht nh sau: S = { write_lock(T9, X), read(T9, X), write(T9, X), unlock(T9, X), write_lock(T10, X), read(T10, X), write(T10, X), unlock(T10, X), write_lock(T10, Y), read(T10, Y), write(T10, Y), unlock(T10, Y), commit(T10), write_lock(T9, Y), read(T9, Y), write(T9, Y), unlock(T9, Y), commit (T9)}
Nu ban u, X = 100, Y = 400, th kt qu s l:

X = 220, Y = 330, nu T9 thc hin trc T10; hoc X = 210, Y = 340, nu T10 thc hin trc T9. Tuy nhin, kt qu ca lch trnh S hin ti phi l X = 220 v Y = 340. (chng t S khng phi l mt lch trnh kh tun t.) Nguyn nhn dn n tnh trng sai ny l lch trnh gii phng cc kha m n ang gi ngay khi thao tc c/ghi tng ng thc hin xong v mc d liu (chng hn nh X) khng cn truy cp na. Tuy nhin, bn thn GD ang kha cc mc khc (Y), sau khi n gii phng kha trn X. Mc d iu ny c v cho php mc cnh tranh nhiu hn, nhng n cho php cc GD xen k vi nhau, lm mt i tnh c lp v tnh nguyn t ca ton b GD. Gio Trnh H Qun Tr C S D Liu trang 77

Khoa CNTT & Truyn Thng Trng i Hc Cn Th V vy, m bo tnh kh tun t, chng ta phi tun theo mt giao thc khc lin quan n vic t cc thao tc kha v m kha trong mi GD. Giao thc ni ting nht l kha cht hai k (two-phase locking 2PL). 2.5.2 Giao thc kha hai k (2PL) nh ngha: Mt GD tun theo giao thc kha hai k nu nh tt c cc thao tc kha u tin hnh trc thao tc m kha trong GD . Theo lut ca giao thc ny, mi GD c th chia ra thnh 2 k:
K pht trin (growing phase) l k u, n yu cu tt c cc kha cn

thit nhng khng gii phng kha no, K co li (shrinking phase) l k sau, n gii phng cc kha ca n v khng th yu cu thm bt k kha mi no. Khng bt buc tt c cc kha phi c c mt cch ng thi. Thng thng, GD yu cu mt s kha, thc hin mt s x l v tip tc yu cu thm cc kha cn thit khc. Tuy nhin, n s khng bao gi gii phng kha no cho n khi n t n giai on khng cn thm kha no mi na. Cc quy lut c pht biu nh sau: Mt GD phi t c kha trn mt mc trc khi n x l mc . Kha ny c th l c hoc ghi, ty thuc vo nhu cu truy cp. Mt khi GD gii phng mt kha, n khng th yu cu thm kha mi no. Nu vic nng cp kha c cho php, th vic nng cp ny ch c th din ra trong k pht trin v GD c th phi i cho n khi GD khc gii phng kha c trn mc . Vic ging cp ch c th thc hin trong k co li. Chng ta s xem xt cch thc kha hai k gii quyt ba vn cp trong mc 2.1 2.5.2.1Trnh vn mt d liu cp nht bng 2PL Mt gii php cho vn mt d liu cp nht cp trong mc 2.2.1 c m t trong bng 16 nh sau: u tin T2 yu cu kha ghi trn A. Sau n c th c gi tr ca A trong CSDL, tng ln 100 ng, v ghi gi tr mi vo CSDL. Khi T1 bt u, n cng yu cu kha ghi trn A. Tuy nhin, v A ang c kha bi T2, yu cu ny ca T1 khng c p ng ngay lp tc v T1 phi i cho n khi T2 gii phng kha. V iu ny ch xy ra khi T2 hon tt. Time t1 t2 t3 t4 t5 t6 t7 t8 t9 T1 T2 Begin Write lock(A) Read(A); A = A + 100 ; Write(A); Commit/ TK A 100 100 100 100 200 200 200 190 190

Begin Transaction Write lock(A) WAIT WAIT WAIT Read(A); A:=A-10; Write(A);

Gio Trnh H Qun Tr C S D Liu trang 78

Khoa CNTT & Truyn Thng Trng i Hc Cn Th t10 Commit/


Bng 16. Giao thc 2PL gii quyt vn mt d liu cp nht.

190

2.5.2.2Trnh vn ph thuc vo GD khng hon tt bng 2PL Mt gii php ca vn cp trong mc 2.2.2 c m t trong bng 17 nh sau: u tin T4 yu cu kha ghi trn X. Sau n c th c gi tr trn X t CSDL, tng n ln 100 ng, v ghi gi tr mi vo CSDL. Khi hnh ng cun li c thc hin, cc cp nht ca T4 s c g b v gi tr ca X trong CSDL c tr v nh ban u tc l 100. Khi T3 bt u, n cng yu cu mt kha ghi trn X. Tuy nhin v X ang b kha bi T4, yu cu ny khng c p ng ngay lp tc v T3 phi i cho n kha T4 gii phng kha. V iu ny ch din ra khi vic cun li ca T4 din ra xong. Time t1 t2 t3 t4 t5 t6 t7 t8 t9 t10 T3 T4 Begin Write lock(A) Read(A); A = A + 100 ; Write(A); Rollback/ TK A 100 100 100 100 200 100 100 90 90 90

Begin Transaction Write lock(A) WAIT WAIT Read(A); A:=A-10; Write(A); Commit/ Unlock(A)

Bng 17. Giao thc 2PL gii quyt vn ph thuc vo GD khng hon tt.

2.5.2.3Trnh vn phn tch khng nht qun bng 2PL Mt gii php cho vn cp trong mc 2.2.3 c m t trong bng 18 nh sau: u tin T5 yu cu v c c kha ghi trn X. Sau , khi T6 mun c kha c trn X, yu cu ny s khng c p ng tc th v T6 phi i cho n khi T5 gii phng kha, chnh l khi T5 hon tt. Tim t1 t2 t3 t4 t5 t6 t7 t8 t9 T5 Begin Transaction Write lock (X) Read(X); X = X 10 ; Write (X); Write lock (Z) Read (Z) Z = Z + 10 T6 Begin Transaction Sum = 0 Read lock (X) WAIT WAIT WAIT WAIT WAIT X 100 100 100 100 100 90 90 90 90 Y 50 50 50 50 50 50 50 50 50 Z 25 25 25 25 25 25 25 25 25 Sum 0 0 0 0 0 0 0 0

Gio Trnh H Qun Tr C S D Liu trang 79

Khoa CNTT & Truyn Thng Trng i Hc Cn Th t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 Write(Z); Commit/ Unlock(X,Z) WAIT WAIT WAIT Read(X); Sum = Sum + X Read lock(Y) Read(Y); Sum = Sum + Y Read lock(Z) Read(Z) Sum = Sum + Z Commit/Unlock(X,Y,Z) 90 90 90 90 90 90 90 90 90 90 90 50 50 50 50 50 50 50 50 50 50 50 35 35 35 35 35 35 35 35 35 35 35 0 0 0 90 90 90 140 140 140 175 175

Bng 18. Giao thc 2PL gii quyt vn phn tch khng nht qun.

Ta c th chng minh nu mi GD trong mt lch trnh u tun theo giao thc kha hai k, th lch trnh ny c m bo l kh tun t xung t.
2.5.2.4 Cc vn ny sinh khi s dng giao thc kha 2 k: Tuy nhin thi im gii phng kha cng c th pht sinh vn nh v d sau y.

Tim t1 t2 t3 t4 t5 t6 t7 t8 t9 t10 t11 t12 t13 t14 t15 t16 t17 t18

T15 T16 T14 Begin Transaction Write lock(X) Read(X) Read lock(Y) Read(Y) X=X+Y Write(X); Unlock(X); Begin Transaction : Write lock(X) : Read(X); : X = X + 100 ; : Write(X); : Unlock(X) : : : Begin Transaction roolback Read lock(X) Roolback : Roolback
Bng 19. Lch trnh cun nhiu tng (cascade rollback).

Khi T14 tht bi v phi cun li, th T15 cng phi cun li theo v T15 c gi tr ghi bi T14. Tng t, T16 cng ph thuc T15, nn n cng phi b cun li. Tnh hung m mt GD dn n mt chui cun li, c gi l cun nhiu tng. Ta khng mun xy ra tnh hung ny, v n c th dn n vic phi hy i mt lng cng vic kh ln. Mt cch trnh tnh hung ny l ch gii phng tt c kha cui GD. Kha hai k bin i ny gi l kha hai k nghim ngt (rigorous 2PL). Mt bin i ca kha hai k khc na gi l kha hai k cht ch (strict 2PL) Gio Trnh H Qun Tr C S D Liu trang 80

Khoa CNTT & Truyn Thng Trng i Hc Cn Th ch gi cc kha ghi n cui GD. Hu ht cc HQTCSDL u ci t mt trong hai bin i ny. Mt vn khc ny sinh ca kha hai k na l n c th dn n kha cht (deadlock), v cc GD c th i nhn kha trn cc mc d liu. Nu hai GD i nhn cc kha trn cc mc m c gi bi i phng, th kha cht s din ra v v vy ta cn c mt c ch pht hin kha cht v phc hi n. Ta s tho lun kha cht trong phn k. Cc GD cng c th b dn n tnh trng kha sng (livelock), ngha l, b b tnh trng ch mi mi, khng th t c thm kha mi no, mc d HQTCSDL khng b kha cht. iu ny c th xy ra khi gii thut ch khng cng bng v khng xem xt n thi gian m GD i. trnh kha sng, mt h thng u tin c s dng, ni m mt GD cng ch lu th u tin ca n cng cao. Hoc s dng mt hng i theo kiu n trc c phc v trc. 2.5.2.4.1 Kha cht (dead lock) nh ngha: Kha cht l mt tnh hung b tc khi hai hay nhiu GD ang ch ln nhau c c cc kha ang gi bi i phng. Time t1 t2 t3 t4 t5 t6 t7 t8 t9 t10 t11 T17 Begin Transaction Write lock(X) Read(X) X = X 10 Write(X); Write lock(Y) WAIT WAIT WAIT T18 Begin Transaction Write lock(Y) Read(Y) Y = Y + 100 Write(Y); Write lock(X) WAIT WAIT WAIT

Bng 20. Tnh trng kha cht

Bng 20 minh ha hai GD T17 v T18 ang tnh trng kha cht: thi im t2, GD T17 yu cu v t c kha ghi trn X. thi im t3, GD T18 t c kha ghi trn Y. Sau , ti thi im t6, T17 yu cu kha ghi trn Y. V T18 ang gia kha trn Y, T17 phi i. Trong khi , ti thi im t7, T18 yu cu kha trn X, m kha ny ang b T17 gi. C hai GD khng th tip tc bi v mi GD ang ch nhn kha, v n khng th nhn c cho n khi GD kia hon thnh. Mt khi xy ra kha cht, cc ng dng lin quan khng th gii quyt vn . Thay vo , HQTCSDL phi pht hin ra s tn ti kha cht v ph i tnh trng ny bng mt cch no . Tht khng may l ch c mt cch ph b tnh trng kha cht l hy b mt hoc nhiu GD. iu ny lin quan n vic hu b tt c cc thay i c thc hin bi cc GD ny. Vic gii quyt tnh trng kha cht phi c trong sut i vi ngi dng, v v vy HQTCSDL phi t ng bt u li cc GD b hy. Cc k thut x l kha cht Gio Trnh H Qun Tr C S D Liu trang 81

Khoa CNTT & Truyn Thng Trng i Hc Cn Th C hai k thut thng thng c dng x l kha cht l: ngn chn kha cht v pht hin phc hi kha cht. S dng k thut ngn chn kha cht, HQTCSDL phi nhn trc xc nh liu mt GD c kh nng gy ra kha cht hay khng, v khng bao gi n xy ra. S dng k thut pht hin v phc hi kha cht, HQTCSDL cho php kha cht xy ra nhng pht hin s xut hin ca n v ph n i. V vic pht hin v ph kha cht d hn l ngn chn n, c nhiu h thng s dng k thut ny hn.
Ngn chn kha cht Mt cch c th ngn chn kha cht l ra lnh cho cc GD s dng cc nhn thi gian, m chng ta s tho lun trong phn k tip. C hai gii thut c ngh bi Rosenkrantz et al. (1978): Mt gii thut l Wait-Die: ch cho php mt GD c hn i mt GD mi hn, nu khng GD s b hy (die cht) v khi ng li vi cng nhn thi gian, cui cng n s tr thnh GD ang hot ng c nht v s khng cht na. Gii thut th hai, Wound-Wait, s dng mt tip cn ngc li: ch c mt GD mi c th i mt giao dch c hn. Nu mt GD c hn yu cu mt kha ang c gi bi mt GD mi hn, th GD mi hn s b hy (wounded b tn thng). Pht hin kha cht

Pht hin kha cht thng c qun l bi vic xy dng mt th ch (wait-for graph WFG), cho thy s ph thuc ca cc GD. Mt GD Ti c gi l ph thuc vo Tj, nu GD Tj ang gi cc kha trn mt mc d liu m Ti ang ch.
th ch c xy dng nh sau:

To mt nt cho mi GD To mt cnh trc tip t Ti n Tj, nu GD Ti ang ch kha mt mc m ang b kha bi Tj.

T14

T15

Kha cht tn ti khi v ch khi th ch cha mt chu trnh (Holt, 1972). Hnh 17 minh ha th ch ca cc giao dch trong bng 20. R rng tn ti mt chu trnh trong th , v vy chng ta c th kt lun rng h thng b kha cht.

Hnh 17. th ch c chu trnh

V th ch c chu trnh l iu kin cn v tn ti kha cht, nn gii thut pht hin kha cht s sinh ra th vo nhng khong thi gian nh k v kim tra xem c chu trnh khng. Vic chn la khong thi gian gia hai ln thc hin ca gii thut l quan trng. Nu khong thi gian ny l nh qu, th vic pht hin kha cht s mt mt khong thi gian kh ln; nu khong thi gian ny l qu ln, th kha cht c th s khng b pht hin trong mt khong thi gian di. Mt gii thut pht hin kha cht ng c th bt u vi mt khong thi gian no . Nu khng pht hin c kha cht no, th khong thi gian s tng ln, chng hn nhn ln gp i, v mi ln pht hin c kha cht, th khong thi gian s c gim xung, chng hn, bng na khong thi gian trc , vi gi thuyt l khng vt qu mt gii hn trn v di cho trc. Gio Trnh H Qun Tr C S D Liu trang 82

Khoa CNTT & Truyn Thng Trng i Hc Cn Th S dng kha kt hp vi giao thc kha hai k s m bo tnh kh tun t ca cc lch trnh. Th t ca cc GD trong mt lch trnh tun t tng ng da trn th t m trong cc GD kha cc mc d liu chng cn. Nu mt GD cn mt mc d liu b kha, n c th b buc phi i cho n khi mc c gii phng. Mt tip cn khc cng m bo tnh kh tun t l s dng cc nhn thi gian trn giao dch sp xp s thc hin ca GD to thnh mt lch trnh tun t tng ng. 2.5.3 Nhn thi gian (timestamp) Cc phng php dng nhn thi gian iu khin cnh tranh th hon ton khc vi phng php kha cht. V khng h c kha, nn cng khng c kha cht. Cc phng php kha cht ni chung ngn chn xung t bng cch buc cc GD phi i. Vi cc phng php nhn thi gian, hon ton khng c ch i; cc GD c xung t ch n gin l b cun li v c khi ng li. Nhn thi gian ca mt GD l mt nh danh duy nht c to ra bi HQTCSDL cho thy thi im bt u tng i ca GD . Cc nhn thi gian (TG) c th c to ra mt cch n gin bng cch s dng ng h ca h thng thi im GD bt u, hoc bng cch tng mt con s m lun l mi khi mt GD mi bt u. nh nhn thi gian (timestamping) l mt giao thc iu khin cnh tranh m trong mc tiu c bn l sp xp cc GD mt cch ton cc theo mt cch m cc GD c hn, ngha l GD vi nhn TG nh hn, s c u tin hn khi c xung t. Vi k thut nh nhn TG, nu mt GD mun c hoc ghi mt mc d liu, th: Cc thao tc ny ch c php thc hin nu cp nht cui cng trn mc d liu c thc hin bi mt GD c hn. Nu ngc li, GD ang mun c/ghi s phi khi ng li v c cp cho mt nhn TG mi. Cc nhn TG mi phi c cp cho cc GD khi ng li trnh cho chng khng tip tc b hy v khi ng li na. Nu khng c cc nhn TG mi, mt GD vi mt nhn TG c s c th s khng c kh nng hon tt v cc GD tr hn khc c hon tt. Ngoi cc nhn TG cho cc GD, cn c nhn TG cho cc mc d liu. Mi mc d liu cha mt nhn c (read-timestamp), ghi nhn nhn TG ca GD cui cng c n v mt nhn ghi (write-timestamp), ghi nhn nhn TG ca GD cui cng ghi vo mc . Vi mi GD T vi nhn ts(T), giao thc sp xp nhn TG s hot ng nh sau: Trng hp giao dch T pht ra mt lnh read(x): Nu GD T yu cu c 1 mc d liu (x) c cp nht bi mt GD mi hn; ngha l ts(T)< write_timestamp(x). iu ny ngha l mt GD trc ang c gng c gi tr ca mt mc d liu c cp nht bi mt GD sau. Giao dch trc qu tr c mt gi tr c trc , v bt k cc gi tr no khc n ang c dng nh khng nht qun vi gi tr cp nht trn mc . Gio Trnh H Qun Tr C S D Liu trang 83

Khoa CNTT & Truyn Thng Trng i Hc Cn Th Trong trng hp ny, GD T phi b hy v khi ng li vi mt nhn TG mi. Ngc li, nu ts(T) write_timestamp(x), th thao tc c c th tin hnh. Khi , chng ta t li read_timestamp(x) = max (ts(T), read_timestamp(x)). Trng hp giao dch T pht ra lnh write(x): Nu GD T yu cu ghi trn mt mc d liu (x) m gi tr ca n c c bi mt GD mi hn; ngha l, ts(T) < read_timestamp(x). iu ny c ngha l GD sau s dng gi tr hin ti ca mc d liu v nu by gi cp nht n s dn n li. iu ny xy ra khi mt GD b tr trong vic ghi v mt GD mi hn c gi tr c hoc ghi vo mt gi tr mi hn. Trong trng hp ny, gii php duy nht l cun GD T v khi ng li n s dng mt nhn TG mi hn. Hoc nu GD T yu cu ghi trn mt mc d liu (x) m gi tr ca n c ghi bi mt GD mi hn; ngha l, ts(T) < write_timestamp(x). iu ny ngha l GD T ang mun ghi mt gi tr li thi ca x. GD T phi c cun li v khi ng li vi mt nhn TG mi hn. Ngc li, thao tc ghi c th c tin hnh. Khi , chng ta s t li write_timestamp(x) = ts(T). S sp xp ny, c gi l k thut sp xp nhn TG c bn (basic timestamp ordering), m bo rng cc GD l kh tun t xung t, v cc kt qu l tng ng vi mt lch trnh tun t trong cc GD c thc hin theo th t thi gian ghi trn cc nhn TG. Hay ni khc hn, cc kt qu s ging nh ton b GD 1 c thc hin xong, sau ton b GD 2 c thc hin v c nh th, khng h xen k. Tuy nhin k thut sp xp nhn thi gian c bn ny khng m bo cc lch trnh l kh phc hi.

2.6 Cc k thut lc quan (optimistic techniques)


Trong mt s mi trng, cc xung t gia cc GD him khi xy ra, v cc x l thm vo bi cc giao thc kha v nhn thi gian l khng cn thit cho nhiu GD. Cc k thut lc quan da trn gi thit rng xung t th him, v s hiu qu hn nu cho php cc GD c tin hnh m khng cn bt chng phi tr hon m bo tnh kh tun t (Kung & Robinson, 1981). Khi mt giao dch mun hon tt, h thng mi kim tra xem liu c xung t xy ra hay khng. Nu c xung t, th GD phi b hy v khi ng li. V gi thit l xung t him xy ra, nn vic cun li cng s him. Cc k thut lc quan ny to c hi cnh tranh nhiu hn cc k thut c, v chng khng i hi phi kha d liu. Giao thc iu khin cnh tranh lc quan: Mt GD s tri qua ba k nu l GD cp nht, v tri qua 2 k nu l GD ch c: K c: k ny ko di t lc bt u GD cho n ngay trc hnh ng commit. GD c cc gi tr ca tt c cc mc d liu n cn t CSDL v lu chng vo cc bin cc b. Cc cp nht s c p trn bn sao chp cc b ca d liu, khng phi trn CSDL. Gio Trnh H Qun Tr C S D Liu trang 84

Khoa CNTT & Truyn Thng Trng i Hc Cn Th K kim tra: K ny theo sau k c. Cc kim tra s c thc hin m bo tnh kh tun t khng b vi phm nu cc cp nht ca GD c a vo CSDL. i vi cc GD ch c, iu ny bao gm vic kim tra xem cc gi tr d liu c vo cc bin vn cn l cc gi tr hin hnh trong cc mc d liu tng ng. Nu khng c s can thip no din ra, th GD c hon tt. Nu khng, GD phi b hy v khi ng li. i vi mt GD c cp nht, vic kim tra bao gm vic xc nh liu GD c a CSDL v mt tnh trng nht qun vi tnh kh tun t c duy tr hay khng. Nu khng th GD phi b hy. K ghi: K ny theo sau k kim tra thnh cng i vi cc giao dch cp nht. Trong k ny, cc cp nht thc hin trn bin cc b s c chp vo CSDL. K kim tra kim tra cc thao tc c v ghi ca cc GD l cc thao tc c th xen k nhau. Mi GD T c gn: Mt nhn Start(T) ghi nhn thi im bt u thc thi GD, Mt nhn Validation(T) ti thi im bt u vo k kim tra, V mt nhn Finish(T) ghi nhn thi im kt thc (bao gm c k ghi nu c). c th thnh cng vt qua k kim tra, mt GD T phi tha mt trong cc iu kin sau: 1. Tt c cc GD S vi nhn TG sm hn T phi hon thnh trc khi GD T bt u: ngha l Finish(S) < Start(T) 2. Nu GD T bt u trc khi mt GD trc S kt thc, th: a. Tp hp cc mc d liu c ghi bi GD trc khng phi l cc mc c c bi giao dch hin ti; v, b. GD trc phi hon tt k ghi ca n trc khi GT hin ti i vo k kim tra; ngha l, Start(T) < Finish(S) < Validation(T) Lut 2a m bo cc thao tc ghi ca GD trc khng c c bi GD hin ti; lut 2b m bo cc thao thc ghi c thc hin mt cch tun t, khng th gy xung t. Mc d cc k thut lc quan l rt hu hiu khi c t xung t, chng c th dn n s cun li ca cc GD mt cch n l. Ch rng hnh ng cun li ch lin quan n cc bn sao chp d liu cc b, v vy khng c tnh hung phi cun nhiu tng, v cc thao tc ghi thc s cha ng n CSDL. Tuy nhin, nu GD b hy l mt GD di, th ta s mt i thi gian x l qu bu, v GD phi c khi ng li. Nu trong mt mi trng m vic cun li ny xy ra thng xuyn, th y l mt du hiu cho thy khng nn la chn phng php lc quan iu khin cnh tranh trong mi trng .

2.7 mn ca mc d liu (data granularity)


2.7.1 nh ngha: mn l kch c ca mc d liu c chn nh l mt n v bo v bi giao thc iu khin cnh tranh. Tt c cc giao thc iu khin cnh tranh m chng ta tho lun u gi s CSDL bao gm mt s lng cc mc d liu, m ta cha nh ngha khi nim ny. Gio Trnh H Qun Tr C S D Liu trang 85

Khoa CNTT & Truyn Thng Trng i Hc Cn Th Mt mc d liu in hnh c chn nh l mt trong nhng th c kch c t ln n nh sau y: - Ton b CSDL - Mt tp tin (file) - Mt trang tin (page), i khi cn gi l mt vng hay mt khng gian CSDL mt on a vt l ni lu tr cc quan h - Mt mu tin (record) - Mt gi tr ca mt trng trong mt mu tin. Kch c hay mn ca cc mc d liu b kha trong mt thao tc c nh hng quan trng n hiu qu chung ca mt gii thut iu khin cnh tranh. Tuy nhin, c mt vi tha hip ta cn lu khi chn la kch c ca mc d liu. Chng ta s tho lun cc tha hip ny trong ng cnh ca kha cht, mc d cc l l tng t c th thc hin cho cc k thut iu khin cnh tranh khc. Xt mt GD cp nht mt b trong mt quan h. Gii thut iu khin cnh tranh c th cho php GD ch kha trn b thi, ngha l mn ca d liu b kha l mt mu tin n l. Mc khc, chng cng c th kha ton b CSDL, ngha l mn l ton b CSDL. Trong trng hp th 2, mn ny s ngn khng cho bt c GD no khc thc hin cho n khi kha c m. R rng y l iu ta khng mun. Mc khc, nu mt GD cp nht n 95% s mu tin trong mt tp tin, th vic cho php n kha ton b tp tin thay v kha tng mu tin mt s hiu qu hn nhiu. V vy, mc d liu cng ln, th mc cnh tranh cho php s cng thp. Ngc li, mc d liu cng nh, th thng tin v kha cht cn lu tr s cng nhiu. Kch c tt nht phi ty thuc vo bn cht ca cc giao dch: Nu mt giao dch thng truy cp mt s lng mu tin nh, th mn ca mc d liu mc mu tin s thun li hn. Ngc li mt giao dch thng truy nhiu mu tin ca cng mt tp tin, th s tt hn nu ta chn mn ca mc d liu l vng hay tp tin giao dch c th xem xt tt c cc mu tin nh mt (hay mt vi) mc d liu. Mt s k thut c a ra c h tr kch c mc d liu ng (dynamic). Vi cc k thut ny, ty thuc vo loi giao dch ang thc hin, mc d liu s c kch c thay i sao cho ph hp nht. Mt cch l tng, HQTCSDL nn h tr kha vi mn hn hp gm cc mu tin, trang tin v tp tin. Mt s h thng t ng nng cp mn ca cc kha t mu tin hoc trang tin ln tp tin nu mt GD no ang kha nhiu hn mt t l phn trm cc mu tin hoc trang tin no trong tp tin. I.1.2. S phn cp ca mn Chng ta s biu din cc mn ca kha trn mt cu trc phn cp ni m mi nt s biu din cho cc mc d liu vi cc kch c khc nhau, nh trong hnh 18. Mi khi mt nt b kha th tt c cc nt con chu ca n cng s b kha. V d, nu mt GD kha trang page2, th tt c cc record v cc field ca chng u s b kha. Nu mt GD khc yu cu mt kha khng tng thch (incompatible) trn cng mt nt, th HQTCSDL bit l khng th cp kha . Nu mt GD khc yu cu mt kha trn bt k nt con no ca mt nt b kha, HQTCSDL s kim tra con ng phn cp t nt gc n nt c yu cu Gio Trnh H Qun Tr C S D Liu trang 86

Khoa CNTT & Truyn Thng Trng i Hc Cn Th xc nh liu bt k nt t tin no ca n b kha hay khng trc khi quyt nh cp kha. V vy, nu ta ang yu cu mt kha ghi trn record Record1, HQTCSDL s kim tra cha ca n (Page2), ng ca n (File2), v bn thn ca nt CSDL (Database) xc nh xem c nt no b kha hay khng. Khi n pht hin Page2 b kha, th n s t Database chi yu cu. Hay trong trng hp mt GD yu cu kha trn mt nt v mt nt con chu ca nt File1 File 2 File 3 ny ang b kha. V d nh yu cu kha trn File2, HQTCSDL s kim tra mi trang trong file ny, mi record trong cc trang , v mi field Page 2 Page 3 Page1 trong mi record xem c nt no b kha hay khng. lm gim cng vic tm kim ny, Record 1 HQTCSDL s dng mt kiu kha mi gi l Record 2 kha a ht (multiple-granularity locking). Khi mt nt no b kha, th mt kha intention s c t ln tt c cc nt t tin ca nt . Field 2 Field 1 V vy, nu mt nt con chu ca File2 b kha v c mt yu cu kha trn nt File2 th s hin din ca kha intention trn File2 s cho Hnh 18. S phn cp ca mn bit l c mt nt hu du ca n b kha. Kha intention c th l Shared (chia s IS IX S SIX X c) hoc eXclusive (c quyn ghi). Mt IS X kha Intention Shared (IS) ch mu thun vi mt X X X kha c quyn; Mt kha Intention eXclusive IX X X X (IX) mu thun vi c kha shared v exclusive, S SIX X X X X v.v... Kha S v IX l khng tng thch; tuy X X X X X nhin, nu 2 kha ny l ca cng 1 giao dch yu X Bng 21. S tng thch ca cc cu th h thng s cp 1 kha cho n gi l kha kha trong c ch kha a ht SIX m bo tnh kh tun t vi cc mc kha khc nhau, mt giao thc kha hai k c s dng nh sau: Khng c kha no c cp mt khi c bt k nt no c gii phng Khng c nt no b kha cho n khi cc nt cha ca n b kha bi mt kha Intention. Khng c nt no c gii phng cho n khi tt c cc nt con chu ca n c gii phng. Bng cch ny, cc kha c p dng t trn gc xung, s dng cc kha intention cho n giai on nt t c kha c hoc kha ghi tht s v cc kha s c gii phng t di ln. Tuy nhin, kha cht vn c th xy ra v phi c x l nh tho lun trn. Gio Trnh H Qun Tr C S D Liu trang 87

Khoa CNTT & Truyn Thng Trng i Hc Cn Th

3 Phc hi CSDL
Phc hi CSDL (DB recovery) l qu trnh khi phc CSDL v trng thi ng khi c li xy ra.

3.1 S cn thit phi phc hi d liu


Vic lu tr d liu thng thng bao gm bn loi thit b vi mc tin cy tng dn l: b nh trong, a t, bng t v a quang. B nh trong l b lu tr khng n nh (volatile), d liu s b mt khi h thng c s c, cc thit b cn li l cc thit b n nh (non-volatile). H thng c b lu tr n nh (stable storage) l h thng lu tr thng tin lp li trong nhiu thit b n nh (thng l a) vi cc c ch chu li c lp nhau. V d nh, ta c th m phng b lu tr n nh bng cng ngh RAID cp chng 1. C rt nhiu loi li c th nh hng n vic x l ca CSDL, mi loi phi c x l khc nhau. Mt vi li ch nh hng n b nh trong, trong khi cc loi khc lin quan n b lu tr n nh. Mt s nguyn nhn gy li l: H thng b ngng li (crash) do li phn cng hay phn mm, dn n mt d liu trong b nh trong. Li thit b lu tr, nh u c b h hoc thit b khng c c, lm mt mt phn d liu trong b lu tr th cp. Li phn mm ng dng, nh l cc li lun l trong chng trnh truy cp CSDL, lm cho mt hoc nhiu GD b tht bi. Thin tai nh la, l lt, ng t; hoc mt in. S bt cn hay s ph hu d liu hoc phng tin khng c ch bi ngi s dng Cc hnh ng ph hoi d liu, cc thit b phn cng hoc phn mm c ch . Cho d l nguyn nhn g, th c hai nh hng ch yu m chng ta cn quan tm l mt d liu trong b nh trong, bao gm cc vng m CSDL; v mt bn sao chp ca CSDL trong a. Trong phn cn li ca chng ny chng ta s tho lun cc khi nim v k thut dng gim thiu cc nh hng ny v cho php phc hi sau s c.

3.2 Cc GD v s phc hi
Cc GD i din cho n v phc hi c bn trong mt h thng CSDL. Khi c li xy ra, vic m bo hai trong bn tnh cht ACID ca giao dch, tnh nguyn t v tnh bn vng, l vai tr ca b qun l phc hi. B phn ny phi m bo rng khi phc hi sau li, th hoc l tt c cc nh hng ca mt GD cho trc l c ghi nhn vnh cu trong CSDL hoc khng c nh hng no c ghi. y l iu khng n gin v cc thao tc ghi trong CSDL khng phi l mt hnh ng nguyn t, v v vy c th dn n trng hp mt GD hon tt, nhng cc nh hng ca n th cha c ghi vnh cu vo CSDL n gin bi v n cha chm n CSDL (m ch ghi nhn trong b nh trong). Ch khi no cc vng m cho CSDL trong b nh c y ra (flush) b lu tr th cp th cc thao tc cp nht mi c xem nh l vnh cu. Hnh ng flush ny Gio Trnh H Qun Tr C S D Liu trang 88

Khoa CNTT & Truyn Thng Trng i Hc Cn Th c th c by bng cc lnh c th (nh commit GD), hoc xy ra mt cch t ng khi vng m y. Hnh ng ghi vng m mt cch tng minh th c gi l ghip-buc (force-writing). Nu c s c xy ra gia cc ln ghi vng m ra b lu tr th cp, th b qun l phc hi phi xc nh tnh trng ca GD thc hin hnh ng ghi ti thi im xy ra li: Nu GD hon tt, tc l ra lnh commit, th m bo tnh bn vng, b qun l phc hi phi redo cc cp nht ca GD ln CSDL (iu ny gi l cun tin rollforward). Ngc li, nu GD cha ra lnh commit ti thi im xy ra li, th b qun l phc hi s phi undo (hay cun ngc li rollback) mi nh hng ca n trn CSDL m bo tnh nguyn t ca GD. Hnh 19 minh ho mt s GD ang thc hin cnh tranh T1 ..T6: HQTCSDL bt u ti thi im t0, nhng b s c ti thi im tf. Chng ta gii thit rng d liu cho GD T2 v T3 c ghi ra b lu tr th cp trc khi c li. R rng T1 v T6 cha hon tt thi im xy ra s c; v vy, khi khi ng li, b qun l phc hi phi undo cc GD T1 v T6. Tuy nhin, cc nh hng ca cc GD hon tt c chp vo CSDL trong b lu tr th cp n u th khng r, v cc vng m CSDL trong b nh c th chp ra a,cng c th cha. V vy, HQTCSDL phi redo tt c cc GD T2, T3, T4 v T5. T1 T2 T3 T4 T5 T6 t0 tC tf

Hnh 19. S c xy ra khi cc GD ang thc hin cnh tranh

3.3 Cc tin ch phc hi


Mt HQTCSDL c th cung cp cc tin ch sau gip cho vic phc hi: Mt c ch sao lu, to cc bn sao chp nh k lu li ca CSDL. Cc phng tin ghi nht k, theo di tnh trng hin ti ca cc GD v cc thay i ca CSDL. Mt phng tin kim tra, cho php cc cp nht ang thc hin trn CSDL c th c chp ra vnh cu. Mt b qun l phc hi, cho php h thng phc hi CSDL v tnh trng nht qun sau s c.

3.3.1 C ch sao lu

HQTCSDL phi cung cp c ch chp cc bn sao ca CSDL v tp tin nht k ti trong cc khong thi gian nh trc m khng cn phi tm ngng h thng. Gio Trnh H Qun Tr C S D Liu trang 89

Khoa CNTT & Truyn Thng Trng i Hc Cn Th Bn sao lu ca CSDL c th l ton b CSDL hoc ch sao lu cc thay i mi (incremental backup). Bn ny ch cha cc thay i thc hin k t ln sao lu trc. Thng thng, cc bn sao lu ny c lu trong b lu tr offline nh bng t.
3.3.2 Tp tin nht k

theo di cc GD trong CSDL, HQTCSL duy tr mt tp tin c bit gi l log (hay journal) cha cc thng tin v tt c cc cp nht trn CSDL. Tp tin nht k c th gm cc d liu sau: Mu tin GD, cha: o nh danh ca GD. o Kiu mu tin nht k (GD bt u, xen, cp nht, xo, hu, hon tt). o nh danh ca mc d liu b nh hng bi thao tc cp nht trn CSDL (xen, xo, sa). o Hnh-nh-trc (before-image) ca mc d liu: l gi tr trc khi thay i (nu l xo hay cp nht) o Hnh-nh-sau (after-image) ca mc d liu: l gi tr sau khi thay i (nu l xen hoc sa). o Cc thng tin qun l nht k, nh con tr n mu tin nht k k trc v k tip cho GD . Mu tin kim tra. Ngoi mc ch phc v cho phc hi CSDL, nht k cn c dng cho vic qun l hiu qu v kim tra. V vy, n cn cn phi lu thm thng tin v vic c CSDL, cc ng nhp, ng xut ca ngi dng, v.v...
Tid Time T1 T1 T2 T2 T2 T3 T1 T2 T3 T3 10:12 10:13 10:14 10:16 10:17 10:18 10:18 10:19 10:19 10:20 10:21 Operation START UPDATE START INSERT DELETE START COMMIT CHECK POINT COMMIT INSERT COMMIT
Bng 22. Mt on ca tp tin nht k, trong c 3 GD ang din ra song song.

Object

Before Image (old val.)

After Image PPtr 0

NPtr 2 7 4 5 9 10 0 0 11 0

STAFF SL21 STAFF SG37 STAFF SA9

(new val.) (new val.)

1 0 3 4 0 2

(old val.)

T2, T3 5 PROPERTY PG4 (new val.) 6 10

3.3.3 Xc lp thi im kim tra (checkpointing)

Cc thng tin trong tp tin nht k c dng phc hi CSDL b li. Mt kh khn ny sinh cho c ch ny l khi c li xy ra, chng ta khng bit phi lc li tp Gio Trnh H Qun Tr C S D Liu trang 90

Khoa CNTT & Truyn Thng Trng i Hc Cn Th tin nht k bao xa trnh phi redo li cc GD c ghi ra CSDL mt cch an ton. hn ch vic tm kim v cc x l cn thc hin trn tp tin nht k, chng ta s dng mt k thut xc lp thi im kim tra (checkpointing). im kim tra (checkpoint) l mt im m ti s ng b gia CSDL v tp tin nht k GD c ghi nhn. Khi , tt c cc vng m phi c ghi-p-buc ra b lu tr th cp. Cc im kim tra c lp lch ti cc khong thi gian nh trc v ti im kim tra, cc thao tc sau s c tin hnh: Ghi tt c cc mu tin nht k c trong b nh trong ra b lu tr th cp Ghi cc khi c sa i trong vng m CSDL ra b lu tr th cp. Ghi mt mu tin kim tra vo tp tin nht k. Mu tin ny cha cc nh danh ca cc GD ang hot ng ti thi im kim tra. Nu cc GD thc hin tun t: Khi c li xy ra chng ta ch cn kim tra tp tin nht k tm ra GD cui cng khi ng trc thi im checkpoint cui cng. Bt c GD no hon tt trc thi im ny, u c ghi ra ngoi ti thi im kim tra.V vy, chng ta ch cn: Redo GD ang hot ng ti thi im kim tra v cc GD theo sau m c c hai mu tin start v commit ca chng xut hin trong nht k. Undo li GD ang hot ng ti thi im xy ra li, tc l GD ch c mu tin start. Nu cc GD thc hin song song: Th chng ta: Redo tt c cc GD hon tt k t im kim tra Undo tt c cc GD ang hot ng ti thi im xy ra s c. Xt hnh 19, nu ta gi s im kim tra xy ra ti thi im tc, th: i vi T2 v T3: chng ta bit rng cc thay i bi T2 v T3 c ghi vo b lu tr th cp. V vy, b qun l phc hi khng cn redo cho hai GD ny. i vi T4 v T5: th ta phi redo, v hai GD ny hon tt sau thi im kim tra. i vi T1 v T6: th ta phi undo, v hai GD ny ang hot ng ti thi im xy ra s c. Ni chung, checkpointing l mt thao tc kh r, v n thng c thc hin khong 4 ln trong 1 gi. Bng cch ny, ta s khng phi phc hi nhiu hn lng cng vic trong khong 15-20 pht. 3.3.4 Cc k thut phc hi Ty theo mc CSDL b h m th tc phc hi s khc nhau. Ta xt hai tnh hung: Nu CSDL b h, khng c c na, th ta cn s dng bn sao lu cui cng v chy li cc thao tc ca cc GD hon tt ghi nhn trong tp tin nht k. Nu CSDL khng b h vt l nhng tr nn khng nht qun, chng hn nh khi h thng b treo khi ang thc hin giao dch, th ta cn undo cc thay i gy ra tnh trng khng nht qun. Cng c th phi redo mt s giao dch m bo cc cp nht ca n c lu ra b lu tr th cp. Chng ta s xem xt hai k thut phc hi cho trng hp ny l cp nht tr hon (deferred update) v cp nht tc th Gio Trnh H Qun Tr C S D Liu trang 91

Khoa CNTT & Truyn Thng Trng i Hc Cn Th (immediate update). Ngoi ra, cn c mt k thut khc na l to trang bng (shadow paging). 3.3.4.1Cp nht tr hon tng ch yu l tr hon cc cp nht thc s ln CSDL cho n khi GD kt thc thnh cng v t n im hon tt. Trong khi GD ang thc hin, cc cp nht ch ghi nhn trong nht k v trong khng gian thc hin ca GD. Sau khi GD i n im hon tt v nht k c ghi-p-buc ra a, cc cp nht mi c ghi vo CSDL. Nu 1 GD tht bi trc khi n lc hon tt, th khng cn phi undo bt c thao tc no, v GD cha nh hng g n CSDL. Cc bc lin quan n giao thc cp nht tr hon nh sau: 1. Khi 1 GD T bt u, mu tin start_transaction(T) c ghi vo nht k GD; 2. Khi c mt thao tc cp nht ln mc x ca CSDL th mu tin write_item(T, x, old_value, new_value) c ghi vo nht k; 3. Khi mt GD sp sa hon tt, th ghi vo nht k commit(T), ghi tt c cc mu tin trong nht k ra a; 4. Hon tt GD, s dng nht k cp nht CSDL, vic ghi d liu ra a khng cn thc hin ngay. 5. Nu GD b hu, th l i cc mu tin nht k v ng ghi cc thay i ra a. CSDL khng bao gi c cp nht cho n sau khi GD hon tt, do khng bao gi c thao tc no cn phi UNDO. V vy, k thut ny cn c gi l gii thut NO-UNDO/REDO. Hnh ng REDO l cn thit trong trng hp h thng tht bi sau khi GD hon tt nhng trc khi tt c cc thay i c ghi vo CSDL. Trong trng hp ny, cc thao tc s c thc hin li nh cc mc trong nht k. Khi c s c xy ra, da vo nht k, h thng c th xc nh cc GD no ang din ra ti thi im b li. Bt u t mu tin cui cng trong tp tin nht k i ngc v mu tin checkpoint gn nht : Nu GD c c mu tin bt u v hon tt th cn phi redo n. Th tc redo s thc hin tt c cc thao tc cp nht CSDL s dng hnh nh sau trong mu tin nht k, theo ng th t n c ghi vo nht k. Nu GD c mu tin bt u v mu tin hy th ta khng cn lm g c v chng cha c ghi vo CSDL. 3.3.4.2Cp nht tc th Trong k thut ny, CSDL c th c cp nht ngay bi cc thao tc ca mt GD, trc khi GD tin n im hon tt. Tuy nhin, nhng thao tc ny c ghi nhn trong nht k trn a bng vic ghi-p-buc trc khi chng c p dng vo CSDL c th phc hi c. Cc bc lin quan n giao thc cp nht tc th nh sau: 1. Khi mt GD T bt u, ghi vo nht k start_transaction(T); 2. Khi c mt thao tc cp nht mc x trong CSDL, ghi vo nht k write_item(T, x, old_value, new_value); 3. Ghi nht k ra a; 4. Mt khi mu tin nht k ghi xong, ghi cp nht vo vng m CSDL; 5. Khi thun tin th ghi vng m CSDL ra a; Gio Trnh H Qun Tr C S D Liu trang 92

Khoa CNTT & Truyn Thng Trng i Hc Cn Th 6. Khi mt GD sp sa hon tt, ghi 1 mu tin nht k commit(T); 7. Ghi nht k ra a. Nu h thng b li, vic phc hi lin quan n vic s dng nht k redo v undo cc GD: Nu GD c c mu tin bt u v hon tt trong nht k, th chng ta s redo bng cch s dng hnh nh sau (new_value) trong nht k. Nu GD ch c mu tin bt u nhng khng c mu tin hon tt, ta cn phi undo GD ny bng cch s dng hnh nh trc trong mu tin nht k. Thao tc undo s thc hin theo th t ngc li vi th t cc mu tin c ghi vo nht k.

3.3.4.3To trang bng Mt gii php khc vi c ch phc hi bng nht k nh hai k thut trn l to trang bng. C ch ny duy tr cc bng hai-trang trong sut qu trnh thc hin ca GD: mt bng trang hin ti v mt bng trang bng. Khi mt GD bt u, cc bng ny ging nhau. Bng trang bng khng bao gi thay i, v vy c dng phc hi CSDL khi c s c xy ra. Trong sut GD, bng trang hin ti c dng ghi nhn mi thay i trn d liu. Khi GD hon tt, bng trang hin ti tr thnh bng trang bng. K thut ny c u im l khng mt thi gian duy tr nht k, v phc hi nhanh mt cch ng k v khng cn thc hin undo hay redo. Tuy nhin, n cng c nhc im l phn on d liu v cn phi thu hi rc mt cch nh k.

4 Qun l giao dch trong Oracle:


4.1 Tng quan
Trong mi trng CSDL a ngi dng, cu lnh trong cc GD hot ng song song c kh nng cp nht trn cng d liu, iu ny c th dn n d liu khng nht qun. V th, vic iu khin tnh nht qun v tnh cnh tranh d liu l rt cn thit trong mi trng a ngi dng. Cc GD hot ng song song c th gy ra cc hin tng c sau: 1. c bn (dirty read): mt GD c d liu ang c vit bi mt GD khc cha hon tt. 2. c lp li (repeatable read): mt GD c li d liu m n c trc v nhn ra rng d liu ny c thay i hoc xo bi mt GD khc hon tt. 3. c ma (phantom read): mt GD thc hin li mt truy vn tr v mt tp hp cc d liu tho mn mt iu kin tm kim v nhn ra s c mt mt vi d liu mi (tho mn iu kin tm kim) va c thm vo bi cc GD khc hon tt. Chun SQL92 nh ngha 4 mc c lp d liu nhm trnh cc hin tng c ny: Mc c lp Read Uncommitted c bn Y c lp li Y c ma Y

Gio Trnh H Qun Tr C S D Liu trang 93

Khoa CNTT & Truyn Thng Trng i Hc Cn Th Read Committed Repeatable Read Serializable N N N Y N N Y Y N

Bng 23. Cc mc c lp v cc hin tng c (Y: hin tng c c th xy ra trong mc c lp, N: hin tng c khng th xy ra trong mc c lp)

Oracle cung cp 3 mc c lp: Read Committed, Serializable v Read-only (khng thuc chun SQL92). 1. Read Commited: y l mc c lp mc nh cho cc GD. Mi cu truy vn trong GD ch nhn thy cc d liu c hon tt (committed) trc khi cu truy vn ny bt u thc hin (khng phi GD cha cu truy vn ny). V Oracle cho php cc GD khc thay i d liu c c bi cu truy vn, nn d liu c th b thay i gia hai ln thc hin ca mt cu truy vn. V th, mt GD thc hin mt cu truy vn nhiu ln c th gp cc hin tng c lp li v c ma. 2. Serializable: GD mc c lp ny ch nhn thy nhng d liu c hon tt trc khi GD bt u v nhng d liu nh hng bi GD thng qua cc cu lnh INSERT, UPDATE v DELETE. GD mc c lp ny khng gp cc hin tng c lp li v c ma. 3. Read-only: GD mc c lp ny ch nhn thy nhng d liu c hon tt trc khi GD bt u v khng cho php thc hin cc cu lnh INSERT, UPDATE v DELETE. Mc c lp Read Committed thch hp vi nhng mi trng trong cc GD rt t xung t ln nhau. Ngc li, mc c lp Serializable thch hp vi cc mi trng: Vi CSDL ln v cc GD "ngn" ch cp nht trn t dng d liu. Vi t l hai GD cng thay i trn cng mt d liu l rt thp. Vi cc GD "di" ch yu ch c d liu. Khi GD mc c lp Serializable c gng cp nht hoc xo d liu c hon tt bi GD khc sau khi GD ny bt u, Oracle s xut ra li:
ORA-08177: Cannot serialize access for this transaction

Khi , trnh ng dng c th thc hin theo mt trong cc hnh ng sau: Hon tt cc cng vic c thc hin thnh cng trc . Thc hin thm mt s cu lnh khc m bo tnh ton vn ca d liu (v d, thc hin cun li) Thc hin li ton b GD. Ngoi ra, Oracle cn cung cp cho ngi dng c ch kho (locks). Kho l nhng c ch gip ngi dng gii quyt vn truy xut n cng hng mc d liu gia cc GD khc nhau nh bng (table) hay dng d liu (rows). Trong tt c cc trng hp, Oracle t ng thu tt c cc kho cn thit khi thc thi mt cu lnh m khng cn s tc ng ca ngi dng. Oracle s p dng mc thp nht c th p dng c m bo tnh ton vn ca d liu. Tuy nhin, Oracle vn cho php ngi dng t thc hin kho d liu. Oracle cung cp 2 ch kho: Gio Trnh H Qun Tr C S D Liu trang 94

Khoa CNTT & Truyn Thng Trng i Hc Cn Th Kho loi tr (exclusive lock): hng mc d liu c kho mc ny s khng th c chia s vi cc GD khc, mc ny ph hp khi GD mun thc hin nhng thay i trn hng mc d liu. Kho chia s (shared lock): hng mc d liu c kho mc ny c th c chia s vi cc GD khc ph hp, thng thng mc ny ngn chn nhng thao tc vit trn hng mc d liu. Kho c gi trong sut qu trnh GD tn ti. Oracle s gii phng kho khi GD c hon tt hoc c thc hin li (undo) ton b. nng cao mc cnh tranh ca cc GD, Oracle ch cung cp c ch chuyn i kho v khng cung cp c ch nng cp kho v nng cp kho rt d dn n tnh trng kho cht (deadlock). Oracle chia kho thnh 3 loi sau: 1. Kho d liu (DML locks): m bo tnh ton vn ca d liu c truy cp ng thi bi cc GD khc nhau. Cc cu lnh DML c th thu c 2 loi kho: kho mc bng (table-level lock) v kho mc dng d liu (row-level lock) Kho mc dng d liu (TX): c dng ch yu trnh vic thay i trn cng dng d liu ca cc GD khc nhau. Trc khi mt GD thay i mt dng d liu, GD cn thu kho dng d liu. Oracle khng gii hn s lng kho dng d liu c gi bi mt GD. Kho dng d liu l mc ht mn nht trong s kho a ht ca Oracle. Mt GD ch yu cu mt kho dng d liu loi tr (exclusive row-level lock) khi thc hin cu lnh INSERT, UPDATE, DELETE v SELECT FOR UPDATE. Khi mt GD gi kho dng d liu, GD cng gi kho mc bng ca bng d liu tng ng. Kho mc bng (TM): thng c dng qun l cnh tranh vi s c mt ca cc cu lnh DDL, nh ngn chn vic xo mt bng trong khi bn ang c thao tc bi cc lnh DML. Mt GD yu cu mt kho mc bng khi thc hin cu lnh INSERT, UPDATE, DELETE v SELECT FOR UPDATE. Kho mc bng c th nhiu ch khc nhau: chia s dng (Row Share RS), loi tr dng (Row Exclusive RX), chia s dng loi tr (Share Row Exclusive SRX) v loi tr (Exclusive X). Cu lnh SQL Ch kho thu c Dng Bng
SELECT ... FROM table INSERT INTO table ... UPDATE table ... DELETE FROM table SELECT ... FROM table FOR UPDATE OF ...

Ch kho bng c th cp pht cho cc GD khc RS Y Y Y* Y* Y* RX Y Y Y* Y* Y* S Y N N N Y* SRX Y N N N Y* X Y N N N N

Khng X X X X RX RX RX RS

Gio Trnh H Qun Tr C S D Liu trang 95

Khoa CNTT & Truyn Thng Trng i Hc Cn Th


LOCK TABLE table IN ROW SHARE MODE LOCK TABLE table IN ROW EXCLUSIVE MODE LOCK TABLE table IN SHARE MODE LOCK TABLE table IN SHARE ROW EXCLUSIVE MODE LOCK TABLE table IN EXCLUSIVE MODE

RS RX S SRX X

Y Y Y Y N

Y Y N N N

Y N Y N N

Y N N N N

N N N N N

Bng 24. Bng tng thch ca cc kho

Bng trn m t cc ch kho mc bng/dng thu c khi GD thc hin cc lnh DML v cc ch kho cho php cc GD khc yu cu khi thc hin cu lnh DML thao tc trn cng bng d liu (Y*: cho php nu khng tn ti xung t kho mc dng d liu) 2. Kho t in (DDL locks): bo v nh ngha ca cc i tng lc trong khi i tng c thao tc hoc c tham chiu n bi cc lnh DDL sp thc thi. Cc cu lnh DDL t hon tt GD mt cch khng tng minh. Mt i tng gin ch c kho trong khi thc hin cu lnh DDL, ngi dng khng th yu cu kho mt cch tng minh v t in d liu khng bao gi c kho. 3. Kho ni ti (Internal locks): bo v cu trc b nh v cu trc bn trong ca CSDL, ngi dng khng th truy cp n loi kho. 4.1.1 Cc c php Oracle khng cung cp cu lnh tng minh khi ng mt GD, cc GD c khi ng mt cch khng tng minh trong hai trng hp sau: Cu lnh thc thi u tin ca mt phin lm vic mi (user session) t khi ng mt GD. Cu lnh thc thi u tin tip theo mt GD va c hon tt (committed) t khi ng mt GD. kt thc mt GD, ngi dng c th thc hin mt trong cc cch sau: Thc thi lnh COMMIT hon tt GD. Thc thi lnh ROLLBACK cun li GD. Thc thi mt lnh DDL s kt thc giao dch hin ti mt cch ngm nh. Kt thc phin lm vic ca ngi dng cng kt thc GD mt cch ngm nh. thit lp mc c lp ca mt GD, ta c th thc hin mt trong cc lnh sau:
SET TRANSACTION ISOLATION LEVEL READ COMMITTED; SET TRANSACTION ISOLATION LEVEL SERIALIZABLE; SET TRANSACTION READ ONLY;

Gio Trnh H Qun Tr C S D Liu trang 96

Khoa CNTT & Truyn Thng Trng i Hc Cn Th gim ti ng truyn v chi ph thc hin cu lnh SET TRANSACTION trc mi GD, ta c th thc hin cu lnh ALTER SESSION t tt c cc GD sau bng mc c lp mong mun.
ALTER SESSION SET ISOLATION_LEVEL SERIALIZABLE; ALTER SESSION SET ISOLATION_LEVEL READ COMMITTED;

Oracle lun t ng thc hin kho cc hng mc d liu m bo tnh ton vn ca d liu. Tuy nhin, ngi dng c th t thay th ch kho mc nh nhm tho mn cc nhu cu ca trnh ng dng. Vic thay th ny rt hu ch trong cc trng hp sau: ng dng yu cu vic c bn vng hay c lp li mc giao dch. Ni cch khc, cc cu lnh truy vn trong giao dch phi phn nh tnh bn vng ca d liu, khng b nh hng ca nhng thay i trn d liu ca cc giao dch khc. Giao dch c th t n vic c bn vng bng cch s dng kho loi tr hay cc mc c lp Read Only v Serializable. ng dng c cc giao dch hot ng trong mi trng cnh tranh ti nguyn nhng khng mun mt giao dch phi i mt giao dch khc hon tt c th tip tc cc cu lnh bn trong n. Ngi dng c th kho d liu tng minh bng cc cu lnh sau: SET TRANSACTION ISOLATION LEVEL LOCK TABLE SELECT ... FOR UPDATE

5 Sao lu, phc hi trong Oracle:


Oracle s dng mt s khi nim sau trong sao lu v phc hi: SCN (System Change Number) l mt s m tun t, xc nh chnh xc mt thi im trong CSDL. S ny rt hu ch cho vic tin hnh phc hi CSDL. Tt c header ca datafiles s c cng SCN khi CSDL c tt ch bnh thng (normal). Checkpoint: xy ra khi tin trnh DBWR (database writer) ghi tt c thay i trn b nh m trong SGA v cc datafiles. ng thi cc header ca datafiles c cp nht SCN ti thi im checkpoint, ngay c khi datafile khng c thay i g. Checkpoint cng xy ra khi cc nhm redo log chuyn trng thi hin thi cho nhau (redo log switch) hay sau mt khong thi gian c ch nh trong tp tin cu hnh h thng. Image copy: l bn sao ca mt datafile, mt controlfile hay mt archived log. Backup set: l mt cu trc lun l cha ng d liu mt hoc nhiu datafiles, archived redo logs hoc control files. Flash Recovery Area: l ni lu tr tt c cc tp tin lin quan n phc hi CSDL nh archive redo log, control files, tp tin sao lu to ra bi RMAN v nht k flashback.

Gio Trnh H Qun Tr C S D Liu trang 97

Khoa CNTT & Truyn Thng Trng i Hc Cn Th

5.1 Sao lu
5.1.1 Gii thiu Trong cc h qun tr CSDL, bn sao lu l bn sao ca d liu. Bn sao ny cha cc thnh phn quan trng ca CSDL nh control files v data files. Bn sao lu l mt yu t bo v chng li cc li ng dng v s mt mt d liu khng mong i. Nu d liu gc b mt, chng c th c xy dng li t bn sao lu. Sao lu c chia thnh sao lu vt l (physical backup) v sao lu lun l (logical backup). Sao lu vt l l cng vic ch yu ca chin lc sao lu v phc hi (recover) d liu, bn sao lu vt l l bn sao ca cc tp tin vt l trong CSDL. thc hin sao lu vt l, ta c th s dng cng c RMAN (Recovery Manager) hoc cng c ca h iu hnh (copy tp tin). Sao lu lun l cha d liu lun l nh bng d liu, th tc tr sn c trch ra t mt cng c h tr ca Oracle v lu dng tp tin nh phn. Sao lu lun l thng c dng h tr sao lu vt l. C 2 cch thc hin sao lu v phc hi trong Oracle: S dng RMAN: mt cng c h tr sao lu (backup), hon li (restore) v phc hi (recover) cc tp tin CSDL. Ngi dng t qun l: s dng cc lnh ca h iu hnh backup v s dng SQL*Plus thc hin phc hi CSDL. 5.1.2 Phn loi sao lu 5.1.2.1Sao lu nht qun (consistent backup) Sao lu nht qun CSDL hay mt phn CSDL l sao lu m tt c cc data files v controlfiles c kim sot thi im (checkpointed) vi cng SCN. Cch duy nht sao lu nht qun ton CSDL l tt CSDL ch normal, immediate hoc transactional v thc hin sao lu khi CSDL ng. Bi v, nu CSDL c tt ch khc, v d th hin b li hay CSDL tt ch abort, th cc datafiles s khng c nht qun. Oracle thc hin nht qun ha cc datafiles v controlfiles vi cng SCN ti thi im kim sot (checkpoint) CSDL. Trong qu trnh sao lu nht qun, ch cc tablespaces ch ch c (read-only) v offline c php c SCN c hn so vi thi im kim sot. V cc tablespaces ny vn nht qun vi cc datafiles khc do d liu ca chng khng c thay i g mi. im quan trng ca dng sao lu ny l chng ta c th m li CSDL ngay sau khi hon li bn sao nht qun ton CSDL m khng cn thc hin thao tc phc hi d liu. Ngha l khng cn thao tc no ht cc datafiles hon li c ng. V tt nhin, vi kiu sao lu ny, tt c GD (transactions) k t thi im sao lu s b mt vnh vin. Sao lu nht qun l la chn sao lu hp l duy nht ca cc CSDL hot ng ch NOARCHIVELOG, nu khng, cc thao tc phc hi cn thc hin m bo tnh nht qun ca CSDL. ch ny, Oracle khng lu li nht k lm li (redo logs). Sao lu nht qun ton CSDL cng l mt la chn hp h cho CSDL Gio Trnh H Qun Tr C S D Liu trang 98

Khoa CNTT & Truyn Thng Trng i Hc Cn Th hot ng ch ARCHIVELOG. Khi thc hin hon li, cng vi cc nht k c lu tr, chng ta c th m CSDL ngay lp tc. 5.1.2.2Sao lu khng nht qun (inconsistent backup) y l la chn duy nht nu CSDL phi hot ng 24/24 v 7 ngy trong tun, vi yu cu CSDL phi hot ng ch ARCHIVELOG. Trong dng sao lu ny, cc tp tin sao lu c to ti cc thi im khc nhau. iu ny c th xy ra, v cc datafiles c th b thay i trong qu trnh sao lu. Vic phc hi lm cc bn sao khng nht qun thnh nht qun bng cch c cc nht k lu tr (archived redo log) v lm li (redo log), chn SCN xa nht trong tt c header ca datafiles v phc hi li d liu ca ton b CSDL t thi im tng ng vi SCN . ch ARCHIVELOG, CSDL khng cn sao lu ton b CSDL cng mt lc. V d, nu CSDL c 7 tablespaces th mi m ta c th sao lu controlfiles v 1 tablespace. Nh vy, nu c s c xy ra, u tin ta cn hon li ton b datafiles v controlfiles gn nht, sau tin hnh phc hi d liu t tt c archived redo log c to ra t thi im sao lu xa nht. 5.1.2.3Sao lu ton b CSDL y l kiu sao lu ph bin nht. Oracle thc hin sao lu tt c datafiles v controlfile trong CSDL. Kiu sao lu ny c th c thc hin ch ARCHIVELOG v NOARCHIVELOG. Tuy nhin, cn phi cn nhc kiu sao lu ny c c d liu nht qun.

Hnh 20. Cc la chn sao lu ton CSDL

sao lu c nht qun, cn phi phc hi d liu t cc tp tin Redo Logs sau khi hon li d liu (restore). 5.1.2.4Sao lu tng phn CSDL Sao lu datafile Sao lu datafile l dng sao lu mt datafile n l, khng c s dng rng ri nh sao lu tablespace. Dng sao lu ny khng hp l vi CSDL ch ARCHIVELOG. Sao lu datafile ch hp l vi CSDL ch NOARCHIVELOG nu: Cc datafiles trong tablespace u c sao lu. V tablespace s khng th hon li nu thiu 1 datafile. Cc datafiles phi ch ch c hoc offline. Sao lu controlfile Gio Trnh H Qun Tr C S D Liu trang 99

Khoa CNTT & Truyn Thng Trng i Hc Cn Th Vic sao lu controle l rt quan trng, v CSDL s khng lin kt (mount) hay m c nu thiu tp tin ny. Ta c th thit t RMAN t ng sao lu controlfile mi khi thc hin vic sao lu bng cu lnh CONFIGURE CONTROLFILE AUTOBACKUP. Ngoi ra, ta cng c th thc hin sao lu th cng bng cc phng php sau: Dng lnh RMAN BACKUP CURRENT CONTROLFILE. Dng lnh SQL ALTER DATABASE BACKUP CONTROLFILE. Dng lnh SQL ALTER DATABASE BACKUP CONTROLFILE TRACE xut tp tin script SQL cha ni dung ca controlfile, ta c th dng script ny to controlfile mi. Sao lu archived redo log Archived redo log l nhng thng tin thit yu cho phc hi cc sao lu khng nht qun. Cch duy nht phc hi sao lu khng nht qun m khng s dng archived log l sao lu tng phn (incremental backups) h tr bi RMAN. Ta cn phi sao lu archived redo log thng xuyn bng cc phng php sau: Dng lnh RMAN BACKUP ARCHIVELOG. Dng lnh RMAN BACKUP PLUS ARCHIVELOG. Dng cc cng c ca h iu hnh. 5.1.2.5Sao lu tng dn (incremental backup) Sao lu tng dn ch lu li nhng data blocks c thay i so vi mt ln sao lu trc . Ta c th thc hin sao lu tng dn trn ton b CSDL, trn tng tablespace hay datafile. Cc nguyn nhn ch yu khi thc hin sao lu tng dn: Gim thi gian cn thit khi thc hin sao lu hng ngy. Gim lu lng bng thng khi thc hin sao lu qua mng. Gim ln cc bn sao lu cho CSDL ch NOARCHIVELOG. Gii thut sao lu tng dn Mi data block trong cc datafile u cha mt SCN ca ln thay i gn nht ca n. Trong sao lu tng dn, SCN ca mi data block c so snh vi SCN ca ln checkpoint thc hin sao lu. Nu SCN ca data block no ln hn hoc bng th n c a vo bng sao lu. Sao lu tng dn mc 0 v mc 1 Mc 0 l nn tng ca cc ln sao lu tip theo, n lu ton b data blocks ca cc datafiles, tng ng vi sao lu ton b CSDL. Mc 1 c th thuc vo mt trong hai loi: chnh lch v tch ly. Sao lu tng dn chnh lch (differential incremental backup) L loi sao lu mc nh ca mc 1, ch sao lu cc data blocks c thay i t ln sao lu tng dn gn nht.

Gio Trnh H Qun Tr C S D Liu trang 100

Khoa CNTT & Truyn Thng Trng i Hc Cn Th

Hnh 21. Mt chin lc sao lu tng dn chnh lch

Trong hnh trn, mt chin thut sao lu c thit k theo tng tun. Ngy ch nht c t GD nn CSDL c sao lu tng dn mc 0, sao lu ton b CSDL. Vo cc ngy khc trong tun, CSDL c sao lu tng dn mc 1, ngha l th hai ch lu li nhng thay i so vi ch nht, th ba ch lu li nhng thay i so vi th hai v cng vic ny c lp li tun tip theo Sao lu tng dn tch ly (cumulative incremental backup) Lu li cc datablocks c thay i k t ln sao lu mc 0 gn nht. Loi sao lu ny gim khi lng cng vic phi lm khi hon li (restore) CSDL v ch cn p dng mt bn sao lu mc 0 v mc 1. Tuy nhin, n lm li cng vic ca ln sao lu cng mc gn , nn n cn nhiu khng gian lu tr v thi gian thc hin hn.

Hnh 22. Mt chin lc sao lu tng dn tch ly

target <tn ngi dng DBA>

5.1.3 C php sao lu Cc lnh sao lu phi c thc thi trong chng trnh RMAN (Recovery MANager). m chng trnh ny, vo command console g vo lnh RMAN
BACKUP FULL ty_chn BACKUP FULL AS (COPY | BACKUPSET) ty_chn

Gio Trnh H Qun Tr C S D Liu trang 101

Khoa CNTT & Truyn Thng Trng i Hc Cn Th


BACKUP INCREMENTAL LEVEL [=] s_nguyn ty_chn BACKUP INCREMENTAL LEVEL [=] s_nguyen AS (COPY | BACKUPSET) ty_chn BACKUP AS (COPY | BACKUPSET) ty_chn BACKUP AS (COPY s_nguyn) ty_chn | BACKUPSET) (FULL | INCREMENTAL LEVEL [=]

Vi ty_chn::= { DATAFILE g_dn_datafile [,g_dn_datafile]...


|TABLESPACE ['] tn_tablespace ['] [, ['] tn_tablespace [']]... | DATABASE | CURRENT CONTROLFILE [FOR STANDBY] | SPFILE }

V d: Sao lu CSDL v control file


BACKUP DATABASE; BACKUP CURRENT CONTROLFILE;

Sao lu cc datafiles
BACKUP AS BACKUPSET DATAFILE 'ORACLE_HOME/oradata/trgt/users01.dbf', 'ORACLE_HOME/oradata/trgt/tools01.dbf';

Sao lu tt c datafiles trong CSDL


BACKUP AS COPY DATABASE;

Sao lu cc tp tin archive logs trong mt khong thi gian


BACKUP ARCHIVELOG COMPLETION TIME BETWEEN AND 'SYSDATE-7'; 'SYSDATE-28'

Sao lu tablespace
BACKUP TABLESPACE system, users, tools;

Sao lu controlfile hin ti


BACKUP CURRENT CONTROLFILE TO '/backup/cntrlfile.copy';

Sao lu tp tin tham s h thng


BACKUP SPFILE;

Sao lu ton b CSDL ra backupset


BACKUP BACKUPSET ALL;

5.2 Phc hi (recovery)


5.2.1 Gii thiu Hon li (restore) bn sao datafile hay control file l to li chng sao cho Oracle database c th s dng c ngay. Phc hi (recover) datafile l cp nht li d liu bng cch s dng archived redo logs v online redo logs, ngha l cc thay i trn CSDL sau khi vic sao lu c thc hin. Khi c s c xy ra i vi CSDL, nh qun tr cn hon li CSDL trc tin, sau thc hin hi phc cc d liu thay i t SCN ca tp tin sao lu (i vi sao lu nht qun) hoc SCN c nht ca tp tin sao lu (i vi sao lu khng nht qun). Gio Trnh H Qun Tr C S D Liu trang 102

Khoa CNTT & Truyn Thng Trng i Hc Cn Th Ngoi ra, cc li lun l do ngi dng gy ra nh xa nhm bng hay xa nhm d liu quan trng. Nh qun tr c th s dng Oracle Flashback Database v Oracle Flashback Table hi phc li cc thng tin ny thay v hi phc ton b CSDL.

Hnh 23. Nguyn l sao lu, hon li v phc hi CSDL

5.2.2 Phn loi phc hi 5.2.2.1Phc hi y (complete recovery) Phc hi y s dng d liu redo hoc cc bng sao tng dn (incremental backup) kt hp vi bn sao CSDL, tablespace hay datafile cp nht chng n thi im gn y nht c thay i trn d liu. Phc hi y v ta p dng ton b mu tin trong archived v online logs trn bn sao. Thng thng, phc hi y c p dng khi c s c h hng cc datafiles v control file. Cc bc thc hin phc hi ton b CSDL: Lin kt (mount) CSDL. m bo tt c datafiles cn phc hi ch trc tuyn. Hon li bn sao ton b CSDL hoc cc tp tin cn phc hi. p dng online v archived redo logs. Cc bc thc hin phc hi tablespace, datafile: a tablespace hoc datafile v ch tt (offline) nu CSDL cn m. Hon li bn sao ca cc datafiles cn phc hi. p dng online v archived redo logs. 5.2.2.2Phc hi khng y (incomplete recovery) Phc hi khng y khng p dng tt c mu tin redo c ghi nhn t lc thc hin sao lu gn nht. Phc hi khng y ton b CSDL thch hp vi cc tnh hung sau: S c ph hng mt vi hoc ton b tp tin online redo logs. Ngi dng gy ra mt d liu nh xa bng. Tht lc archived redo log. Gio Trnh H Qun Tr C S D Liu trang 103

Khoa CNTT & Truyn Thng Trng i Hc Cn Th Tht lc control file v phi s dng bn sao control file m CSDL. 5.2.3 C php restore
RESTORE i_tng_restore; i_tng_restore ::= { CONTROLFILE [TO 'tn_file'] | DATABASE | DATAFILE g_dn_datafile [,g_dn_datafile]... | TABLESPACE ['] tn_tablespace ['] [, ['] tn_tablespace [']]... | SPFILE [TO [PFILE] 'tn_file'] }

5.2.4 C php recover


RECOVER i_tng_recover; i_tng_recover::= { DATABASE [cho_n_khi] | TABLESPACE ['] tn_tablespace ['] [, ['] tn_tablespace [']]... | DATAFILE g_dn_datafile [,g_dn_datafile]... } cho_n_khi ::= { UNTIL TIME [=] 'ngy_thng' | UNTIL SCN [=] s_nguyn }

V d: Hon li v phc hi ton b CSDL


STARTUP FORCE MOUNT; RESTORE DATABASE; RECOVER DATABASE; ALTER DATABASE OPEN;

Hon li v phc hi tablespace


SQL 'ALTER TABLESPACE users OFFLINE'; RESTORE TABLESPACE users; RECOVER TABLESPACE users; SQL 'ALTER TABLESPACE users ONLINE';

Hon li v phc hi datafile


SQL 'ALTER DATABASE DATAFILE 64 OFFLINE'; RESTORE DATAFILE 64; RECOVER DATAFILE 64; SQL 'ALTER DATABASE DATAFILE 64 ONLINE';

Gio Trnh H Qun Tr C S D Liu trang 104

Khoa CNTT & Truyn Thng Trng i Hc Cn Th

Phn thc hnh


BI 1. LM QUEN VI ORACLE 1 Ni dung
Kt ni vi server Oracle. To/xa/m/tt CSDL Oracle. Qun l ngi dng, quyn v role. Import/export v expdp/impdp.

2 Bi tp c hng dn
Cu 1: khi ng cc dch v ca Oracle

Mt s lnh c bn. Cc lnh sau thc hin trong ca s Command Console ca Windows (menu Start Run, g vo cmd): Khi ng Listener: lsnrctl start Khi ng CSDL: sqlplus sys/hqtcsdl as sysdba Ti du nhc SQL> , g vo startup; Kt thc trnh sqlplus bng lnh exit; Khi ng chng trnh Oracle Enterprise Manager: emctl start
dbconsole

Ngoi ra, ta c th khi ng cc dch v ny bng giao din ca trnh qun l cc dch v trong Windows (Control Panel Administrative Tools Services) Cu 2: kt ni vi CSDL hqtcsdl thng qua Oracle Net

Thit lp kt ni vi CSDL hqtcsdl thng qua chng trnh Oracle Net Manager (Start Programs Oracle Configuration and Migration Tools Net Manager)

Hnh 24. Oracle Net Manager

Bc 1: chn mc Service Naming, kch chut vo du pane bn tri to mt net service name vi cc thng s thc hin kt ni vi server CSDL.

Gio Trnh H Qun Tr C S D Liu trang 105

Khoa CNTT & Truyn Thng Trng i Hc Cn Th

Hnh 25. t Net Service Name

t Net Service Name l TestService (sinh vin c th t tn ty ). Chn Next. Bc 2: chn Protocol TCP/IP. Chn Next.

Hnh 26. Chn giao thc mng c s dng

Bc 3: thit lp cc thng s my ch nh sau: Host Name: tn server hoc a ch IP trong mng, thit lp localhost hoc 127.0.0.1 Port Number: cng 1521 mc nh. Chn Next.

Hnh 27. Cc thit lp ca giao thc

Bc 4: t Service Name: chnh l tn CSDL cn truy cp n (Global Database Name). G vo hqtcsdl.

Gio Trnh H Qun Tr C S D Liu trang 106

Khoa CNTT & Truyn Thng Trng i Hc Cn Th

Hnh 28. Thit lp tn service

Bc 5: thc hin kim tra kt ni vi CSDL.

Hnh 29. Kim tra kt ni

Chn Test, nu kt ni thnh cng th xut hin bng thng bo nh sau.

Hnh 30. Thng bo kt ni thnh cng

Chn Close v Finish kt thc thit lp kt ni. Bc 6: Kim tra kt ni bng chng trnh SQL*Plus. M ca s Terminal, g vo cc lnh ng nhp vi c php sqlplus acc/pass@<service name>, vi acc v pass l ti khon v mt khu ca ngi dng, service name l tn dch v mng. V d: ng nhp bng ngi dng SYS: sqlplus sys/hqtcsdl@orcl as sysdba;. Ch : as sysdba ch ra rng ngi dng ng nhp vi vai tr ca ngi dng qun tr. ng nhp bng ngi dng SCOTT: sqlplus scott/tiger@orcl;

Gio Trnh H Qun Tr C S D Liu trang 107

Khoa CNTT & Truyn Thng Trng i Hc Cn Th Nu ng nhp thnh cng, thng bo connected hin ra. Ngc li, cn kim tra li password hoc cc thng s ca Net Service Name c s dng hoc trng thi ca ti khon ng nhp. kt thc phin lm vic, g vo disconnect; v exit; Cu 3: Dng chng trnh Oracle SQL Developer kt ni vi CSDL Trong khi khi ng sqldeveloper, nu chng trnh c hi ng dn n th mc ci t J2SE th ch n th mc ci t Java trong th mc C:\Program Files. Giao din Oracle SQL Developer nh hnh sau:

Hnh 31. Giao din SQL Developer

to kt ni n CSDL, click vo icon bn tab Connections hoc vo menu File New, chn Database Connection. C 2 cch to kt ni: Cch 1: kt ni trc tip, tc chn Connection type l basic. Trong cch kt ni ny, cc tham s c thit lp nh sau: Connection name: tn ca kt ni (t ty ). Username, password: ca ngi dng ng nhp. Role: nu ng nhp bng ngi dng SYS, chn SYSDBA. Connection type: basic. Hostname: a ch IP ca database server. Nhp vo localhost hoc 127.0.0.1. Port mc nh 1521 SID: tn CSDL cn ng nhp. Nhp vo hqtcsdl.

Hnh 32. Kt ni trc tip

Cch 2: kt ni thng qua Oracle Net, tc chn Connection type l TNS.

Gio Trnh H Qun Tr C S D Liu trang 108

Khoa CNTT & Truyn Thng Trng i Hc Cn Th

Hnh 33. Kt ni thng qua Oracle Net

Trong cch kt ni ny, cc tham s c thit lp tng t cch 1, ch khc 2 tham s: Connection type: TNS. Network Alias: chn net service name to cc bc trn, tc l TestService. Trong c hai cch, cc tham s ca kt ni c th c lu li dng sau ny bng cch nhn vo nt Save. kim th, nhn vo nt Test. ng nhp, nhn vo nt Connect. Khi ng nhp thnh cng, ca s chnh ca SQL Developer xut hin nh sau:

Hnh 34. Ca s chnh ca Oracle SQL Developer

Giao din ca chng trnh c chia thnh 2 phn: Phn bn tri: hin th cc schema objects ca ngi dng ang kt ni. Phn bn phi: ca s son tho, hin th kt qu, ca s li ca cc cu lnh SQL, PL/SQL. Ngoi ra, Oracle SQL Developer cn h tr mt s chc nng khc nh: giao din ha thao tc trn cc schema objects, tr gip v ngn ng SQL v PL/SQL trong module Snippets, qun l cc lnh SQL thc thi vi module SQL History, bin dch v g ri PL/SQL V cn nhiu tnh nng khc, sinh vin t tm hiu trong qu trnh thc hnh. Gio Trnh H Qun Tr C S D Liu trang 109

Khoa CNTT & Truyn Thng Trng i Hc Cn Th


Cu 4: Thc hnh tt v m dch v CSDL

Gi kt ni vi CSDL bng chng trnh SQL Developer. M ca s Terminal, ng nhp CSDL bng ti khon SYS vi chng trnh SQL*Plus. Thc hin tt (shutdown) v m (startup) CSDL cc ch khc nhau theo cc kch bn sau y: Kch bn 1: tt CSDL ch bnh thng SHUTDOWN; -- CSDL c tt khng? Nu khng, hy gii thch v a ra hng gii quyt. Kch bn 2: tt CSDL ch tc th (vn gi kt ni vi CSDL bng SQL Developer) SHUTDOWN IMMEDIATE; -- Quan st s thay i ca kt ni trong SQL Developer. Kch bn 3: tt CSDL ch d b (vn gi kt ni vi CSDL bng SQL Developer) SHUTDOWN ABORT; -- Quan st s thay i ca kt ni trong SQL Developer. Kch bn 4: m CSDL. STARTUP NOMOUNT; -- Hy cho bit dung lng ca SGA? STARTUP; -- Quan st v gii thch kt qu. SELECT * FROM DBA_USERS; -- Quan st v gii thch kt qu.
ALTER DATABASE MOUNT; SELECT * FROM DBA_USERS; -- Quan st v gii thch kt qu. ALTER DATABASE OPEN; SELECT * FROM DBA_USERS; -- Quan st v gii thch kt qu.

Cu 5: To ngi dng

Lu : to v cp quyn cho ngi dng bn phi ng nhp h thng vi vai tr DBA To ngi dng tng ng l Test1, mt khu ging tn To user
CREATE USER Test1 IDENTIFIED BY Test1;

Th s dng user va to ny ng nhp vo h thng, bn s b thng bo li tng t nh di y, do chng ta cha cp quyn Create Session (quyn cho php user kt ni vo CSDL) cho user ny.

Hnh 35. Li ng nhp do cha c quyn kt ni n CSDL

Cp quyn Create Session cho user Test1


GRANT CREATE SESSION TO Test1;

By gi th ng nhp li, OK? Ngi dng Test1 c php kt ni vo CSDL, nhng vic duy nht m user ny c th thc hin l thay i password ca chnh anh ta, ngoi ra cha lm c bt c vic g khc. Gio Trnh H Qun Tr C S D Liu trang 110

Khoa CNTT & Truyn Thng Trng i Hc Cn Th Thay i mt khu cho user ny th xem
ALTER USER Test1 IDENTIFIED BY pTest1;

ng nhp li vi mt khu mi kim tra. Lc ny, Test1 ch c quyn kt ni CSDL. Cp quyn h thng cho user ny anh ta c php to bng v c php cp li quyn ny cho nhng user khc.
GRANT CREATE TABLE TO Test1 WITH ADMIN OPTION;

ng nhp vi user va to th to mt bng, nhp v truy xut d liu.


CREATE TABLE Students( SID char(7) PRIMARY KEY, SName Varchar2(30)); INSERT INTO Students VALUES('1940000','Phung Phung Phi'); INSERT INTO Students VALUES('1940001','Tao Tung Thieu'); SELECT * FROM STUDENTS;

!!! Ti sao user Test1 li c quyn INSERT, SELECT trong khi ta cha cp quyn nh??? n gin l v mc nhin anh ta s c ton quyn trn i tng m anh ta va to (s hu - Owner).
Cu 6: Quyn h thng

kim tra kt qu ca ty chn WITH ADMIN OPTION, To mt ngi dng khc tn Test2 vi Quota 2M cho php ngi dng ny to bng trong schema ca anh ta. ng nhp h thng vi vai tr ca DBA to user Test2
CREATE USER Test2 IDENTIFIED BY Test2 DEFAULT TABLESPACE USERS QUOTA 2M ON USERS;

Gn quyn CREATE SESSION cho Test2


GRANT CREATE SESSION TO Test2;

ng nhp vo h thng vi ti khon Test1, cp quyn h thng cho user Test2 anh ta c php to bng v c php cp li quyn ny cho nhng user khc.
GRANT CREATE TABLE TO Test2 WITH ADMIN OPTION;

ng nhp vi user Test2 th to mt bng, nhp v truy xut d liu.


CREATE TABLE Products( PID char(3) PRIMARY KEY, PName Varchar2(30)); INSERT INTO Products VALUES('P01','Kem Danh Rang P/S'); INSERT INTO Products VALUES('P02','Khan Giay Puppy'); SELECT * FROM PRODUCTS;

Thu hi quyn CREATE TABLE ca ngi dng Test1. ng nhp bng ti khon SYS v thc hin lnh: REVOKE CREATE TABLE FROM Test1; Gio Trnh H Qun Tr C S D Liu trang 111

Khoa CNTT & Truyn Thng Trng i Hc Cn Th Ln lt ng nhp bng ti khon Test1 v Test2, to mt bng d liu khc. Quan st kt qu v rt ra kt lun. To user Test3 vi cc quyn nh user Test2.
Cu 7: Quyn i tng

Cp quyn i tng cho user Test2 truy cp vo bng student trong schema ca Test1. Kt thc cu 2, ta to user tn Test2 nhng user ny cha c quyn g c, th ng nhp li vi user ny v truy xut bng Students
SELECT * FROM Test1.Students;

B bo li ng khng? V cha c quyn m! By gi ng nhp li vi user Test1 v cp quyn SELECT, UPDATE cho user Test2. Ch : bn phi ng nhp vi user l ch s hu ca bng Students, v ch ch s hu c kh nng gn quyn trn cc i tng ca mnh.
GRANT SELECT, UPDATE ON students TO Test2 WITH GRANT OPTION;

ng nhp li vi user Test2 v truy xut bng Students


SELECT * FROM Test1.Students;

c php ri! Th thc hin lnh sau


DELETE FROM Test1.Students;

Chc chn l b li, v user ny ch c quyn SELECT v UPDATE thi! ng nhp bng user Test2, gn quyn SELECT v UPDATE trn bng Students cho user Test3.
GRANT SELECT, UPDATE ON Test1.students TO Test3;

ng nhp bng user Test3 v thc hin cu lnh truy vn trn bng Students
UPDATE Test1.Students SET SID='1940001' SELECT * FROM Test1.Students; sname=bla bla bla WHERE

ng nhp bng user Test2 thc hin lnh sau


GRANT DELETE ON Test1.students TO Test3;

Quan st kt qu v rt ra kt lun. ng nhp bng user Test1, thu hi quyn SELECT v UPDATE t Test2
REVOKE SELECT, UPDATE ON Students FROM Test1;

Thc hin cc cu truy vn trn bng Students vi Test2 v Test3, quan st kt qu v rt ra kt lun.
Cu 8: To role, cp quyn cho role v thm ngi dng vo role va to.

Gio Trnh H Qun Tr C S D Liu trang 112

Khoa CNTT & Truyn Thng Trng i Hc Cn Th Gi s lp hc c 150 sinh vin thc hnh mn Oracle. Cc sinh vin ny u c quyn ging nhau l c php kt ni n CSDL, to bng, to th tc, to trigger. Chng ta s thc hin vn ny nh sau: ng nhp bng ngi dng SYS. To cc ngi dng (th to 2 users)
CREATE USER DEFAULT CREATE USER DEFAULT user1 IDENTIFIED TABLESPACE USERS user2 IDENTIFIED TABLESPACE USERS BY user1 QUOTA 1M ON USERS; BY user2 QUOTA 1M ON USERS;

To role c tn l TTOracle
CREATE ROLE TTOracle;

Cp quyn kt ni CSDL, to bng, to th tc, to trigger cho role TTOracle


GRANT CREATE SESSION, CREATE TABLE, CREATE PROCEDURE, CREATE TRIGGER TO TTOracle;

Cp quyn cho cc sinh vin vo role ny (a cc user vo role)


GRANT TTOracle TO user1,user2;

Th ng nhp bng mt trong 2 user va to to bng xem c c cha. thu hi role, thc hin cu lnh sau:
REVOKE TTOracle FROM user1;

Cu 9: th nghim import v export truyn thng

Bc 1: To ln lt cc ngi dng uimp1, uimp2 v uimp3. Gn cc quyn c bn cc ngi dng ny c kh nng ng nhp, to bng d liu v cp nht d liu. (tham kho bi 2) Bc 2: Thc hin import cc i tng trong tp tin dump cho trc vo schema ca cc ngi dng va to ra (y l cc bng d liu c dng trong cc bi thc hnh tip theo). To net service name xe trong Net Manager, sau m ca s Command Console. G vo:
imp userid=uimp1@xe touser=uimp1 file=D:\csdl1.dmp fromuser=csdl1

Nhp vo password tng ng, quan st kt qu u ra. Nu thnh cng, dng SQL Developer kim tra li cc i tng va c nhp vo schema ca csdl1. Trong cu lnh ny, tham s fromuser ch ra tn ca schema m t tp tin dump c export, tham s touser ch ra tn ca schema m cc i tng s c import vo CSDL hin hnh. Tng t, thc hin cc lnh import sau:
imp userid=uimp2@xe touser=uimp2 imp userid=uimp3@xe touser=uimp3 file=D:\csdl2.dmp file=D:\csdl3.dmp fromuser=csdl2 fromuser=csdl3

Gio Trnh H Qun Tr C S D Liu trang 113

Khoa CNTT & Truyn Thng Trng i Hc Cn Th Bc 3: Thc hin export cc bng d liu locations v regions ca ngi dng hr. Sau , import cc bng ny vo schema ca ngi dng uimp1 vn trong command concole, g vo:
exp userid=hr/hr@xe file=hrTabs.dmp owner=hr tables=(locations,regions) imp userid=uimp1@xe file=D:\hrTabs.dmp fromuser=hr touser=uimp1

Cu 10: th nghim import v export vi Oracle Data Pump. Ta s dng ngi

dng HR thc hin cc lnh impdp v expdp. Bc 1: thit lp cc cu hnh cn thit cho Data Pump To mt th mc trn database server (gi s D:\backup). M ca s Command Console, truy cp chng trnh SQLPlus bng ti khon SYS bng lnh:
sqlplus sys as sysdba

Nhp mt khu, v tip tc nhp vo cc lnh sau:


SQL> create directory expdir as D:\backup; SQL> grant read, write on directory expdir to hr; SQL> commit;

Sau lnh ny, HR c quyn ghi tp tin dump ln th mc D:\backup trn database server. xem thng tin cc th mc c to trn server, thc hin cu truy vn sau:
select * from dba_directories;

Bc 2: thc hin export schema ca HR


expdp hr/hr@xe schemas=hr directory=expdir dumpfile=hr.dmp

Bc 3: thc hin export mt vi bng d liu ca hr


expdp hr/hr@xe tables=(regions,locations) directory=expdir dumpfile=hrTabs.dmp

Bc 4: thc hin import t cc tp tin dump to t cc bc trc vo schema uimp1.Gn quyn c trn th mc i tng uimp1. ng nhp chng trnh SQLPlus bng ti khon SYS, thc hin lnh:
SQL> grant read, write on directory expdir to uimp1;

Vo command console, g vo lnh sau:


impdp uimp1 remap_schema=hr:uimp1 @xe directory=expdir dumpfile=hr.dmp

Kim tra li cc thay i trong schema uimp1 bng SQL Developer Cu 11: thc hin export mc CSDL, ta cn s dng ngi dng SYS hoc SYSTEM c y quyn thc hin export ton b CSDL. M ca s Terminal, g vo:
expdp system@xe full=y directory=expdir dumpfile=full%U.dmp filesize=100M logfile=fullexp.log

Khi kt thc thnh cng, cc tp tin dump v log s c lu vo th mc data_pump_dir (xem chi tit trong bng dba_directories). Ngoi ra, ln ca tp tin dump t l thun vi ln ca CSDL, iu ny c th ng vi ln ti a ca tp tin trong h iu hnh. V vy, ta cn gii hn ln ti a ca tp tin dump bng

Gio Trnh H Qun Tr C S D Liu trang 114

Khoa CNTT & Truyn Thng Trng i Hc Cn Th tham s filesize, tham s %U yu cu t tn cc tp tin dump c phn hu t khc nhau.

3 Bi tp t lm
Cu 1: Th nghim kt ni t xa

Chn my ca mt bn trong phng thc hnh. To kt ni n CSDL trn my ca bn bng SQL*Plus v Oracle SQL Developer vi ti khon ca ngi dng SYS; xem cc ngi dng c sn trn my , to 1 ngi dng mi vi cc quyn cn thit, v tin hnh import d liu t ngi dng scott vo ngi dng mi ny. Ch : ly a ch IP ca my, vo Terminal, g lnh ipconfig Cu 2: Kt ni CSDL bng SQL Developer Ti khon SCOTT v HR mc nh b kha khi mi ci t Oracle. Hy kt ni bng ti khon sys kch hot li v thay i mt khu cho cc ti khon ny. To kt ni mi t 2 ngi dng ny. Cu 3: Quan st cc i tng CSDL Quan st cu trc cc bng, kiu d liu ca cc ct v s thng thng gia cc bng ny trong lc ca ngi dng SCOTT v HR. Cu 4: Cp quyn truy cp Hy vit cc lnh cp quyn tng ng ngi dng SCOTT v HR c th thm, sa, xa d liu trn cc bng ca nhau. Vit mt s lnh thm, sa, xa kim tra quyn xem c hiu lc cha.

Gio Trnh H Qun Tr C S D Liu trang 115

Khoa CNTT & Truyn Thng Trng i Hc Cn Th

BI 2. QUN L BNG D LIU 1 Ni dung


Qun l ngi dng, quyn v role. To/xa/thay i bng d liu Thm/xa/thay i d liu trong mt bng. To cc rng buc ton vn trn bng.

2 Bi tp c hng dn
Cu 1: To bng c s dng biu thc chnh quy kim tra min tr cho d liu. Vit lnh to bng NhaXB (MaNXB, TenNXB, ThPho, Qgia). Trong ct MaNXB phi bt u bng mt ch hoa, mt con s 9, mt con s t 1 n 9, mt con s t 0 n 9 hoc mang 1 trong cc gi tr '1389', '0736', '0877', '1622', '1756'. Ct Qgia c tr mc nh l VietNam.
CREATE TABLE NhaXB ( MaNXB char(4) NOT NULL CONSTRAINT PK_NXB PRIMARY KEY CHECK (MaNXB IN ('1389', '0736', '0877', '1622', '1756') or regexp_like(MaNXB,'[A-Z]9[1-9]\d')), TenNXB varchar2(40) NULL, ThPho varchar2(20) NULL, QGia varchar2(30) DEFAULT 'VietNam' NULL ) ;

Th xen d liu ng theo mu:


insert into NhaXB (manxb, tennxb,thpho) values('9980','NXB Van Hoa 1', 'TP HCM');

Cu 2: To ngi dng, cp quyn v import d liu vo ngi dng ny a) To mt ngi dng c tn l baohiem vi cc ty chn v tablespace, quota, thch hp
create user baohiem identified by bh default tablespace users quota 2M on users;

b) Cp cc quyn cn thit ngi dng ny c th kt ni, to bng v thc hin import cc bng d liu t schema baohiem (tp tin baohiem.dmp c cung cp sn). CSDL v qun l bo him gm cc quan h nh sau: 1. DONVI (MaDV, TenDV, Dchi, Tel): Mi n v c mt m phn bit, mt tn phn bit, a ch v s in thoi lin lc. S T phi nhp theo mu (xxx) xxx-xxxx. 2. KH (MaKH, HoTen, NamSinh, Phai, MaDV): Mi khch hng c mt m phn bit, mt h tn, nm sinh, phi (ch mang tr 0 hoc 1) v thuc mt n v no . 3. LOAIBH (MaLoai, TenLoai, MucPhi): Mi loi bo him c mt m phn bit, mt tn phn bit v mt mc ph (s tin phi ng cho mt thng), phi ln hn 0, n v tnh l ngn ng. Gio Trnh H Qun Tr C S D Liu trang 116

Khoa CNTT & Truyn Thng Trng i Hc Cn Th 4. THEBH (MaLoai, MaKH, NgayBD, ThoiHan): Mi th bo him c xc nh duy nht qua m loi, m khch hng v ngy bt u c hiu lc. Mi th c mt thi hn, chnh l s thng m khch mua bo him, gi tr ny phi ln hn 0.
grant create session, create table to qlyBH; imp userid=qlyBH/hqtcsdl file=d:\qlbh.dmp touser=qlyBH fromuser=qlbh

ng nhp vo ngi dng baohiem v thc hin tip cc cu sau: Cu 3 : Sa cu trc bng, thm rng buc, cp nht d liu trong bng a) Hy vit cc lnh DDL thit lp cc rng buc v kha chnh, kha ngoi, kha duy nht v rng buc min tr nh m t ca tng bng.
alter table donvi add constraint pk_dv primary key (madv) add constraint uk_tendv unique (tendv) ; alter table kh add constraint pk_kh primary key (makh) add constraint fk_dv foreign key (madv) references donvi(madv) add constraint ck_phai check (phai in (0,1) add check ( regexp_like ( trim(both ' ' from tel), '^\(\d{3}\) \d{3}-\d{4}$' ) )); alter table loaibh add constraint pk_loai primary key (maloai) add constraint uk_tenloai unique (tenloai) add constraint ck_mucphi check(mucphi>0); alter table thebh add primary key (maloai, MAKH, ngaybd) add foreign key (maloai) references loaibh(maloai) add foreign key (makh) references kh(makh) add constraint ck_thoihan check (thoihan >0);

b) Hy vit lnh thm vo bng THEBH ct ConHL (cn hiu lc) c kiu s nguyn v ch c mang mt trong hai gi tr 0 (ht hiu lc) v 1 (cn hiu lc). Vit lnh cp nht d liu cho ct va to.
alter table thebh add (ConHL int check(conHL in (0,1))) ; update thebh set conHL = 0 where ngaykt <= sysdate; update thebh set conHL = 1 where ngaykt > sysdate;

c) Hy vit lnh thm vo bng THEBH ct NgayKT (ngy kt thc hiu lc) kiu ngy, v c gi tri phi bng ngy bt u cng thi hn. Hy vit lnh cp nht d liu cho ct va to.
alter table thebh add (NgayKT date) add check (ngayKT =add_months(ngayBD,thoihan); update thebh set ngayKT =add_months(ngayBD,thoihan);

d) Tt c cc khch hng tng mua bo him y t ca So Dien Luc mun mua tip 6 thng BH y t ny t hm nay. Hy vit lnh insert thm nhng th BH ny mt cch t ng.
Insert into thebh (maloai, ngaybd, makh, thoihan, ngaykt, conhl) select distinct a.maloai,sysdate,a.makh, 6, add_months(sysdate, 6), 1 from thebh a, kh b, donvi c, loaibh d

Gio Trnh H Qun Tr C S D Liu trang 117

Khoa CNTT & Truyn Thng Trng i Hc Cn Th


where a.makh = b.makh and b.madv = c.madv and d.maloai = a.maloai and tendv = 'SO DIEN LUC' and tenloai = 'BH Y TE';

Cu 4: To bng mi, cp nht d liu a) To bng tn THEBH_QUAHAN c cu trc ging ht bng THEBH v d liu bao gm nhng th bo him qu hn ca khch hng.
create table THEBH_QUA_HAN as select * from thebh where conhl = 0;

b) Xa i nhng th bo him qu hn trong bng THEBH


Delete from THEBH where conhl = 0;

c) To bng tn MUCPHI ghi nhn thng tin lch s mi khi c s cp nht mc ph mi. Bng ny gm cc ct: m loi BH, mc ph bo him mi, ngy bt u tnh(c gi tr mc nh l ngy hin ti), ngi cp nht (c gi tr mc nh l ngi dng hin ti). Ci t rng buc cho bng.
Create table MUCPHI (maloai char(2) references loaibh(maloai), mucphi int check (mucphi>0), ngaybd date default (sysdate), nguoiCN char(20)default (user), primary key (maloai, ngaybd) );

3 Bi tp t lm
Cu 1: Hy to bng NhanVien (MaNV, TenNV, MaNXB, NgayVao, MaSep). Vi MaNV l mt chui 9 k t theo mu 3 k u l k t ch hoa, n mt con s t 1 n 9, k tip l 4 con s bt k, v cui cng l ch F hoc M. MaNXB l kha ngoi tham chiu bng NhaXB, NgayVao c tr mc nh l ngy hin ti, MaSep chnh l MaNV ca th trng trc tip, v vy n tham chiu kha chnh. Cu 2: To user banhang vi cc quyn cn thit ng nhp CSDL v to bng. ng nhp vo ngi dng banhang v thc hin tip cc cu sau. Mt CSDL qun l bn hng gm cc bng sau: LoaiHang(MaLoai, TenLoai) HangHoa(MaHang, TenHang, DVT, DonGia, MaLoai) KhachHang(MaKH, TenKH, DiaChi, SoDT, MSThue, SoTaiKhoan) HoaDon(SoHD, NgayLap, TyLeVAT, TongTriGia, MaKH) ChiTietHD(SoHD, MaHang, SoLuong, DonGiaBan) Cu 3: Vit cc lnh DDL to cc bng d liu c m t trn. Sinh vin t ngh kiu d liu cho cc ct. Thit lp y cc rng buc ton vn gm rng buc kh chnh, kha ngoi, kha duy nht cho TenLoai, TenHang, MSThue, SoTaiKhoan v rng buc min tr gm TyleVat >0, SoLuong >0, DonGia>0, DonGiaBan>0 s in thoi theo mu xxx-xxx-xxxx hoc xxxx-xxx-xxxx. Gi tr mc nh cho NgayLap l ngy hin ti, TyLeVat l 0.2. Cu 4: Cc ct m trong CSDL ny u c thit k ch t tng, thit k mt sequence cho cc bng ny.

Gio Trnh H Qun Tr C S D Liu trang 118

Khoa CNTT & Truyn Thng Trng i Hc Cn Th Cu 5: Vit lnh thm ct ThanhTien (thnh tin) vo bng ChiTietHD, c gi tr phi bng tch ca s lng v n gi bn. Vit lnh cp nht gi tr cho ct ny. Cu 6: Vit lnh to bng GIABAN ghi nhn thng tin lch s mi khi c s cp nht n gi mi. Bng ny gm cc ct: m hng, n gi mi, ngy bt u tnh (c gi tr mc nh l ngy hin ti), ngi cp nht (c gi tr mc nh l ngi dng hin ti). Ci t mi rng buc cho bng. Cu 7: H thng c cc loi ngi dng sau: Khch hng: o C quyn SELECT trn tt c cc bng. o C quyn UPDATE trn bng KhachHang. Bn hng: o C quyn SELECT trn tt c cc bng. o C quyn INSERT v UPDATE trn bng KhachHang, HoaDon v
ChiTietHD

Th kho: o C ton quyn (ALL) trn bng LoaiHang v HangHoa Qun tr: o C ton quyn trn tt c cc bng. Hy vit lnh to cc role tng ng cc loi ngi ny. Cu 8: Vit lnh to mt vi ngi dng ng vi cc role trn v kim tra th.

Gio Trnh H Qun Tr C S D Liu trang 119

Khoa CNTT & Truyn Thng Trng i Hc Cn Th

BI 3. LP TRNH PL/SQL 1 Ni dung


Cu trc ca mt chng trnh PL/SQL Cc kiu d liu v cc mnh thng dng trong PL/SQL Cu trc lp trnh iu khin trong PL/SQL S dng cursor x l d liu trn kt qu cu truy vn.

2 Bi tp c hng dn
Cu 1: s dng cc bin trong PL/SQL bng cch khai bo, gn tr v in chng ra

mn hnh.

Hnh 36. Dng cc bin

Cu 2: nhn d liu do ngi dng nhp vo vi SQL Developer

C php: tn bin> := &chui thng bo>; Trong , chui thng bo khng cha khong trng m c thay th bi du _. Khi nhp liu kiu chui, nu t du nhy () theo dng &chui thng bo, th khi nhp liu, ngi dng khng cn g vo du nhy.
set serveroutput on; declare ten varchar2(10); begin ten := &Nhap_vao_ten_cua_ban; dbms_output.put_line ('chao ban ' || ten); end;
Hnh 37. Ca s nhp d liu

Khi thc thi chng trnh, ca s nh hnh bn hin ln v ta nhp d liu vo.
Cu 3: Th s dng kiu d liu phc

Gio Trnh H Qun Tr C S D Liu trang 120

Khoa CNTT & Truyn Thng Trng i Hc Cn Th To bin c kiu d liu tng t kiu d liu trong ct Last_Name, v mt bin c kiu d liu tng t kiu d liu trong ct Salary ca bng Employees ca schema hr. Truy vn d liu t bng lin quan tm thng tin ca nhn vin c m s 100 v lu vo cc bin ny, sau in chng ra mn hnh.
SET SERVEROUTPUT ON; DECLARE vEname employees.last_name%TYPE; /* kiu d liu ca bin vEname s ly t kiu d liu ca ct last_name trong bng employee */ vSalary employees.salary%TYPE; BEGIN SELECT last_name,salary INTO vEname,vSalary FROM employees WHERE employee_id=100; DBMS_OUTPUT.PUT_LINE('Name:'||vEname||'. Salary:'|| vSalary); END;

Cu 4: Th s dng cc cu trc iu khin

Tm nhn vin trong bng Employees ca schema hr vi m s l 120. Nu tn anh ta l Matthew th cho thn mt, ngc li ch cho x giao thi.
SET SERVEROUTPUT ON; DECLARE vEname employees.first_name%TYPE; BEGIN SELECT first_name INTO vEname FROM employees WHERE employee_id=120; IF vEname='Matthew' THEN dbms_output.put_line('Hi ' || vEname); ELSE dbms_output.put_line('Hello' || vEname); END IF; END;

Hin th tn vng ca quc gia c m l CA.


SET SERVEROUTPUT ON; DECLARE vArea VARCHAR2(20) ; BEGIN SELECT region_id INTO vArea FROM countries WHERE country_id='CA' ; CASE vArea WHEN 1 THEN vArea :='Europe' ; WHEN 2 THEN vArea :='America' ;

Gio Trnh H Qun Tr C S D Liu trang 121

Khoa CNTT & Truyn Thng Trng i Hc Cn Th


WHEN 3 THEN vArea :='Asia' ; ELSE vArea :='Other' ; END CASE ; dbms_output.put_line('The Area is ' || vArea) ; END ;

Th dng vng lp FOR in xui v in ngc


SET SERVEROUTPUT ON; DECLARE counter NUMBER ; BEGIN FOR counter IN 1..4 --tng LOOP dbms_output.put(counter) ; END LOOP ; dbms_output.new_line ; FOR counter IN REVERSE 1..4 -- gim LOOP dbms_output.put(counter) ; END LOOP ; dbms_output.new_line ; END;

Cu 5: S dng Cursor

Trong schema ca Scott, s dng 2 bng : Bng EMP( EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO) Din gii: Lu tr thng tin v nhn vin. Gm c M nhn vin, Tn nhn vin, Ngh nghip, M ngi qun l, Ngy gia nhp cng ty, Lng, Thng, M phng ban. Bng BONUS(ENAME, JOB, SAL, COMM) Din gii: Lu tr thng tin v tin thng. Gm c Tn nhn vin, Ngh nghip, Lng, Thng. a. Yu cu: Cc nhn vin lm vic trn 25 nm m c mc lng di 2000$ th tng mc thng cho h thm 500$, sau lu vo bng Bonus Hy m c hai bng ny ln xem c d liu g trc v sau khi bn thc hin on lnh ny. tng: To cursor cha cc nhn vin lm vic trn 25 nm m c mc lng di 2000$ Duyt tng dng trong cursor : Cp nht li tin thng trong bng nhn vin Lu thng tin vo bng tin thng.
DECLARE CURSOR c_Emp IS select *

Gio Trnh H Qun Tr C S D Liu trang 122

Khoa CNTT & Truyn Thng Trng i Hc Cn Th


from emp where extract(year from sysdate) - extract(year from hiredate)> 25 and sal <2000; -- Khai bo bien de chua dong du lieu cua cursor v_Emp c_Emp%rowtype; BEGIN -- M cursor OPEN c_Emp; -- Dng vng lp ly ht d liu LOOP -- Ly mt dng d liu t cursor FETCH c_Emp INTO v_Emp; -- Thot khoi dong lap neu da lay het du lieu trong cursor EXIT WHEN c_Emp%notfound; -- kiem tra cac gia tri null cua cot tien thuong if v_Emp.comm is null then v_Emp.comm:=500; else v_Emp.comm:=v_Emp.comm+500; end if; -- Cp nht li tin thng trong bng Emp vi m nhn vin -- trong cursor hin hnh UPDATE Emp SET comm = v_Emp.comm WHERE empno = v_Emp.empno; --Luu vo bang Bonus INSERT INTO BONUS(ename, job, sal, comm) VALUES (v_Emp.ename, v_Emp.job, v_Emp.sal, v_Emp.comm); END LOOP; COMMIT; -- lu li nhng thay i --ng cursor CLOSE c_Emp; END;

b. Yu cu: Gi s cc nhn vin trong bng EMP khi lm vic t 28 nm tr

ln s c cho ngh hu sm, v vy ta cn xa nhn vin trong bng EMP v chuyn ton b thng tin ca h sang bng EMP_RETIRE. tng: To bng EMP_RETIRE cha cc nhn vin ngh vic To cursor lu danh sch cc nhn vin lm vic>=28 nm, sau duyt tng dng trong cursor : Thm dng ny vo bng EMP_RETIRE Xa dng ny khi bng nhn vin. Gio Trnh H Qun Tr C S D Liu trang 123

Khoa CNTT & Truyn Thng Trng i Hc Cn Th Trc ht to bng EMP_RETIRE c cu trc ging bng EMP
CREATE TABLE EMP_RETIRE ( EMPNO NUMBER(4) NOT NULL, ENAME VARCHAR2(10), JOB VARCHAR2(9), MGR NUMBER(4), HIREDATE DATE, SAL NUMBER(7,2), COMM NUMBER(7,2), DEPTNO NUMBER(2) );

Sau s khai bo cursor thc hin:


DECLARE -- Tm cc nhn vin c s nm lm vic >=28, kha bng -- emp khi cursor ny c m CURSOR cEmpRetire IS Select * From emp where extract(year from sysdate) extract(year from hiredate) >= 28 FOR UPDATE; BEGIN -- bin emp_rec c dng trc tip ly tng dng d liu -- trong cursor,ta dng cch ny thay cho vic khai bo bin v -- dng lnh FETCH FOR emp_rec IN cEmpRetire LOOP -- Ly dng hin hnh ca cursor thm vo bng retire INSERT INTO Emp_Retire(Empno, EName, Job, Mgr, Hiredate, Sal, Comm, Deptno) VALUES (emp_rec.Empno, emp_rec.EName, emp_rec.Job, emp_rec.Mgr, emp_rec.Hiredate, emp_rec.Sal, emp_rec.Comm, emp_rec.Deptno); -- Xa d liu trong Emp vi mu tin ging vi -- mu tin trong cursor hin hnh DELETE FROM Emp WHERE CURRENT OF cEmpRetire; END LOOP; END;

c. Yu cu: Tt c cc nhn vin m gim c (Mgr) ca h tn l KING s c

tng lng thm 5%. tng: To cursor c tham s truyn vo l m s ca Manager Tm nhn vin c tn l KING ly m s lu vo mt bin

Gio Trnh H Qun Tr C S D Liu trang 124

Khoa CNTT & Truyn Thng Trng i Hc Cn Th Sau duyt tng dng trong cursor vi gi tr truyn vo l bin va tm c cp nht li mc lng ca cc nhn vin m c m s gim c trong cursor.
DECLARE --Khai bo bin manager c kiu d liu ging vi ct MGR --trong bng EMP manager EMP.MGR%TYPE; --Khi bo cursor c tham s truyn vo l m s ca manager --v kha ct SAL trong bng EMP li khi cursor ny c m CURSOR C_Emp(mgr_no number) IS SELECT SAL FROM EMP WHERE MGR = mgr_no FOR UPDATE of SAL; BEGIN --Tm m s ca nhn vin tn l KING lu vo bin manager SELECT empno INTO manager FROM EMP WHERE EName = 'KING'; --Khai bo khng tng minh bin emp_rec trc tip trong --vng lp for lu gi tr ca cursor hin hnh --ta dng cch ny thay cho vic khai bo tng minh mt bin --sau dng lnh FETCH chuyn d liu vo bin FOR emp_rec IN C_Emp(manager) LOOP UPDATE scott.EMP SET sal = emp_rec.sal * 1.05 WHERE CURRENT OF C_Emp; END LOOP; COMMIT; END;

3 Bi tp t lm
Cu 1: Quan st cu trc v d liu ca cc bng c trong schema SCOTT v dng PL/SQL thc hin cc yu cu sau: 1. Vit on chng trnh tm kim cc dng trong bng Scott.EMP vi bin c a t ngoi vo l 1 bin c kiu ging ct Job (emp.job%type) v a ra thng bo s dng tm c cng nh danh sch cc dng. 2. Lit k cc ct ENAME, HIREDATE, SAL ca nhn vin trong bng Scott.Emp. Vi iu kin EMPNO bng gi tr c a vo, sau kim tra: C phi mc lng ln hn 1200 Tn nhn vin c phi c cha ch T Ngy gia nhp c quan c phi l thng 12 (DEC) Gio Trnh H Qun Tr C S D Liu trang 125

Khoa CNTT & Truyn Thng Trng i Hc Cn Th Th vi cc gi tr 7654, 7369, 7900, 7876. 3. Quan st bng Scott.BONUS, thc hin cp nht d liu cho bng ny. Nu nhn vin c chc v (job) Manager th c gi tr COMM (ph cp) l 0,2. 4. Hin th ra mn hnh m, tn, ngy vo lm v lng ca tt c nhn vin theo chc v. 5. Da vo bng Scott.SALGRAGE, phn loi lng ca tt c nhn vin v hin th ra mn hnh tn nhn vin theo tng loi. Cu 2: Quan st cu trc v d liu ca cc bng c trong schema HR (Human Resource qun l nhn s) v dng PL/SQL thc hin cc yu cu sau: 1. Hin th ra mn hnh tn tt c cc quc gia phn chia theo chu lc. 2. Hin th ra mn hnh bng lng hng thng cho tt c cc nhn vin. Bit rng lng = salary + commission_pct * salary. 3. Cc lp trnh vin (c m ngh nghip l IT_PROG) lm vic trn 15 nm s c tng lng 10%. Hin th ra mn hnh tng s tin s pht cho cc nhn vin ny sau khi tng lng. 4. Cc nhn vin lm chung phng vi Tng gim c (c Manager_id l NULL) s c hng mc h s ph cp ging nhau l 0.25. Cp nht gi tr ny vo ct Commission_PCT. 5. Thm ct Tnh trng c kiu chui k t vo bng Employees. Khi mt nhn vin no thi vic, hy cp nht thng tin ca nhn vin vo bng Job_History, cp nht ct Tnh trng vi gi tr Fired.

Gio Trnh H Qun Tr C S D Liu trang 126

Khoa CNTT & Truyn Thng Trng i Hc Cn Th

BI 4. HM TH TC 1 Ni dung
To v gi mt th tc (procedure). To v gi mt hm (function).

2 Bi tp c hng dn
Cu 1: To th tc xa mt nhn vin khi danh sch vi tham s truyn vo l

m nhn vin
CREATE OR REPLACE PROCEDURE Del_Emp (p_EmpNo NUMBER) IS BEGIN DELETE FROM scott.emp WHERE empno = p_EmpNo; COMMIT; END;

Tm xem nhn vin c m 7654 c trong bng khng :


SELECT * FROM Scott.Emp WHERE empno = 7654;

Thc thi th tc ny :
EXECUTE Del_Emp(7654);

Tm li xem nhn vin c m 7654 cn trong bng khng :


SELECT * FROM Scott.Emp WHERE empno = 7654;

Cu 2: Vit mt hm ly tng tin lng ca mt phng ban no


CREATE OR REPLACE FUNCTION get_dept_salary(dno number) RETURN NUMBER IS all_sal NUMBER; BEGIN all_sal := 0; FOR emp_sal IN (SELECT SAL FROM scott.EMP WHERE DEPTNO = dno AND SAL IS NOT NULL) LOOP all_sal := all_sal + emp_sal.sal; END LOOP; RETURN all_sal; END get_dept_salary;

Gi th hm ny vi m phng ban l 30
SELECT get_dept_salary(30) AS Tsal FROM DUAL;

Gi th hm ny vi m phng ban l 30 v truyn kt qu vo mt bin :


DECLARE result BEGIN NUMBER;

Gio Trnh H Qun Tr C S D Liu trang 127

Khoa CNTT & Truyn Thng Trng i Hc Cn Th


result := get_dept_salary(30); dbms_output.put_line(result); END;

Cu 3: S dng bng hr.Jobs(Job_id, Job_Title, Min_Salary, Max_Salary): To th

tc MucLuong nhn vo mt Job_id, tr v lng thp nht v cao nht ng vi m cng vic ny. Th gi th tc vi cc gi tr: IT_PROG, SA_MAN.
Create or replace procedure MucLuong (p_jobid jobs.job_id%TYPE, min_lg OUT jobs.min_salary%type, max_lg OUT jobs.max_salary%type) IS begin select min_salary, max_salary into min_lg, max_lg from jobs where JOB_ID = p_jobid; exception when no_data_found then dbms_output.put_line (Ma cong viec ' || p_jobid || khong tim thay); when others then dbms_output.put_line ('Khong biet loi gi'); end;

Th gi th tc:
set serveroutput on; declare min1 jobs.min_salary%type; max1 jobs.max_salary%type; begin MucLuong(&Nhap_ma_cong_viec,min1, max1); dbms_output.put_line ('Min = '|| to_char(min1) || ' Max = ' || to_char(max1)); end;

3 Bi tp t lm
Cu 1: thc hin cc yu cu sau 1. To th tc TenThang nhn vo 1 ngy thng, in ra mn hnh tn thng theo ting Vit. Th gi th tc vi ngy do ngi dng nhp vo. 2. To hm LayTen nhn vo h tn ca mt ngi. Hm tr v tn ca ngi . Cu 2: Quan st cu trc v d liu ca cc bng c trong schema SCOTT v dng PL/SQL thc hin cc yu cu sau: 1. Cc nhn vin lm vic khng tt s b tr tin thng. Vit mt th tc gim tin thng cho nhn vin. Vi m nhn vin v phn trm gim c truyn vo t tham s. Gio Trnh H Qun Tr C S D Liu trang 128

Khoa CNTT & Truyn Thng Trng i Hc Cn Th 2. Vit mt hm ly m s ca nhn vin no c tin lng cao nht. 3. Vit mt th tc nhn vo m nhn vin, v in ra h tn ca tt c nhn vin qun l trc tip cng nh gin tip ca nhn vin ny. Cu 3: Quan st cu trc v d liu ca cc bng c trong schema HR (Human Resource qun l nhn s) v dng PL/SQL thc hin cc yu cu sau: 1. Vit lnh truy vn bng hr.employees ly ct m nhn vin v h tn ca tng nhn vin c di h tn nhiu hn 15 k t. 2. S dng bng hr.employees v hr.jobs: To hm LuongHopLy nhn vo m nhn vin, v lng mi, s dng th tc MucLuong to cu 3 trong phn 2 kim tra xem lng mi ca ngi ny c nm trong khong lng ng vi cng vic ca ngi khng. Nu c, tr v True, ngc li tr v False (kiu BOOLEAN). Th vi gi tr (105, 7000), (206, 10000) 3. S dng bng Dept: To th tc ThemPhongBan nhn vo tn phng, v v tr phng xen vo bng DEPT vi 3 ct: Deptno: Chng trnh t tm s ln nht hin c + 10 Dname: Tn phng nhn vo Loc: v tr nhn vo Th gi th tc vi gi tr u vo do ngi dng nhp. Cu 4: Quan st cu trc v d liu ca cc bng c trong schema csdl5 (sinh vin t thc hin import) v dng PL/SQL thc hin cc yu cu sau: 1. Vit th tc GoiTen nhn vo tham s m gio vin. Hy in ra tn ca gio vin cng vi danh xng l 'Thy' nu gio vin l nam, v 'C' nu gio vin l n. 2. Vit hm TongGioChuan nhn vo tham s m gio vin, hm s tr v tng s tit chun m gio vin ny ging dy. Bit rng: S tit qui chun = SOTIET * HESO; trong HESO l 1 nu s s lp thuc [0..80], l 1.2 nu s s lp thuc (80..120], l 1.4 nu s s lp thuc (120..150], l 1.5 nu s s lp t 150 tr ln. 3. Vit hm TamUngCN tr v h tn ca gio vin c tm ng nhiu nht t trc n nay. 4. Vit hm NgayTamUngGanNhat tr v ngy c gio vin tm ng gn y nht. 5. S dng hm TongGioChuan to cu 2, vit th tc TongGioTheoCDanh nhn vo tham s tn chc danh, th tc in ra h tn GV cng vi tng s gi qui chun ca tng gio vin thuc chc danh . 6. Vit th tc TgTamUngTrongTG nhn vo 2 mc thi gian (t ngy, n ngy), th tc in ra danh sch gm h tn, tng s tin tm ng ca tng GV trong khong thi gian cho. 7. S dng hm TongGioChuan to cu 2, vit th tc TienGD nhn vo m gio vin, tr v tng gi chun, s gi vt v s tin ging dy ca GV . 8. S dng th tc TienGD va to cu 7, vit th tc InBangLuong hin th danh sch gm h tn, tng gi chun dy, s gi vt, v s tin ging dy ca tng GV.

Gio Trnh H Qun Tr C S D Liu trang 129

Khoa CNTT & Truyn Thng Trng i Hc Cn Th

BI 5. TRIGGER 1 Ni dung
To v s dng Trigger.

2 Bi tp c hng dn
Cu 1: Gi s trong bng DEPT ca lc Scott c thm ct BUDGET cha ngn

sch ti a ca tng phng ban dnh cho vic tr lng. Xy dng trigger kim tra rng khi cp nht tin lng th tng lng ca tt c cc nhn vin trong mt phng ban khng c vt qu ngn sch ca n. Thm ct Budget kiu number(10) vo bng DEPT Tm tng tin lng ca tt c nhn vin theo tng phng ban c lng gi tr phi nhp cho ct Budget
SELECT deptno, Sum(Sal) As Total_Sal Group By deptno; FROM scott.emp

Nhp vo gi tr cho ct Budget ln hn Total_Sal cht t To trigger trn 2 ct : lng v m phng ca bng Emp
CREATE OR REPLACE TRIGGER check_budget_EMP AFTER INSERT OR UPDATE OF SAL, DEPTNO ON Scott.EMP DECLARE --Khai bo cursor cha m phng v ngn sch t bng DeptT CURSOR DEPT_CUR IS SELECT DEPTNO, BUDGET FROM Scott.DEPT; --Khai bo bin lu m phng(DNO), Tng lng t ngn --sch(ALLSAL), v tng lng t cc nhn vin (DEPT_SAL) DNO Scott.DEPT.DEPTNO%TYPE; ALLSAL Scott.DEPT.BUDGET%TYPE; DEPT_SAL NUMBER; BEGIN OPEN DEPT_CUR; LOOP --ly ngn sch ca tng phng FETCH DEPT_CUR INTO DNO, ALLSAL; EXIT WHEN DEPT_CUR%NOTFOUND; --Tnh tng lng ca cc nhn vin trong phng SELECT sum(SAL) INTO DEPT_SAL FROM scott.EMP WHERE DEPTNO = DNO; --Nu Tng lng > Ngn sch th bo li IF DEPT_SAL > ALLSAL then raise_application_error(-20325, 'Tong luong trong phong ' || to_char(DNO) || ' da vuot qua ngan sach'); END IF ; END LOOP;

Gio Trnh H Qun Tr C S D Liu trang 130

Khoa CNTT & Truyn Thng Trng i Hc Cn Th


CLOSE DEPT_CUR; END;

Cu 2: Gi s theo di vic chnh sa nhng d liu nhy cm (lin quan n

tin bc chng hn) ca ngi dng. Ngi ta mong mun vi nhng thng tin sa i phi c ghi nhn li: Ai sa, thi gian no, gi tr c l g, gi tr mi l g. Chng ta s xy dng trigger gii quyt vn ny. Thc hin trn bng Emp nu ngi dng sa lng th thng tin ny phi c lu li. To bng mi lu thng tin nh sau :
CREATE TABLE Change_Sal_EMP( UserName VARCHAR2(20), MODIFY_TIME DATE, EMPNO NUMBER(4), Old_Sal NUMBER(7), New_Sal NUMBER(7) )

To Trigger
CREATE OR REPLACE TRIGGER store_change_sal_EMP AFTER UPDATE OF SAL on scott.EMP FOR EACH ROW BEGIN -- User l mt hm c sn trong h thng cho bit ai ang kt ni CSDL INSERT INTO Change_Sal_EMP(UserName, MODIFY_TIME, EMPNO, Old_Sal, New_Sal) VALUES (User, Sysdate, :new.Empno, :old.sal, :new.sal); END;

Hy th cp nht lng ca mt nhn vin no xem, sau m bng Change_Sal_EMP v quan st kt qu. Ch : Trong lc cp nht d liu c th khng tha cc trigger to cc v d trc y nn vic cp nht khng thc hin c. Hy xa cc trigger m bn to phn trc trong bng Emp i. Cu 3: Trong schema baohiem ( to bi 2), hy to trigger c chc nng ngn khng cho thm th BH khi khch hng ny mua bo him loi ny v th mua vn cn hiu lc
create trigger Da_co_BH before insert on thebh for each row declare sodong int; begin select count(*) into sodong from thebh where makh = :new.makh and maloai = :new.maloai and ngaykt<sysdate; if sodong >0 then raise_application_error(-20111, 'KH nay hien van con duoc BH loai nay');

Gio Trnh H Qun Tr C S D Liu trang 131

Khoa CNTT & Truyn Thng Trng i Hc Cn Th


end if; end;

Th xem trigger c hiu lc cha:


insert into thebh (maloai, ngaybd, makh, thoihan, ngaykt, conhl) values('YT', sysdate, '006', 6, add_months(sysdate,6), 1); insert into thebh (maloai, ngaybd, makh, thoihan, ngaykt, conhl) values('YT', sysdate+1, '006', 6, add_months(sysdate+1,6), 1);

Cu 4: Trong schema baohiem to bi 2, hy to trigger chn d liu vo bng MUCPHI mi khi ngi dng cp nht mc ph hoc thm mt loi bo him vi ph mi.
create or replace trigger CN_Phi after insert or update on LoaiBH for each row declare begin insert into mucphi values (maloai, mucphi, ngaybd, nguoicn) (:new.maloai, :new.mucphi, sysdate, user); end;

Th cp nht mc ph ca mt loi bo him:


update loaibh set mucphi=8 where maloai='TS';

3 Bi tp t lm
Cu 1: To trigger tng t cu 2 c th theo di vic xa d liu trong bng Emp. Cu 2: Trong schema csdl5, vit mt trigger theo di vic xen d liu vo bng TAMUNG vi quy nh: mi gio vin ch c tm ng ti a 2 ln v ti a 3000000 ng trong mt thng. Cu 3: Trong schema banhang to bi 2, hy to trigger chn d liu vo bng GIABAN mi khi ngi dng cp nht n gi mi hoc thm mt hng vi gi mi vo bng HangHoa. Cu 4: Trong schema banhang, hy to trigger cp nht gi tr cho ct TongTriGia ca HoaDon mi khi ngi dng cp nht SoLuong hoc DonGiaBan, hoc thm dng vo trong bng ChiTietHD. Cu 5: Trong schema banhang, hy to trigger kim tra vic cp nht n gi ca mt mt hng: gi mi khng c cao hn gi c qu 10%.

Gio Trnh H Qun Tr C S D Liu trang 132

Khoa CNTT & Truyn Thng Trng i Hc Cn Th

BI 6. QUN L GIAO DCH, SAO LU V PHC HI 1 Ni dung


Cc khi nim v sao lu v phc hi trong Oracle Cc chin thut sao lu v phc hi CSDL S dng RMAN (Recovery MANager) sao lu v phc hi CSDL

2 Bi tp c hng dn
Trong cc bi tp sau, chng ta s tm hiu cc phng php sao lu v phc hi lun l v vt l.
Cu 1: th nghim sao lu v phc hi vt l vi RMAN

Bc 1: ng nhp RMAN, vo Terminal, g vo lnh:


rman target sys

Khi ng nhp thnh cng, trn mn hnh hin ra dng RMAN> Bc 2: backup ton b CSDL (ch : lc ny CSDL ch ARCHIVELOG)
RMAN> backup database;

Quan st v ghi nhn thng s ca kt qu. Hy tm n th mc cha cc tp tin backup. Bc 3: gi lp CSDL b li, xa ngi dng SCOTT. ng nhp SQLPlus, ghi nhn thi gian v g vo
SQL> drop user scott;

Bc 4: phc hi CSDL, ng nhp RMAN v thc hin cc lnh sau


RMAN> shutdown immediate; RMAN> startup mount; RMAN> restore database; RMAN> recover database until time <format>); RMAN> alter database open resetlogs;

to_date(<date>,

Trong , <date> l thi im ghi nhn trc khi xa SCOTT, v d to_date(27/08/2009 13:00:00, DD/MM/YYYY HH24:MI:SS); Kim tra li d liu sau khi phc hi.
Cu 2: th nghim cu lnh COMMIT v ROLLBACK trong ca s SQLPlus ng nhp vo lc ca mt ngi dng bt k v thc thi cu lnh sau to bng:
CREATE TABLE test (id NUMBER(4) PRIMARY KEY, notes VARCHAR(50), count NUMBER(4), created DATE);

Thc hin tun t cc lnh SQL sau


INSERT INTO test(id, notes) VALUES(1, 'Test 1');

Gio Trnh H Qun Tr C S D Liu trang 133

Khoa CNTT & Truyn Thng Trng i Hc Cn Th


INSERT INTO test(id, notes) VALUES(2, 'Test 2'); COMMIT;

Quan st s thay i d liu trong bng Test:


SELECT * FROM test;

Thc hin tip cc cu lnh sau:


INSERT INTO test(id, notes) VALUES(3, 'Test 3 rollback');

Quan st kt qu:
SELECT * FROM test;

Thc hin cun li:


ROLLBACK;

Quan st kt qu:
SELECT * FROM test;

Cu 3: Th nghim cc trng hp Oracle kt thc cc giao dch khng tng minh Trng hp 1: giao dch kt thc khi thc hin thnh cng mt lnh DDL, thc hin ln lt cc lnh sau:
INSERT INTO test(id, notes) VALUES(4, 'Test 4'); INSERT INTO test(id, notes) VALUES(5, 'Test 5'); CREATE TABLE test_cloned (id NUMBER(4) PRIMARY KEY, notes VARCHAR(50), count NUMBER(4), created DATE); ROLLBACK;

Sinh vin quan st d liu trong bng Test v cho nhn xt. Trng hp 2: giao dch kt thc khi phin lm vic ca ngi dng kt thc, thc hin ln lt cc lnh sau:
INSERT INTO test(id, notes) VALUES(4, 'Test 4'); INSERT INTO test(id, notes) VALUES(5, 'Test 5');

Sinh vin tt kt ni ca ngi dng hin ti v ng nhp li sau , thc hin lnh SELECT xem kt qu trong bng Test. Cu 4: Th nghim giao dch vi mc c lp READ ONLY Thc hin cc lnh SQL sau:
SET TRANSACTION READ ONLY; INSERT INTO test(id, notes) VALUES(6, 'Test 6'); Quan st kt qu

Sinh vin gi nguyn phin lm vic hin ti, ng nhp vo lc ca mt ngi dng khc v thc hin cc lnh sau (ch : ngi dng ny phi c ton quyn trn bng Test)
DELETE FROM TEST WHERE id = 5;

Gio Trnh H Qun Tr C S D Liu trang 134

Khoa CNTT & Truyn Thng Trng i Hc Cn Th


COMMIT;

Quay li phin lm vic ca ngi dng trc v thc hin cc lnh sau: SELECT * FROM test; -- Quan st kt qu
COMMIT; SELECT * FROM test; -- Quan st kt qu

Cu 5: Th nghim vi cc kho trong Oracle Sinh vin m hai phin lm vic song song (ng nhp bng 2 ngi dng khc nhau) v thc hin tun t cc lnh sau (theo th t t trn xung di theo bng): Phin lm vic 1
SET TRANSACTION ISOLATION LEVEL READ COMMITTED; UPDATE Test SET count = 1 WHERE id = 1; SET TRANSACTION ISOLATION LEVEL READ COMMITTED; UPDATE Test SET count = 2 WHERE id = 1;

Phin lm vic 2

(Sinh vin quan st kt qu v cho nhn xt)


COMMIT; SELECT * FROM Test;

(Sinh vin quan st kt qu v cho nhn xt)


COMMIT;

( Sinh vin quan st kt qu v cho nhn xt)


SELECT * FROM Test;

( Sinh vin quan st kt qu v cho nhn xt) Cu 6: Th nghim vi deadlock Sinh vin m hai phin lm vic song song (ng nhp bng 2 ngi dng khc nhau) v thc hin tun t cc lnh sau (theo th t t trn xung di theo bng): Phin lm vic 1
UPDATE Test SET count = 2 WHERE id = 1; UPDATE Test SET count = 2 WHERE id = 2; UPDATE Test SET count = 3 WHERE id = 1; UPDATE Test SET count = 3 WHERE id = 2;

Phin lm vic 2

(Sinh vin quan st kt qu v cho nhn xt)

(Sinh vin quan st kt qu v cho nhn xt)

3 Bi tp t lm
Cu 1: thc hin cc lnh imp/exp v impdp/expdp

Gio Trnh H Qun Tr C S D Liu trang 135

Khoa CNTT & Truyn Thng Trng i Hc Cn Th Thc hin export d liu t uimp1, uimp2 v uimp3 bng cc ti khon ngi dng tng ng. To ngi dng importer vi cc quyn ng nhp v to bng, thc hin import cc d liu trong tp tin dump va to v schema ny.
Cu 2: thc hin sao lu v phc hi CSDL ch NOARCHIVELOG

Da trn cc m t v sao lu tng dn (incremental backup) trang 40 v 41. Th nghim sao lu v phc hi bng c 2 gii thut: sai khc (differential) v tch ly (cumulative). Ch : trc mi ln sao lu, cn thay i vi d liu hoc i tng i chiu kt qu phc hi. Khuyn khch sinh vin tm hiu cc thng tin cn thit bng cc cng c tm kim trn Internet gii bi tp ny. Cu 3: Sinh vin thc hin cc lnh cn thit kim chng tnh chnh xc ca bng tng thch gia cc kho trong phn l thuyt bi 3.

N TP 1 Ni dung
Trong bi n tp ny, tt c cc kin thc sinh vin c tm hiu trong cc bi trc s c p dng vo mt CSDL c th. Qua , sinh vin s c n li cc kin thc sau: Cc lnh DDL lin quan n bng d liu, index, sequence Lnh truy vn SQL. To hm, th tc v trigger vi ngn ng PL/SQL. Qun l ngi dng, phn quyn v nhm. Qun tr sao lu v phc hi CSDL.

2 Bi tp
CSDL Northwind c cu trc nh sau: LoaiHang(MaLH, TenLH, MoTa) Cha thng tin m loi hng, tn v cc m t chi tit cc danh mc loi hng. KhachHang(MaKH, TenCongTy, TenNguoiLH, DanhNghiaLH, DiaChi, ThanhPho, Vung, MaBuuDien, QuocGia, SoDT, Fax) Lu tr thng tin chi tit ca khch hng gm m khch hng (cng ty), tn cng ty, tn ngi lin h, danh ngha lin h, a ch, thnh ph, vng, m bu in, nc, s in thoi, s fax. NhanVien(MaNV, TenNV, HoNV, ChucVu, ChucDanhLS, NgaySinh, NgayVaoLam, DiaChi, ThanhPho, Vung, MaBuuDien, QuocGia, DTNha, SoNhanh, GhiChu) Lu tr thng tin chi tit ca nhn vin gm m nhn vin, h, tn, chc v, chc danh lch s, ngy sinh, ngy vo lm, a ch, thnh ph, vng, m bu in, nc, in thoi nh, s in thoi nhnh, ghi ch. ChiTietDatHang(MaDonDH, MaHang, DonGia, SoLuong, GiamGia)

Gio Trnh H Qun Tr C S D Liu trang 136

Khoa CNTT & Truyn Thng Trng i Hc Cn Th Thng tin chi tit t hng gm m n t hng, m sn phm, n gi, s lng, gim gi. DonDatHang (MaDonDH, MaKH, MaNV, NgayDatHang, NgayPhaiGiao, NgayGoiHang, MaCTyVC, GiaVC, TenNguoiNhan, DCDen, TPDen, VungDen, MaBDDen, QuocGiaDen) Bng lu tr thng tin v Ha n nh m ha n, m khch hng t, m nhn vin tip nhn, ngy t hng, ngy phi giao, ngy gi hng, m cng ty vn chuyn, gi vn chuyn, tn ngi nhn, a ch n, thnh ph n, vng n, m bu in n, quc gia n. HangHoa(MaHang, TenHang, MaCtyCC, MaLH, SLTrenDV, DonGia, TonKho, HetSanXuat) Bng lu thng tin chi tit v sn phm gm: M sn phm, tn sn phm, m cng ty cung cp, m loi hng, s lng hng trn 1 n v, n gi, s lng cn tn kho v tnh trng cn sn xut (0) hay khng (-1). Vung(MaVung, GiaiThich) Bng lu tr thng tin v vng, min. CongTyVanChuyen(MaCTyVC, TenCTyVC, DienThoai) Bng lu tr thng tin cc cng ty giao hng. CongTyCungCap(MaCTyCC, TenCTyCC, TenNguoiLH, DanhNghiaLH, DiaChi, ThanhPho, Vung, MaBuuDien, QuocGia, DienThoai, Fax, TrangChu) Bng lu tr thng tin v cc nh cung cp bao gm m, tn cng ty, tn ngi lin h, danh ngha lin h, a ch, thnh ph, vng, m bu in, quc gia, s in thoi, s fax v trang web ca cng ty. Yu cu: 1. To ngi dng Northwind, thc hin import cc bng trn vo schema ny. 2. Quan st s thng thng gia cc bng, thit lp cc rng buc ton vn v kha ngoi v kha chnh trong cc bng. 3. S dng truy vn SQL, tr li cc cu hi sau: a. Lit k thng tin ca tt c khch hng bao gm: m khch hng, tn, a ch, thnh ph tng t mua cc sn phm thuc loi Beverages. Sp xp theo th t tng dn ca tn khch hng. b. Hy cho bit tn sn phm, tn loi, v tn cc nh cung cp cho cc sn phm c t mua nhiu nht. c. Tm nhng khch hng c t mua sn phm thuc c hai loi seafood v beverages. d. Tnh tng gi tr bn ra ca tt c cc mt hng theo tng thng ca tng vng. e. Vi tng khch hng, hy cho bit tn v tng s lng mua ca sn phm m khch hng t mua nhiu nht. 4. S dng PL/SQL, sinh vin thc hin cc yu cu sau: a. Vit mt th tc nhn tham s u vo l mt quc gia, hin th ra mn hnh tn, a ch ca cc khch hng v s ln t hng ca cc khch hng thuc quc gia . Gio Trnh H Qun Tr C S D Liu trang 137

Khoa CNTT & Truyn Thng Trng i Hc Cn Th b. To mt bng DaGoi1997(MaDonDH, MaKH, MaNV, NgayDH, NgayPhaiGiao, NgayGoiHang), thit lp cc rng buc v kha, min gi tr, cn thit. Vit mt th tc thc hin xen cc n t hng c t trong nm 1997 vo bng ny. c. Vit mt hm nhn tham s u vo l tn mt nhn vin, hm tr v s n t hng m nhn vin ny tip nhn. Vit cu lnh SQL lit k tn ca tt c cc nhn vin v s n t hng tip nhn tng ng (s dng hm va to). d. Vit mt trigger kim tra vic xen mt dng d liu vo trong bng ChiTietDatHang. Dng d liu ch c xen vo khi s lng hng t nh hn s lng hng c trong kho v hng cn c sn xut, ngc li xut mt thng bo li. e. To mt th tc nhn tham s u vo l tn ca mt khch hng, hin th ra mn hnh tt c thng tin v cc ln t hng v chi tit hng ha ca cc ln t . 5. Gi s h thng gm cc nhm ngi dng sau: Khch hng c quyn: SELECT trn LoaiHang v HangHoa UPDATE trn KhachHang K ton c quyn: SELECT trn DonDatHang, ChiTietDatHang v DaGoi1997 EXECUTE trn th tc cu 4a v 4b. Ban gim c c ton quyn trn tt c cc i tng trong schema Northwind Vit cc lnh to cc role v gn quyn tng ng. To mt vi user kim tra cc role ny.

Gio Trnh H Qun Tr C S D Liu trang 138

Khoa CNTT & Truyn Thng Trng i Hc Cn Th

Ph lc
1 Cc li thng gp
1.1 Li cha cp quota cho ngi dng
Thng bo li: ORA-01950: no privileges on tablespace 'USERS' Hng gii quyt: cp quota cho ngi dng bng lnh ALTER USER

1.2 Li khng quyn


Thng bo li: ORA-01031: insufficient privileges Hng gii quyt: lin h nh qun tr CSDL cp quyn tng ng cho ngi dng

1.3 Li cha to th mc trn h thng cho th mc i tng


Thng bo li: ORA-39002: invalid operation ORA-39070: Unable to open the log file. ORA-29283: invalid file operation ORA-06512: at "SYS.UTL_FILE", line 475 ORA-29283: invalid file operation Hng gii quyt: to th mc tng ng trong lnh create directory

1.4 Li khng quyn trn th mc i tng


Thng bo li: ORA-39002: invalid operation ORA-39070: Unable to open the log file. ORA-39087: directory name HR is invalid Hng gii quyt: gn quyn read v write cho ngi dng bng lnh grant

1.5 Li cha to hoc gi sai tn ca net service name


Thng bo li: UDI-00008: operation generated ORACLE error 12154 ORA-12154: TNS:could not resolve the connect identifier specified Hng gii quyt: kim tra li net service name trong net manager

Gio Trnh H Qun Tr C S D Liu trang 139

Khoa CNTT & Truyn Thng Trng i Hc Cn Th

2 Cc hm x l d liu
2.1 Cc hm x l chui:
LENGTH(<chui>): Tr v di chui. INSTR(<chui a>,<chui con b>,<v tr x>[,<i>]): Tr v v tr xut

hin ln th i ca chui con b trong chui a, bt u tm t v tr x. Nu x < 0 th tm t phi sang tri. V d: SELECT INSTR('CORPORATE FLOOR','OR', 3, 2) FROM DUAL; ( 14) SELECT INSTR('CORPORATE FLOOR','OR', -3, 2) FROM DUAL; ( 2) Ch : DUAL l bng gi (dummy table) trong Oracle, bng ny ch c mt trng v c s dng khi cu truy vn khng cn thit tham chiu n mt bng thc trong c s d liu. SUBSTR(<chui a>, <v tr bt u x>[,<s k t y>]): Ly y k t bt u t v tr x ca chui a. Nu x < 0 th tm t phi sang tri. Nu khng c y s ly n cui chui a. V d:
SELECT SUBSTR('ABCDEFG',3,4) "Substring" SELECT SUBSTR('ABCDEFG',-5,4) "Substring" ( CDEF) FROM DUAL; FROM DUAL; ( CDEF)

CONCAT(<chui 1>,<chui 2>) hay php ton <chui 1>||<chui 2>:

ghp chui.
LOWER(<chui>) (hay UPPER): Tr v chui dng ch thng (hay ch hoa)

tng ng.
LTRIM (<chui a>,<chui b>) (hay RTRIM, TRIM): Ct khi chui a t bn

tri (hay t bn phi, hay c hai bn) nhng ky t c trong chui b. V d: XxyLAST SELECT LTRIM('xyxXxyLAST WORD','xy') FROM DUAL; ( WORD)

2.2 Cc hm x l ngy thng


EXTRACT(YEAR | MONTH | DAY FROM <ngy>): Tr v thnh phn, ngy,

thng, hoc nm ca mt d liu kiu date. V d: SELECT EXTRACT(YEAR FROM DATE '1998-03-07') FROM DUAL;
( 1998) ADD_MONTHS(<ngy x>,<s thng n>): Tr v ngy mi sau khi cng n

thng vo ngy x. V d:
SELECT add_months(sysdate, 3) FROM DUAL; 17:19:12) SYSDATE: Tr v ngy thng hin ti. ( 20-Apr-2008

MONTHS_BETWEEN(<ngy 1>,<ngy 2>): S thng gia 2 ngy.

Gio Trnh H Qun Tr C S D Liu trang 140

Khoa CNTT & Truyn Thng Trng i Hc Cn Th

2.3 Cc hm chuyn kiu


TO_CHAR(<s>): Chuyn s v dng chui TO_CHAR(<ngy>, <chui nh dng >): Chuyn ngy v dng chui

V d: SELECT TO_CHAR (SYSDATE, 'MM-DD-YYYY HH24:MI:SS')


DUAL; ( 01-20-2008 17:29:05)

FROM

TO_DATE(<chui dng ngy thng>,<nh dng ca chui>):Chuyn

chui v ngy V d: SELECT MONTHS_BETWEEN


(TO_DATE('02-02-1995','MM-DD-YYYY'), TO_DATE('01-01-1995','MM-DD-YYYY') ) FROM DUAL; ( 1,032)

Gio Trnh H Qun Tr C S D Liu trang 141

Khoa CNTT & Truyn Thng Trng i Hc Cn Th

Ti liu tham kho


Tham kho cho chng 1 v 2: Thomas Connolly, Carolyn Begg; Database Systems A practical approach to design, implementation, and Management; Addison Wesley, 4th edition 2005. Tham kho cho chng 3: Christopher Allen; Oracle Database 10g PL/SQL 101; Oracle Press 2004 Gavin Powel, Carol McCullogh-Dieter; Oracle SQL JumpStart with Example; Elsevier 2005. Tham kho v hm, th tc h thng ca Oracle: http://www.techonthenet.com/oracle/functions/index.php Cch s dng biu thc chnh quy trong Oracle: http://download.oracle.com/docs/cd/B19306_01/appdev.102/b14251/adfns_regex p.htm Cch s dng ngoi l trong PL/SQL: http://plsql-tutorial.com/plsql-exception-handling.htm Tham kho v qun l giao dch trong Oracle: http://www.tutorialized.com/view/tutorial/

Gio Trnh H Qun Tr C S D Liu trang 142

You might also like