1. Trang chủ
  2. » Công Nghệ Thông Tin

Nhập môn DB2 Express – C part 8 doc

21 175 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

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

Nhp môn H qun tr c s d liu DB2 147 Mt ng dng cn xác nh “s b” s hàng trong mt bng. Hiu sut rt là quan tr&ng. Con tr" c yêu cu mc cô l#p n nh vi ngoi l ca mt câu lnh SQL: SELECT COUNT(*) FROM tab1 WITH UR Vi SQL nhúng, các mc thit l#p c t ti thi im óng gói, còn vi SQL ng các mc c t  thi gian chy. Vic ch&n s dng mc cô l#p nào ph thuc vào ng dng ca các bn. Nu ng dng ca các bn không yêu cu có nhng giá tr nh  ví d, ch&n cô l#p UR. Nu ng dng ca các bn yêu cu iu khin rt cht trên d liu làm vic vi nó, ch&n cô l#p RR. 13.5 Khóa leo thang Mi khóa do DB2 to ra s, s dng lng b nh nào ó. Khi b ti u cho rng nó tt hn là  mt khóa trên toàn b bng, thay vì khóa nhiu hàng, s leo thang khóa xut hin. Hình 13.9 minh h&a cho iu này: Hình 13.9 – Khóa leo thang Có hai tham s cu hình c s d liu chính liên quan n khóa leo thang: • LOCKIST - S lng ca b nh (trong trang 4k) d tr  qun lý nhng khóa cho m&i ng dng c ni. S mc nh là nm mi ln trang 4K (200K) trên Windows. • MAXLOCKS - Phn trm cc i ca toàn b danh sách khóa cho mt ng dng. Mc nh là 22%. Bi v#y, nu nhng giá tr ngm nh c s dng, khóa leo thang xut hin khi mt ng dng n yêu cu hn 44K trong tng b nh khóa (200K * 22% = 44K). Nu s leo thang khóa xut hin thng xuyên vi s thit l#p này, tng giá tr ca LOCKIST và MAXLOCKS. Khóa leo thang không tt cho hiu nng nhng li gim s xung t. Tp nh#t ký triu chng ca DB2 có th c dùng  xác nh liu có Nhp môn H qun tr c s d liu DB2 148 phi s leo thang khóa ang xut hin. (db2diag.log, thng tp này nm trong th mc: C:\Program Files\IBM\SQLLIB\DB2) 13.6 Kim soát khóa Bn có th theo dõi nhng s s dng khóa bng nh chp nhanh khóa ng dng DB2. / b#t nhng nh chp nhanh cho khóa, ta dùng lnh: UPDATE MONITOR SWICTHES USING LOCK ON Sau khi c cho phép, thông tin theo dõi s, c t#p hp. / thu c mt báo cáo ca khóa vào mt thi gian nht nh, dùng lnh sau: GET SNAPSHOT FOR LOCKS FOR APPLICATION AGENT ID <handle> Hình 13.9: 8nh chp nhanh kt qu ca mt ví d s dng ng dng khóa Figue 13.9 – 0nh chp nhanh khóa ca các ng dng 13.7 Ch khóa Khi hai hoc nhiu các ng dng cn thc hin mt phép toán trên cùng mt i tng, mt trong s ó có th phi i  nh#n c khóa. Theo mc nh mt ng dng 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 Nhp môn H qun tr c s d liu DB2 149 i vô hn. Thi gian ch i mt ng dng ca mt khóa c kim soát bi tham s cu hình c s d liu. Giá tr ngm nh ca tham s này là -1 (i vô hn). Thanh ghi CURENT LOCK TIMEOUT cn c dùng  t thi gian ch khóa cho mt kt ni ã cho. Theo mc nh, thanh ghi này c t giá tr ca LOCKTIMEOUT. S dng SET LOCK TIMEOUT  thay i giá tr ca nó. Mt khi giá tr ca thanh ghi ã c t cho mt kt ni, nó s, t+n ti qua m&i giao dch. Ví d: SET LOCK TIMEOUT=WAIT n 13.8 Vn  khóa ph thuc và phát hin Mt s b tc (deadlock) xut hin khi hai hoc nhiu các ng dng c ni ti cùng c s d liu. S ch i cha bao gi c gii quyt bi vì mi ng dng ang gi mt tài nguyên mà nó phc v cho nhng nhu cu khác nhau. Trong thit k ng dng, nhng s b tc luôn là mt vn  chim nhiu thi gian. Hình 13.10: Minh h&a mt tình hung b tc. Hình 13.10 - K$ch bn s b tc Trong hình 13.10, ngi A gi c bt nho khô và gi s s, không cho phép ngi khác dùng cho n khi ông ta có sa. Mt khác, ngi B gi c sa, và s, không cho phép ngi khác cho n khi ông ta có bt nho khô. Bi v#y, chúng ta có mt tình hung b tc. / mô ph"ng mt tình hung b tc  DB2, theo nhng bc sau ây: 1. M hai ca s son tho lnh ca DB2 (chúng tôi s, g&i là "CLP1" và "CLP2" tng ng). Chúng i din cho hai ng dng khác nhau kt ni ti c s d liu. 2. T* CLP1 thc hin các lnh sau: db2 connect to sample db2 +c update employee set firstnme = ‘Mary’ where empno = ‘000050’ /u tiên, chúng ta ang kt ni ti c s d liu có tên SAMPLE, và sau ó thc hin mt lnh c#p nh#t hàng trên bng employee làm vi "empno= 50000". La Nhp môn H qun tr c s d liu DB2 150 ch&n "+c " trong câu lnh ch- ra rng, chúng tôi không mun ca s lnh ca DB2 t ng cam kt lnh này. Chúng tai ang c ý làm iu này sao cho chúng ta gi c khóa. 3. T* CLP2 thc hin nhng lnh sau: db2 connect to sample db2 +c update employee set firstnme = ‘Tom’ where empno = ‘000030’ 4 ca s ca CLP2, nó i din cho ng dng th hai, chúng ta c.ng ni vào c s d liu SAMPLE, nhng li c#p nh#t mt hàng khác  bng employee. 4. Lnh t* CLP1: db2 +c select firstnme from employee where empno = ‘000030’ Sau khi nhn Enter thc hin câu lnh SELECT  trên, câu lnh SELECT này có v2 s, treo. Nó th#t s là không phi là treo, mà là i khóa ca hàng này tr v do CLP2 ã gi trong bc 3. Ti im này, nu CLOCKTIMEOUT ã c  li vi giá tr ngm nh ca nó là -1, ng dng CLP1 i mãi mãi. 5. Lnh t* CLP2: db2 +c select firstnme from employee where empno = ‘000050’ Bng vic ánh lnh SELECT  trên, bây gi chúng ta ang to ra mt s b tc. Phát biu SELECT này c.ng có v2 treo, thc ra nó ang i khóa CLP1 ang gi tr v. Trong kch bn b tc trên, DB2 s, kim tra tham s cu hình c s d liu DLCHKTIME. Tham s này s, t khong thi gian kim tra cho nhng s b tc. Ch!ng hn, giá tr ca tham s này c t ti 10 giây, DB2 s, s dng mt gii thu#t bên trong  xác nh giao dch nào cn phi quay lui (h+i x), và mt giao dch nào s, c tip tc. Nu bn ang gp nhiu tình hung b tc, bn cn phi tái kim tra nhng giao dch hin hu xem xem có th t chc li c không. 13.9 Truy cp ng thi và thc tin khóa tt nht Sau ây là mt s m7o nh"  truy c#p +ng thi và thc ti0n khóa tt nht: 1. Gi nhng giao dch càng ngn càng tt. /iu này có th t c bng cách phát hành thng xuyên nhng lnh COMMIT (th#m chí cho nhng giao dch ch- &c) khi ng dng ca bn cho phép. 2. Ch- ghi nh#t ký thông tin giao dch khi có yêu cu. 3. T y d liu ã s dng nhanh chóng: ALTER TABLE ACTIVATE NOT LOGGED INITIALLY WITH EMPTY TABLE 4. Thc hin nhng thay i d liu theo lô/nhóm. Ch!ng hn DELETE FROM ( SELECT *FROM tedwas.t1 WHERE c1 = … FETCH FIRST s3000 ROWS ONLY) Nhp môn H qun tr c s d liu DB2 151 5. S dng nhng c tính tng tranh ca nhng công c chuyn i d liu trong DB2. 6. /t tham s  mc LOCKTIMEOUT cho c s d liu (khong gia 30-120 giây). Bn *ng nên cho giá tr ngm nh ca nó là -1. Bn có th c.ng s dng khóa gii hn thi gian (timeout) trên trên t*ng phiên làm vic. 7. Không khôi phc nhiu d liu hn cn thit. Ch!ng hn, s dng mnh  FETCH FIRST n ROWS ONLY trong câu lnh SELECT. Nhp môn H qun tr c s d liu DB2 152 PH1N 3: H2C DB2 – PHÁT TRI3N 4NG D5NG Trong phn này, chúng ta s, tho lu#n v các i tng ca c s d liu nm  tng di ca ng dng nh th tc lu (stored procedure), hàm do ngi dùng nh ngh'a và b%y s kin (trigger). Rng bn có th h&c c cách l#p trình s dng DB2 nh mt máy ch d liu bng nhiu ngôn ng khác nhau bng cách kho sát các ng dng m%u i kèm trong th mc SQLLIB\samples khi chúng ta cài t máy ch DB2. Hình di ây là mt s chng trình m%u vit bng Java, s dng DB2 trên nn Windows. Mt s chng trình Java m%u i kèm DB2. Nhp môn H qun tr c s d liu DB2 153 14 Chng 14 – Các th tc SQL PL Trong chng này chúng ta s, tho lu#n v “th tc lu” (stored procedure). Th tc lu là mt i tng ng dng c s d liu, có th óng gói các câu lnh SQL và các nghip v. Lu tr hp lí mt phn ng dng trong c s d liu cho phép ci tin hiu sut thc hin nh gim kh nng k7t ng truyn mng. Hn na, các th tc cho phép lu tr t#p trung ti mt ni nào ó  các ng dng khác c.ng có th s dng c. Th tc lu trong DB2 có th vit bng SQL PL, C/C++, Java, Cobol, các ngôn ng c h tr CLR (Common Language Runtime) và OLE. Trong chng này, chúng ta s, t#p trung vào SQL PL vì tính ph bin và n gin ca nó. Hình 14.1 mô t cách hot ng ca stored procedure. Hình 14.1 - Gim k.t ng truyn mng b6ng th tc. 4 góc trên bên trái ca hình, ta thy mt vài câu lnh SQL c thc thi ln lt ht cái này n cái kia. Mi câu SQL c gi t* máy khách n máy ch, và máy ch tr kt qu v li máy khách. Nu nhiu câu SQL c thc thi theo kiu ó thì lng d liu truyn trên mng s, tng lên. Tuy nhiên,  góc di phi, ta thy th tc lu “myproc” c lu trên máy ch cha nhng câu SQL tng t trên; và sau ó ti máy khách (bên phía trái), lnh CALL c dùng  g&i thc hin th tc. Cách th hai g&i thc Nhp môn H qun tr c s d liu DB2 154 hin mt th tc hiu qu hn vì ch- có mt lnh g&i c truyn trên mng và mt kt qu tr v cho máy khách. Th tc lu c.ng rt hu ích trong mc ích bo m#t c s d liu vì ngi s dng s, c phân cp các quyn  thc thi hoc ch- c xem các th tc; iu ó giúp cho h thng c che chn và không cho ngi dùng ly thông tin nu h& không có quyn. Kh nng này là hoàn toàn kh thi vì ngi dùng không òi h"i nhng quyn tng minh trên các bng hoc khung nhìn (view) trong th tc mà h& thc thi; h& ch- cn c cp  quyn  thc hin các th tc ó. 14.1 DB2 Developer Workbench DB2 Developer Workbench (DWB) là công c c xây dng trên nn tng Eclipse, phc v cho vic phát trin các th tc, hàm, truy vn XML, ng dng SQLJ,… DWB n nh mt hình nh riêng r, (nó không phi là mt phn trong gói cài t DB2) nhng hoàn toàn mi0n phí. Có th ti DWB v t* trang “Download” trên a ch- http://ibm.com/db2/express. Hình 14.2 Giao din ca DWB. Hình 14.2 – DB2 Developer Workbench 14.1.2 To mt th tc lu trong DWB / to mt th tc bng Java hay SQL PL, hãy làm theo các bc sau. Lu ý rng không th to c các th tc c vit bng các ngôn ng khác trong DWB. Bc 1: To mt d án DWB (project) T* menu, ch&n File -> New -> Project và ch&n Data Development Project. Xem hình 14.3 di ây. Nhp môn H qun tr c s d liu DB2 155 Hình 14.3 – Data development project T*ng bc làm theo hng d%n  nh#p tên d án, ch&n c s d liu bn mun s dng và xác nh rõ th mc JDK (cái nào mc nh thng là úng). Bc 2: To mt th tc Sau khi to xong d án, phía bên phi ca ca s (data perspective) s, xut hin d án mi v*a to. Trong hình 14.4 bn s, thy d án mi to trong tình trng m rng. Nhp môn H qun tr c s d liu DB2 156 Hình 14.4 – D án “myProject” Hình 14.4 Cho thy các th mc khác nhau trong d án ca bn. Khi mun to mt th tc, bn nhn chut phi vào th mc th tc và ch&n New -> Stored Procedure. Hoàn thành các thông tin c yêu cu trong t*ng bc to mi mt th tc nh: th tc ó kt hp vi d án nào, tên và ngôn ng  vit th tc (lu ý rng ch- có SQL PL và Java c h tr trong DWB) và các câu lnh SQL dùng trong th tc. Mc nh, DWB s, cung cp cho bn câu lnh SQL m%u ví d. Ti ây bn có th nhn Finish và th tc s, c to ra và trong ó có s dng on mã m%u và các câu lnh SQL trong ví d c cung cp  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 . 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t qu c a c u lnh SELECT. C pháp  khai báo, m, chuyn.  c c ng dng kh c c.ng c th s dng  c. Th t c lu trong DB2 c th vit bng SQL PL, C/ C++, Java, Cobol, c c ngôn ng  c h tr CLR (Common Language Runtime) và OLE. Trong chng. 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

Ngày đăng: 10/08/2014, 21:22

TỪ KHÓA LIÊN QUAN