db2 9.7 chay cac ung dung oracle trên db2 9.7 cho linux va unix hay windows
Post on 07-Apr-2016
236 Views
Preview:
DESCRIPTION
TRANSCRIPT
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
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
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
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
� 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
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
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
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
� 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
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
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
�á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
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
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
� "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
top related