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
875,43 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 [...]... th c hi n trên b ng ó Chúng c thi hành m t c ch t ng C c thao t c là nguyên nhân c c b%y này c th c thi, g&i là triggering 15.2.1 C c lo i b%y s ki n C 3 lo i b%y ó là: b%y tr c (before), b%y sau (after) và b%y thay th (instead of) B%y tr c C c b%y tr c c kích ho t tr c khi m t dòng c thêm, s a hay xóa i C c thao t c c th c hi n b i b%y này thì không th kích ho t c c c b%y kh c (vì th c c thao t c. .. th t c r t d0 t o và h &c Trong DB2 th t c có hi u su t t t nh t Th t c l u SQL PL (hay nói t t là “Th t c SQL”) là tiêu i m c a ch ng này 14.2.1 C u tr c c a th t c Cú pháp c a th t c CREATE PROCEDURE proc_name [({tham s tùy ch n})] [thu c tính tùy ch n c a th t c] Trong ó là m t c u l nh ho c m t t#p c c câu l nh tr c BEGIN [ATOMIC]……………[END] c nhóm b i c u 14.2.2 Nh ng thu c tính... ALLOCATE CURSOR ASSOCIATE LOCATORS DECLARE DECLARE HANDLER PREPARE EXECUTE EXECUTE IMMEDIATE LOOP REPEAT RESIGNAL CALL COMMIT/ROLLBACK Nh p môn H qu n tr c s d li u DB2 167 D i ây là ví d c a SQL ng s d ng SQL PL n i tuy n N u c c b n mu n th nó, b n c c th l y nó làm m t ph n c a c a t p k ch b n, và b n ph i ch c ch n là ã t p c c c b ng nh sau: CREATE TABLE T1 (c1 INT) CREATE TABLE T3 (c1 ... nh t c gán cho th t c M t th t c có th c n p è, ngh'a là, nhi u th t c l u tr c th c c ng m t tên, nh ng v i s l ng tham s kh c nhau B ng c ch s d ng t* khóa SPECIFIC b n c th g n m t tên duy nh t v i nh ng th t c này, và i u này t o ra s d0 dàng cho vi c qu n lí c c th t c l u tr Ví d , xóa m t th t c s d ng t* khóa SPECIFIC b n c th d ng c u l nh: DROP SPECIFIC PROCEDURE N u t* khóa SPECIFIC không... cmd.CommandText = procName ‘ ng ký c c tham s u ra cho DB2Command parm = 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)... c a c u l nh SELECT C pháp m , chuy n giá tr (fetch) và óng con tr" nh sau: DECLARE CURSOR [WITH ; OPEN ; FETCH < tên con tr > INTO ; CLOSE < tên con tr >; Khi m t con tr" nh ng giá tr sau: • • c khai báo, m nh CLIENT: K t qu s, CALLER: K t qu s, RETURN < ích WITH RETURN c th khai báo, tr c s v >] d ng v i c tr v cho ng d ng máy khách c tr v cho... sqlrc = StmtResultPrint(hstmt); if (sqlrc == SQL_SUCCESS) { /* C 1 k t qu kh c */ sqlrc = SQLMoreResult(hstmt); } Xem chi ti t t p ví d c a DB2: sqllib/samples/sqlproc/rsultset .c G i th t c t& Try ‘ T Dim Dim Dim ng d ng VB.NET o m t DB2 Command ch y th t c procName As String = “TRUNC_DEMO” cmd As DB2Command = conn.CreateCommand() parm As DB2Parameter cmd.CommandType = CommandType.StoredProcedure cmd.CommandText... 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 khung “Result” g c d i ph i / th c thi m t th t c b ng dòng l nh, b n c th s d ng c u l nh CALL 14.2 M t s khái ni m v th t c SQL PL: Nh ng th t c. .. SQL ng c. ng c khi óng gói Nó c. ng SQL • • ng c th ngh dùng cho DDL tránh c c v n c yêu c u khi th c hi n quy ph thu c và sai sót c th c thi theo hai c ch: Dùng l nh EXECUTE IMMEDIATE – ây là ý t ng cho vi c th c thi th t c SQL n Dùng l nh PREPARE song song v i l nh EXECUTE – ý t ng này c dùng th c thi a th t c SQL /o n mã sau a ra m t ví d v SQL ng s d ng c hai c ch trên Ví d này gi s r ng c m t... n nào c. ng c th c gán v i giá tr NULL SET total = NULL M t bi u th c i u ki n s, u tiên trong b ng c thi t l#p n u c nhi u h n m t dòng thì ch- l y dòng SET total = (select sum (c1 ) from T1); SET first_val = (select c1 from T1 fetch first 1 row only) B n c. ng c th gán bi n v i c c thu c tính ngoài c a c s d li u SET sch = CURRENT_SCHEMA; 14.3 C c con tr+ (cursor) M t con tr" là m t t#p h p ch a k . vi c c thu c tính ngoài c a c s d liu SET sch = CURRENT_SCHEMA; 14.3 C c con tr+ (cursor) Mt con tr" là mt t#p hp cha kt qu c a c u lnh SELECT. C pháp khai báo, m, chuyn. c c ng dng kh c c.ng c th s dng c. Th t c 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. tr c s d liu DB2 1 58 Hình 14.6 – Biên d$ch mt th t c B c 4: Th c thi mt th t c Khi mt th t c ã c biên dch, bn c th th c thi nó bng c ch nhp phi chut vào nó và ch&n