Thư viện tri thức trực tuyến
Kho tài liệu với 50,000+ tài liệu học thuật
© 2023 Siêu thị PDF - Kho tài liệu học thuật hàng đầu Việt Nam

LVTN - Xay dung giao dien lap trinh OCI.doc
Nội dung xem thử
Mô tả chi tiết
Luaän aùn toát nghieäp -Xaây döïng giao dieän laäp trình OCI
GVHD :KS.Buøi Hoaøi Thaéng
PHAÀN I : CAÙC KHAÙI NIEÄM CÔ BAÛN
CHÖÔNG I : GIÔÙI THIEÄU OCI VAØ NHÖÕNG ÑAËC TÍNH CUÛA NOÙ
I-Oracle Call Inteface(OCI)
SQL laø ngoân ngöõ laäp trình khoâng coù caáu truùc . Chöông trình vieát trong noù duøng taäp döõ lieäu ñeå
hoaït ñoäng nhöng seõ khoâng xaùc ñònh nhöõng hoaït ñoäng gì ñöôïc thöïc thi , hoaëc nhöõng hoaït ñoäng
ñoù thöïc thi nhö theá naøo . SQL deã hoïc vaø deã duøng ñeå giaûi quyeát CSDL . Noù cuïng laø moät ngoân
ngöõ chuaån duøng ñeå truy caäp vaø thao döõ lieäu trong caùc quan heä hieän ñaïi vaø quan heä höôùng ñoái
töôïng trong caùc heä thoáng CSDL .
Tuy nhieân haàu heát caùc ngoân ngöõ coù caáu truùc nhö C , C++ thì vieäc thöïc thi cuûa haàu heát caùc caâu
leänh phuï thuoäc vaøo nhöõng caâu leänh tröôùc ñoù hoaëc nhöõng caâu leänh loàng beân trong noù vaø nhöõng
caâu leänh ñieàu khieån nhö laëp , reõ nhaùnh maø khoâng coù trong SQL . Nhöõng ngoân ngöõ coù caáu truùc
phöùc taïp hôn SQL nhöng chuùng meàm deûo vaø maïnh hôn SQL .
OCI cho pheùp phaùt trieån nhöõng öùng duïng maø trong ñoù coù söï lieân keát khaû naêng truy caäp döõ lieäu
cuûa SQL vaø C . OCI hoå trôï taát caûcaùc ñònh nghóa döõ lieäu SQL , thao taùc döõ lieäu , truy vaán , caùc
ñieàu khieån thuaän lôïi maø ñaõ coù saún trong Oracle8 Server .
PL/SQL cuõng coù nhieàu thuaän lôïi vì noù laø môû roäng töø Oracle theo thuû tuïc ñeán SQL . Theo ñoù
caùc öùng duïng coù theå phaùt trieån meàm deûo vaø maïnh hôn caùc öùng duïng chæ vieát baèng SQL . Vì
vaäy OCI cung caáp caùc thuaän lôïi trong vieäc truy caäp vaø thao taùc caùc ñoái töôïng trong Oracle 8
Server .
OCI laø moät phaàn meàm giao tieáp cho pheùp thao taùc döõ lieäu vaø sô ñoà CSDL Oracle . Hình 1-1
cho thaáy vieäc dòch vaø lieân keát moät chöông trình OCI töông töï nhö vieäc dòch vaø lieân keát moät öùng
duïng khoâng phaûi laø CSDL . Khoâng caàn böôùc xöû lyù tröôùc hoaëc dòch tröôùc .
Hình 1-1 : Quaù trình phaùt trieån OCI
Chuù yù : Trong moät soá phaàn cöùng chuaån caàn moät soá thö vieän khaùc theâm vaøo thö vieän OCI ñeå
lieân keát caùc chöông trình OCI ñuùng ñaén hôn . Caàn kieåm tra taøi lieäu veà heä thoáng Oracle cuûa baïn
ñeå bieát caàn phaûi theâm nhöõng thö vieän naøo caàn theâm vaøo.
II- Caùc phaùt bieåu SQL
Trang 1
Source
file
Hast Language
compiler
Object File
Hast Linker
Application
OCI Library
Oracle8
Server
Luaän aùn toát nghieäp -Xaây döïng giao dieän laäp trình OCI
GVHD :KS.Buøi Hoaøi Thaéng
Moät trong nhöõng vieäc chính cuûa SQL laø xöû lyù caùc phaùt bieåu . Caùc phaùt bieåu khaùc nhau caàn
nhöõng böôùc xöû lyù khaùc nhau . Ñieàu naøy raát quan troïng trong vieäc maõ hoaù öùng duïng OCI .
Oracle8 thöøa nhaän 8 loaïi phaùt bieåu sau :
ª Ngoân ngöõ ñònh nghóa döõ lieäu (DDL)
ª Caùc phaùt bieåu ñieàu khieån
ª Ñieàu khieån thöïc thi
ª Ñieàu khieån heä ñieàu haønh
ª Ñieàu khieån heä thoáng
ª Ngoân ngöõ thao taùc döõ lieäu (DML)
ª Truy vaán
Ghi chuù: caùc truy vaán ñöôïc phaân loaïi nhö caùc phaùt bieåu DML nhöng caùc öùng
duïng OCI xöû lyù truy vaán khaùc nhau . Vì vaäy chuùng phaûi ñöôïc suy nghó moät
caùch rieâng bieät .
ª PL/SQL
ª SQL nhuùng
1 . Ngoân ngöõ ñònh nghóa döõ lieäu
Caùc phaùt bieåu DDL quaûn lyù sô doà caùc ñoái töôïng trong CSDL . Caùc phaùt bieåu .DDL taïo ra caùc
baûng môùi , xoaù caùc baûng cuõ , thieát laäp sô ñoà caùc ñoáitöôïng khaùc . Vì vaäy chuùng dieàu khieån truy
caäp ñeán moät sô ñoà caùc ñoái töôïng . Ví duï :
CREATE TABLE employees
(name VARCHAR2(20) ,
ssn VARCHAR2(12) ,
empno NUMBER(6) ,
mgr NUMBER(6) ,
salary NUMBER(6))
GRANT UPDATE , INSERT ,DELETE ON employees TO joe
REVOKE UPDATE ON employees FROM scott
Caùc phaùt bieåu DDL cuõng cho pheùp baïn laøm vieäc vôùi caùc object trong Oracle8 Server caùc phaùt
bieåu sau seõ taïo ra moät baûng caùc object
CREATE TYPE person_t AS OBJECT(
name VARCHAR2(30),
ssn VARCHAR2(12),
address VARCHAR2(50))
CREATE TABLE person_tab OF person_t
2 . Caùc phaùt bieåu ñieàu khieån
Caùc öùng duïng OCI giaûi quyeát caùc ñieàu khieån thöïc thi , ñieàu khieån heä ñieàu haønh , dieàu khieån heä
thoáng töông töï nhö caùc phaùt bieåu DML .
3 . Ngoân ngöõ thao taùc döõ lieäu
Caùc phaùt bieåu DML coù theå thay döõ lieäu trong caùc baûng CSDL . Chaúng haïn caùc phaùt bieåu DML
dung ñeå :
Theâm caùc haøng vaøo moät baûng
Caäp nhaät caùc giaù trò cuûa caùc coät toàn taïi trong caùc haøng
Trang 2
Luaän aùn toát nghieäp -Xaây döïng giao dieän laäp trình OCI
GVHD :KS.Buøi Hoaøi Thaéng
Xoaù caùc haøng trong moät baûng
Khoaù moät baûng trong CSDL
Giaûi quyeát quaù trình thöïc thi cho moät phaùt bieåu SQL
Caùc phaùt bieåu DML coù theå yeâu caàu moät öùng duïng cung caáp döõ lieäu cho CSDL , laø ñaàu vaøo
ñöôïc ñoùng goùi (binding)
Binding
Haàu hieát caùc phaùt bieåu DML vaø moät soá truy vaán yeâu caàu moät chöông trình ñöa döõ lieäu vaøo
Oracle nhö laø moät phaàn cuûa caùc phaùt bieåu SQL hoaëc PL/SQL . Khi chöông trình ñöôïc dòch caàn
phaûi bieát döõ lieäu laø haèng hay daïng chöõ . Ví duï phaùt bieåu SQL sau seõ theâm moät employee vaøo
CSDL
INSERT INTO emp VALUES
(2365,'BESTY','PROGRAMMER',2000,20)
Moät phaùt bieåu cöùng nhaéc nhö vaäy seõ coù moät vaøi haïn cheá . Baïn phaûi thay ñoåi phaùt bieåu vaø dòch
laïi chöông trình moãi khi theâm employee môùi vaøo CSDL . Ñeå chöông trình meàm deûo hôn baïn coù
theå vieát chöông trình ñeå user nhaäp döõ lieäu moãi khi chöông trình chaïy .
Khi chuaån bò cho moät phaùt bieåu SQL hoaëc khoái PL/SQL maø döõ lieäu ñöôïc cung caáp vaøo luùc
chaïy . Ví duï , phaùt bieåu SQL coù 5 nôi giöõ döõ lieäu ñaïi dieän cho 5 ñaàu vaøo döõ lieäu (baét ñaàu baèng
":")
INSERT INTO emp VALUES
(:empno,:ename,:job,:sal,:deptno)
Baïn coù theå duøng nôi giöõ döõ lieäu ñaïi dieän cho caùc bieán ñaàu vaøo trong caùc phaùt bieåu DELETE ,
INSERT , SELECT , UPDATE hoaëc khoái PL/SQL ôû baát kyø vò trí naøo cuûa phaùt bieåu , chuùng coù
theå laø bieåu thöùc hoaëc giaù trò daïng chöõ . Ñoái vôùi khoái PL/SQL caùc nôi giöõ döõ lieäu coù theå ñaïi dieän
cho caùc bieán ñaàu ra . Teân cuûa chuùng khoâng ñöôïc duøng ñeå ñaët teân cho caùc ñoái töôïng khaùc cuûa
Oracle nhö table hoaëc column .
ñoái vôùi moãi nôi giöõ döõ lieäu trong phaùt bieåu SQL hoaëc khoái PL/SQL baïn phaûi goïi moät thuû tuïc
OCI maø nhaän ñòa chæ cuûa bieán chæ ñeán nôi chöùa döõ lieäu . Khi phaùt bieåu thöïc thi , Oracle nhaän
döõ lieäu maø chöông trình ñaët trong input , bind , bieán vaø gôûi noù ñeán server cuøng vôùi phaùt bieåu
SQL ñoù .
4 . Caùc truy vaán
Truy vaán laø phaùt bieåu nhaän döõ lieäu töø moät CSDL . Moät truy vaán coù theå traû veà khoâng , moät ,
hoaëc nhieàu haøng döõ lieäu . Taát caû caùc truy vaán baét ñaàu baèng töø khoùa SELECT
Caùc truy vaán truy caäp döõ lieäu trong caùc baûng vaø chuùng ñöôïc phaân loaïi cuøng vôùi caùc phaùt bieåu
DML . Tuy nhieân caùc öùng duïng OCI xöû lyù caùc truy vaán khaùc nhau , do vaäy chuùng phaûi ñöôïc
xaùc ñònh rieâng bieät .
Caùc truy vaán yeâu caâàu chöông trình cung caáp döõ lieäu ñeán CSDL söû duïng caùc bieán ñaàu vaøo
(bind) nhö ví duï sau :
SELECT name
FROM employees
WHERE empno= :empnumber
Trong phaùt bieåu SQL treân , :empnumber laø moät nôi giöõ döõ lieäu ñaïi dieän cho moät giaù trò seõ ñöôïc
cung caáp bôûi öùng duïng ñoù .
Khi xöû lyù moät truy vaán , moät öùng duïng OCI caàn ñònh nghóa caùc bieán output ñeå nhaän caùc giaù trò
traû veà . Trong phaùt bieåu treân caàn ñònh nghóa moät bieán output ñeå nhaän giaù trò name traû veà .
Trang 3
Luaän aùn toát nghieäp -Xaây döïng giao dieän laäp trình OCI
GVHD :KS.Buøi Hoaøi Thaéng
Defining
Caùc phaùt bieåu seõ traû döõ lieäu lieäu veà töø CSDL ñeán öùng duïng cuûa baïn . Khi xöû lyù moät truy vaán
baïn phaûi ñònh nghóa moät bieán output hoaëc moät maûng caùc bieán output cho moãi phaùt bieåu
SELECT maø baïn muoán nhaän döõ lieäu töø noù . Böôùc ñònh nghóa seõ taïo ra söï keát hôïp ñeå xaùc
ñònh nôi chöùa keát quaû traû veà vaø theo ñònh daïng gì .
VD : SELECT name,ssn
FROM employees
WHERE empno=:empnum
Baïn caàn phaûi ñònh nghóa hai output , moät ñeå nhaän giaù trò traû veà töø coät name , moät ñeå nhaän
giaù trò traû veà töø coät ssn
5 . PL/SQL
PL/SQL laø caùc môû roäng theo höôùng thuû tuïc cuûa SQL . PL/SQL xöû lyù caùc coâng vieäc phöùc taïp
hôn caùc truy vaán vaø caùc phaùt bieåu SQL . PL/SQL cho pheùp nhoùm moät soá phaùt bieåu thaønh moät
khoái ñôn vaø thöïc thi nhö moät ñôn vò . Ñoù laø :
Moät hoaëc nhieàu phaùt bieåu SQL
Caùc khai baùo bieán
Caùc phaùt bieåu phaân coâng
Caùc phaùt bieåu ñieàu khieån thuû tuïc nhö : IF…THEN…ELSE , LAËP
Ngoaïi tröø handing
Coù theå duøng khoái PL/SQL trong chöông trình ñeå :
Goïi caùc thuû tuïc vaø haøm
Dòch caùc phaùt bieåu ñieàu khieån thuû tuïc cuøng vôùi caùc phaùt bieåu SQL ñeå thöïc thi
nhö moät ñôn vò
Truy caäp caùc thuoäc tính PL/SQL ñaëc bieät nhö record , table , con troû caùc voøng
laëp , ngoaïi tröø handing
Söû duïng caùc bieán con troû
Truy caäp vaø thao taùc caùc ñoái töôïng trong moät Oracle8 server
Ví duï PL/SQL sau cho thaáy moät phaùt bieåu SQL ñeå nhaän nhöõng giaù trò töø moät baûng employees .
Ví duï naøy giaûi thích caùch söû duïng nôi giöõ döõ lieäu trong caùc phaùt bieåu PL/SQL
BEGIN
SELECT ename,sal,comm INTO :emp_name,:salary,:commission
FROM emp
WHERE ename=:emp_number
END;
Vôùi yù nghóa ñoù caùc nôi giöõ döõ lieäu khoâng phaûi laø caùc bieán PL/SQL maø chuùng chæ töôïng tröng
cho caùc bieán ñaàu vaøo khi phaùt bieåu ñöôïc xöû lyù . Chuùng caàn ñeå giao tieáp vôùi caùc bieán cuûa C
trong chöông trình cuûa baïn .
6 . SQL nhuùng
OCI xöû lyù caùc phaùt bieåu nhö laø caùc caâu cuûa vaên baûn maø moät öùng duïng truyeàn ñeán Oracle thöïc
thi . Caùc trình bieân dòch tröôùc cuûa Oracle (Pro*C/C++ , Pro*COBOL , Pro* FORTRAN) cho
pheùp laäp trình vieân nhuùng caùc phaùt bieåu SQL tröïc tieáp vaøo maõ chöông trình öùng duïng cuûa hoï .
Böôùc dòch tröôùc laø caàn thieát ñeå taïo ra moät öùng duïng coù theå thöïc thi .
Trang 4
Luaän aùn toát nghieäp -Xaây döïng giao dieän laäp trình OCI
GVHD :KS.Buøi Hoaøi Thaéng
III . Caùc töø ñaëc bieät cuûa OCI
Caùc töø ñaëc bieät ñeå chæ caùc phaàn khaùc nhau cuûa moät phaùt bieåu SQL . Ví duï moät phaùt bieåu SQL
nhö sau :
SELECT customer,address
FROM customers
WHERE bus_type='SOFTWARE'
AND sales_volume=:sales
bao goàm caùc phaàn sau :
+ Moät leänh SQL : SELECT
+ Hai select-list item : customer vaø address
+ Moät teân cuûa baûng trong meänh ñeà FROM : customers
+ Hai coät trong meänh ñeà WHERE : bus_type vaø sales_volume
+ Moät giaù trò ñaàu vaøo daïng chöõ trong meänh ñeà WHERE : 'SOFTWARE'
+ Moät nôi giöõ döõ lieäu töôïng tröng cho moät bieán ñaàu vaøo trong phaàn thöù hai cuûa meänh ñeà
WHERE : :sales
Khi phaùt trieån moät öùng duïng OCI baïn goïi ñòa chæ cuûa caùc bieán vaøo/ra trong chöông trình . Ña
chæ cuûa nôi giöõ döõ lieäu ñaïi dieän cho döõ lieäu vaøo goïi laø bind operation . Ñòa chæ cuûa caùc bieán ñeå
nhaän select-list items goïi laø define operation . Ñoái vôùi PL/SQL ñeàu ñöôïc goïi laø operation .
IV. Ñoái töôïng hoå trôï trong OCI
Oracle server coù nhöõng thuaän lôïi ñeå laøm vieäc vôùi kieåu ñoái töôïng vaø caùc ñoái töôïng . Moät object
type laø moät caáu truùc döõ lieäu moâ taû moät phaàn töû cuûa theá giôùi thöïc do user ñònh nhóa . Ví duï , moät
CSDL coù theå chöùa moät ñònh nghóa cuûa ñoái töôïng maø ñoái töôïng ñoù bao goàm caùc thuoäc tính firstname , last-name , age moâ taû nhöõng ñaëc tröng veà ñònh danh cuûa con ngöôøi trong theá giôùi thöïc .
Ñònh nghóa object type laø côù sôû cho vieäc taïo caùc oject maø moâ taû caùc thöïc theå cuûa object type .
Söû duïng object type nhö laø ñònh nghóa caáu truùc , moät ñoái töôïng ngöôøi ñöôïc taïo ra vôùi caùc thuoäc
tính 'Jonh' , Bonivento' , '30' . Caùc object type coù theå chöùa caùc method .
OCI cuûa Oracle8 bao goàm caùc haøm maø coù nhieàu khaû naêng ñieàu khieån caùc oject trong Oracle
server . Ñaëc bieät laø caùc khaû naêng sau ñöôïc theâm vaøo OCI :
+ Hoå trôï vieäc thöïc thi caùc phaùt bieåu SQL thao taùc döõ lieäu vaø thoâng tin sô ñoà
+ Hoå trôï vieäc tham chieáu ñeán caùc ñoái töôïng vaø thöïc theå nhö caùc bieán ñaàu vaøo cuûa phaùt bieåu
SQL
+ Hoå trôï vieäc tham chieáu ñeán caùc ñoái töôïng vaø thöïc theå nhö caùc bieán ñaàu ra cho caùc phaùt bieåu
SQL
+ Hoå trôï vieäc tham chieáu ñeán caùc ñoái töôïng vaø thöïc theå töø moät CSDL
+ Hoå trôï vieäc moâ taû nhöõng thuoäc tính cuûa moät phaùt bieåu SQL maø noù traû veà laø caùc thöïc theå vaø
caùc tham chieáu
+ Hoå trôï vieäc moâ taû caùc thuû tuïc hoaëc haøm cuûa PL/SQL maø coù caùc tham soá hoaëc keát laø ñoái
töôïng .
Theâm vaøo ñoù OCI hoå trôï cho vieäc thao taùc treân caùc object sau khi chuùng ñöôïc truy caäp bôûi caùc
phaùt bieåu SQL
V. Caùc loaïi haøm cuûa OCI
OCI bao goàm 4 taäp haøm chính :
1. OCI relational function : quaûn lyù truy caäp döõ lieäu vaø xöû lyù caùc phaùt bieåu SQL
2. OCI navigational function : thao taùc caùc ñoái töôïng nhaän ñöôïc töø moät Oracle8 server
Trang 5
Luaän aùn toát nghieäp -Xaây döïng giao dieän laäp trình OCI
GVHD :KS.Buøi Hoaøi Thaéng
3. OCI datatype mapping and munipulation function : thao taùc treân caùc thuoäc tính döõ lieäu cuûa
caùc kieåu Oracle8
4. OCI external procedure function : duøng ñeå vieát C goïi töø PL/SQL
VI. Nhöõng ñaëc tính môùi cuûa Release 8.0
R 8.0 coù nhöõng ñaëc tính môùi vaø nhöõng thuaän lôïi cho vieäc thöïc hieän :
Taêng caùc chu trình client-side vaø giaûm caùc yeâu caàu server-side
Phaùt bieåu SELECT traû veà taäp caùc haøng
API truy caäp ñeán caùc ñoái töôïng vaø döõ lieäu coù lieân quan
Giaûm soá chuyeán ñi voøng troøn treân maïng
Coù khaû naêng ñieàu khieån caùc coät LOB
Moät taäp API goïi thöïc hieän caùc thao taùc treân LOB vaø treân FILE
Caûi tieán caùc khaû naêng cuûa NLS (National Language Support)
Coù söï duy chuyeån ñöôøng daãn trong OCI vaø coù moät soá khaû naêng troän laãn vieäc goïi cuõ vaø môùi
trong moät öùng duïng
Caûi tieán hoå trôï cho nhieàu moâi tröôøng
Caùc chöùc naêng theâm vaøo cung caáp vieäc truy caäp qua laïi caùc object trong moät Oracle8
server .
VII.Taïi sao phaûi söû duïng OCI ?
Noùi chung coù nhieàu phöông phaùp truy caäp vaøo moät Oracle database nhö söû duïng ODBC , SQL
*Plus … Nhöng OCI giuùp truy caäp tröïc tieáp vaøo Oracle database tieát kieäm ñöôïc thôøi gian truy
caäp . Vaán ñeà thôøi gian truy caäp caøng trôû neân coù yù nghóa ñoái vôùi moät database lôùn .
Tuy nhieân caùc haøm OCI raát phöùc taïp(coù nhieàu thoâng soá ) trôû khoâng thaân thieän ñoái vôùi ngöôøi
duøng . Muoán söû duïng ñöôïc OCI ñoøi hoûi ngöôøi duøng phaûi am hieåu khaù tæ mæ veà noù . Vì theá muïc
ñích cuûa ñeà taøi naøy laø xaây döïng moät giao dieän laäp trình thaân thieän hôn maø ngöôøi duøng chæ caàn
thao taùc moät soá böôùc cô baûn thì coù theå thöïc hieän truy caäp nhanh choùng vaø deã daøng .
VIII. Moät soá khaùi nieäm
1. Database server : laø khoùa ñeå giaûi quyeát vaán ñeà quaûn lyù thoâng tin , quaûn soá löôïng lôùn döõ
lieäu vaø cho pheùp nhieàu user truy caäp ñoàng thôøi cuøng moät döõ lieäu
Moät Oracle server bao goàm : moät Oracle server instance vaø moät Oracle database .
2. Oracle instance : laø söï lieân keát giöõa caùc background process vaø vuøng nhôù toaøn cuïc (System
Global area) vuøng nhôù duøng chung cho caùc döõ lieäu cuûa user .
Moät Oracle instance coù hai loaïi process :
user process : thöïc thi maõ cuûa chöông trình öùng duïng
oracle process : thöïc thi caùc coâng vieäc cuûa user process vaø background process
nhaèm quaûn lyù coâng vieäc cuûa oracle server
3. Oracle database : laø moät hôïp caùc döõ lieäu ñöôïc xem nhö moät ñôn vò , chöùa vaø nhaän caùc
thoâng tin coù lieân quan vôùi nhau . Moät oracle database coù theå môû(acessable) hoaëc
ñoùng(unacessable) .
4. Caáu truùc cuûa Oracle database : bao goàm
Logical structure
Physical structure : coù 3 loaïi file
+ data file : chöùa döõ lieäu
Trang 6
Luaän aùn toát nghieäp -Xaây döïng giao dieän laäp trình OCI
GVHD :KS.Buøi Hoaøi Thaéng
+ redo log file : ghi nhaän caùc thay ñoåi data nhaèm ngaên chaën caùc loãi
+ control file : duøng ñeå nhaän dieän database vaø redo log file
5. Cursor(hay handle) : oracle duøng caùc vuøng daønh rieâng (private SQL areas) ñeå thi haønh caùc
caâu leänh SQL vaø löu tröõ thoâng tin cuûa quaù trình . Moät cursor laø moät caáu truùc PL/SQL cho pheùp
ñònh danh caùc vuøng naøy vaø truy caäp thoâng tin trong noù .
6. Oracle process : laø caùc process maø seõ ñöôïc goïi bôûi caùc process khaùc ñeå thöïc hieän coâng vieäc
theo yeâu caàu cuûa caùc process khaùc naøy . Coù 2 loaïi :
Server process : nhaän caùc yeâu caàu cuûa caùc user process ñöôïc noái keát ñeán . Noù giao tieáp vôùi
caùc user process vaø taùc ñoäng vaøo Oracle ñeå mang veà caùc keát quaû theo yeâu caàu cho user .
Background process : Oracle taïo moät taäp caùc background process cho moãi instance . Nhaèm
ñoàng boä vieäc thöïc hieän I/O vaø giaùm saùt caùc Oracle process töø ñoù laøm taêng tính xöû lyù song
song ñeå thöïc thi coâng vieäc toát hôn .
7. Program interface :laø cô caáu maø moät user process giao tieáp moät server process
8. Transaction : laø moät ñôn vò coâng vieäc luaän lyù bao goàm nhieàu SQL statement . Moät
transaction baét ñaàu vôùi SQL statement coù theå thöïc thi ñaàu tieân vaø keát thuùc khi noù ñöôïc commit
hoaëc rallback .
Moät transaction keát thuùc khi xaûy ra moät trong soá caùc ñieàu sau :
Söû duïng commit statement hoaëc rallback statement
Thöïc thi DDL statement . Neáu transaction hieän taïi chöùa baát kyø DML(such as CREATE,
DROP, RENAME, ALTER) statement naøo thì ñaàu tieân Oracle seõ commit transaction hieän
taïi roài thöïc thi vaø commit DDL nhö moät transaction môùi .
Disconnect töø Oracle
Moät user process keát thuùc khoâng bình thöôøng
Sau khi keát thuùc moät transaction SQL statement coù theå thöïc thi töï ñoäng baét ñaàu transaction tieáp
theo .
taàm quan troïng cuûa transaction : Oracle duy trì tính nhaát quaùn döõ lieäu döïa vaøo caùc transaction .
Caùc transaction cho pheùp ta ñieàu khieån linh hoaït khi laøm vieäc vôùi döõ lieäu vaø baûo veä söï toaøn
veïn döõ lieäu ngay caû trong tröôøng hôïp gaëp söï coá heä thoáng .
Commit transaction : nghóa laø taïo nhöõng thay ñoåi thöôøng xuyeân bôùi caùc SQL statement trong
transaction ñoù
Tröôùc khi moät transaction söõa chöõa döõ lieäu ñöôïc commit thì xaûy ra caùc d-ieàu sau :
Oracle taïo ra caùc rollback segment record trong vuøng ñeäm rollback segment cuûa
SGA(system global area) ñeå chöùa caùc giaù trò döõ lieäu cuõ ñaõ bò thay ñoåi bôûi caùc SQL
statement cuûa transaction .
Oracle ñaõ taïo ra caùc redo leg trong redo log buffer cuûa SGA . Nhöõng thay ñoåi naøy coù theå
ñöôïc ghi vaøo ñóa tröôùc khi commit transaction .
Caùc thay ñoåi ñöôïc ñöa ñeán database buffer vaø chuùng coù theå ñi ñeán ñóa tröôùc khi moät
transaction thöïc söï ñöôïc commit .
Khi moät transaction ñöôïc commit xaûy ra caùc ñieàu sau :
Baûng transaction beân trong noái keát vôùi caùc baûng ghi phaân ñoaïn rollback(rollback segment
records) maø transaction ñaõ ñöôïc commit ñeå ghi vaøo baûng unique system change
number(SCN) cuûa transaction ñoù .
Trang 7
Luaän aùn toát nghieäp -Xaây döïng giao dieän laäp trình OCI
GVHD :KS.Buøi Hoaøi Thaéng
Process log writer ghi caùc redo log vaø SCN vaøo redo log file . Ñaây söï kieän cô baûn ñeå thieát
laäp commit transaction .
Oracle môû khoùa treân caùc row vaø table .
Oracle ñaùnh daáu transaction laø "complete" .
Rollback transaction : khoâng taïo baát kyø thay ñoåi döõ lieäu naøo maø ñaõ ñöôïc thöïc hieän bôûi SQL
statement trong moät uncommit transaction . Oracle cho pheùp rollback toaøn boä moät uncommit
transaction hoaëc töø moät savepoint .
IX. Giôùi thieäu Net8
Net8 laø lôùp phaàn meàm ñöôïc söû duïng ñeå giao tieáp giöõa client vaø server hoaëc giöõa caùc server .
Caùc user process vaø server process treân caùc maùy khaùc nhau giao tieáp vôùi nhau thoâng qua Net8 .
Net8 laø moät cô caáu caùc protocol thöïc hieän vieäc phaân boá xöû lyù vaø phaân boá database . Caùc
protocol ñònh nghóa caùch truyeàn vaø nhaän data treân moät maïng .
Trong ñeà taøi naøy vieäc truy caäp oracle database cuõng nhôø Net8 ñeå truyeàn vaø nhaän döõ lieäu .
Hình döôùi laø kieán truùc cuûa Net8 vaø chöông trình öùng duïng söû duïng thö vieän OCI ñeå truy caäp
vaøo Oracle database .
CHÖÔNG II : CAÙC BÖÔÙC CÔ BAÛN LAÄP TRÌNH OCI
I. Caáu truùc chöông trình OCI
Noùi chung muïc tieâu cuûa moät öùng duïng OCI laø noái keát ñeán Oracle Server , choïn tröôùc moät soá
loaïi trao ñoåi data thöïc hieän vieäc xöû lyù data . Moãi öùng duïng OCI ñöôïc thöïc hieän theo trình töï caùc
böôùc nhö hình 2-1:
Trang 8
client program
Net8
Oracle protocol
Adapter
Protocol stack
Oracle8
ORDBMS
Net8
Oracle protocol
Adapter
Protocol stack
OCI
Library
Server Client
Physical Network
Luaän aùn toát nghieäp -Xaây döïng giao dieän laäp trình OCI
GVHD :KS.Buøi Hoaøi Thaéng
Hình 2-1 : Löu ñoà chöông trình OCI cô baûn
Treân ñaây laø caùc böôùc cuûa moät chöông trình OCI toång quaùt . Tuy nhieân tuøy thuoäc vaøo chöùc naêng
cuûa chöông trình (quaûn lyù nhieàu giao tieáp , söû duïng object ,…) thì coù theå caàn theâm moät soá böôùc .
Quaù trình OCI chæ ñöôïc khôûi taïo moät laàn , moät öùng duïng coù theå taïo nhieàu moâi tröôøng nhö ñöôïc
minh hoïa ôû hình 2-2 :
Trang 9
Initialize Process
Initialize Enviroment
Allocation Handle and
Data structures
Connect to sever and
begin session
Issue SQL and process
Data
Disconnect
Free handles & Data
Structures
Initialize Process
Initialize Environment
Connect to server
andBegin Session
Connect to server
andBegin Session
Initialize Environment Initialize Environment
AllocateHandles and
Data Structures
AllocateHandles and
Data Structures AllocateHandles and
Data Structures
Connect to server
andBegin Session
Issue SQL and
Process Data
Free Handles & Data
Structures
Free Handles & Data
Structures
Issue SQL and
Process Data
Issue SQL and
Process Data
Disconnect Disconnect
Disconnect
Free Handles & Data
Structures
Hình 2-2 : Nhieàu moâi tröôøng trong moät quaù trình
Luaän aùn toát nghieäp -Xaây döïng giao dieän laäp trình OCI
GVHD :KS.Buøi Hoaøi Thaéng
II. Caùc caáu truùc cuûa data OCI
Handle vaø Descriptor laø hai caáu truùc khoâng trong suoát ñöôïc ñònh nghóa trong caùc öùng duïng OCI
vaø coù theå ñöôïc chæ ñònh tröïc tieáp thoâng qua caùc caùch goïi ñöôïc chæ ñònh roõ raøng , hoaëc chæ ñònh
aån bôûi caùc haûm OCI .
Handle vaø Descriptor chöùa thoâng tin lieân quan ñeán data , caùc noái keát hoaëc caùch thöïc hieän cuûa
öùng duïng .
III. Handle
Haàu heát Oracle8 OCI goïi danh saùch tham soá cuûa chuùng hoaëc nhieàu handle . moät handle laø moät
pointer khoâng trong suoát troû ñeán moät vuøng löu tröõ ñöôïc chæ ñònh bôûi thö vieän OCI . Moät handle
coù theå ñöôïc söû duïng ñeå chöùa phaïm vi hoaëc thoâng tin noái keát , hoaëc coù theå chöùa thoâng tin veà caùc
haøm OCI hoaëc data . Handle coù theå laäp trình öùng duïng deã hôn , bôûi vì coù thö vieän ñeå quaûn lyù
data naøy .
Haàu heát caùc öùng OCI caàn truy caäp thoâng tin ñöôïc löu tröõ trong handle . ñeå truy caäp thoâng tin
naøy ta duønh hai haøm OCI OCIAttrGet() vaø OCIAttrSet()
Baûng döôùi ñaây ñöa ra danh saùch caùc handle ñöôïc ñònh nghóa cho OCI . Moãi kieåu handle , kieåu
data C vaø kieåu handle haèng soá ñöôïc ñöa ra .
Table 2-1 OCI Handle Types
C Type Description Handle Type
Trang 10