Transcript
Page 1: DB2 9.7 Chay Cac Ung Dung Oracle Trên DB2 9.7 Cho Linux Va UNIX Hay Windows

DB2 9.7: Ch�y các �ng d�ng Oracle trên DB2 9.7 cho Linux, UNIX và Windows ������������� ������������������� ��������������������� ��!"��#�$%����&����'�()��!"��*���+�,-./0-�(1���2��3�4���

M�c ��: Trung bình

Serge Rielau, Ki�n trúc s� SQL, STSM, IBM

06 11 2009

IBM® DB2® 9.7 cho Linux®, UNIX® và Windows® có s� h� tr� sn sàng cho các ph�ng ng� SQL c�a Oracle và PL/SQL. i�u này cho phép nhi�u �ng d�ng �ã vi�t theo Oracle ���c th�c hi�n theo DB2. Trong bài vi�t này, hãy �ón nh�n m�t t�ng quan m�c cao v� kh� n�ng t�ng thích Oracle có ngh�a là gì trong DB2. Cho dù b�n mu�n chuy�n �ng d�ng tùy ch�nh c�a b�n sang DB2 ho�c m� r�ng s� h� tr� c�a nhà cung c�p DBMS c�a b�n sang DB2, thì bây gi� là lúc c�a b�n.

��ng l�c

Tháng 3 v�a r�i, t�i m�t cu�c thuy�t trình CeBIT mà tôi �ã t� ch�c v� DB2 9.7, tôi �ã ��t cháy m�t b� loa máy tính 110V do tôi �ã không th�n tr ng c!m nó vào l�"i �i�n 230V c�a n�"c �c mà không cho qua m�t bi�n áp. Trong cùng chuy�n �i �ó, tôi c#ng �ã phá h$ng b� s�c �i�n cho bàn ch�i �ánh r�ng ch�y �i�n c�a tôi và máy c�o râu c�a tôi v"i các s� c� t�ng t�. B$ qua s� b�t l�c c�a tôi nh� là bài h c t� các sai l%m sang m�t bên, vi�c này x�y ra nh� không có gì b�t ng� �úng nh� m�t trong các câu châm ngôn yêu thích c�a tôi (không rõ ngu�n g�c) là "V�n �� v"i các tiêu chu&n là có bao nhiêu tiêu chu&n".

Trong th� gi"i c�a các h� th�ng qu�n lý c s� d� li�u quan h� (RDBMS), chúng tôi may m!n có ít nh�t ba tiêu chu&n chính và vô s� các s� thay ��i theo các tiêu chu&n �ó:

� ANSI SQL và ANSI SQL/PSM � Oracle SQL và PL/SQL � Sybase và Microsoft TSQL

Hình 1 mô t� b'ng m�t s �� Venn cách các ph�ng ng� SQL ch�ng lên nhau:

Hình 1. S� h� lo�n Babylon c�a SQL

B�t c� khi nào b�n vi�t m�t �ng d�ng, b�n ph�i ti�n hành l�a ch n s( d�ng nhà cung c�p RDBMS nào. M�t khi b�n �ã th�c hi�n s� l�a ch n �ó, v� c b�n b�n ���c cam k�t. B�t k) c� g!ng nào �� chuy�n ��i các nhà cung c�p �� t�n d�ng giá th�p hn, công ngh� t�t hn ho�c quan h� ��i tác t�t hn b* c�n tr� do mã th�a k� c%n ���c vi�t l�i nhi�u hn, tr�"c khi nó có th� ���c dùng v"i m�t RDBMS khác. Ngoài ra, b� k+ n�ng c�a b�n không th� chuy�n t� m�t s�n ph&m này sang m�t s�n ph&m khác d, dàng nh� b�n mong ��i.

Page 1 of 15DB2 9.7: Ch�y các �ng d�ng Oracle trên DB2 9.7 cho Linux, UNIX và Windows

Page 2: DB2 9.7 Chay Cac Ung Dung Oracle Trên DB2 9.7 Cho Linux Va UNIX Hay Windows

IBM DB2 9.7 cho Linux, UNIX và Windows (DB2) nh'm h� th�p �áng k� nh�ng rào c�n này cho các �ng d�ng ���c vi�t cho Oracle khi cho phép các �ng d�ng �ó chuy�n sang DB2. i�u này cung c�p cho các khách hàng và các nhà cung c�p kh� n�ng l�a ch n m�t DBMS ��a theo s� xu�t s!c c�a nó, ch� không theo l*ch s( �ng d�ng.

DB2 9.7 b� sung thêm các tính n�ng tng thích c�a Oracle

� cho phép m�t �ng d�ng ���c vi�t cho m�t RDBMS ch�y trên n�n khác g%n nh� không c%n thay ��i, nhi�u �o�n mã ph�i n'm �úng v* trí. Các c ch� khóa, các ki�u d� li�u, SQL, ngôn ng� theo th� t�c khác nhau n'm trên máy ch� và th�m chí c� các giao di�n khách hàng ���c chính �ng d�ng s( d�ng c%n ph�i ���c liên k�t không ch� theo cú pháp, mà còn theo ng� ngh�a.

T�t c� các b�"c này �ã ���c th�c hi�n trong DB2. Các thay ��i là ngo�i l�, không ph�i là quy lu�t (IBM có th� nhanh chóng �ánh giá các thay ��i c�a �ng d�ng c%n thi�t). B�ng 1 cung c�p m�t t�ng quan ng!n g n v� các tính n�ng th��ng ���c s( d�ng:

B�ng 1. Các tính n�ng th��ng �c s� d�ng

V"i DB2 9.7, b�n không c%n chuy�n m�t �ng d�ng n�a. B�n ch� kích ho�t �ng d�ng. Trong tr��ng h�p c�a m�t �ng d�ng �óng gói, nó có th� chia s- m�t ngu�n cho c� hai DB2 và Oracle.

Nói cách khác, vi�c cho phép m�t �ng d�ng Oracle chuy�n sang DB2 không tr� nên ph�c t�p hn vi�c kích ho�t m�t Ch�ng trình-C ���c vi�t cho HP-UX �� ch�y trên AIX.

�i�u khi n tng tranh

Trong quá kh�, m�t trong nh�ng s� khác bi�t n�i b�t nh�t gi�a Oracle và DB2 là cách ti�p c�n �� ki�m soát �i�u khi�n t�ng tranh. Các c�m t� d, nh" là: "Nh�ng ng��i � c không c�n tr� nh�ng ng��i vi�t và nh�ng ng��i vi�t không c�n tr� nh�ng ng��i � c".

B�ng 2. Hành vi t� ng tranh c�a Oracle

Không �i vào chi ti�t v� các m�c cô l�p, ch� c%n nói r'ng �a s� các �ng d�ng có s( d�ng S� cô l�p m�c câu l�nh (Statement Level Isolation) m�c �*nh c�a Oracle s. ch� làm vi�c t�t khi s( d�ng m�c �*nh c�a DB2 v� S� �n �*nh c�a con tr$ (Cursor Stability-CS).

Tuy nhiên, theo truy�n th�ng, CS �ã ���c tri�n khai sao cho nh�ng ng��i vi�t ng�n ch�n nh�ng ng��i � c và trong m�t s� tr��ng h�p, nh�ng ng��i � c có th� ng�n ch�n nh�ng ng��i vi�t. Lý do là � ch�, theo truy�n th�ng, m�t giao d*ch d�"i s� cô l�p CS s. "ch� k�t qu�" c�a các thay ��i c�a m�t giao d*ch t�ng tranh �ang ch� x( lý.

B�ng 3. Hành vi t� ng tranh c�a DB2 truy�n th�ng v�i CS

������ 556 ��� i�u khi�n t�ng tranh --> H� tr� có snPh�ng ng� SQL --> H� tr� có snPL/SQL --> H� tr� có snCác gói PL/SQL --> H� tr� có snCác gói kèm theo --> H� tr� có snKhách hàng JDBC v"i các ph%n m� r�ng --> H� tr� có snK*ch b�n l�nh SQL*Plus --> H� tr� có sn

7�����8���������9�:;��< =1��(� 7�����8����)�Ng��i � c không ng�n ch�n Ng��i � cNg��i � c không ng�n ch�n Ng��i vi�tNg��i vi�t không ng�n ch�n Ng��i � cNg��i vi�t ng�n ch�n Ng��i vi�t

7�����8���������9�:;��< =1��(� 7�����8����)�

Page 2 of 15DB2 9.7: Ch�y các �ng d�ng Oracle trên DB2 9.7 cho Linux, UNIX và Windows

Page 3: DB2 9.7 Chay Cac Ung Dung Oracle Trên DB2 9.7 Cho Linux Va UNIX Hay Windows

Hóa ra là không có lý do ng� ngh�a nào là t�i sao m�t giao d*ch �ang ch�y d�"i s� cách ly CS l�i ch� k�t qu� khi g�p ph�i m�t hàng �ã thay ��i. M�t hành vi th$a �áng t�ng t� là � c các phiên b�n �ã cam k�t hi�n t�i c�a dòng �ã thay ��i.

Hành vi này �ã ���c th�c hi�n trong DB2 9.7. i�u �ã x�y ra là DB2 �n gi�n l�y ra phiên b�n hi�n �ã cam k�t hi�n t�i c�a m�t hàng b* khóa t� nh�t ký (log). Trong h%u h�t các tr��ng h�p chung, hàng �ó v/n còn n'm trong b� ��m log do s� thay ��i này v/n ch�a ���c cam k�t. Nh�ng ngay c� khi hàng �ã ���c vi�t ra và c#ng �ã b* ghi �è trong b� ��m log DB2 s. bi�t chính xác tìm nó � �âu, �� cho m�t IO s. ��a phiên b�n mong mu�n vào nhóm b� ��m (bufferpool).

Hãy t��ng t��ng (xem Hình 2) m�t ng��i dùng �ang c�p nh�t m�t tên trong m�t b�ng nhân viên. Tr�"c khi ng��i dùng �ó �ã cam k�t thay ��i, m�t ng��i dùng khác quét b�ng này. Theo truy�n th�ng, ng��i s( d�ng th� hai s. ph�i ��i cho ng��i s( d�ng �%u tiên cam k�t ho�c khôi ph�c (rollback). Nh� �c d li�u �ã cam k�t hi�n t�i, ho�t ��ng quét c�a ng��i dùng th� hai s. �n gi�n l�y ra phiên b�n c�a hàng t� b� ��m log mà nó không ch�a các thay ��i c�a ng��i s( d�ng �%u tiên.

Hình 2. Nh�ng ng��i vi�t không ng�n ch�n nh�ng ng��i �c

i�u quan tr ng c%n l�u ý r'ng hành vi này:

� Không ��a vào ��i t��ng m"i nào nh� là m�t �o�n khôi ph�c. � Không có chi phí hi�u n�ng nào cho ng��i vi�t do log c%n ph�i ���c vi�t không theo h� th�ng. � Không th� gây ra b�t c� tình hình nào nh� m�t "b�n ch�p quá c#" vì trong tr��ng h�p không ch!c có x�y ra t�p

log c%n thi�t �ã ���c l�u tr� (trong khi m�t giao d*ch v/n còn m�!), DB2 ch� �n gi�n s. khôi ph�c l�i và ��i khóa �� �i ti�p.

Ngoài nh�ng thay ��i này, các k+ thu�t tránh ph�i thêm khóa �ã ���c ��a vào DB2 �� lo�i b$ m�t ng��i � c �ang n!m gi� m�t khóa theo ch� �� cô l�p CS.

B�ng 3. Hành vi t� ng tranh c�a DB2 m�i v�i CS

Nh� b�n th�y, các hành vi t�ng tranh bây gi� gi�ng h�t v"i các hành vi c�a Oracle. Th�c t�, c s� d� li�u DB2 v�a m"i ���c t�o ra th� hi�n hành vi này theo m�c �*nh.

Ng��i � c không ng�n ch�n Ng��i � cNg��i � c hi�m khi ng�n ch�n Ng��i vi�tNg��i vi�t ng�n ch�n Ng��i � cNg��i vi�t ng�n ch�n Ng��i vi�t

7�����8���������9�:;��< =1��(� 7�����8����)�Ng��i � c không ng�n ch�n Ng��i � cNg��i � c không ng�n ch�n Ng��i vi�tNg��i vi�t không ng�n ch�n Ng��i � cNg��i vi�t ng�n ch�n Ng��i vi�t

Page 3 of 15DB2 9.7: Ch�y các �ng d�ng Oracle trên DB2 9.7 cho Linux, UNIX và Windows

Page 4: DB2 9.7 Chay Cac Ung Dung Oracle Trên DB2 9.7 Cho Linux Va UNIX Hay Windows

Các ki u d� li�u m�i

Tâm �i�m c�a m�i c s� d� li�u là d� li�u c�a nó. Các ki�u không kh"p ho�c các ng� ngh�a c�a các ki�u này không kh"p có th� tác ��ng ��n kh� n�ng cho phép m�t �ng d�ng chuy�n sang �ng d�ng RDBMS khác. Do �ó �� cho phép các �ng d�ng Oracle ch�y trên DB2, �i�u quan tr ng là ph�i h� tr� các ki�u c s� không tiêu chu&n, nh� là chu�i, các ngày tháng và các s�. Ngoài vi�c �i�u ch�nh các ki�u c s� này, có các ki�u khác, ph�c t�p hn ���c s( d�ng ph� bi�n trong PL/SQL c�a Oracle, nó �ã ���c thêm vào trong DB2 9.7..

B�ng 5. Các ki�u d� li�u DB2 m�i

T�o khuôn m�u �n và �� phân gi�i ki u

"N�u nó �i nh� m�t con v*t và nó nói nh� v*t, thì sau �ó nó ph�i là m�t con v*t".

"N�u nó �i nh� m�t con v*t và nó nói nh� v*t, thì sau �ó nó ph�i là m�t con v*t". ây là câu th%n chú c�a nhi�u ngôn ng� m"i nh� PHP và Ruby. M�i ch� là m�t chu�i và sau �ó s( d�ng nh� m�t ki�u khác d�a vào ng� c�nh. Trung thành v"i tiêu chu&n SQL và �i theo tri�t lý là s� không kh"p v� ki�u có th� là l�i mã hóa, Theo truy�n th�ng DB2 �ã �i theo các quy t!c �*nh ki�u m�nh, mà các chu�i và các s� không th� ���c so sánh � �ó, tr� khi các chu�i và các s� này là khuôn m/u rõ ràng ��i v"i các chu�i và các s� khác.

Th�t không may, khi m�t �ng d�ng Oracle s( d�ng cách �*nh ki�u y�u trong SQL c�a nó, �ng d�ng �ó �ã quên biên d*ch theo DB2 t� tr�"c. Trong DB2 9.7, vi�c t�o khuôn m/u &n (hay �*nh ki�u y�u) �ã ���c thêm vào. ó là, các chu�i và các con s� có th� ���c so sánh, gán và ho�t ��ng theo m�t cách r�t linh ho�t.

Ngoài ra, các NULL không �*nh ki�u có th� ���c s( d�ng � nhi�u v* trí, trong khi các d�u tham s� không �*nh ki�u có th� ���c s( d�ng h%u nh� � b�t k) �âu, nh� vi�c s�n sàng làm theo. ó là, DB2 s. không gi�i quy�t ki�u c�a m�t d�u tham s� cho ��n khi nó �ã th�y giá tr* th�c t� �%u tiên.

� b� sung thêm vi�c t�o khuôn m/u &n, DB2 c#ng h� tr� vi�c t�o m�c �*nh các tham s� th� t�c c#ng nh� k�t h�p các ��i s� cho các tham s� theo tên.

Th vi�n hàm l�p s�n m� r�ng trong DB2

T�t c� các RDBMS cung c�p các th� vi�n c�a các hàm �� ho�t ��ng trên d� li�u. V�n �� là không có hai hàm s( d�ng cùng tên, ngay c� khi cu�i cùng ch�c n�ng là r�t gi�ng nhau.

Ngoài vi�c t�p các hàm truy�n th�ng c�a riêng mình, DB2 bây gi� h� tr� m�t th� vi�n t�ng thích v"i Oracle. Danh sách sau cung c�p m�t t�ng quan ng!n g n, ch�a ph�i �%y ��:

>����4���? @A��B

NUMBER S� h� tr� NUMBER và NUMBER (p [, s]) �ã ���c thêm vào d�a trên DECFLOAT (v"i b�n t�ng t�c ph%n c�ng Power6) và s� th�p phân (DECIMAL).

VARCHAR2 Ho�t ��ng c�a ki�u VARCHAR2 bao g�m các chu�i r�ng �ang ���c hi�u nh� là NULL và kéo theo s� ��i chi�u phân bi�t kho�ng tr�ng.

Oracle DATE M�t c s� d� li�u trong ch� �� DATE bao g�m thành ph%n TIME ngoài ngày tháng c�a l*ch. TIMESTAMP(n) Thang �o phân s� c�a giây có th� ���c ch n b�t k) gi�a 0 (ngày + th�i gian) lên ��n 12 (pico giây).

BOOLEAN Ki�u này có th� ���c s( d�ng trong logic th� t�c, các bi�n và các tham s� cho các th��ng trình.

VARRAY S� h� tr� m�ng (ARRAY) trong các th� t�c �ã ���c m� r�ng �� h� tr� các ph�ng th�c ki�u dáng VARRAY và cú pháp.

INDEX BY Ngoài các m�ng thông th��ng, DB2 c#ng h� tr� các m�ng k�t h�p.

ROW TYPE Ki�u h�n h�p này có th� ���c s( d�ng trong các bi�n và các tham s� và nh� là m�t ph%n t( cho các m�ng và các m�ng k�t h�p.

Ref Cursor type Các con tr$ có th� ���c gán cho các bi�n ho�c chuy�n qua xung quanh khi s( d�ng các tham s�.

Page 4 of 15DB2 9.7: Ch�y các �ng d�ng Oracle trên DB2 9.7 cho Linux, UNIX và Windows

Page 5: DB2 9.7 Chay Cac Ung Dung Oracle Trên DB2 9.7 Cho Linux Va UNIX Hay Windows

� Hàm bi�n �i và hàm khuôn m�u � TO_DATE � TO_CHAR � TO_CLOB � TO_NUMBER � TO_TIMESTAMP

M�i m�t trong các hàm này h� tr� m�t t�p phong phú c�a các chu�i �*nh d�ng t�ng thích. � Phép tính s� h�c ngày tháng

� EXTRACT � ADD_MONTHS � MONTHS_BETWEEN � NEXT_DAY � C�ng (+) thêm phân s� c�a các ngày.

� Thao tác chu�i � LPAD � RPAD � INSTR � INITCAP � Các ph%n m� r�ng cho SUBSTR

� Các �c tính khác nhau � NVL � DECODE � LEAST � GREATEST � BITAND

S� ch�ng l�n �ã t�ng �áng k� trong các hàm ���c h� tr� gi�a hai s�n ph&m hàm ý m�t s� thành công c�a h�p bên ngoài ���c c�i thi�n r�t nhi�u cho phép m�t �ng d�ng Oracle chuy�n sang DB2.

H� tr� phng ng� Oracle SQL

Bài vi�t này, cho ��n nay, �ã trình bày s� t�ng tranh, các ki�u d� li�u, �*nh ki�u và các hàm. Tuy nhiên, các khác bi�t gi�a Oracle và DB2 v/n còn ti�p. Các k�t c�u th�c s� c�a các ph�ng ng� SQL, các t� khóa và các ng� ngh�a c�a chúng khác nhau trong m�t s� l�nh v�c. M�i s�n ph&m c#ng h� tr� m�t s� tính n�ng mà các s�n ph&m �n gi�n khác không có. Khi các tính n�ng này là ph� bi�n, chúng h�n ch� kh� n�ng g(i �i SQL chung ��i v"i c� hai s�n ph&m. Trong s� nhi�u c�i ti�n ngôn ng� nh$ và l"n, B�ng 6 li�t kê m�t s� �i�m n�i b�t:

B�ng 6. H� tr SQL m�i CD��E� @A��B

� qui CONNECT BY

DB2, cho ��n nay, �ã h� tr� m�t l�nh �� qui ANSI SQL. Bây gi� CONNECT BY theo �*nh d�ng Oracle �ã ���c thêm, g�m các hàm khác nhau và các c�t gi� (pseudocolumns) nh� LEVEL và CONNECT_BY_PATH.

Cú pháp (+) joinCú pháp này th�c s� b* Oracle ng�n c�n, nh�ng có nhi�u �ng d�ng và các nhà phát tri�n nh�ng ng��i v/n còn s( d�ng d�ng này c�a cú pháp OUTER JOIN.

B�ng DUAL M�t b�ng m�t hàng, m�t c�t �ã s( d�ng kh!p ni trong các �ng d�ng Oracle nh� là m�t bù nhìn (dummy).

Các c�t gi� ROWNUM C�t gi� này th��ng ���c s( d�ng �� h�n ch� s� l��ng các hàng tr� v� và �� ��m các hàng trong m�t t�p k�t qu�.

Các c�t gi� ROWID Các Rowid ���c s( d�ng �� nhanh chóng l�y ra m�t hàng mà tr�"c �ây �ã tìm th�y d�a theo �*a ch� v�t lý c�a nó.

Phép toán SQL MINUS

Trong Oracle, MINUS (Tr�) ���c s( d�ng thay cho EXCEPT (Lo�i ra) �� m�t t�p k�t qu� tr� �i t�p khác.

Page 5 of 15DB2 9.7: Ch�y các �ng d�ng Oracle trên DB2 9.7 cho Linux, UNIX và Windows

Page 6: DB2 9.7 Chay Cac Ung Dung Oracle Trên DB2 9.7 Cho Linux Va UNIX Hay Windows

i�u này hoàn thành t�ng quan v� các thay ��i ���c th�c hi�n v"i DB2 �� cho các �ng d�ng Oracle g(i �i SQL d�a vào c s� d� li�u có th� ch�y h%u nh� không thay ��i. Tuy nhiên, có các ph%n chính c�a nhi�u �ng d�ng �ang th�c hi�n t�i chính máy ch�. Ngôn ng� l�a ch n phía máy ch� cho các �ng d�ng Oracle là PL/SQL. Không có s� kh0ng �*nh nào v� tính t�ng thích có th� ���c th�c hi�n nghiêm túc mà không có s� h� tr� cho PL/SQL.

DB2 h� tr� cho PL/SQL

Thông th��ng, khi m�t �ng d�ng �ang ���c chuy�n t� m�t s�n ph&m này sang m�t s�n ph&m khác, ngôn ng� SQL và ngôn ng� th� t�c ���c d*ch t� m�t ph�ng ng� SQL sang ph�ng ng� khác. i�u này ��t ra m�t s� v�n ��:

� Mã d*ch k�t qu� có xu h�"ng r!c r�i do t� ��ng hóa và s� không ph�i h�p ��ng b� gi�a ph�ng ng� ngu�n và ph�ng ng� �ích.

� Các nhà phát tri�n �ng d�ng không quen thu�c v"i ph�ng ng� SQL �ích. i�u �ó làm cho nó khó g1 r�i mã �ã g(i �i. Theo th�i gian, vi�c b�o trì ti�p theo tr� thành m�t s� thách th�c do s� thi�u các k+ n�ng.

� Trong tr��ng h�p c�a các �ng d�ng �óng gói, vi�c d*ch c%n ph�i ���c l�p l�i cho m�i b�n phát hành m"i c�a �ng d�ng.

� Cu�i cùng, k�t qu� là m�t b�n mô ph$ng, theo �*nh ngh�a thì nó ch�y ch�m hn so v"i b�n ban �%u.

� tránh nh�ng v�n �� này, DB2 9.7 có h� tr� PL/SQL riêng. i�u này có ngh�a là gì?

Nh� b�n th�y trong Hình 3, máy DB2 bây gi� g�m m�t trình d*ch PL/SQL bên c�nh trình biên d*ch SQL PL. C� hai trình biên d*ch t�o mã máy �o cho Máy ch�y th�c th�ng nh�t SQL (Unified Runtime Engine) c�a DB2. i�u quan tr ng c%n l�u ý là các công c� theo dõi và phát tri�n nh� Optim Development Studio ���c g!n vào trong DB2 � m�c máy ch�y th�i gian th�c.

Hình 3. H� tr trình biên d�ch PL/SQL

SELECT INTO FOR UPDATE

C�u trúc FOR UPDATE trên SELECT INTO cho phép trích ra m�t hàng kh$i DB2 v"i m�c �ích �� s(a ��i nó sau này mà không c%n s( d�ng m�t con tr$.

PUBLIC SYNONYM M�t t� ��ng ngh�a chung là m�t bí danh mà không có m�t tên l��c ��. DB2 h� tr� các t� ��ng ngh�a chung cho các ��i t��ng b�ng, các trình t� và các gói PL/SQL.

CREATE TEMPORARY TABLE

DB2 h� tr� các b�ng t�m th�i toàn c%u ���c t�o ra ngoài các b�ng toàn c%u t�m th�i ���c khai báo.

Câu l�nh b�ng TRUNCATE

Câu l�nh này nhanh chóng xóa các n�i dung c�a m�t b�ng toàn b� mà không th�c hi�n các b� kích ho�t.

� phân gi�i tên t� nhiên

DB2 9.7 không yêu c%u các khung nhìn n�i tuy�n. Ngoài ra, các tên c�t có th� d, dàng th�a k� t� các toán t( set (t�p h�p) nh� UNION.

Page 6 of 15DB2 9.7: Ch�y các �ng d�ng Oracle trên DB2 9.7 cho Linux, UNIX và Windows

Page 7: DB2 9.7 Chay Cac Ung Dung Oracle Trên DB2 9.7 Cho Linux Va UNIX Hay Windows

S� tích h�p c�a PL/SQL vào trong DB2 nh� là m�t ngôn ng� th� t�c l"p �%u tiên có nhi�u hàm ý:

� Không ph�i d*ch. Mã ngu�n v/n gi� nguyên nh� nó �ang có trong danh m�c l��c ��. � Các nhà phát tri�n có th� ti�p t�c làm vi�c theo ngôn ng� mà h �ã quen thu�c. Không có nhu c%u nào �� di

chuy�n logic sang ph�ng ng� c�a DB2 th�m chí n�u logic m"i ���c vi�t b'ng SQL PL. Các th��ng trình s( d�ng các ph�ng ng� khác nhau có th� g i cho nhau.

� Các nhà cung c�p �ng d�ng �óng gói có th� s( d�ng m�t mã ngu�n d�a vào c� Oracle l/n DB2. � C� PL/SQL và SQL PL ��u ��a ra mã máy �o nh� nhau cho SQL Unified Runtime Engine c�a DB2. Do �ó,

theo thi�t k�, c� PL/SQL l/n SQL PL th�c hi�n � cùng m�t t�c ��. � Do h� t%ng c�a trình g1 r�i g!n tr�c ti�p vào SQL Unified Runtime Engine, nên PL/SQL ���c h� tr� t� nhiên

b�i Optim Development Studio.

Hình 4 minh ho� m�t phiên g1 r�i PL/SQL. Trình g1 r�i này h� tr� các tính n�ng tiêu chu&n nh� b�"c vào, b�"c ra và các �i�m ng!t (breakpoint). Ngoài ra, nó cho phép ng��i dùng thay ��i các bi�n PL/SQL t�i ch� trong khi ch�ng trình �ang ch�y.

Hình 4. H� tr trình g� r�i PL/SQL trong DB2

Page 7 of 15DB2 9.7: Ch�y các �ng d�ng Oracle trên DB2 9.7 cho Linux, UNIX và Windows

Page 8: DB2 9.7 Chay Cac Ung Dung Oracle Trên DB2 9.7 Cho Linux Va UNIX Hay Windows

Các chi ti�t cú pháp PL/SQL

Vì v�y, s� h� tr� PL/SQL mu�n nói chính xác �i�u gì? Tr�"c tiên, có s� h� tr� cú pháp c�t lõi. DB2 h� tr� t�t c� các c�u trúc chung c�a PL/SQL, ch0ng h�n nh�:

� n�u thì, ng��c l�i (if then else). � các vòng l�p while. � := phép gán. � các bi�n và h'ng c�c b�. � #PRAGMA EXCEPTION và x( lý các tr��ng h�p ngo�i l�. � Các d�ng khác nhau cho các vòng l�p (ph�m vi, con tr$ và truy v�n). � %TYPE and %ROWTYPE gi� ch�t các bi�n và các tham s� cho các ��i t��ng khác. � Các giao d*ch #PRAGMA AUTONOMOUS, cho phép các th� t�c nào th�c thi trong m�t giao d*ch riêng.

H� tr� ��i t��ng PL/SQL

Có th� s( d�ng PL/SQL trong các ��i t��ng khác nhau cho phép logic th� t�c:

� Các hàm vô h�"ng. � Tr�"c các b� kích ho�t c�a m�i hàng. � Sau các b� kích ho�t c�a m�i hàng. � Các th� t�c.

Page 8 of 15DB2 9.7: Ch�y các �ng d�ng Oracle trên DB2 9.7 cho Linux, UNIX và Windows

Page 9: DB2 9.7 Chay Cac Ung Dung Oracle Trên DB2 9.7 Cho Linux Va UNIX Hay Windows

� Các kh�i &n danh. � Các gói PL/SQL.

H� tr� các gói PL/SQL

H%u h�t PL/SQL trong các �ng d�ng Oracle ���c ch�a trong cái g i là Các gói (PACKAGE). M�t gói PL/SQL —không l/n v"i m�t gói DB2— là m�t b� s�u t�p c�a các ��i t��ng riêng v"i kh� n�ng phân bi�t gi�a các ��i t��ng có th� truy c�p bên ngoài và nh�ng ��i t��ng ch� là các trình tr� giúp �� s( d�ng bên trong gói. ANSI SQL t�ng ��ng v"i m�t gói ���c g i là MODULE. Bây gi� DB2 cung c�p h� tr� cho các mô �un SQL ANSI c#ng nh� các gói PL/SQL. �c bi�t, cung c�p các kh� n�ng sau �ây:

� GÓI T2O [HO3C THAY TH4] (CREATE [OR REPLACE] PACKAGE), xác �*nh các m/u ban �%u cho các th��ng trình nhìn th�y bên ngoài. Nó c#ng xác �*nh t�t c� các ��i t��ng không theo th� t�c, nhìn th�y bên ngoài, nh� các bi�n và các ki�u.

� THÂN GÓI T2O [HO3C THAY TH4] (CREATE [OR REPLACE] PACKAGE BODY), tri�n khai th�c hi�n t�t c� các th��ng trình riêng và chung c#ng nh� t�t c� các ��i t��ng riêng khác.

� Trong m�t gói ho�c thân gói, các ��i t��ng sau �ây có th� ���c �*nh ngh�a: � Các bi�n và các h'ng s�. � Các ki�u d� li�u. � Các ngo�i l�. � Các hàm vô h�"ng. � Các th� t�c. � Các con tr$.

� Kh�i t�o gói. � Các t� ��ng ngh�a chung trên các gói.

DB2 cung c�p các gói l�p s�n ph� bi�n

M�t s� các �ng d�ng Oracle s( d�ng các gói do RDBMS cung c�p. �c bi�t, các th� vi�n cung c�p vi�c t�o báo cáo, e-mail ho�c truy�n thông chéo có th� r�t ph� bi�n. � t�o �i�u ki�n h� tr� các �ng d�ng này cho DB2, DB2 cung c�p các gói ���c li�t kê trong B�ng 7:

B�ng 7. DB2 cung c�p các gói kèm theo

Các ph�n m� r�ng JDBC cho riêng Oracle

JDBC là m�t giao di�n khách hàng Java chu&n. Tuy nhiên, có các ph%n m� r�ng �ã ���c thêm vào trình �i�u khi�n JDBC c�a Oracle �� h� tr� các ki�u d� li�u không theo tiêu chu&n riêng.

� t�i �a hóa m�c �� t�ng thích v"i các �ng d�ng d�a trên công ngh� Java, trình �i�u khi�n DB2 9.7 JDBC cung c�p cùng v"i vài th� khác, s� h� tr� cho các th� t�c g i v"i con tr$ tham chi�u và các tham s� VARRAY.

7F� @A��B�DBMS_OUTPUTCung c�p các kh� n�ng l�p báo cáo c b�n có th� b�t ho�c t!t t� dòng l�nh. UTL_FILE M�t mô-�un cho phép làm vi�c v"i các t�p trên máy ch� DB2.

DBMS_SQLM�t gói cung c�p m�t SQL API �� th�c hi�n SQL ��ng ngoài các câu l�nh hi�n có EXECUTE và EXECUTE IMMEDIATE.

UTL_MAIL M�t mô-�un cho phép g(i các thông báo e-mail t� SQL.UTL_SMTP M�t m�c API th�p hn t�ng t� nh� UTL_MAIL t�o ra s� tích h�p SMTP.DBMS_ALERT M�t gói, khi ���c s( d�ng, cho phép các phiên làm vi�c khác nhau truy�n tin b'ng c� hi�u v"i nhau.DBMS_PIPE M�t mô-�un cho phép các phiên làm vi�c g(i t�ng d� li�u khác nhau.DBMS_JOB Cung c�p m�t API t�ng thích tích h�p v"i b� x�p l*ch các nhi�m v� c�a DB2. DBMS_LOB M�t API c�a Oracle �� x( lý LOB báo hi�u các hàm LOB l�p sn c�a DB2.DBMS_UTILITYM�t b� s�u t�p các th� t�c khác nhau ���c s( d�ng trong các �ng d�ng.

Page 9 of 15DB2 9.7: Ch�y các �ng d�ng Oracle trên DB2 9.7 cho Linux, UNIX và Windows

Page 10: DB2 9.7 Chay Cac Ung Dung Oracle Trên DB2 9.7 Cho Linux Va UNIX Hay Windows

S� h� tr� c�a k�ch b�n l�nh SQL*Plus khi s� d�ng CLPPlus

ôi khi các k*ch b�n l�nh DDL và ngay c� các báo cáo ���c vi�t b'ng cách s( d�ng b� x( lý dòng l�nh SQL*Plus. � thu�n ti�n cho vi�c chuy�n các k*ch b�n l�nh này c#ng nh� các k+ n�ng c�a ng��i phát tri�n �ang vi�t chúng, DB2 cung c�p m�t b� x( lý dòng l�nh t�ng thích-SQL*Plus, ���c g i là CLPPlus. Công c� này có các ch�c n�ng sau:

� Các tu) ch n l�nh t�ng thích-SQL*Plus. � Thay th� bi�n. � T�o �*nh d�ng c�t. � Các hàm l�p báo cáo. � Các bi�n �i�u khi�n.

Hình 5. Công c� CLPLus t� ng thích-SQL*Plus

Cho phép DB2 kéo và th� càng d� dàng càng t t

Do s� liên k�t ch�t ch. c�a DB2 v"i PL/SQL và Oracle SQL, bây gi� không c%n thi�t có m�t b� công c� chuy�n d*ch ph�c t�p. Thay vào �ó, b�n có th� s( d�ng Công c� d*ch chuy�n d� li�u c�a IBM (IBM Data Movement Tool) �� �n gi�n kéo và th� các b�ng, các gói ho�c toàn b� các l��c �� t� Oracle sang DB2. Ch� c%n các �i�u ch�nh t�i thi�u trên c s� ngo�i l� ho�c di chuy�n m�t �ng d�ng sang DB2, ho�c s(a ��i m�t �ng d�ng sao cho cùng m�t ngu�n có th� ho�t ��ng d�a vào c� DB2 và c� Oracle.

Các b�"c có th� �n gi�n nh�:

1. Thi�t l�p các bi�n ��ng ký c%n thi�t: � db2set DB2_COMPATIBILITY_VECTOR=ORA � db2set DB2_DEFERRED_PREPARE_SEMANTICS=YES

2. Kh�i ��ng l�i trình qu�n lý c s� d� li�u: � db2stop � db2start

3. T�o ra m�t c s� d� li�u t�ng thích-Oracle: � db2 create database mydb pagesize 32 K � db2 update db cfg for mydb using auto_reval deferred_force

4. Kh�i ��ng IBM Data Movement Tool và k�t n�i vào c s� d� li�u Oracle và DB2 (xem Hình 6). M�t khi k�t n�i ���c thi�t l�p, b�n có th� ch n l�y ra ch� DDL ho�c c� hai DDL và d� li�u. Cu�i cùng, b�n có hai l�a ch n:

Page 10 of 15DB2 9.7: Ch�y các �ng d�ng Oracle trên DB2 9.7 cho Linux, UNIX và Windows

Page 11: DB2 9.7 Chay Cac Ung Dung Oracle Trên DB2 9.7 Cho Linux Va UNIX Hay Windows

ho�c b�n tri�n khai tr�c ti�p b'ng cách th�c hi�n các k*ch b�n l�nh �ã t�o ra ho�c b�n ti�p t�c v"i ô tri�n khai t �ng tác. (Cái sau ���c khuy�n cáo cho h%u h�t các �ng d�ng không quan tr ng). Hình 6. Kéo và th� các l�c � Oracle vào DB2 khi s� d�ng IBM Data Movement Tool

5. Di chuy�n các l��c �� d� ki�n t� Oracle sang DB2 khi s( d�ng tri�n khai t �ng tác (xem Hình 7). Trong ch� �� tri�n khai t �ng tác, b�n th�y m�t cây-d/n h�"ng (nav-tree) hi�n th* t�t c� các ��i t��ng ���c trích ra t� c s� d� li�u Oracle. Ch n t�t c� các ��i t��ng và th�c hi�n tùy ch n trình �n tri�n khai. K�t qu� là, công c� s. sao chép các ��i t��ng qua DB2 và ghi l�i s� phát tri�n c�a nó. M�t s� ��i t��ng có th� không tri�n khai thành công và công c� này cho phép b�n tùy ch n �� làm vi�c v"i nh�ng ��i t��ng �ó. Khi l�a ch n m�t ��i t��ng, b�n s. th�y DDL cùng v"i l�i DB2 g�p ph�i. Lúc này b�n có th� s(a �*nh ngh�a khi c%n và tri�n khai l�i b'ng cách s( d�ng trình so�n th�o l�p sn. M�c �ích là �� chuy�n d*ch t�ng tác t�t c� các ��i t��ng sang DB2 trên m�t c s� ngo�i l�. Hình 7. Kéo và th� các l�c � Oracle vào DB2 khi s� d�ng IBM Data Movement Tool

Page 11 of 15DB2 9.7: Ch�y các �ng d�ng Oracle trên DB2 9.7 cho Linux, UNIX và Windows

Page 12: DB2 9.7 Chay Cac Ung Dung Oracle Trên DB2 9.7 Cho Linux Va UNIX Hay Windows

�ánh giá s� h� tr� cho DB2

� cho phép �ng d�ng c�a b�n chuy�n sang DB2 9.7 d, dàng v�y sao? Câu tr� l�i ��ng nhiên là, còn tùy. IBM có m�t công c� bên trong có tên là MEET DB2, có th� phân tích t�t c� các ��i t��ng trong c s� d� li�u Oracle c�a b�n và cho �i�m nó. Nó t�o m�t báo cáo v� cái s. th�c hi�n và ni c%n �i�u ch�nh. �i di�n tài kho�n IBM c�a b�n ho�c �%u m�i bán hàng có th� ch�y ti�n ích này �� giúp cung c�p nhanh chóng m�t �ánh giá v� kh� n�ng t�ng thích c�a c s� d� li�u Oracle hi�n t�i c�a b�n v"i DB2.

Hình 8. Công c� báo cáo MEET DB2 cho vi�c ánh giá

Page 12 of 15DB2 9.7: Ch�y các �ng d�ng Oracle trên DB2 9.7 cho Linux, UNIX và Windows

Page 13: DB2 9.7 Chay Cac Ung Dung Oracle Trên DB2 9.7 Cho Linux Va UNIX Hay Windows

Trong giai �o�n th( nghi�m beta m�t n�m c�a b�n DB2 9.7, nhi�u �ng d�ng v"i hn 750.000 dòng mã PL/SQL �ã ���c phân tích chi ti�t v"i t5 l� chuy�n ��i s( d�ng ���c ngay trung bình là 90 ��n 99%.

Hình 9. T� l� trung bình 98% cho các câu l�nh �c h� tr

Các h�n ch�

PL/SQL, th� vi�n gói kèm theo và CLPPlus hi�n nay không có sn cho DB2Express, DB2 Express-C và DB2 Personal Editions (các �n b�n dành cho DB2 cá nhân).

Page 13 of 15DB2 9.7: Ch�y các �ng d�ng Oracle trên DB2 9.7 cho Linux, UNIX và Windows

Page 14: DB2 9.7 Chay Cac Ung Dung Oracle Trên DB2 9.7 Cho Linux Va UNIX Hay Windows

Tóm t!t Nh� tr� giúp c�a SQL nhi�u ph�ng ng� v�n có, DB2 9.7 cho phép h� tr� d, dàng các �ng d�ng Oracle chuy�n sang DB2. Các nhà cung c�p các �ng d�ng �óng gói có th� ��a ra các �ng d�ng c�a h trên c� Oracle l/n DB2 v"i chi phí phát sinh t�i thi�u. Các khách hàng có th� t� do l�a ch n nhà cung c�p công ngh� h c%n, mà không b* h�n ch� b�i các s� l�a ch n trong quá kh�. � th( nghi�m các tính n�ng này, b�n có th� t�i v� m�t phiên b�n dùng th( c�a DB2 9.7 (xem Tài nguyên).

Câu h"i th#ng g$p

Phiên b�n nào c�a Oracle có h� tr DB2 9.7?

M�c �� bao ph� ���c t�o ra cho các ph�ng ng� SQL và PL/SQL hoàn toàn d�a vào nh�ng gì �ang ���c các �ng d�ng s( d�ng. Có nh�ng tính n�ng �ã ���c gi"i thi�u trong các b�n phát hành g%n �ây nh� là Oracle 11g ���c h� tr�, trong khi m�t s� c�u trúc có sn trong Oracle 8i không ���c h� tr�. Trong m�t nghiên c�u v� 18 �ng d�ng t�ng c�ng có trên 750,000 dòng, 90 ��n 99% mã ���c chuy�n sang DB2 mà không thay ��i. Nhi�u vi�c �i�u ch�nh còn l�i có th� ���c th�c hi�n t� ��ng ho�c n�u không thì b'ng tay.

�ng d�ng Oracle c�a tôi s� ch�y trên DB2 nhanh nh� th� nào?

ó là câu h$i �áng giá tri�u �ô la! Th�t không may, các �i�u kho�n c�p phép c�a Oracle c�m b�t c� ai công b� k�t qu� th( nghi�m khi ch�a ���c s� ��ng ý tr�"c b'ng v�n b�n. Kh$i c%n ph�i nói, chúng tôi �ã không b�n tâm ph�i h$i. Tuy nhiên, b'ng cách thi�t k� riêng c�a mình và ���c xác nh�n b'ng vi�c ki�m tra so sánh b�o ��m ch�t l��ng , m�t �ng d�ng ���c vi�t d�a vào PL/SQL trên DB2 c#ng nhanh nh� m�t �ng d�ng ���c vi�t d�a vào SQL PL trên DB2. Các nhà cung c�p, nh�ng ng��i �ã qua qui trình h� tr� này �ã ng�c nhiên vui v-.

Nó ã cung c�p các tính n�ng này cho bao nhiêu công vi�c?

Không gi�ng nhi�u nh� ng��i ta có th� ngh�. M�t s� công vi�c kh�i �%u, nh� CONNECT BY và NUMBER, �ã làm vi�c v"i DB2 9.5 theo ki�u chi�n thu�t. M�t cách nghiêm túc, n� l�c này �ã ���c hoàn thành trong vòng ít hn 18 tháng.

Nh�ng khó kh�n chung trong vi�c cho phép chuy�n t Oracle sang DB2 là gì?

Tính t�ng thích c�a DB2 không rõ ràng 100%. Nh� v�y có kh� n�ng s. có m�t s� tr�c tr�c khi l%n �%u tiên b�n chuy�n sang DB2. T�t nhiên, nhi�u khó kh�n không quan tr ng và d, dàng s(a ch�a. Ví d�, DB2 h� tr� các b� kích ho�t PL/SQL, nh�ng không cho phép k�t h�p các hành ��ng c�a b� kích ho�t. ó là, m�t b� kích ho�t ���c chia s- cho các ho�t ��ng UPDATE, DELETE và INSERT. Bây gi�, hãy ��a ra m�t b� kích ho�t nhi�u ho�t ��ng PL/SQL, th�t khá d, dàng �� sao chép nó thành ba b� kích ho�t DB2 PL/SQL khi s( d�ng m�t bi�n boolean �� INSERTED, UPDATED và DELETED.

Tài nguyên

H�c t!p � Kh�i ch�y DB2 9.7: Nh�n m�t t�ng quan v� các giá tr* c�a DB2.

� Trò chuy�n v"i phòng thí nghi�m: Hãy nghe và xem các video v� các ch� �� nh� là vi�c �i sâu vào k+ thu�t

DB2 9.7 và m�t phiên b�n webcast c�a bài vi�t này.

� "Chuy�n sang DB2 d, dàng" (youTube): Th�c hi�n theo m�t trình di,n video v� t�ng quan c�a h� tr� �ng d�ng DB2.

� "DB2 9.7 CLPPlus" (youTube): M�t video nào trình di,n cách s( d�ng c�a trình ti�n ích shell CLPPlus t�ng thích-SQL *Plus.

Page 14 of 15DB2 9.7: Ch�y các �ng d�ng Oracle trên DB2 9.7 cho Linux, UNIX và Windows

Page 15: DB2 9.7 Chay Cac Ung Dung Oracle Trên DB2 9.7 Cho Linux Va UNIX Hay Windows

� "DB2 9.7: H� tr� PL/SQL riêng" (youTube): Xem m�t �o�n video ng!n gi"i thi�u nhi�u tính n�ng PL/SQL ���c DB2 9.7 h� tr�.

� "Break Free with IBM DB2 9.7" (youTube): Xem m�t video v� nhi�u khách hàng và các gi�y ch�ng nh�n c�a ��i tác.

� Vùng Qu�n lý thông tin c�a developerWorks: Tìm hi�u thêm v� Qu�n lý thông tin. Tìm tài li�u h�"ng d/n k+ thu�t, các bài báo h�"ng d/n, giáo d�c, t�i, thông tin s�n ph&m và nhi�u hn n�a.

� Theo sát các s� ki�n k+ thu�t và webcast c�a developerWorks.

L�y s�n ph"m và công ngh�

� DB2 9.7 for Linux, Unix, and Windows: T�i v� m�t phiên b�n dùng th( mi,n phí c�a DB2 9.7 cho Linux, Unix và Windows.

� DB2 Express-C 9.7: T�i b�n DB2 Express-C 9.7, m�t phiên b�n mi,n phí c�a máy ch� c s� d� li�u Express DB2 cho c�ng ��ng.

� Xây d�ng các d� án phát tri�n ti�p theo c�a b�n v"i ph%n m�m dùng th( IBM, có sn �� t�i v� tr�c ti�p t� developerWorks.

Th�o lu!n

� Tham gia vào developerWorks blogs và dành tâm trí cho c�ng ��ng developerWorks c�a tôi; v"i h� s cá nhân c�a b�n và trang ch� tu) ch�nh, b�n có th� tùy ch�nh developerWorks theo ý thích và t�ng tác v"i nh�ng ng��i dùng developerWorks khác.

�ôi nét v� tác gi�

�nh c�a Serge Rielau Serge Rielau �ã làm vi�c v"i DB2 v� trình biên d*ch SQL Linux, Unix và Window trong 12 n�m. Hi�n nay, ông là ki�n trúc s� cho DB2 v� SQL trên Linux, UNIX và Windows. Ông là ki�n trúc s� ch*u trách nhi�m v� tính t�ng thích c�a SQL v"i DB2 9.7. Có th� liên l�c v"i Serge t�i comp.databases.ibm-DB2.

Page 15 of 15DB2 9.7: Ch�y các �ng d�ng Oracle trên DB2 9.7 cho Linux, UNIX và Windows


Recommended