Minggu, 04 Mei 2014

Terpenjara Dalam Waktu

Posted by Unknown On 19.30 | No comments
(Sebuah Kisah tanpa Batas)

Disana diujung lorong ruangan sempit, kutemui dirimu melangkah. Hampir disetiap langkahmu kudapati rasa yang begitu yakin tanpa ada sedikitpun ragu. Kepalamu yang seringkali menengadah keatas, tubuhmu yang begitu tinggi seringkali aku lihat dilorong ruangan itu. Selalu aku menghitung waktu dan menatanya agar mampu kulihat dirimu dalam waktuku.
Terkadang pernah kudapati mata kita bertemu. Namun seringkali aku melempar pandanganku berharap tak kau dapati aku sedang menatapmu. Entah mengapa saat mataku menatapmu, selalu terjadi aliran darah yang tak pernah normal, jantung berdegup tak seperti biasanya juga tulang tubuhku yang begitu kaku. Namun sering aku berusaha menguasai diri untuk terlihat biasa saja saat kau berada di depanku dan berbicara denganku.
Gayamu yang terlihat begitu angkuh, membuatku merasa senang saat kau memanggil namaku. Aku selalu merasa takut saat hatiku turut bicara bahwa “aku menyukaimu”. Entah apa yang aku suka darimu. “Ya Allah, aku minta maaf karena berani menyukai makhluk ciptaanmu yang satu ini. Maaf aku pernah menatapnya. Astagfirullah” itu yang sering bibirku utarakan.
Seringkali kau masuk ke dalam bunga tidurku. Mungkin karena aku terlalu sering memikirkanmu. Mengapakah engkau? Mengapa engkau tak hadirkan semua asa dalam nyata? Jika dirasa kaulah yang terbaik, izinkan aku tak pernah menghapusmu dari asaku “tak akan pernah”. Namun, tidakkah kau bisa bersikap hangat? Kenapa hanya padaku?
Aku cukup tau diri untuk hal ini. Aku tau mana saja yang tergolong mungkin dan tidak mungkin. Aku sebagai manusia bisa apa? Toh semua tergantung padaNya. Aku hanya mampu membiarkan asaku berlabuh hingga akhirnya dia menepi. Kuserahkan asaku padaMu. Biar Engkau yang mengarahkan kemana asaku kan menetap. Semoga saat itu memang sempat, agar tak selalu terpenjara dalam waktu. Asaku kan berlabuh disana dan akan menepi tepat pada hari itu dan untuk selamanya. Insya Allah J .

Dee-



Kamis, 01 Mei 2014

TRANSAKSI

Posted by Unknown On 20.52 | No comments
TRANSAKSI
Transaksi adalah satu atau beberapa aksi yang dilakukan program aplikasi untuk  mengakses atau mengubah isi basis data. Transaksi merupakan bagian dari pengeksekusian sebuah program yang melakukan pengaksesan basis data dan bahkan juga melakukan serangkaian perubahan data.  DBMS yang kita gunakan harus menjamin bahwa setiap transaksi harus dapat dikerjakan secara utuh atau tidak sama sekali.  Tidak boleh ada transaksi yang hanya dikerjakan sebagian, karena dapat menyebabkan inkonsistensi basis data.  
Transaksi bertujuan unuk mencegah dari kehilangan ataupun kerusakan data. Sebuah transaksi berpeluang untuk mengganggu integritas basis data yang dapat membuat kondisi/hubungan antar data tidak seperti seharusnya.  Untuk menjamin agar integritas dapat tetap terpelihara maka setiap transaksi harus memiliki sifat-sifat:
1. Atomicity, dimana semua operasi dalam transaksi dapat dikerjakan seluruhnya atau tidak sama sekali.
2. Consistency, dimana eksekusi transaksi harus dapat menjamin data tetap konsisten setelah transaksi berakhir.
3. Isolation, jika pada sebuah sistem basis data terdapat sejumlah transaksi yang dilaksanakan secara bersamaan, maka semua transaksi yang dilaksanakan pada saat yang bersamaan tersebut harus dapat dimulai dan bisa berakhir.
 4. Durability, dimana perubahan data yang terjadi setelah sebuah transaksi berakhir dengan baik, harus dapat bertahan bahkan jika seandainya sistem mati.

OPERASI TRANSAKSI PADA ORACLE 
Didalam transaksi, terdapat dua buah operasi untuk menjaga integritas dan ketahanan data, diantaranya dengan melakukan operasi commit dan rollback. 
è Commit berfungsi untuk menandakan bahwa transaksi telah selesai dilaksanakan.
è Rollback berfungsi untuk memberitahukan bahwa transaksi harus diulang karena adanya suatu kegagalan.
Untuk mencoba, mari ikuti langkah berikut:
1.       Connect dulu ke oracle. Dengan membuka Run SQL command Line dengan user dan password yang kamu tuju.

2.       Buat sebuah table
create table dicoba(
                id_coba number primary key,
                nama varchar2(20) not null
);


--buat sequence
create sequence seq_idcoba increment by 1;

--input tablenya
insert into dicoba values (seq_idcoba.nextval,'A');
insert into dicoba values (seq_idcoba.nextval,'B')
insert into dicoba values (seq_idcoba.nextval,'C');
insert into dicoba values (seq_idcoba.nextval,'D');
insert into dicoba values (seq_idcoba.nextval,'E');

dan teng teng jreng jreng inilah hasilnya. (haha apasih gaje).



Oke sekarang kita ke langkah selanjutnya.

1.       Untuk mengetahui perbedaan Commit dan rollback, coba langkah berikutSQL Command Line dengan latar yang berbeda.

2.       Setelah itu kamu pastikan keduanya login dengan user yang sama, misalkan usernya itu Transaksi. Kalau udah, kita tampilkan dulu data yang tadi kita buat sebelumnya dikedua SQL Command Line tersebut.
3.       Coba kamu  ketikkan
insert into dicoba values (seq_idcoba.nextval,'F');
pada command line yang pertama.

Lalu commit Run SQL Command Line yang pertama setelah di insert into.
--untuk menandakan bahwa proses telah selesai dilakukan
Commit;

--untuk kembali pada proses yang telah di commit
rollback;

SAVE POINT
Save Point secara sederhana merupakan sebuah titik aman, dimana kita telah menyelesaiakan satu atau beberapa transaksi. Save point dianalogikan seperti sebuah check point saat kita bermain game (aku sih lebih suka menyebutnya dengan penandaan).  Fungsi dari save point adalah supaya pada saat kita ingin rollback atau ada transaksi yang gagal, transaksi tidak berjalan dari awal kembali, tetapi dari save poin yang telah kita buat.  Untuk membuat sebuah save point, caranya adalah :
SAVEPOINT [nama save point];
Missal:
Savepoint  a;

Setelah dibuat save pointnya kita dapat rollback ke save point tersebut dengan cara :
ROLLBACK TO[nama save point];



ISOLASI TRANSAKSI  
Dalam transaksi database, ada 3 hal yang harus dicegah yaitu. 
a.        Dirty Read Transaksi membaca data dari hasil transaksi lainnya yang gagal. Kedua transaksi tersebut berjalan bersamaan.
b.       Non-Repeatable Read Transaksi membaca ulang data yang telah di baca sebelumnya karena data tersebut telah di modifikasi oleh transaksi lainnya.
c.       Phantom Read Transaksi membaca sebuah data yang telah hilang akibat dari transaksi yang lainnya. 

Untuk mencegah 3 hal tersebut, maka dalam Oracle terdapat 2 level isolasi yang dapat diimplementasikan, yaitu : 

a.       Read Commited  Transaksi hanya dapat melihat perubahan data setelah transaksi lain telah commit pada data tersebut. (Seperti dalam contoh commit)

b.      Serializable  Adalah level isolasi yang menyediakan isolasi transaksi yang paling ketat. Level ini mengemulasikan eksekusi transaksi secara serial, menjadikan transaksi dieksekusi satu setelah yang lainnya,seperti secara serial, bukan secara bersamaan (pararel). Tetapi aplikasi yang menggunakan level isolasi ini harus bersedia untuk mengulangi transaksi dikarenakan kegagalan pengserialan transaksi. Saat transaksi berada pada level serializable, sebuah query SELECT hanya melihat data yang di COMMIT sebelum transaksi di mulai; transaksi tersebut tidak akan pernah melihat baik data yang belum di COMMIT atau perubahan data yang terjadi selama eksekusi transaksi oleh transaksi lain yang berjalan pada waktu bersamaan (e.g. saat transaksi ini berjalan, ada transaksi lain yang melakukan COMMIT pada data). Jika pada transaksi dengan level isolaso Serializable mengandung DML (Data Manipulatin Language) yang mencoba untuk meng-update suatu data yang mungkin sudah di update pada sebuah transaksi yang belum di commit pada awal transaksi Serializable, maka perintah DML tersebut akan gagal.  Untuk mengaplikasikan level isolasi Serializable, adalah dengan menggunakan perintah : 
        SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
     Isolai level ini mencegah terjadinya Phantom Read.  
 
LOCKING PROTOCOL  
Pada transaksi database, dikenal istilah locking yang berfungsi untuk menjaga integritas data. Terdapat dua buah metode locking yaitu :
a.        Shared Lock (S-LOCK)  Jika transaksi memiliki shared lock pada suatu data, transaksi tersebut hanya bisa melakukan pembacaan.
b.      Exclusive Lock (X-LOCK)  Bagi transaksi yang memiliki exclusive lock pada suatu data, transaksi tersebut dapat melakukan perubahan dan pembacaan terhadap data tersebut.  

Untuk shared lock, dapat dimiliki oleh beberapa transaksi dalam satu waktu, namun untuk exclusive lock, hanya dapat dimiliki oleh satu transaksi pada satu waktu.  

PENGUNCIAN LEVEL TABEL
Penguncian yang berfungsi untuk mengunci suatu tabel untuk mencegah perubahan atau penghapusan tabel selama ada transaksi yang menggunakan tabel tersebut.  Untuk melakukan perintah penguncian tabel, adalah sebagai berikut. 
LOCK TABLE [nama tabel]; 

PENGUNCIAN LEVEL BARIS
Penguncian yang dilakukan pada baris (ROW) yang sedang digunakan oleh suatu transaksi sampai transaksi tersebut selesai dilakukan. Penguncian level baris hanya berlaku untuk operasi UPDATE dan DELETE.  

DEADLOCK 

Merupakan situasi dimana dua atau lebih transaksi dalam kondisi wait-state, satu sama lain menunggu Lock dilepas sebelum di mulai


Rachmi Mulyani || 1200550 || c2

Blogroll

About