Tải bản đầy đủ (.pdf) (21 trang)

nhập môn hệ quản trị Cơ sở dữ liệu phần 10 pptx

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (874.01 KB, 21 trang )

Nhp môn H qun tr c s d liu DB2

189
XMLQUERY Thc thi câu truy vn XQuery và tr v dãy kt qu
XMLTABLE Thc thi câu truy vn XQuery và kt qu tr v (nu có) s, là
mt bng quan h
XMLCAST Ép kiu XML
Bng 16.5 - Các hàm SQL/XML
Nhng ví d minh h&a sau s dng c s d liu “mydb” mà ta ã to ra t* trc.

Ví d 1:
Gi s bn cn xác nh tên tt c khách hàng sng  mt vùng nào ó (có cùng mã
vùng – zip). Bng “clients” lu a ch- khách hàng, bao g+m mã vùng, trong mt ct
XML. S dng XMLEXISTS, bn tìm thy ct d liu XML phù hp vi mã vùng, sau ó
gii hn li kt qu tr v.

SELECT name FROM clients
WHERE xmlexists (
‘$c/Client/Address[zip=”95116”]’
passing clients.contact as “c”
)

Dòng u tiên ca câu lnh SQL nói rng bn mun ly thông tin trong ct “name” ca
bng “clients”.

Mnh  WHERE g&i hàm XMLEXISTS, ch- nh rõ biu thc XPath yêu cu DB2 tìm
phn t “zip” có giá tr 95116.

Mnh  “$c/Client/Address” xác nh ng d%n bên trong cây cu trúc ca tài
liu XML  DB2 có th tìm ra phn t “zip”. Ký t $ c dùng  khai báo “c” là mt
bin. Bin “c” này sau ó c nh ngh'a bng câu lnh passing clients.contact as “c”.


Trong ó “clients” là tên bng và “contact” là tên ct có kiu d liu XML. Nói cách khác,
chúng ta ang a tài liu XML vào bin “c”.

DB2 kim tra d liu XML trong ct “contact”, duyt t* nút “Client” xung nút “Address”,
cui cùng là nút “zip” và xác nh xem khách hàng có sng  vùng có mã vùng ó
không. Nu thy, hàm XMLEXISTS tr v “true” và DB2 ly ra tên khách hàng tng
ng.

Ví d 2:
Chúng ta suy ngh' xem làm cách nào to ra c m%u báo cáo g+m danh sách a ch-
th in t ca nhng khách hàng “Vàng” (có trng thái “Gold”). Câu truy vn di ây
có th gii quyt vn  này:

SELECT xmlquery(‘$c/Client/email’ passing contact as “c”)
FROM clients
WHERE status = “Gold”

Dòng u tiên nói rng ta mun ly ra phn t là a ch- th in t ca tài liu XML ch
không mun ly ra ct d liu. Tng t ví d trc, tài liu XML c lu trong bin
“$c”. Trong ví d này, hàm XMLQUERY có th c s dng sau mnh  SELECT,
trong khi hàm XMLEXISTS c s dng sau mnh  WHERE.

Ví d 3:
Có trng hp bn mun trình bày d liu XML theo dng bng, ta có th làm c
iu này bng cách s dng hàm XMLTABLE.

Nhp môn H qun tr c s d liu DB2

190
SELECT t.comment#, i.itemname, t.customerID, Message

FROM items I,
xmltable(‘$c/Comments/Comment’ passing i.comments as “c”
columns Comment# integer path ‘CommentID’,
CustomerID integer path ‘CustomerID’,
Message varchar(100) path ‘Message’) AS t

Dòng u tiên cho bit nhng ct nào s, xut hin trong t#p hp kt qu (results set).
Nhng ct bt u bng “t” là c s trên các giá tr ca phn t XML.

Dòng tip theo g&i hàm XMLTABLE  xác nh rõ ct XML ca DB2 s, cha d liu mà
ta cn (“i.comments”) và ng d%n n phn t ó trong tài liu XML, là nhng phn t
mong mun.

T* dòng 4 n 6 là mnh  “columns”, xác nh nhng phn t XML c th nào s,
c ánh x tng ng vi nhng ct trong bng kt qu ca câu lnh SQL  dòng 1.
Phn ánh x này có s tham gia ca kiu d liu mà các giá tr ca các phn t XML s,
chuyn i thành. Trong ví d này, tt c d liu XML u c i thành kiu d liu
vn có ca SQL.

Ví d 4:
Bây gi ta s, thc hin mt ví d n gin có s dng biu thc XQuery FLWOR bên
trong hàm XMLQUERY SQL/XML.

SELECT name, xmlquery(
‘for $e in $c/Client/email[1] return $e’
passing contact as “c”
)
FROM clients
WHERE status = ‘Gold’


Dòng th nht xác nh rng bng kt qu ca câu truy vn bao g+m tên khách hàng và
kt qu tr v t* hàm XMLQUERY. Dòng th hai cho bit phn t “email” u tiên ca
phn t “Client” s, c tr v. Dòng th ba ch- ngu+n d liu XML (ct “contact”).
Dòng th t cho ta bit ct này  bng “client”; và dòng nm ch- ra khách hàng “vàng” là
quan tâm ca chúng ta.

Ví d 5:
Ví d này minh h&a li hàm XMLQUERY có s dng biu thc XQuery FLWOR, nhng
ln này ta không ch- tr v d liu XML mà còn c HTML.

SELECT xmlquery (‘for $e in $c/Client/email[1]/text()
return <p>{$e}</p>’
passing contact as “c”
)
FROM clients
WHERE status = ‘Gold’

Mnh  return ca XQuery cho phép bin i d liu XML u ra theo yêu cu. S
dng hàm text()  dòng u tiên ch- ra rng ta ch- quan tâm n biu di0n vn bn
a ch- e-mail u tiên ca nhóm khách th"a mãn yêu cu. Dòng th hai cho bit thông
tin này s, c b&c li trong các th2 HTML (trong trng hp này là th2 <p> và </p>).

Ví d 6:
Ví d di ây minh h&a cách s dng hàm XMLELEMENT  to ra mt dãy các phn
Nhp môn H qun tr c s d liu DB2

191
t, mi phn t này li cha trong nó các phn t con (sub-element) có ni dung v ID,
tên hàng hóa và ch- s hàng hóa ti thiu trong kho (SKU) tng ng vi các ct trong
bng “items”. V c bn, ta có th dùng hàm XMLELEMENT khi mun chuyn t* d liu

quan h sang d liu XML.

SELECT
xmlelement (name “item”, itemname),
xmlelement (name “id”, id),
xmlelement (name “brand”, brandname),
xmlelement (name “sku”, sku)
FROM items
WHERE srp < 100

Kt qu xut ra ca câu truy vn trên nh sau:

<item>
<id>4272</id>
<brand>Classy</brand>
<sku>981140</sku>
</item>

<item>
<id>1193</id>
<brand>Natural</brand>
<sku>557813</sku>
</item>

Truy vn d liu XML vi XQuery
Trong phn trc, ta ã thy c cách truy vn d liu XML vi câu SQL có phn m
rng cho XML. Trng hp này, SQL là phng pháp truy vn chính, và XPath c
nhúng vào bên trong câu lnh SQL. Còn trong tip theo này, ta nói v cách s dng
XQuery  truy vn d liu XML. Lúc này, XQuery là phng pháp chính, và trong mt
s trng hp, ta s, nhúng SQL vào bên trong XQuery (bng cách s dng hàm “db2-

fn:sqlquery”). Khi thc hành vi XQuery , ta s, g&i vài hàm, s dng c biu thc
FLWOR.

Ví d 1:
Làm mt truy vn XQuery n gin là ly d liu liên lc ca khách hàng.

xquery db2-fn:xmlcolumn(‘CLIENTS.CONTACT’)

Nh luôn luôn thêm lnh “xquery” vào u biu thc XQuery  cho DB2 bit rng nó
cn s dng b phân tích (parser) XQuery. Nu không, DB2 s, cho rng bn ang c
gng thc thi biu thc SQL. Hàm db2-fn:xmlcolumn ly ct ta ch- nh trong tài liu
XML làm tham s. Câu lnh trên tng ng vi câu lnh SQL sau ây:

SELECT contact FROM clients


Ví d 2:
Ta s dng biu thc FLWOR  ly thông tin v s fax ca khách hàng.

xquery
for $y in db2-fn:xmlcolumn(‘CLIENTS.CONTACT’)/Client/fax
return $y

Nhp môn H qun tr c s d liu DB2

192
Dòng u tiên g&i b phân tích XQuery. Dòng th hai yêu cu DB2 lp ht các phn t
con fax trong ct CLIENTS.CONTACT. Mi phn t fax c lu trong bin $y. Dòng
cui cùng nói rng giá tr ca bin $y s, c tr v trong mi ln lp.


Kt qu xut ra ca câu truy vn trông ging nh sau (mc nh có th g+m a ch- ca
không gian tên (namespace) nhng  ây tôi không th hin ra, mt khác thông tin xut
có th tri ra thành nhiu dòng nên hi khó &c):

<fax>4081112222</fax>
<fax>5559998888</fax>

Ví d 3:
Ví d này tip tc truy vn d liu XML và tr v kt qu là HTML

xquery
<ul> {
for $y in db2-fn:xmlcolumn(‘CLIENTS.CONTACT’)/Client/Address
order by $y/zip
return <li>{$y}</li>
</ul>

Kt qu HTML tr v trông nh sau:

<ul>
<li>
<address>
<street>9407 Los Gatos Blvd.</street>
<city>Los Gatos</city>
<state>ca</state>
<zip>95302</zip>
</address>
</li>
<li>
<address>

<street>4209 El Camino Real</street>
<city>Mountain View</city>
<state>CA</state>
<zip>95302</zip>
</address>
</li>

</ul>

Ví d 4:
Tip theo là cách nhúng SQL vào trong XQuery bng vic s dng hàm db2-
fn:sqlquery. Hàm db2-fn:sqlquery thc thi câu truy vn SQL và ch- tr v nhng
d liu XML c ch&n. Ch- nhng câu truy vn SQL tr v d liu XML mi c
truyn vào hàm db2-fn:sqlquery.

xquery
for $y in
db2-fn:sqlquery(
‘select comments from items where srp > 100’
)/Comments/Comment
where $y/ResponseRequested = ‘Yes’
Nhp môn H qun tr c s d liu DB2

193
return (
<action>
{$y/ProductID
$y/CustomerID
$y/Message}
</action>

)

Trong ví d trên, câu truy vn SQL l&c nhng dòng d liu th"a iu kin giá tr ti ct
“srp” phi ln hn 100. T* các dòng ã l&c này ly ra ct “comments”, là ct d liu
XML. Câu lnh XQuery (hoc XPath) tip theo c áp dng cho nhng phn t con.







16.3.6 Ni (join) vi SQL/XML
Phn này s, mô t cách thc thc hin lnh JOIN gia hai ct XML ca hai bng khác
nhau, hoc gia mt ct XML và mt ct quan h. Gi s ta ã to hai bng vi các
lnh sau:

CREATE TABLE dept (unitID CHAR (8), deptdoc XML)

CREATE TABLE unit (unitID CHAR(8) primary key not null,
name CHAR(20),
manager VARCHAR(20),
. . .
)

Ta có th thc hin lnh JOIN theo mt trong hai cách

Phng pháp 1:
SELECT u.unitID
FROM dept d, unit u

WHERE XMLEXITS(
‘$e//employee[name = $n]’
passing d.deptdoc as “e”, u.manager as “m”)

Trên dòng 3 ca lnh này ch- ra rng lnh JOIN xut hin gia phn t “name” là phn
t con ca ct XML deptdoc ca bng “dept”, và ct quan h “manager” ca bng
“unit”.

Phng pháp 2:
SELECT u.unitID
FROM dept d, unit u
WHERE u.manager = XMLCAST(
XMLQUERY(‘$e//employee/name’
passing d.deptdoc as “e”)
AS char(20))

Ghi chú:
DB2 không phân bit ch in hoa và ch thng và gi nh tt c tên bng v
à
tên ct u là ch in hoa, trong khi ó XQuery li phân bit ch in hoa và ch th
ng.
Các hàm trên là hàm giao din ca XQuery (XQuery interface function) do ó tên b
ng
và tên ct truyn vào các hàm này nên là ch hoa. Truyn tên i t
ng  dng ch
thng có th gây ra li “tên i tng không xác nh” (undefined object name)
Nhp môn H qun tr c s d liu DB2

194
Trong la ch&n này, ct quan h thì  bên trái ca lnh JOIN. Nu ct có quan h  bên

trái du bng, mt ch- mc quan h có th c dùng thay cho mt ch- mc XML.
16.3.7 Ni (Join) vi XQuery
Gi s có các bng sau c to ra:

CREATE TABLE dept(unitID CHAR(8), deptdoc XML)
CREATE TABLE project(projectdoc XML)

Nu ta s dng SQL/XML, câu truy vn s, nh sau:

SELECT XMLQUERY (
‘$d/delp/employee’ passing d.deptdoc as “d”)
FROM dept d, project p
WHERE XMLEXISTS(
‘$e/dept[@deptID=$p/project/deptID]’
passing d.deptdoc as “e”, p.project as “p”)

Lnh tng ng s dng XQuery s, là:

xquery
for $dept in db2-fn:xmlcolumn(“DEPT.DEPTDOC”)/dept
for $proj in db2-
fn:xmlcolumn(“PROJECT.PROJECTDOC”)/project
where $dept/@deptID = $proj/deptID
return $dept/employee

Phng pháp th 2 này d0 phiên dch hn – bin “$dept” mang tài liu XML ca ct
XML “deptdoc” ca bng “dept”. Bin “$proj” mang tài liu XML ca ct XML “projectdoc”
ca bng “project”. Nh v#y dòng 4 thc hin lnh JOIN gia mt thuc tính ca tài liu
XML u tiên và mt phn t ca tài liu XML th hai.
16.3.8 Các lnh cp nht và xóa

Các lnh c#p nh#t và xóa d liu XML có th c thc hin bng mt trong hai cách:
- S dng câu lnh SQL UPDATE và DELETE
- G&i th tc DB2XMLFUNCTION.XMLUPDATE

Trong c hai trng hp, c#p nh#t hoc xóa tác ng  mc tài liu; th#t v#y, toàn b
tài liu XML c thay th vi mt ln c#p nh#t. Ví d, nu trong ví d di ây ta mun
thay th phn t <state>, toàn b tài liu XML trên thc t b thay th.

UPDATE clients SET contact=(
xmlparse (documment
‘<Client>
<address>
<street>5401 Julio ave.</street>
<city>San Jose</city>
<state>CA</state>
<zip>95116</zip>
</address>
<phone>
<work>4084633000</work>
<home>4081111111</home>
<cell>4082222222</cell>
</phone>
Nhp môn H qun tr c s d liu DB2

195
</Client>’)
)
WHERE id = 3227
16.3.9 Ch, mc XML
Trong mt tài liu XML, các ch- mc có th c to ra theo các phn t, thuc tính

hoc giá tr (vn bn). Sau ây là mt s ví d, gi s bng sau ã c to:

CREATE TABLE customer(info XML)

Và gi s h+ s sau ã c lu trong bng này:

<customerinfo Cid=”1004”>
<name>Matt Foreman</name>
<addr country=”Canada”>
<street>1596 Baseline</street>
<city>Toronto</city>
<state>Ontario</state>
<zip>M3Z-5H9</zip>
</addr>
<phone type=”work”>905-555-4789</phone>
<phone type=”home”>416-555-3376</phone>
<assistant>
<name>Peter Smith</name>
<phone type=”home”>416-555-3426</phone>
</assistant>
</customerinfo>

1) Lnh này to mt ch- mc thên thuc tính “Cid”

CREATE UNIQUE INDEX idx1 ON customer(info)
GENERATE KEY USING
xmlpattern ‘/customerinfo/@Cid’
AS sql DOUBLE

2) Lnh này to mt ch- mc trên phn t “name”


CREATE UNIQUE INDEX idx2 ON customer(info)
GENERATE KEY USING
xmlpattern ‘/customerinfo/name’
AS sql VARCHAR(40)


3) Lnh này to mt ch- mc trên m&i phn t “name”

CREATE UNIQUE INDEX idx3 ON customer(info)
GENERATE KEY USING
xmlpattern ‘//name’
AS sql VARCHAR(40)


4) Lnh này to mt ch- mc trên toàn b vn bn (tt c các giá tr). /ây là lnh không
nên dùng, nó quá tn kém  duy trì ch- mc khi thc hin các lnh c#p nh#t, xóa
hoc chèn, và ch- mc s, rt ln

Nhp môn H qun tr c s d liu DB2

196
CREATE UNIQUE INDEX idx4 ON customer(info)
GENERATE KEY USING
xmlpattern ‘//text()’
AS sql VARCHAR(40)
Nhp môn H qun tr c s d liu DB2

197
Bài tp nhanh #12 – SQL/XML và XQuery


Mc ích

Bn ã thy nhiu ví d v cú pháp ca SQL/XML và XQuery và ã c gii thiu
trong DB2 Command Editor và công c DB2 Developer Workbench. Trong bài t#p này,
bn hãy kim tra s hiu bit ca bn v SQL/XML và XQuery bng vic thc hành vi
các công c này. Ta s, s dng c s d liu “mydb” c to ra bng vic s dng
tp kch bn table_creation.txt mà chúng ta ã gii thích trong các chng trc.

Th tc

1. To c s d liu “mydb” và np d liu XML, nh ã trình bày  chng trc
2. S dng hoc Ca s lnh hoc DWB:
a. Tìm ra tt c các ni dung chú thích (comments) trong tài liu XML trong
bng ITEMS bng hai cách, ch- s dng XQuery
b. Ti sao khi ta s dng lnh SQL sau li không a ra cùng kt qu?

SELECT comments FROM items

c. Tìm ra ID và BRANDNAME ca các bn ghi mà tài liu XML ca nó có giá
tr ca trng ResponseRequested là “No”

Li gii

2a)
xquery db2-fn:xmlcolumn(‘ITEMS.COMMENTS’)
xquery db2-fn:sqlquery(“select comments from items”)

2b)
Kt qu khác nhau là vì SQL tr li giá tr NULL khi không có giá tr, còn XQuery

không tr li gì c.

2c)
SELECT id, brandname FROM items WHERE
XMLEXISTS(‘$c/Comments/Comment[ResponseRequested=”No”
passing ITEMS.COMMENTS as “c”
Nhp môn H qun tr c s d liu DB2

198
17
Chng 17 – Phát trin vi Java, PHP và Ruby

Chng này s, tho lu#n nhng vn  c bn ca vic phát trin ng dng trong Java,
PHP và Ruby trên nn Rails s dng mt máy ch DB2. Mc ích ca chng này
không nhm hng d%n v các ngôn ng trên, nhng nó cung cp thông tin thích hp
trong vic s dng chúng vi DB2.
17.1 Phát trin ng dng b6ng Java
Trình iu khin IBM DB2 cho JDBC (c bit n nh trình iu khin JCC) c
xem là ti u i vi các máy ch DB2 trên tt c các nn tng. Tp db2jcc.jar
(com.ibm.db2.jcc) bao g+m trình iu khin kiu 2 và kiu 4. Tp db2jcc.jar c.ng bao
g+m bt c máy khách DB2 nào, hoc nó có th c thy (trình iu khin IBM DB2
cho JDBC và SQLJ) t* trang web DB2 Express-C (ibm.com/db2/express)
17.1.1 Trình iu khin JDBC kiu 2 (type 2)
Trình iu khin JDBC kiu 2 yêu cu mt máy khách DB2 ã c cài t ni mà ng
dng JDBC s, thc thi. Hình 17.1 minh h&a mt ng dng JDBC s dng trình iu
khin kiu 2.



Hình 17.1 – Trình iu khin JDBC kiu 2


Hình 17.2 a ra mt on mã lnh cho ta thy làm th nào  thit l#p mt kt ni s
dng trình iu khin JDBC kiu 2. Lu ý là URL không bao g+m hostname hoc thông
tin v cng bi vì iu này c thc hin t* máy khách DB2.
Nhp môn H qun tr c s d liu DB2

199

Hình 17.2 – Thit lp mt kt ni s" dng trình iu khin JDBC kiu 2
17.1.2 Trình iu khin JDBC kiu 4
Trình iu khin JDBC kiu 4 không yêu cu mt máy khách phi kt ni n mt máy
ch DB2. Hình 17.3 minh h&a mt ng dng JDBC s dng trình iu khin kiu 4.


Hình 17.3 – Trình
iu khin JDBC kiu 4

Hình 17.4 a ra mt on mã lnh cho ta thy làm th nào  thit l#p mt kt ni s
dng trình iu khin JDBC kiu 4. Lu ý là URL bao g+m c hostname hoc thông tin
v cng.

Nhp môn H qun tr c s d liu DB2

200
Hình 17.4 – Thit lp mt kt ni s" dng trình iu khin JDBC kiu 4

17.2 Phát trin ng dng b6ng PHP
PHP (PHP Hypertext Preprocessor) là mt ngu+n m, là ngôn ng kch bn c l#p v
nn tng c thit k cho vic phát trin ng dng Web. /ó là mt trong nhng ngôn
ng web c trin khai rng rãi nht trên th gii hin nay. Tính ph bin ca PHP da

trên các c trng ca ngôn ng:

- Nhanh, d0 h&c t* thp n cao
-
Mnh, tính thc thi cao và kh chuyn

-
6n nh và an toàn

-
Mt s la ch&n i vi J2EE và .NET trên nn Web.

-
D0 dàng tích hp vào các môi trng/h thng không thun nht.

-
/c chng t" thông qua trin khai rng rãi

-
To nên mt cng +ng y sc sng


PHP là b ph#n ca LAMP (vit tt ca các t* Linux, Apache HTTP Server, MySQL,
PHP / Perl / Python). /ây là mt nhóm công ngh web mã ngu+n m, thng s)n có
trên các nhà cung cp (ISP) vi giá hp lý.
17.2.1 La chn kt ni DB2 cho PHP
IBM h tr truy xut n c s d liu DB2 t* các ng dng PHP thông qua hai phn
m rng.

ibm_db2:

Phn m rng ibm_db2 a ra mt giao din l#p trình th tc ng dng cho phép to,
&c, c#p nh#t và ghi các thao tác c s d liu thêm vào ó m rng truy xut n siêu
c s d liu. Nó có th c biên dch  làm vic vi PHP 4 hoc PHP 5. Phn m
rng s)n có t* kho th vin PECL di s cho phép ca Apache 2.0. Nó c IBM phát
trin và h tr. Có y  các c tính h tr cho các th tc lu tr và LOBs, nhanh, và
c ti u cho DB2.

PDO_ODBC:
PDO_ODBC là trình iu khin cho phn m rng ca Các i tng d liu PHP (PHP
Data Objects - PDO), và s)n sàng truy c#p n c s d liu DB2 thông qua mt giao
din c s d liu hng i tng ã c th tc hóa trong PHP 5.1. Nó có th
tng thích ngc vi các th vin ca DB2 mt cách t ng. Nó cung cp mt giao
din truy xut d liu tiêu chu n cho PHP. Nhanh chóng, nh7 nhàng, và hng i
tng. Phn m rng PDO_ODBC s dng các th vin DB2  truy xut mt cách t
nhiên, và nó ã c xây dng trong PHP 5.1. Có th tham kho thêm ti:




Kt ni n mt c s d liu DB2 cha phân loi (uncalalogued)
/on mã 17.1 cho thy làm th nào  kt ni n c s d liu DB2 s dng mt trong
hai phn m rng ã c mô t  trên.

Nhp môn H qun tr c s d liu DB2

201

*on mã 17.1 – Kt ni n mt c s d liu bên ngoài

/on mã 17.2 cung cp mt ví d cho mt ng dng PHP n gin s dng phn m

rng ibm_db2


*on mã 17.2 – Mt ng dng PHP n gin s" dng phn m rng ibm_db2

Cu hình PHP cho jbm_db2
Trong Linux hoc UNIX bn cn thay i tp php.ini nh sau:

extension=ibm_db2.iso
ibm_db2.instance_name=<instance name>

/i vi Windows, thay i tp php.ini nh sau:

extension=php_ibm_db2.dll

Tip theo, bn có th ti và cài t b ng dng Zend Core for IBM s, c mô t
trong phn tip theo, và *ng ngi v các vng mc  cu hình này.
17.2.2 4ng dng công ngh Zend Core dành cho IBM
Zend [Core] là b công c PHP hoàn ch-nh cho môi trng phát trin và sn xut các
ng dng web ti quan tr&ng cho doanh nghip. Zend [Core] th hin s tin c#y, hiu
qu và s linh hot cn thit cho vic v#n hành nhng ng dng PHP. Zend [Core] có
th c ti v ti a ch- sau:
Zend [Core] cho IBM bào g+m cài t DB2 và máy khách IDS, mt máy ch HTTP ca
Apache (tùy ch&n), PHP5 và mt s th vin ph bin kèm theo bao g+m: ibm_db2,
PDO_INFOMIX. Zend [Core] cho IBM c.ng có th cài t máy ch DB2 Express-C, máy
ch IBM Cloudscape
TM
, b hng d%n s dng PHP, và mt s ng dng ví d trên
DB2. Zend [Core] th hin s tin dng và cài t môi trng PHP mt cách d0 dàng,
xem hình minh h&a 17.5, 17.6 và 17.7.

Nhp môn H qun tr c s d liu DB2

202

Hình 17.5 – C"a s qun lý và iu khin ca Zend [Core]


Hình 17.6 – C"a s cu hình PHP ca Zend [Core]
Nhp môn H qun tr c s d liu DB2

203

Hình 17.7 – C"a s cu hình PHP ca Zend
17.3 Phát trin ng dng Ruby trên nn Rails
Ruby là mt ngôn ng kch bn hng i tng, ng và a nn da trên mã ngu+n
m. Ruby giúp cho phát trin các ng dng mt cách d0 dàng, nhanh chóng và còn bao
g+m t#p hp các th vin rt phong phú. Ruby là ngôn ng l#p trình n gin, g&n nh7
c phát trin bi Yukihiro Matsumoto (“Matz”) vào nm 1995.

Rails là mt b khung hoàn ch-nh cho vic phát trin các ng dng web da trên c s
d liu do Ruby phát trin. Rails cài t kin trúc model-view-controller (MVC). Rails ni
lên nh là mt trong nhng khung phát trin ng dng web mnh nht k t* nm 2004
do David Heinemeier Hansson phát trin.
17.3.1 B công c phát trin DB2 trên nn Rails
IBM nh#n ra c tm quan tr&ng ca Ruby trên nn Rails trong cng +ng phát trin
ng dng web. Chính vì lý do ó mà IBM ã to ra b công c phát trin DB2 trên nn
Rails (Startup Toolkit for DB2 on Rails). /ây là b cài t c tích hp li  to nên
mt môi trng phát trin DB2 bng Ruby trên nn Rails. B công c này có th
download ti a ch-:


B công c này bao g+m:

 B cài t
 Hng d%n cài t và cu hình Ruby và Rails
 B cài t DB2 – Express C 9 và b công c kèm theo
 Các trình iu khin (driver) cho DB2 Ruby và b thích hp cho DB2 Rails
 Ví d và bài t#p


Nhp môn H qun tr c s d liu DB2

204
A
Ph lc A – G/ ri

Trong phn này, chúng ta s, nói v cách làm th nào 0 gii quyt (g( ri) nhng vn
 có th gp phi khi làm vic vi DB2. Hình A.1 cung cp mt s + tng quan v
nhng vic chúng ta nên làm khi gp s c.






























Hình A.1 - Tng quan v vic g/ ri
A.1 Thêm thông tin v mã các li
/ thu th#p c nhiu thông tin hn t* on mã li mà chúng ta nh#n c hãy nh#p
mã li mà bn nh#n c vi du ch m h"i (?) vào vùng nh#p lnh và nhn vào nút
Execute, nh trong hình A.2 di ây

Nhp môn H qun tr c s d liu DB2

205


Hình A.2 - Tìm kim thông tin v on mã b$ li


Du chm h"i (?) s, g&i n trình tr giúp (Help) ca DB2. Di ây là mt s ví d v
kích hot trình help, ví d nh#n c mã li SQL là “-104”. Tt c nhng ví d di ây
là tng ng

db2 ? SQL0104N
db2 ? SQL104N
db2 ? SQL – 0104
db2 ? SQL – 104
db2 ? SQL – 104N
A.2 SQLCODE and SQLSTATE
Mt SQLCODE là mã nh#n c sau khi m&i câu lnh SQL ã c chy. Ý ngh'a ca
các giá tr nh sau:

SQLCODE = 0; lnh thành công
SQLCODE > 0; lnh thành công nhng chng trình có cnh báo
SQLCODE < 0; lnh không thành công và tr v mt li

SQLSTATE g+m 5 ký t, chui này tuân theo chu n ISO/ANSI SQL92. Hai ký t u
tiên cho ta bit mã lp SQLSTATE
00: lnh thành công
01: có cnh báo
02: không tìm thy iu kin
Tt c các mã lp khác c xem nh có li
A.3 Nht ký khai báo qun tr$ DB2
Nh#t ký khai báo qun tr cung cp công c dùng  ch n oán thông tin v các li ti
các im phát sinh li. 4 h iu hành Linux/Unix thì nh#t ký thông báo qun tr
(Administration Notification) là mt tp vn bn <tên th hin>.nfy (ví d “db2inst.nfy”). 4
h iu hành Windows, tt c các khai báo qun tr u c ghi vào Windows Event
Log.
Nhp môn H qun tr c s d liu DB2


206

Tham s cu hình DBM notifylevel cho phép ngi qun tr ch- ra mc  thông tin
c ghi li

0 - không có khai báo qun tr nào c gi li (không khuyn khích)
1 - li nng hoc không th phc h+i
2 - hành ng cn c thc hin ngay l#p tc
3 - thông tin quan tr&ng, không cn hành ng ngay l#p tc (mc nh)
4 - thông ip
A.4 db2diag.log
Db2diag.log cung cp thông tin chi tit hn v nh#t ký khai báo qun tr DB2. Nó thng
ch- c s dng bi nhân viên h tr k$ thu#t DB2 hay ngi qun tri có kinh nghim.
Thông tin  trong db2diag.log bao g+m:

- V trí ca mã DB2 phát sinh li
- Mt chng trình nh#n dng, cho phép bn có th so sánh nhng dòng ca
ng dng trên tp db2diag.log trên náy ch và máy khách.
- Mt thông ip ch n oán (bt u bng “DIA”) gii thích nguyên nhân ca li
- Các d liu h tr s)n có, nh là cu trúc d liu SQLCA và con tr" n v trí
ca kt xut hoc tp b%y

4 Windows, db2diag.log c cha trong mt th mc mc inh:

C:\Program Files\IBM\sqllig\<instance name>\db2diag.log

4 Linux/Unix db2diag.log c cha trong th mc mc nh:

/home/<instance_ owner>/sqllid/db2trum/db2diag.log


Ý ngh'a ca ch n oán c quyt nh bi tham s cu hình dbm cfg DIAGLEVEL.
Cp  t* 0 n 4, 0 là ít ý ngh'a nht và 4 là cao nht, mc nh là 3
A.5 Theo vt CLI
Vi CLI và các ng dng Java, bn có th b#t tin ích theo vt CLI  khc phc nhng
s c cho nó. /iu này có th c làm bng cách sa i tp db2cli.ini  máy ch, ni
mà ng dng ca bn ang chy. Nhng trng c trng ca db2cli.ini c ch- ra
bên di:



Theo vt  mc thp c.ng s)n có (db2trc), nhng nó thng c nhân viên h tr k$
thu#t s dng.
A.6 Khc phc và s"a li trong DB2
/ôi khi mt li mà bn thình lình gp phi li là nguyên nhân ca mt s c (li) ca
DB2. IBM s, u n phát hành nhng bn sa li (Fixpacks)  sa cha nhng li ó
(APARs). Trong tp vn bn ca bn sa li có cha danh sách nhng li mà nó sa
cha c. Khi phát trin mt ng dng mi chúng ta nên c#p nh#t nhng bn sa li
mi nht  tránh nhng vn  có th xy ra trong khi làm vic. / xem phiên bn hin
Nhp môn H qun tr c s d liu DB2

207
ti ca bn sa li, ch&n About t* trình n Help, t* ca s lnh gõ “db2level”. Lu ý
rng, bn sa li và s h tr t* IBM ch- có hiu lc trong DB2 Express–C khi bn mua
bn quyn 12 tháng


Ngun tài nguyên

Các trang web

1.1. Trang web chính thc ca DB2 Express-C:
www.ibm.com/db2/express
Website này cho phép bn download các file cài t cho máy ch DB2, máy khách
DB2, các driver dành cho DB2, bn c.ng có th tìm thy các hng d%n s dng,
hoc tìm &c blog ca nhóm phát trin DB2, ng ký  nh#n email ti ây.

1.2. Di0n àn DB2 Express:

Bn có th s dng Di0n àn này  ng ti các vn  v k$ thu#t mi khi bn
không th t mình tìm thy câu tr li cho các vn  ó.

1.3. Trung tâm d liu DB2

Trung tâm d liu cung cp ngu+n tài liu hng d%n trc tuyn. /ây là ngu+n tài
nguyên c c#p nh#t mt cách thng xuyên nht.

1.4. developerWorks

Website này là mt ngu+n tài nguyên tuyt vi cho nhng ngi phát trin và
nhng ngi qun tr h thng c s d liu tìm thy c nhiu bài vit, bài
hng d%n, v.v… hoàn toàn mi0n phí.

1.5. alphaWorks

Website này cho phép bn truy xut trc tip vào các công ngh ni tri ca IBM.
/ây là ni bn có th tìm thy nhng công ngh mi nht t* Phòng Nghiên cu ca
IBM.

1.6. planetDB2


/ây là ni t#p hp nhiu blog ca nhng ngi phát trin DB2.

1.7. H tr k$ thu#t DB2
Nu bn ã ng ký h tr k$ thu#t 12 tháng t* DB2 Express-C, bn có th
download các bn vá li t* Website này:

Nhp môn H qun tr c s d liu DB2

208
Sách
1. Free Redbook: DB2 Express-C: The Developer Handbook for XML, PHP, C/C++,
Java, and .NET
Whei-Jen Chen, John Chun, Naomi Ngan, Rakesh Ranjan, Manoj K. Sardana,
Tháng 8 nm 2006 – SG24-7301-00


2. Understanding DB2 – Learning Visually with Examples V8.2
Raul F. Chong, Clara Liu, Sylvia Qi, Dwaine Snow.
Tháng 1 nm 2005 – ISBN: 0-13-185916-1

3. DB2 9: pureXML overview and fast start
Cynthia M. Saracco, Don Chamberlin, Rav Ahuja
Tháng 1 nm 2006 – SG24-7298

4. DB2® SQL PL: Essential Guide for DB2® UDB on Linux™, UNIX®, Windows™,
i5/OS™, and z/OS®, 2
nd
Edition
Zamil Janmohamed, Clara Liu, Drew Bradstock, Raul Chong, Michael Gao, Fraser
McArthur, Paul Yip

ISBN: 0-13-100772-6

5. Free Redbook: DB2 pureXML Guide
Whei-Jen Chen, Art Sammartino, Dobromir Goutev, Felicity Hendricks, Ippei Komi,
Ming-Pang Wei, Rav Ahuja, Matthias Nicola.
Tháng 8 nm 2007.


6. Information on Demand – Introduction to DB2 9 New Features
Paul Zikopoulos, George Baklarz, Chris Eaton, Leon Katsnelson
ISBN-10: 0071487832
ISBN-13: 987-0071487832

7. Redbook: Developing PHP Applications for IBM Data Servers.
Whei-Jen Chen, Holger Kirstein, Daniel Krook, Kiran H Nair, Piotr Pietrzak
Tháng 5 nm 2006 – SG24-7218-00


Email liên h
Hp th DB2 Express-C:
Hp th DB2 dành cho các trng /i h&c:
Nhp môn H qun tr c s d liu DB2

209










B t u vi DB2 không th nào d dàng hn. *c cun sách này :

- Tìm thy tt c nhng iu v DB2 Express-C.
- Hiu v kin trúc ca DB2, các công c và bo m#t DB2.
- H&c cách qun tr C s d liu DB2.
- Vit mã SQL, XQuery.
- Phát trin chng trình ng dng s dng c s d liu DB2.
- Luyn t#p bng nhng bài t#p thc hành.
- Chu n b cho k thi DB2 trong trng.

S phát trin nhanh chóng ca XML, Web 2.0, và SOA ã d%n n nhng nhu cu v
mt loi h qun tr d liu lai mang tính cách tân. DB2 Express-C ca IBM là mt h
qun tr d liu mi0n phí, không gii hn, và là c s d liu LAI có kh nng qun tr c
XML và d liu quan h thun túy mt cách d0 dàng. Mi0n phí ngh'a là DB2 Express-C
có th c t do ti v, t do  bn xây dng ng dng, t do trin khai sn ph m,
và t do phân phi li các gii pháp ca bn. Và, DB2 không t mt gii hn nào cho
kích thc d liu, s lng d liu, hoc s lng ngi s dng.

DB2 Express-C chy trên h thng Windows và Linux và h tr nhiu ngôn ng l#p trình
khác nhau, bao g+m c C/C++, Java, .NET, PHP, Perl, và Ruby. Nhng h tr trc
tuyn c.ng có th c ng ký vi giá thp. Nu bn mun có nhiu chc nng cao
cp hn na i vi mt h qun tr c s d liu, bn có th d0 dàng trin khai nhng
ng dng ã c xây dng bng DB2 Express-C lên nhng n bn DB2 khác nh
DB2 Enterprise.

;n bn DB2 mi0n phí này rt lý tng cho nhng ngi phát trin, nhng ngi t vn,
nhng ngi bán phn mm c l#p, các qun tr viên c s d liu, sinh viên, hoc bt

k ai có ý nh phát trin, th nghim, trin khai, hoc phân phi các ng dng v c s
d liu. Hãy tham gia vào s phát trin ca cng +ng nhng ngi s dng DB2
Express-C ngay hôm nay. Bn s, khám phá ra cách hoàn toàn mi  to ra chng
trình ng dng, c.ng nh cách phát trin nhng gii pháp t phá.

×