Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 21 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
21
Dung lượng
841,74 KB
Nội dung
Nhp môn H qun tr c s d liu DB2 147 Mt ng dng cn xác nh “s b” s hàng trong mt bng. Hiu sut rt là quan tr&ng. Con tr" c yêu cu mc cô l#p n nh vi ngoi l ca mt câu lnh SQL: SELECT COUNT(*) FROM tab1 WITH UR Vi SQL nhúng, các mc thit l#p c t ti thi im óng gói, còn vi SQL ng các mc c t thi gian chy. Vic ch&n s dng mc cô l#p nào ph thuc vào ng dng ca các bn. Nu ng dng ca các bn không yêu cu có nhng giá tr nh ví d, ch&n cô l#p UR. Nu ng dng ca các bn yêu cu iu khin rt cht trên d liu làm vic vi nó, ch&n cô l#p RR. 13.5 Khóa leo thang Mi khóa do DB2 to ra s, s dng lng b nh nào ó. Khi b ti u cho rng nó tt hn là mt khóa trên toàn b bng, thay vì khóa nhiu hàng, s leo thang khóa xut hin. Hình 13.9 minh h&a cho iu này: Hình 13.9 – Khóa leo thang Có hai tham s cu hình c s d liu chính liên quan n khóa leo thang: • LOCKIST - S lng ca b nh (trong trang 4k) d tr qun lý nhng khóa cho m&i ng dng c ni. S mc nh là nm mi ln trang 4K (200K) trên Windows. • MAXLOCKS - Phn trm cc i ca toàn b danh sách khóa cho mt ng dng. Mc nh là 22%. Bi v#y, nu nhng giá tr ngm nh c s dng, khóa leo thang xut hin khi mt ng dng n yêu cu hn 44K trong tng b nh khóa (200K * 22% = 44K). Nu s leo thang khóa xut hin thng xuyên vi s thit l#p này, tng giá tr ca LOCKIST và MAXLOCKS. Khóa leo thang không tt cho hiu nng nhng li gim s xung t. Tp nh#t ký triu chng ca DB2 có th c dùng xác nh liu có Nhp môn H qun tr c s d liu DB2 148 phi s leo thang khóa ang xut hin. (db2diag.log, thng tp này nm trong th mc: C:\Program Files\IBM\SQLLIB\DB2) 13.6 Kim soát khóa Bn có th theo dõi nhng s s dng khóa bng nh chp nhanh khóa ng dng DB2. / b#t nhng nh chp nhanh cho khóa, ta dùng lnh: UPDATE MONITOR SWICTHES USING LOCK ON Sau khi c cho phép, thông tin theo dõi s, c t#p hp. / thu c mt báo cáo ca khóa vào mt thi gian nht nh, dùng lnh sau: GET SNAPSHOT FOR LOCKS FOR APPLICATION AGENT ID <handle> Hình 13.9: 8nh chp nhanh kt qu ca mt ví d s dng ng dng khóa Figue 13.9 – 0nh chp nhanh khóa ca các ng dng 13.7 Ch khóa Khi hai hoc nhiu các ng dng cn thc hin mt phép toán trên cùng mt i tng, mt trong s ó có th phi i nh#n c khóa. Theo mc nh mt ng dng s, Application Lock Snapshot Snapshot timestamp = 11- 05-2002 00:09:08.672586 Application handle = 9 Application ID = *LOCAL.DB2.00B9C5050843 Sequence number = 0001 Application name = db2bp.exe Authorization ID = ADMINISTRATOR Application status = UOW Waiting Status change time = Not Collected Application code page = 1252 Locks held = 4 Total wait time (ms) = 0 List Of Locks Lock Name = 0x05000700048001000000000052 Lock Attributes = 0x00000000 Release Flags = 0x40000000 Lock Count = 255 Hold Count = 0 Lock Object Name = 98308 Object Type = Row Tablespace Name = TEST4K Table Schema = ADMINISTRATOR Table Name = T2 Mode = X Nhp môn H qun tr c s d liu DB2 149 i vô hn. Thi gian ch i mt ng dng ca mt khóa c kim soát bi tham s cu hình c s d liu. Giá tr ngm nh ca tham s này là -1 (i vô hn). Thanh ghi CURENT LOCK TIMEOUT cn c dùng t thi gian ch khóa cho mt kt ni ã cho. Theo mc nh, thanh ghi này c t giá tr ca LOCKTIMEOUT. S dng SET LOCK TIMEOUT thay i giá tr ca nó. Mt khi giá tr ca thanh ghi ã c t cho mt kt ni, nó s, t+n ti qua m&i giao dch. Ví d: SET LOCK TIMEOUT=WAIT n 13.8 Vn khóa ph thuc và phát hin Mt s b tc (deadlock) xut hin khi hai hoc nhiu các ng dng c ni ti cùng c s d liu. S ch i cha bao gi c gii quyt bi vì mi ng dng ang gi mt tài nguyên mà nó phc v cho nhng nhu cu khác nhau. Trong thit k ng dng, nhng s b tc luôn là mt vn chim nhiu thi gian. Hình 13.10: Minh h&a mt tình hung b tc. Hình 13.10 - K$ch bn s b tc Trong hình 13.10, ngi A gi c bt nho khô và gi s s, không cho phép ngi khác dùng cho n khi ông ta có sa. Mt khác, ngi B gi c sa, và s, không cho phép ngi khác cho n khi ông ta có bt nho khô. Bi v#y, chúng ta có mt tình hung b tc. / mô ph"ng mt tình hung b tc DB2, theo nhng bc sau ây: 1. M hai ca s son tho lnh ca DB2 (chúng tôi s, g&i là "CLP1" và "CLP2" tng ng). Chúng i din cho hai ng dng khác nhau kt ni ti c s d liu. 2. T* CLP1 thc hin các lnh sau: db2 connect to sample db2 +c update employee set firstnme = ‘Mary’ where empno = ‘000050’ /u tiên, chúng ta ang kt ni ti c s d liu có tên SAMPLE, và sau ó thc hin mt lnh c#p nh#t hàng trên bng employee làm vi "empno= 50000". La Nhp môn H qun tr c s d liu DB2 150 ch&n "+c " trong câu lnh ch- ra rng, chúng tôi không mun ca s lnh ca DB2 t ng cam kt lnh này. Chúng tai ang c ý làm iu này sao cho chúng ta gi c khóa. 3. T* CLP2 thc hin nhng lnh sau: db2 connect to sample db2 +c update employee set firstnme = ‘Tom’ where empno = ‘000030’ 4 ca s ca CLP2, nó i din cho ng dng th hai, chúng ta c.ng ni vào c s d liu SAMPLE, nhng li c#p nh#t mt hàng khác bng employee. 4. Lnh t* CLP1: db2 +c select firstnme from employee where empno = ‘000030’ Sau khi nhn Enter thc hin câu lnh SELECT trên, câu lnh SELECT này có v2 s, treo. Nó th#t s là không phi là treo, mà là i khóa ca hàng này tr v do CLP2 ã gi trong bc 3. Ti im này, nu CLOCKTIMEOUT ã c li vi giá tr ngm nh ca nó là -1, ng dng CLP1 i mãi mãi. 5. Lnh t* CLP2: db2 +c select firstnme from employee where empno = ‘000050’ Bng vic ánh lnh SELECT trên, bây gi chúng ta ang to ra mt s b tc. Phát biu SELECT này c.ng có v2 treo, thc ra nó ang i khóa CLP1 ang gi tr v. Trong kch bn b tc trên, DB2 s, kim tra tham s cu hình c s d liu DLCHKTIME. Tham s này s, t khong thi gian kim tra cho nhng s b tc. Ch!ng hn, giá tr ca tham s này c t ti 10 giây, DB2 s, s dng mt gii thu#t bên trong xác nh giao dch nào cn phi quay lui (h+i x), và mt giao dch nào s, c tip tc. Nu bn ang gp nhiu tình hung b tc, bn cn phi tái kim tra nhng giao dch hin hu xem xem có th t chc li c không. 13.9 Truy cp ng thi và thc tin khóa tt nht Sau ây là mt s m7o nh" truy c#p +ng thi và thc ti0n khóa tt nht: 1. Gi nhng giao dch càng ngn càng tt. /iu này có th t c bng cách phát hành thng xuyên nhng lnh COMMIT (th#m chí cho nhng giao dch ch- &c) khi ng dng ca bn cho phép. 2. Ch- ghi nh#t ký thông tin giao dch khi có yêu cu. 3. T y d liu ã s dng nhanh chóng: ALTER TABLE ACTIVATE NOT LOGGED INITIALLY WITH EMPTY TABLE 4. Thc hin nhng thay i d liu theo lô/nhóm. Ch!ng hn DELETE FROM ( SELECT *FROM tedwas.t1 WHERE c1 = … FETCH FIRST s3000 ROWS ONLY) Nhp môn H qun tr c s d liu DB2 151 5. S dng nhng c tính tng tranh ca nhng công c chuyn i d liu trong DB2. 6. /t tham s mc LOCKTIMEOUT cho c s d liu (khong gia 30-120 giây). Bn *ng nên cho giá tr ngm nh ca nó là -1. Bn có th c.ng s dng khóa gii hn thi gian (timeout) trên trên t*ng phiên làm vic. 7. Không khôi phc nhiu d liu hn cn thit. Ch!ng hn, s dng mnh FETCH FIRST n ROWS ONLY trong câu lnh SELECT. Nhp môn H qun tr c s d liu DB2 152 PH1N 3: H2C DB2 – PHÁT TRI3N 4NG D5NG Trong phn này, chúng ta s, tho lu#n v các i tng ca c s d liu nm tng di ca ng dng nh th tc lu (stored procedure), hàm do ngi dùng nh ngh'a và b%y s kin (trigger). Rng bn có th h&c c cách l#p trình s dng DB2 nh mt máy ch d liu bng nhiu ngôn ng khác nhau bng cách kho sát các ng dng m%u i kèm trong th mc SQLLIB\samples khi chúng ta cài t máy ch DB2. Hình di ây là mt s chng trình m%u vit bng Java, s dng DB2 trên nn Windows. Mt s chng trình Java m%u i kèm DB2. Nhp môn H qun tr c s d liu DB2 153 14 Chng 14 – Các th tc SQL PL Trong chng này chúng ta s, tho lu#n v “th tc lu” (stored procedure). Th tc lu là mt i tng ng dng c s d liu, có th óng gói các câu lnh SQL và các nghip v. Lu tr hp lí mt phn ng dng trong c s d liu cho phép ci tin hiu sut thc hin nh gim kh nng k7t ng truyn mng. Hn na, các th tc cho phép lu tr t#p trung ti mt ni nào ó các ng dng khác c.ng có th s dng c. Th tc lu trong DB2 có th vit bng SQL PL, C/C++, Java, Cobol, các ngôn ng c h tr CLR (Common Language Runtime) và OLE. Trong chng này, chúng ta s, t#p trung vào SQL PL vì tính ph bin và n gin ca nó. Hình 14.1 mô t cách hot ng ca stored procedure. Hình 14.1 - Gim k.t ng truyn mng b6ng th tc. 4 góc trên bên trái ca hình, ta thy mt vài câu lnh SQL c thc thi ln lt ht cái này n cái kia. Mi câu SQL c gi t* máy khách n máy ch, và máy ch tr kt qu v li máy khách. Nu nhiu câu SQL c thc thi theo kiu ó thì lng d liu truyn trên mng s, tng lên. Tuy nhiên, góc di phi, ta thy th tc lu “myproc” c lu trên máy ch cha nhng câu SQL tng t trên; và sau ó ti máy khách (bên phía trái), lnh CALL c dùng g&i thc hin th tc. Cách th hai g&i thc Nhp môn H qun tr c s d liu DB2 154 hin mt th tc hiu qu hn vì ch- có mt lnh g&i c truyn trên mng và mt kt qu tr v cho máy khách. Th tc lu c.ng rt hu ích trong mc ích bo m#t c s d liu vì ngi s dng s, c phân cp các quyn thc thi hoc ch- c xem các th tc; iu ó giúp cho h thng c che chn và không cho ngi dùng ly thông tin nu h& không có quyn. Kh nng này là hoàn toàn kh thi vì ngi dùng không òi h"i nhng quyn tng minh trên các bng hoc khung nhìn (view) trong th tc mà h& thc thi; h& ch- cn c cp quyn thc hin các th tc ó. 14.1 DB2 Developer Workbench DB2 Developer Workbench (DWB) là công c c xây dng trên nn tng Eclipse, phc v cho vic phát trin các th tc, hàm, truy vn XML, ng dng SQLJ,… DWB n nh mt hình nh riêng r, (nó không phi là mt phn trong gói cài t DB2) nhng hoàn toàn mi0n phí. Có th ti DWB v t* trang “Download” trên a ch- http://ibm.com/db2/express. Hình 14.2 Giao din ca DWB. Hình 14.2 – DB2 Developer Workbench 14.1.2 To mt th tc lu trong DWB / to mt th tc bng Java hay SQL PL, hãy làm theo các bc sau. Lu ý rng không th to c các th tc c vit bng các ngôn ng khác trong DWB. Bc 1: To mt d án DWB (project) T* menu, ch&n File -> New -> Project và ch&n Data Development Project. Xem hình 14.3 di ây. Nhp môn H qun tr c s d liu DB2 155 Hình 14.3 – Data development project T*ng bc làm theo hng d%n nh#p tên d án, ch&n c s d liu bn mun s dng và xác nh rõ th mc JDK (cái nào mc nh thng là úng). Bc 2: To mt th tc Sau khi to xong d án, phía bên phi ca ca s (data perspective) s, xut hin d án mi v*a to. Trong hình 14.4 bn s, thy d án mi to trong tình trng m rng. Nhp môn H qun tr c s d liu DB2 156 Hình 14.4 – D án “myProject” Hình 14.4 Cho thy các th mc khác nhau trong d án ca bn. Khi mun to mt th tc, bn nhn chut phi vào th mc th tc và ch&n New -> Stored Procedure. Hoàn thành các thông tin c yêu cu trong t*ng bc to mi mt th tc nh: th tc ó kt hp vi d án nào, tên và ngôn ng vit th tc (lu ý rng ch- có SQL PL và Java c h tr trong DWB) và các câu lnh SQL dùng trong th tc. Mc nh, DWB s, cung cp cho bn câu lnh SQL m%u ví d. Ti ây bn có th nhn Finish và th tc s, c to ra và trong ó có s dng on mã m%u và các câu lnh SQL trong ví d c cung cp trên. Xem hình 14.5 [...]... temp6 BIGINT DEFAULT 10000; temp7 CHAR(10) DEFAULT 'yes'; temp8 VARCHAR(10) DEFAULT 'hello'; temp9 DATE DEFAULT '19 98- 12-25'; temp10 TIME DEFAULT '1:50 PM'; temp11 TIMESTAMP DEFAULT '2001-01-05-12.00.00'; temp12 CLOB(2G); temp13 BLOB(2G); 14.2.7 Câu l nh gán / gán m t giá tr cho m t bi n, s d ng câu l nh SET Ví d : SET total = 100; Nh p môn H qu n tr c s d li u DB2 Câu l nh trên c.ng t ng 161 ng v... trình x lý ã x lý i u ki n, dòng x lý s, i n cu i th t c, và s, không làm gì i ho c khôi ph c b t kì câu l nh nào ã c th c thi (roll back) Hình 14 .8 minh h&a s khác nhau gi a các trình x lý i u ki n và hành vi c a nó Nh p môn H qu n tr c s d li u DB2 165 Hình 14 .8 – Ki u c a các trình x" lý i u ki n 14.7 SQL ng Trong SQL ng, trái ng c v i SQL t'nh, toàn b câu l nh SQL không c nh#n bi t trong th i gian ch... sách này B c 3: Biên d$ch m t th t c Khi m t th t c ã c t o, b n biên d ch và tri n khai b ng cách nh p ph i vào nó trong khung bên trái và ch&n Deploy Hình 14.6 minh ho cho b c này Nh p môn H qu n tr c s d li u DB2 1 58 Hình 14.6 – Biên d$ch m t th t c B c 4: Th c thi m t th t c Khi m t th t c ã c biên d ch, b n có th th c thi nó b ng cách nh p ph i chu t vào nó và ch&n Run K t qu s, xu t hi n trong... dòng l nh, ta dùng câu l nh: CALL P2 (3,4,?) 14.2.4 Chú thích trong th t c SQL PL Có hai cách chú thích trong th t c SQL PL: • S d ng 2 d u g ch ngang ( ), ví d : ây là 1 chú thích theo ki u SQL Nh p môn H qu n tr c s d li u DB2 • 160 S d ng nh d ng nh ngôn ng l#p trình C, ví d : /* ây là 1 chú thích d ng C */ 14.2.5 Câu l nh ghép M t câu l nh ghép trong th t c là m t câu l nh trong ó ch a r t nhi...Nh p môn H qu n tr c s d li u DB2 157 Hình 14.5 – M t th t c m%u c phát sinh B n có th Trong hình 14.5, o n mã m%u cho th t c “PROCEDURE1” thay th o n mã ó b ng o n mã riêng c a b n / n gi n chúng ta s, dùng... có r t nhi u câu l nh có th c dùng i u khi n lu+ng th c hi n m c logic D i ây là m t vài câu l nh c h tr : CASE (ch&n ra m t nhánh th c thi (tìm ki m IF FOR (th c thi m i dòng trong b ng) n gi n)) Nh p môn H qu n tr c s d li u DB2 162 WHILE ITERATE (bu c ph i th c hi n vòng l p ti p theo T trong C) LEAVE (r i kh"i m t kh i hay vòng l p) LOOP (l p vô h n nh) REPEAT GOTO RETURN CALL (g&i th t c) ng t v... cmd.Parameters.Add(“v_lastname”, DB2Type.VarChar) parm.Direction = ParameterDirection.Output parm = cmd.Parameter.Add(“v_msg”, DB2Type.VarChar) parm.Direction = ParameterDirection.Output ‘ G i l i th t c Nh p môn H qu n tr c s d li u DB2 163 Dim reader As DB2DataReader = cmd.ExecuteReader Catch myException As DB2Exception DB2ExceptionHandler(myException) Catch UnhandledExceptionHandler() End Try G i th t c... SQLSTATE ‘01XXXX’ • Tr ng h p c bi t: các giá tr khác SQLCODE là m t c t cho c s d li u, chi ti t h n c SQLSTATE SQLSTATE là tiêu chu n trong các h qu n tr cho c s d li u nh ng t ng quát h n Nhi u Nh p môn H qu n tr c s d li u DB2 164 SQLCODE có th trùng v i SQLSTATE SQLCODE và SQLSTATE s, Ph l c A, X lý s c c nói rõ h n M t i u ki n có th c t o ra b ng b t kì câu l nh SQL nào và s, trùng v i m t SQLSTATE... c: • LANGUAGE SQL Thu c tính này ch- ra ngôn ng mà th t c s, s d ng LANGUAGE SQL là giá tr m c nh V i nh ng ngôn ng khác nh JAVA hay C thì ta s d ng t ng ng thu c tính LANGUAGE JAVA hay LANGUAGE C Nh p môn H qu n tr c s d li u DB2 159 • RESULT SETS Thu c tính này c n thi t n u th t c c a b n s, tr v t#p h p k t qu n • SPECIFIC my_unique_name /ây là tên duy nh t c gán cho th t c M t th t c có th c... stmt = ‘INSERT INTO T2 VALUE (?, ?)’; PREPARE st FROM stmt; EXECUTE st USING value1, value1; EXECUTE st USING value2, value2; SET stmt = INSERT INTO T2 VALUES (9, 9)’; EXECUTE IMMEDIATE stmt; END Nh p môn H qu n tr c s d li u DB2 166 15 Ch ng 15 – Hàm n i tuy n, hàm ng i dùng $nh ngh-a, các hàm x" ký các s ki n b%y (Inline SQL PL, UDF, Triggers) Trong ch ng này, chúng ta s, xem xét v các hàm n i tuy . Application Lock Snapshot Snapshot timestamp = 11- 05-2002 00:09: 08. 672 586 Application handle = 9 Application ID = *LOCAL.DB2.00B9C505 084 3 Sequence number = 0001 Application name = db2bp.exe. Lock Name = 0x050007000 480 01000000000052 Lock Attributes = 0x00000000 Release Flags = 0x40000000 Lock Count = 255 Hold Count = 0 Lock Object Name = 983 08 Object Type = Row Tablespace. thi (roll back). Hình 14 .8 minh h&a s khác nhau gia các trình x lý iu kin và hành vi ca nó Nhp môn H qun tr c s d liu DB2 165 Hình 14 .8 – Kiu ca các trình x"