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

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

Đ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

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

Mục lục

  • NHẬP MÔN DB2 EXPRESS-C

  • MỤC LỤC

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

  • 11

  • 12

  • 13

  • 14

  • 15

  • 16

  • 17

Tài liệu cùng người dùng

  • Đang cập nhật ...

Tài liệu liên quan