PRAKTIKUM BASIS DATA TERDISTRIBUSI
MODUL 3
DATABASE LINK DENGAN HETEROENOUS SERVICE
Oleh:
ANISA ISTIQOMAH 09560018
ABDURRACHMAN 09560505
KELAS 6C
LABORATORIUM REKAYASA PERANGKAT LUNAK
TEKNIK INFORMATIKA
FAKULTAS TEKNIK
UNIVERSITAS MUHAMMADIYAH MALANG
2011 -2012
I. TUJUAN
Mahasiswa mengenal konsep dari heterogenous service pada database link
Mahasiswa mampu mengimplementasikan heterogenous servicedatabase link untuk
pembuatan database teristribusi
Mahasiswa mampu mengimplementasikan koneksi antara database oracle dengan
database yang lain, seperti MS. Access, MySQL, dan PostgreSQL
Mahasiswa mampu mengimplementasikan SQL DML untuk manipulasi data secara
remote pada server database
II. APLIKASI YANG DIBUTUHKAN
Aplikasi Oracle XE
SQL Developer
Aplikasi Oracle Client
III. DASAR TEORI
Heteregeneous Service Architecture
Oracle menyediakan suatu mekanisme yang digunakan untuk koneksi antara
database Oracle dengan database yang lain. Mekanisme koneksi itu menggunakan
Heterogeneous service yang ada di dalam fitur Oracle.
Komponen heterogeneous service pada Oracle akan berkomunikasi dengan proses
yang terdapat pada Heterogeneous service agen yang akan mengkomunikasikn dengan
database non-Oracle. Komponen untuk membangun heterogeneous service dibagi ke dalam
tiga bagian, yaitu :
• Komponen heterogeneous service pada Oracle database server
• Agent generic code
• Driver koneksi untuk komunikasi dengan database non-Oracle
Heterogeneous Service Agent
Heterogeneous service agent adalah suatu proses yang melakukan koneksi
antara database Oracle dengan database non-Oracle. Proses di dalam agent ini yang
melakukan akses pada database non-Oracle dinamakan gateway. Akses ke semua gateway
dilakukan melalui komponen heterogeneous service di dalam Oracle server, dan setiap
gateway berisi agent-generic code yang sejenis. Setiap gateway memiliki suatu driver
yang menghubungkan antara Heterogeneous service API dengan client API yang terdapat
pada database non-Oracle Proses di dalam agent terdiri dari dua komponen, yaitu agent
generic code dan driver spesifik dari database non-Oracle. Agar agent di dalam Oracle
dapat mengakses database non-Oracle, maka database non-Oracle harus mempunyai
semacam library yang menghubungkan antar dua database tersebut. Suatu Agent untuk
heterogeneous service dapat terletak di beberapa tempat, yaitu:
• Satu tempat dengan database non-Oracle
• Satu tempat dengan database Oracle
• Pada tempat yang berbeda dari database non-Oracle maupun database Oracle
Proses pada agent biasanya dimulai pada saat user session membuat koneksi
pertama kali dengan database non-Oracel melalui pembuatan database link. Koneksi ini
dibuat dengan menggunakan Oracle remote data software (Oracle Net Service) yang
memungkinkan kedua buah client/server dan server-server berkomunikasi. Proses agent
akan berhenti berjalan ketika user session di putus atau secara eksplisit database link di
tutup koneksinya.
Tipe dari Heterogeneous Service Agent ada dua, yaitu :
• Oracle transparent gateway
Suatu gateway yang dirancang untuk mengakses database non-Oracle tertentu seperti
database Sybase Solaris. Dengan Oracle transparent gateway, kita dapat menggunakan
database Oracle untuk mengakses database non-Oracle yang terdistrubusi tanpa harus
mengetahui dimana letak database-database tersebut.
Generic connectivity agent
Oracle menyediakan suatu fitur Oracle Generic Connectivity yang memungkinkan
Oracle Transparant Gateway berkomunikasi dengan database non-Oracle yang lain.
Agent ini menyediakan generic code, sedangkan pada database non-Oracle harus
menyeidakan suatu driver untuk koneksi yaitu ODBC atau OLE DB. Driver ODBC
maupun OLE DB inilah yang nantinya akan dikonfigurasi untuk koneksi.
Komponen dari heterogeneous service
Komponen dari heterogeneous service dibagi menjadi dua, yaitu:
• Transaction service
Transaction service memungkinkan database non-Oracle dapat terintegrasi kedalam
Oracle database transaction and session. Pada saat mengakases database non-Oracle
untuk pertama kali melalui database link pada Oracle user session, secara transparan
akan dibuat session untuk otentikasi pada database non-Oracle
• SQL service
Beberapa tugas yang dikerjakan SQL service antara lain
1. Melakukan pemetaan pemanggilan SQL pada heterogeneous service driver (API)
Menterjemahkan bahasa SQL yang ada pada Oracle ke SQL yang ada pada
database non-Oracle
2. Menterjemahkan query yang ada pada Oracle Data Dictionary ke database non-Oracle
data dictionary
3. Menterjemahkan data yang memiliki tipe data yang berbeda antara database Oracle
dengan non-Oracle
4. Memperbaharui hilangnya fungsionalitas pada database non-Oracle, dengan
melakukan multiple query untuk mendapatkan data yang diinginkan.
Diagram alur proses koneksi yang ada pada Oracle Gateway
1. Aplikasi client pertama kali akan mengirimkan query melalui Oracle Net pada database
server
2. Oracle database server akan mengirimkan query melalui gateway dengan menggunakan
Oracle Net.
3. Untuk transaksi pertama pada suatu session, gateway akan melakukan otentikasi pada
database non-Oracle dengan menggunakan username, dan password yang valid pada
database non-Oracle.
4. Gateway akan mengubah statemen SQL oracle ke dalam statemen SQL yang
dipahami oleh database non-Oracle
5. Gatewaya akan melakukan proses pengambilan data dengan menggunakan non-
Oracle SQL stamement
6. Gateway akan mengubah data yang diambil ke dalam format yang sesuai dengan
database Oracle
7. Gateway akan mengembalikan hasil query ke database oracle dengan menggunakan
Oracle Net Service
8. Database Oracle akan melewatkan hasil query ke dalam aplikasi client dengan
menggunakan Oracle Net. Database link akan tetap terbuka, sampai session yang terdapat
di dalam gateway selesai, dan secara eksplisit database link di tutup.
IV. SOAL PRATIKUM
Sesuai dengan scenario gambar diatas :
1. Pada Oracle Server buatlah skema (user) baru dengan nama STORE. Skema ini
menyimpan data stock, supplier, dan employees
2. Pada server MYSQL (Tokyo) dan Postgre (London), buatlah database baru yang berisi
table-tabel berikut ini.
3. Isikan data dummies (simulasi) yang ada pada masing-masing table yang sudah dibuat
4. Buatlah koneksi dengan menggunakan Heterogeneous Service antara database
Oracle dengan database MySQL
5. Buatlah koneksi dengan menggunakan Heteregeneous Service antara database
Oracle dengan database PostgreSQL
6. Pada table Stock, Supplier, dan Employees yang terdapat di New York buatlah trigger
yang mampu melakukan proses insert, delete, dan update secara otomatis pada
table yang bersesuaian yang terdapat di database Tokyo dan London, apabila data
pada table tersebut (di New York) di tambah.
7. Aturan trigger: Trigger tersebut harus dapat mengecek kolom flag yang terdapat
pada masing-masing table. Apabila kolom flag bernilai ‘tky’ maka data hanya akan di
update di server Tokyo. Sedangkan apabila kolom flag bernilai ‘lnd’ maka data hanya
akan di update secara otomatis menggunakan trigger di server London.
IV. HASIL PRATIKUM
1. Login dengan account user store
Membuat tabel pada server oracle, membuat tabel stock
Membuat tabel supplier
Membuat tabel employees
2. Membuat tabel pada server mysql , tabel stock, supplier, dan employees
3. Membuat tabel pada server postgre , tabel stock, supplier, dan employees berserta isinya
4. Setelah install ODBnya kemudian dilakukan konfigurasi seperti di bawah ini baik Mysql
maupun postgre Konfigurasi hs pada
…./hs/admin
Listener.ora dan tnsname.ora pada …../network/admin
Restart service listener oracle
5. Buat database link untuk koneksi ke mysql dank e postgre
Dengan script:
Create database link dblink_mysql using ‘tnsmysql’
Create database link kepostgres using ‘tnspostgre’
Test koneksinya, Jika muncul jendela seperti di bawah ini berarti konfigurasi database link telah
berhasil dan dapat digunakan.
Cek database link mysql dengan mengakses tabel employees
Cek database link postgre dengan mengakses tabel employees
6. Trigger insert, update dan delete pada setiap tabel
Delete employees mysql
CREATE OR REPLACE TRIGGER "delete_employees" before delete on employees for each row WHEN
(old.flag='Tokyo') declare pragma autonomous_transaction; begin delete from employees@dblink_mysql where
"idemployees"=:old.idemployees; commit; end;
Delete employees postgre
CREATE OR REPLACE TRIGGER "delete_employeespos" after delete on employees for each row WHEN
(new.flag='London') declare pragma autonomous_transaction; begin delete from "employees"@kepostgres where
"idemployees"=:old.idemployees; commit; end;
Delete stock mysql
CREATE OR REPLACE TRIGGER "delete_stock" before delete on stock for each row WHEN (old.flag='Tokyo')
declare pragma autonomous_transaction; begin delete from stock@dblink_mysql where "ids"=:old.ids; commit;
end;
Delete stock postgre
CREATE OR REPLACE TRIGGER "delete_stockpos" after delete on stock for each row WHEN
(new.flag='London') declare pragma autonomous_transaction; begin delete from "stock"@kepostgres where
"ids"=:old.ids; commit; end;
Delete supplier mysql
CREATE OR REPLACE TRIGGER "delete_supplier" after delete on supplier for each row WHEN
(new.flag='Tokyo') declare pragma autonomous_transaction; begin delete from supplier@dblink_mysql where
"idsupplier"=:old.idsupplier; commit; end;
Delete supplier postgre
CREATE OR REPLACE TRIGGER "delete_supplierpos" after delete on supplier for each row WHEN
(new.flag='London') declare pragma autonomous_transaction; begin delete from "supplier"@kepostgres where
"idsupplier"=:old.idsupplier; commit; end;
Insert employees mysql
CREATE OR REPLACE TRIGGER "insert_employees" after insert on employees for each row WHEN
(new.flag='Tokyo') declare pragma autonomous_transaction; begin insert into employees@dblink_mysql values
(:new.idemployees,:new.empname,:new.empposition,:new.flag,:new.date_entry); commit; end;
Insert employees postgre
CREATE OR REPLACE TRIGGER "insert_employeespossss" after insert on employees for each row WHEN
(new.flag= 'London') declare pragma autonomous_transaction; begin insert into "employees"@kepostgres values
(:new.idemployees,:new.empname,:new.empposition,:new.date_entry,:new.flag); commit; end;
Insert stock mysql
CREATE OR REPLACE TRIGGER "insert_stock" after insert on stock for each row WHEN (new.flag='Tokyo')
declare pragma autonomous_transaction; begin insert into stock@dblink_mysql values
(:new.ids,:new.names,:new.types,:new.quantity,:new.flag,:new.date_entry); commit; end;
Insert stock posgre
CREATE OR REPLACE TRIGGER "insert_stockpos" after insert on stock for each row WHEN
(old.flag='London') declare pragma autonomous_transaction; begin insert into "stock"@kepostgres values
(:new.ids,:new.names,:new.types,:new.quantity,:new.flag,:new.date_entry); commit; end;
Insert supplier mysql
CREATE OR REPLACE TRIGGER "insert_supplier" after update on supplier for each row WHEN
(new.flag='Tokyo') declare pragma autonomous_transaction; begin insert into supplier@dblink_mysql values
(:new.idsupplier,:new.supplier_name,:new.supplier_location,:new.flag,:new.date_entry); commit; end;
Insert supplier postgre
CREATE OR REPLACE TRIGGER "insert_supplierpos" after insert on supplier for each row WHEN
(old.flag='London') declare pragma autonomous_transaction; begin insert into "supplier"@kepostgres values
(:new.idsupplier,:new.supplier_name,:new.supplier_location,:new.flag,:new.date_entry); commit; end;
Update employees mysql
CREATE OR REPLACE TRIGGER "update_employees" after update on employees for each row WHEN
(new.flag='Tokyo') declare pragma autonomous_transaction; begin update employees@dblink_mysql set
"empname"=:new.empname,"empposition"=:new.empposition where "idemployees"=:old.idemployees; commit;
end;
Update employees postgre
CREATE OR REPLACE TRIGGER "update_employeespos" after update on employees for each row WHEN
(new.flag='London') declare pragma autonomous_transaction; begin update "employees"@kepostgres set
"empname"=:new.empname,"empposition"=:new.empposition where "idemployees"=:old.idemployees; commit;
end;
Update stock mysql
CREATE OR REPLACE TRIGGER "update_stock" after update on stock for each row WHEN (new.flag='Tokyo')
declare pragma autonomous_transaction; begin update stock@dblink_mysql set "names"=:new.names,
"types"=:new.types, "quantity"=:new.quantity where "ids"=:old.ids; commit; end;
Update stock postgre
CREATE OR REPLACE TRIGGER "update_stockpos" after update on stock for each row WHEN
(old.flag='London') declare pragma autonomous_transaction; begin update "stock"@kepostgres set
"names"=:new.names, "types"=:new.types, "quantity"=:new.quantity where "ids"=:old.ids; commit; end;
Update supplier mysql
CREATE OR REPLACE TRIGGER "update_supplier" after update on supplier for each row WHEN
(new.flag='Tokyo') declare pragma autonomous_transaction; begin update supplier@dblink_mysql set
"supplier_name"=:new.supplier_name, "supplier_location"=:new.supplier_location where
"idsupplier"=:old.idsupplier; commit; end;
Update supplier postgre
CREATE OR REPLACE TRIGGER "update_supplierpost" after update on supplier for each row WHEN
(new.flag='London') declare pragma autonomous_transaction; begin update "supplier"@kepostgres set
"supplier_name"=:new.supplier_name,"supplier_Location"=:new.supplier_location where
"idsupplier"=:old.idsupplier; commit; end;
Kemudian muncul daftar nama triggers yang telah terbuat, jumlah keseluruhannya 18 trigger