praktikum basis data terdistribusi modul 4 sinkronisasi data kelas 6c

advertisement
PRAKTIKUM BASIS DATA TERDISTRIBUSI
MODUL 4
SINKRONISASI DATA
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 sinkronisasi database diantara database yang terdistribusi
Mahasiswa mampu mengimplementasikan konsep sinkronisasi database pada skema yang
homogen (sama), baik menggunakan trigger maupun stored procedure
Mahasiswa mampu mengimplementasikan job_scheduler yang digunakan untuk
proses
penjadwalan dari sinkronisasi data antar server
II. APLIKASI YANG DIBUTUHKAN
Aplikasi Oracle XE
SQL Developer
Aplikasi Oracle Client
III. DASAR TEORI
Sinkronisasi data adalah suatu proses untuk menjaga kosistensi data yang ada pada suatu
server dengan data yang berada pada server yang lain. Dalam proses sinkronisasi
database, terdapat proses pengkopian data yang disimpan ke dalam suatu table dan skema yang
berada pada database yang lain. Dengan adanya proses sinkronisasi memungkinkan suatu data
yang berada pada database tertentu akan dapat terupdate secara langsung maupun berkala
pada database yang lain. Teknik inilah yang merupakan dasar dari konsep replikasi yang ada
pada database.
Dalam suatu kasus database terdistribusi, mekanisme sinkronisasi ini diperlukan
untuk mengupdate data yang terdapat pada global schema yang diakses oleh suatu user secara
langsung. Data yang diupdate pada global schema merupakan data yang berada pada local
schema dari database yang terdistribusi. Antara local schema dengan global schema bisa jadi
mempunyai skema yang sama secara struktur datanya (homogeneous), ataupun berbeda
(heterogeneous). Dalam kasus heterogeneous schema maupun homogeneous schema, proses
sinkronisasi yang dilakukan oleh database harus mampu menyesuaikan struktur data yang
ada pada masing-masing database yang berbeda. Hal ini dilakukan untuk menjaga konsistensi
data. Selain permasalahan skema yang berbeda, ada beberapa hal yang harus diperhatikan
selama proses sinkronisasi database berlangsung, yaitu :
1. Kesamaan antara struktur data yang akan dilakukan proses sinkronisasi
Pada heterogeneous skema, terdapat perbedaan struktur data yang ada pada table
tertentu pada database yang berbeda, sehingga proses sinkronisasi harus memperhatikan
heterogenitas tersebut. Proses sinkronisasi harus mampu menterjemahkan data yang bisa
jadi memiliki tipe data yang berbeda, sehingga bisa disimpan ke dalam table yang
baru. Beberapa database menyediakan suatu stored procedure (yang dapat dibuat
sendiri) yang bisa digunakan untuk memanipulasi data pada selama proses sinkronisasi
berlangsung. Sedangkan pada homogeneous schema di dalam proses sinkronisasi tidak
memerlukan proses penterjemahan data dari satu table ke table yang lain yang berada pada
database yang berbeda.
2. Frekuensi proses sinkronisasi yang dilakukan.
Penentuan frekuensi proses sinkronisasi ini juga perlu diperhatikan. Bisa jadi ada proses
sinkronisasi yang berjalan secara realtime, atau ada pula yang berjalan secara periodic.
Sinkronisasi secara realtime terjadi ketika suatu table pada suatu database tertentu
mengalami proses manipulasi data, secara seketika perubahan dari data tersebut akan
terupdate ke table pada database yang berbeda. Sedangkan proses sinkronisasi secara
periodik terjadi ketika proses update tersebut dilakukan pada waktu tertentu secara
berulang.
3. Situasi kompleks dimana kedua buah database dilakukan proses update data secara
bersamaan.
Mekanisme sinkronisasi data pada oracle
Oracle menyediakan suatu mekanisme untuk melakukan sinkronisasi data pada
database terdistribusi. Setiap perubahan yang ada pada suatu server database akan
berpengaruh kepada server database yang lain, yang terhubung pada suatu sistem database
terdistribusi. Mekanisme-mekanisme yang bisa dilakukan untuk proses sinkronisasi pada
database oracle antara lain adalah :
1. Menggunakan suatu stored procedure.
Oracle menyediakan suatu fitur stored procedure yang dapat digunakan untuk
menangani proses sinkronisasi. Stored procedure ini dapat dibuat oleh database
developer sesuai dengan kebutuhan data dan proses sinkronisasi yang berjalan pada dua
buah server yang berbeda tersebut
2. Menggunakan trigger
Apabila skema yang ada pada kedua buah table yang berbeda database tersebut sama,
dan proses sinkronisasi dilakukan secara realtime, maka dapat digunakan database
trigger. Database trigger ini akan memproses segala perubahan data (insert, update,
delete) yang terjadi pada suatu table, sehingga secara realtime akan berpengaruh
pada table yang lain.
3. Menggunakan oracle replication
Oracle menyediakan suatu fitur replikasi database. Replikasi merupakan suatu
proses untuk membuat duplikat atau replika dari suatu table data yang ada pada database
4. Menggunakan oracle stream dan golden gate
Oracle stream merupakan suatu fitur yang ada pada oracle yang memungkinkan seorang
user untuk mengontrol informasi, penyebaran data, transaksi, dan event di dalam
suatu aliran data antara database yang satu dengan database yang lain.
5. Menggunakan paket DBMS_COMPARISON pada oracle
Merupakan suatu paket yang disediakan oleh database oracle, untuk menyediakan
fungsi-fungsi dan prosedur-prosedur yang digunakan untuk sinkronisasi data.
Prosedur ini memungkinkan pendeteksian perbedaan data pada dua buah table, dan
melakukan proses replikasi apabila diinginkan
Oracle Procedure
Procedure merupakan kumpulan dari statement PL/SQL yang memiliki nama
tertentu, dan dapat dipanggil sebagai suatu objek database yang menjalankan proses
tertentu. Stored procedure memungkinkan kita mendefinisikan suatu routine yang
menjalankan proses tertentu didalam mengolah data yang ada pada database. Stored
procedure menawarkan berbagai keuntungan di dalam mengembangkan, mengintegrasikan,
mengamankan, meningkatkan performansi dan alokasi memori dari suatu pengolahan database.
Dengan adanya stored procedure memungkinkan suatu proses pengolahan data di dalam
database dilakukan di level database, bukan di aplikasi, sehingga akan mempercepat
proses pengolahan data. Diantara keunggulan menggunakan stored procedure ini adalah :
1. Mengurangi overhead pengolahan data
2. Mengurangi network traffic
3. Menjalankan business logic pada database, dan mengurangi proses pengolahan data pada
client
4. Meninggkatkan keamanan pengolahan data, karena ditangani pada level database.
5. Mengurangi SQL injection
Syntax untuk membuat procedure:
Keterangan:
1. OR REPLACE, digunakan untuk membuat procedure yang sudah pernah ada dengan
nama yang sama
2. SCHEMA, menspesifikasikan skema dimana procedure tersebut dibuat
3. IN, menspesifikasikan input dari suatu variable yang dijadikan sebagai parameter
4. OUT, menspesifikasikan suatu variable yang mengembalikan hasil ke yang memanggil
5. IN OUT, menspesikan suatu variable yang dijadikan sebagai parameter input,
sekaligus sebagai variable yang mengembalikan suatu nilai dari prosedur
6. NOCOPY, menginstruksikan database utnuk melewatkan argument secepat
mungkin. NOCOPY ini secara signifikan mampu meningkatkan performa dan kecepatan
ketika suatu nilai dilewatkan ke dalam prosedur melalui suatu argument.
7. Datatype, mendefinisikan tipe data dari argument
8. Pl/sql subprogram, mendeklarasikan PL/SQL subprogram
Contoh pembuatan prosedur:
Ketika dijalankan remove_procedure akan melakukan penghapusan data pada employee tertentu.
Pada saat dijalankan, parameter employee_id harus diisi dengan ID dari employee. Untuk
menghapus data employee tertentu, prosedur ini menggunakan SQL delete dengan criteria
employee_id yang sudah dimasukkan sebagai parameter.
IV. SOAL PRATIKUM
Dari gambar diatas diskenariokan terdapat dua buah database Oracle yaitu di branch dan
headquarters yang tehubung dengan database link. Skema database pada server Branch
dapat dilihat pada Gambar 2. Sedangkan skema yang terdapat pada server Headquarters dapat
dilihat pada Gambar 3.l
Berdasarkan scenario dan rancangan database diatas, selesaikan permasalahan berikut
1. Buatlah table pada database headquarters sesuai dengan rancangan skema di Gambar 3.
2. Buatlah prosedur yang melakukan pemindahan data dari tabel order details yang
ada di branch ke table order details yang ada di skema headquarters. Dimana Sum
Quantity berisi jumlah barang yang diorder tiap waktu tertentu (bulan dan tahun
tertentu), sedangkan timeID berisi id dari table Time yang merupakan waktu order
barang dimana beris bulan dan tahun order. Apabila data sebelumnya yang ada di
skema Headquarters sebelumnya sudah ada maka secara otomatis data akan dihapus
3. Buatlah prosedur yang melakukan proses update data dari Products dan Categories yang
ada di skema branch ke table Products dan Categories yang ada di skema headquarters.
Prosedur tersebut bisa melakukan update hanya pada data yang paling baru saja,
sedangkan data yang lama tidak ikut terupdate (catatan: boleh modifikasi table Products
dan Categories di skema Branch, sehingga info data baru dan lama dapat tersimpan)
4. Buatlah job scheduling yang menjalankan prosedur nomer 3 dan nomer 2 diatas
secara berkala setiap 1 hari sekali
IV. HASIL PRATIKUM
1. Login dengan SERVER HEADQUARTER
Table Categories :
Data table categories :
Table customers
Data table customers
Table Order_details
Data table order_details
Table Products
Data table products
Table time
2. PROCEDURE DARI BRANCH KE HEADQUARTER ORDERDETAILS UNTUK
SUM QUANTITY, TIMEID SERTA DATA YANG SAMA AKAN DI HAPUS
Kemudian procedure di jalankan :
3. MEMBUAT TRIGGER DAN PROSEDURE INSER, UPDATE, DELETE
Trigger Categories :
create or replace
TRIGGER "CAT"
after insert or update or delete on CATAGORIES
for each row
declare
pragma autonomous_transaction;
BEGIN
if inserting then
begin
INSERT INTO CATTEMP VALUES
(:NEW.CATAGORIESID,:NEW.CATAGORIESNAME,:NEW.DESCRIPTION,'insert');
COMMIT;
end;
end if;
if updating then
begin
INSERT INTO CATTEMP VALUES
(:OLD.CATAGORIESID,:NEW.CATAGORIESNAME,:NEW.DESCRIPTION,'update');
COMMIT;
end;
end if;
if deleting then begin
INSERT INTO CATTEMP (CATAGORIESID,FLAG) VALUES (:OLD.CATAGORIESID,'delete');
COMMIT;
end;
end if;
END;
Trigger products :
create or replace
TRIGGER "PRO"
after insert or update or delete on PRODUCTS
for each row
declare
pragma autonomous_transaction;
BEGIN
if inserting then
begin
INSERT INTO PRODTEMP VALUES
(:NEW.PRODUCTID,:NEW.PRODUCTSNAME,:NEW.SUPPLIERID,:NEW.CATAGORIESID,:NEW.QUAN
TITY,:NEW.UNITPRODUCTS,:NEW.UNITSIP,:NE
W.UNITSO,:NEW.REORDER,'insert');
COMMIT;
end;
end if;
if updating then
begin
INSERT INTO PRODTEMP VALUES
(:OLD.PRODUCTID,:NEW.PRODUCTSNAME,:NEW.SUPPLIERID,:NEW.CATAGORIESID,:NEW.QUAN
TITY,:NEW.UNITPRODUCTS,:NEW.UNITSIP,:NEW
.UNITSO,:NEW.REORDER,'update');
COMMIT;
end;
end if;
if deleting then begin
INSERT INTO PRODTEMP (PRODUCTID,FLAG) VALUES (:OLD.PRODUCTID,'delete');
COMMIT;
end;
end if;
END;
Membuat procedure :
Procedure insert categories :
create or replace
procedure cat_in is
vr_catagoriesid number;
vr_catagoriesname varchar2(4000);
vr_description varchar2(4000);
vr_flag varchar2(4000);
cursor cat_in is select * from cattemp where flag='insert';
begin
open cat_in;
loop
fetch cat_in into vr_catagoriesid, vr_catagoriesname, vr_description, vr_flag;
insert into categories@dinikeadhis values (vr_catagoriesid, vr_catagoriesname, vr_description);
commit;
delete from cattemp where catagoriesid = vr_catagoriesid and flag = 'insert';
commit;
exit when cat_in%NOTFOUND;
end loop;
close cat_in;
end;
Procedure update categories:
create or replace
procedure cat_up is
vr_catagoriesid number;
vr_catagoriesname varchar2(4000);
vr_description varchar2(4000);
vr_flag varchar2(4000);
cursor cat_up is select * from cattemp where flag='update';
begin
open cat_up;
loop
fetch cat_up into vr_catagoriesid, vr_catagoriesname, vr_description, vr_flag;
update categories@dinikeadhis set categoryname=vr_catagoriesname, description=vr_description where
categoryid=vr_catagoriesid;
commit;
delete from cattemp where catagoriesid = vr_catagoriesid and flag = 'update';
COMMIT;
exit when cat_up%NOTFOUND;
end loop;
close cat_up;
end;
Procedure delete categories:
create or replace
procedure cat_del is
vr_catagoriesid number;
cursor cat_del is select catagoriesid from cattemp where flag='delete';
begin
open cat_del;
loop
fetch cat_del into vr_catagoriesID;
delete from categories@dinikeadhis where categoryid=vr_catagoriesid;
commit;
delete from cattemp where catagoriesid = vr_catagoriesid and flag = 'delete';
COMMIT;
exit when cat_del%NOTFOUND;
end loop;
close cat_del;
end;
Procedure insert product
create or replace
procedure pro_in is
vr_productid number;
vr_productsname varchar2(4000);
vr_supplierid number;
vr_categories_id number;
vr_quantity varchar2(4000);
vr_unitproducts varchar2(4000);
vr_unitsip varchar2(4000);
vr_unitso varchar2(4000);
vr_reorder varchar2(4000);
vr_flag varchar2(4000);
cursor pro_in is select * from prodtemp where flag='delete';
begin
open pro_in;
loop
fetch pro_in into vr_productid, vr_productsname, vr_supplierid, vr_categories_id, vr_quantity,
vr_unitproducts, vr_unitsip, vr_unitso,
vr_reorder, vr_flag ;
insert into products@dinikeadhis set productname=vr_productsname, supplierid=vr_supplierid,
categoryid=vr_categories_id,
quantityperunit=vr_quantity, unitprice=vr_unitproducts, unitsinstock=vr_unitsip, unitsonorder=vr_unitso,
reorderlevel=vr_reorder where
productid=vr_productid;
commit;
delete from prodtemp where productid = vr_productid and flag = 'update';
COMMIT;
exit when pro_up%NOTFOUND;
end loop;
close pro_up;
end;
procedure update product
create or replace
procedure pro_up is
vr_productid number;
vr_productsname varchar2(4000);
vr_supplierid number;
vr_categories_id number;
vr_quantity varchar2(4000);
vr_unitproducts varchar2(4000);
vr_unitsip varchar2(4000);
vr_unitso varchar2(4000);
vr_reorder varchar2(4000);
vr_flag varchar2(4000);
cursor pro_up is select * from prodtemp where flag='update';
begin
open pro_up;
loop
fetch pro_up into vr_productid, vr_productsname, vr_supplierid, vr_categories_id, vr_quantity,
vr_unitproducts, vr_unitsip, vr_unitso,
vr_reorder, vr_flag ;
update products@dinikeadhis set productname=vr_productsname, supplierid=vr_supplierid,
categoryid=vr_categories_id,
quantityperunit=vr_quantity, unitprice=vr_unitproducts, unitsinstock=vr_unitsip, unitsonorder=vr_unitso,
reorderlevel=vr_reorder where
productid=vr_productid;
commit;
delete from prodtemp where productid = vr_productid and flag = 'update';
COMMIT;
exit when pro_up%NOTFOUND;
end loop;
close pro_up;
end;
Procedure delete product
create or replace
procedure pro_del is
vr_productid number;
vr_productsname varchar2(4000);
vr_supplierid number;
vr_categories_id number;
vr_quantity varchar2(4000);
vr_unitproducts varchar2(4000);
vr_unitsip varchar2(4000);
vr_unitso varchar2(4000);
vr_reorder varchar2(4000);
vr_flag varchar2(4000);
cursor pro_del is select * from prodtemp where flag='delete';
begin
open pro_del;
loop
fetch pro_del into vr_productid, vr_productsname, vr_supplierid, vr_categories_id, vr_quantity,
vr_unitproducts, vr_unitsip, vr_unitso,
vr_reorder, vr_flag ;
delete from products@dinikeadhis set productname=vr_productsname, supplierid=vr_supplierid,
categoryid=vr_categories_id,
quantityperunit=vr_quantity, unitprice=vr_unitproducts, unitsinstock=vr_unitsip, unitsonorder=vr_unitso,
reorderlevel=vr_reorder where
productid=vr_productid;
commit;
delete from prodtemp where productid = vr_productid and flag = 'delete';
COMMIT;
exit when pro_del%NOTFOUND;
end loop;
close pro_del;
end;
Setelah membuat trigger dan procedure, pastikan semua trigger dan procedure tidak ada yang
error, jika ada yang error, perbaiki sesuai message error nya dimana, setelah itu, langkah
selanjutnya adalah mencoba update data dari server branch dan dilihat pada server headquarter :
Data awal table categories di server headquarter sebelum di insert dari server branch :
setelah melakukan query diatas, lalu cek table categories pada server headquarter :
Update data table categories dari server branch :
Cek table categories dari server headquarter :
4. MEMBUAT JOB SCHEDULE
Job scheduling untuk insert categories per menit ke database headquarter :
Kemudian kita coba insert ke table categories milik headquarter
Setelah 1 menit maka data tadi akan masuk ke tabel categories di database headquarter
Download