Professional Documents
Culture Documents
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
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
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
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
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,..
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.
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.
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.
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.
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.
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.
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
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.
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.
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.
To tablespace mi
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
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
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.
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.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
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.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
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;
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
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:
Table
X X
View
X
Procedure
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}...]
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.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
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.
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
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
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
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
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:
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
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
tn_bng
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
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 | | | | | |
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 ;
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') ;
V d:
UPDATE CUAHANG SET TENCH='CUA HANG CUA TOI' WHERE MACH=1;
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
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
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
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}));
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)
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
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.
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
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.
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;
V d:
SET SERVEROUTPUT ON;
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 ||
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
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';
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;
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;
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;
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;
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
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;
V d:
OPEN c_Dept1;
Hoc:
OPEN c_Dept2(10); -- trng hp CURSOR c khai bo c tham s
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
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
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;
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.
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;
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,)]
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;
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.
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
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
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.
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.
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
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.
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.
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.
T2
T1
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$.
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
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.
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
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
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
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
Begin Transaction Read(X) X = X * 1.1 Write (X) Read(Y) Y = Y * 1.1 Write (Y) Commit
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.
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);
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
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 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.
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.
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 .
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
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.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
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
NPtr 2 7 4 5 9 10 0 0 11 0
1 0 3 4 0 2
(old val.)
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.
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 ...
Khng X X X X RX RX RX RS
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 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;
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.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.
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.
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.
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
Sao lu cc datafiles
BACKUP AS BACKUPSET DATAFILE 'ORACLE_HOME/oradata/trgt/users01.dbf', 'ORACLE_HOME/oradata/trgt/tools01.dbf';
Sao lu tablespace
BACKUP TABLESPACE system, users, tools;
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.
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'] }
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)
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.
t Net Service Name l TestService (sinh vin c th t tn ty ). Chn Next. Bc 2: chn Protocol TCP/IP. Chn Next.
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.
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;
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:
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.
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:
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
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.
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;
!!! 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;
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;
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;
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
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.
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;
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;
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
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
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
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 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;
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
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.
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 ) ;
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
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;
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.
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.
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.
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
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;
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;
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 *
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) );
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
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.
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;
Thc thi th tc ny :
EXECUTE Del_Emp(7654);
Gi th hm ny vi m phng ban l 30
SELECT get_dept_salary(30) AS Tsal FROM DUAL;
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.
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;
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');
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;
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%.
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
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;
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);
Quan st kt qu:
SELECT * FROM test;
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;
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) 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
3 Bi tp t lm
Cu 1: thc hin cc lnh imp/exp v impdp/expdp
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)
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.
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
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)
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)
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
FROM