Transaction
Upcoming SlideShare
Loading in...5
×
 

Transaction

on

  • 286 views

 

Statistics

Views

Total Views
286
Views on SlideShare
286
Embed Views
0

Actions

Likes
0
Downloads
1
Comments
0

0 Embeds 0

No embeds

Accessibility

Categories

Upload Details

Uploaded via as Microsoft PowerPoint

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

Transaction Transaction Presentation Transcript

  • Transaksi pada Oracle Basis Data Dasar
  • Nama kelompok :HendraMita
  • TRANSAKSITransaksi adalah konsep fundamental dari system database. Intidari transaksi adalah membundel operasi-operasi kedalam sebuahatau tidak sama sekali operasi.Bayangkan pada sebuah transaksi perbankan yang mentransferuang antara account :Sebagai contohnya, nasabah Alice mentransfer uang sebanyak Rp100.000 kepada nasabah Tara, maka ada dua operasi yang harus dilakukan, yaitu : (1) mengurangi saldo pada Nasabah Alice sebanyakRp 100.000 dan (2) menambah saldo pada nasabah Tara sebanyakRp 100.000.Pada kondisi yang ideal, kedua operasi tersebut berjalan lancar(saldo Alice berkurang Rp 100.000 dan saldo Tara bertambah Rp100.000). Sedangkan pada kondisi yang tidak ideal saldo Aliceberkurang Rp 100.000 sedangkan saldo Tara tidak bertambah Rp100.000. View slide
  • Ilustrasi kondisi transaksi yang tidak ideal View slide
  • Untuk menghindari kondisi kegagalan sepertiilustrasi diatas, DBMS menggunakan systemTransaksi, yang memaketkan beberapa operasimenjadi satu blok operasi Atomik, yaitu seluruhoperasi berhasil atau seluruh operasi gagal. Ilustrasi pemaketan transaksi kedalam sebuah blok
  • Pada DBMS transaksi di paketkan dengan klausa-klausa seperti dibawah : BEGIN TRANSACTION; UPDATE account SET saldo = saldo – 100000 WHERE nama = Alice; UPDATE account SET saldo = saldo + 100000 WHERE nama = Tara; -- etc, etc. COMMIT; Sebuah blok transaksi (pseudocode)
  • Untuk menjamin integritas data, maka setiap transaksi harus memilikisifat-sifat :1. Atomik (Atomicity) : semua operasi-operasi di dalam transaksi tersebut dapat di kerjakan seluruhnya atau tidak sama sekali. (dari pak Yudi Wibisono : semua berhasil atau semua gagal)1. Konsistensi (Consistency): eksekusi transaksi secara tunggal harus dapat menjamin data tetap konsisten setelah transaksi berakhir. (dari pak Yudi Wibisono : transaksi mempertahankan konsistensi database)1. Terisolasi (Isolation): jika pada sebuah sistem basisdata terdapat sejumlah transaksi yang dilaksanakan secara bersamaan, maka semua transaksi-transaksi yang dilaksanakan pada saat bersamaan tersebut tidak mempengaruhi satu sama lain. (dari pak Yudi Wibisono : transaksi terisolasi satu dengan yang lain)1. Bertahan (Durability): dimana perubahan data yang terjadi setelah sebuah transaksi berakhir dengan baik, harus dapat bertahan bahkan jika seandainya terjadi kegagalan system. (dari pak Yudi Wibisono : setelah commit, update harus survive di database).
  • STATUS TRANSAKSITerhenti atau tidak sempurnanya pelaksanaan sebuahtransaksi tidak selalu diakibatkan oleh kegagalan insidentialbaik dari perangkat keras (crash) ataupun kemacetan sistemoperasi (hang). Keadaan ini justru lebih sering terjadi secarasengaja, baik oleh aksi user yang sengaja menghentikaneksekusi transaksi karena terlalu lamanya pelaksanaantransaksi atau oleh keputusan penghentian transaksi olehDBMS akibat kondisi yang tidak diinginkan seperti DeadLock atau terlewatinya batas waktu (timeout) pelaksanaantransaksi yang telah di tetapkan. Dengan kenyataan ini, penting untuk di ketahuistatus (state) yang telah dicapai dalam pelaksanaan sebuahtransaksi. Transaksi yang terhenti pengeksekusiannya ditengah jalan (karena sebab apapun), akan dinyatakan dalamstatus gagal (failed). Selanjutnya transaksi itu akan dibatalkan (aborted).
  • STATUS TRANSAKSI(Lanjutan)Terhadap transaksi yang dibatalkan itu, data yang telahmengalami perubahan akibat pengeksekusian transaksitersebut oleh modul recovery dalam DBMS harus di kembalikankekeadaan semula (ROLLBACK), seperti keadaan dimanatransaksi belum di kerjakan sama sekali. Sementara transaksiyang telah di eksekusi dengan sempurna, biasa disebut beradadalam kondisi berhasil (commited).Perubahan nilai-nilai dalam basisdata oleh transaksi yang telahberada dalam status berhasil(commited) ini akan bersifatmenetap (persistent) dan tidak ada mekanisme apapun dalamDBMS yang dapat kita gunakan untuk mengembalikannya kenilai-nilai semula.Kecuali jika kemudian kita secara sengaja dan ekspisitmembuat/menjalankan transaksi yang merupakan kebalikandari transaksi sebelumnya(contoh: jika anda telah mengcommitsebuah transaksi transfer uang pada bank, tidak adamekanisme apapun di DBMS yang dapat mengembalikankekeadaan semula, kecuali jika anda membuat sebuahtransaksi yang bekerja membalikkan proses transfer uangtersebut).
  • Secara lengkap, status-status yang dapat dicapai oleh sebuahtransaksi sejak mulai dilaksanakan hingga selesai ataudibatalkannya transaksi tersebut adalah :• Aktif (Active), yang merupakan status awal (initial state) sebuah transaksi yang menunjukkan transaksi tersebut masih dieksekusi.• Berhasil Sebagian (Partially Commited), yaitu keadaan yang dicapai transaksi tepat pada saat operasi/instruksi terakhir dalam transaksi selesai di kerjakan.• Gagal (Failed), yang merupakan keadaan dimana sebuah transaksi terhenti pengeksekusiannya sebelum tuntas sama sekali.• Batal (Aborted), yaitu keadaan dimana sebuah transaksi dianggap tidak/belum dikerjakan yang tentu dengan terlebih dahulu diawali dengan mengembalikan semau data yang telah diubah oleh transaksi tersebut ke nilai-nilai semula (yang menjadi tanggung jawab DBMS)• Berhasil Sempurna (Commited), keadaan dimana transaksi telah dinyatakan berhasil di kerjakan seluruhnya dan basisdata telah merefleksikan perubahan-perubahan yang memang diinginkan transaksi.
  • Diagram berikut menunjukkan aliran dan siklusperalihan status (state) dari sebuah transaksi : Ketika sebuah transaksi mulai di kerjakan, maka transaksi tersebutsegera berada dalam status Active. Status ini akan terus dialami selama eksekusioperasi-operasi dalam transaksi tersebut masih berlangsung. Jika terjadipenghentian sebelum operasi terakhir dalam transaksi, maka transaksi segeraberalih ke status baru, yaitu failed. Namun jika keseluruhan operasi dalam transaksi selesai dikerjakan, maka transaksi tersebut dinyatakan berada dalam status berakhirsebagian (Partially Committed), dimana perubahan-perubahan data masih beradadalam memory utama yang bersifat tidak permanen (Volatile). Transaksi dalamstatus ini masih mungkin untuk berpindah ke status failed ( karena adapembatalan transaksi baik disengaja maupun tidak). Jika beralih ke statusfailed, maka nilai-nilai data yang baru yang masih ada di memory utama akan disalin/direkam ke dalam disk yang bersifat permanen.
  • Begitu proses perekaman tersebut selesai di kerjakan, maka transaksiberalih ke status yang baru, yaitu berhasil sempurna (committed).Sementara itu, terhadap transaksi yang berada dalam status failed, makaDBMS harus menjalankan proses RollBack. Proses tersebut dapat berupa : • Mengulangi pelaksanaan transaksi (restart) , yang dapat dilakukan terhadap transaksi yang gagal (failed) akibat kemacetan system (perangkat keras atau perangkat lunak) dan bukannya penghentian transaksi sengaja oleh user. • Mematikan transaksi (kill) yang dilakukan untuk transaksi yang dihentikan secara sengaja oleh user atau akibat adanya kesalahan logic dalam penulisan aplikasi.
  • Begitu salah satu dari pilihan proses tersebut selesaidi lakukan, maka transaksi berpindah ke status batal(aborted). Status berhasil sempurna (committed)maupun batal (aborted) merupakan statusterminasi, yaitu status akhir dalam pelaksanaantransaksi
  • TRANSAKSI DI ORACLE 10GOracle tidak menggunakan klausa BEGIN untuk memulaitransaksi, karena klausa BEGIN digunakan dalam PL/SQL dalamstruktur Blocknya.secara default, seluruh perintah di Oracle adalah sebuahtransaksi yang diawali dengan sebuah perintah DML dandiakhiri jika salah satu kondisi berikut ditemui : • Perintah COMMIT atau ROLLBACK di eksekusi. Perintah COMMIT membuat perubahan pada table menjadi permanen, sedangkan ROLLBACK membatalkan perubahan pada table. • User keluar dari SQL*Plus atau iSQL*Plus secara normal (COMMIT secara otomatis). • Pengeksekusian perintah DDL (Data Definition Language) atau DCL (Data Control Language) (COMMIT secara otomatis). • Database Crash (ROLLBACK secara otomatis). • Session SQL*Plus atau iSQL*Plus crash (ROLLBACK secara otomatis).
  • TRANSAKSI DI ORACLE 10GOracle tidak menggunakan klausa BEGIN untuk memulaitransaksi, karena klausa BEGIN digunakan dalam PL/SQL dalamstruktur Blocknya.secara default, seluruh perintah di Oracle adalah sebuahtransaksi yang diawali dengan sebuah perintah DML dandiakhiri jika salah satu kondisi berikut ditemui : • Perintah COMMIT atau ROLLBACK di eksekusi. Perintah COMMIT membuat perubahan pada table menjadi permanen, sedangkan ROLLBACK membatalkan perubahan pada table. • User keluar dari SQL*Plus atau iSQL*Plus secara normal (COMMIT secara otomatis). • Pengeksekusian perintah DDL (Data Definition Language) atau DCL (Data Control Language) (COMMIT secara otomatis). • Database Crash (ROLLBACK secara otomatis). • Session SQL*Plus atau iSQL*Plus crash (ROLLBACK secara otomatis).
  • Lalu bagaimana caranya agar kita dapatmengaplikasikan contoh-contoh yang ada? Mudah !ada berbagai cara untuk pengaplikasian ini. Carayang paling mudah adalah dengan membukasession baru dengan user yang sama.Untuk memudahkan dalam membedakan 2 sessiontersebut, anda dapat bedakan tampilan padaWindows Command Line pada Properties.Pada contoh disini, saya memisalkan CommandLine dengan background berwarna Hitam adalahUser 1 sedangkan Command Line denganbackground berwarna putih adalah User 2.
  • Lalu bagaimana caranya agar kita dapatmengaplikasikan contoh-contoh yang ada? Mudah !ada berbagai cara untuk pengaplikasian ini. Carayang paling mudah adalah dengan membukasession baru dengan user yang sama.Untuk memudahkan dalam membedakan 2 sessiontersebut, anda dapat bedakan tampilan padaWindows Command Line pada Properties.Pada contoh disini, saya memisalkan CommandLine dengan background berwarna Hitam adalahUser 1 sedangkan Command Line denganbackground berwarna putih adalah User 2.
  • Langkah-langkah :1. Jalankan 2 SQL Command Line2. Ubah warna salah satu Command Line Windows agar terlihat Perbedaannya (udah di Properties).3. Login dengan user yang sama pada kedua Session.4. Kedua Session ini dapat di misalkan sebagai dua user yang berbeda.
  • Bukti transaksi tidak akan terlihat oleh user lainsebelum transaksi di commit : • Gunakan user satu, masukkan 6 pada tabel deret : INSERT INTO deret VALUES (6); • Lalu cek isi tabel deret : SELECT COUNT(*) FROM deret; • Pindah dan gunakan user dua, lalu cek isi tabel deret. Apakah anda melihat perbedaan? • Pindah lagi ke user satu lalu jalankan perintah : COMMIT; • Pindah lagi ke user dua lalu cek isi tabel deret. Lagi, apakah anda melihat perbedaan?Wakt User satu User dua keteranganu w1 SELECT COUNT(*) FROM SELECT COUNT(*) FROM Hasil = 5 deret; deret; w2 INSERT INTO deret VALUES (6); w3 SELECT COUNT(*) FROM Hasil = 6 deret; w4 SELECT COUNT(*) FROM Hasil = 5 deret; w5 COMMIT; w6 SELECT COUNT(*) FROM Hasil = 6 deret;
  • SAVE POINTSave point mengizinkan kita untuk membatalkanbagian tertentu dari transaksi, tetapi tetap meng-commit bagian yang lain. Pendeklarasian : [ SAVEPOINT [nama_savepoint] COMMIT ; -- untuk memastikan transaksi ini lepas dari transaksi sebelumnya. UPDATE account SET saldo = saldo – 100000 WHERE nama = Alice ; SAVE POINT savepoint_ku; UPDATE account SET saldo = saldo + 100000 WHERE nama = Bob ; -- Oups salah... harusnya dimasukin ke Accountnya Wally ROLLBACK TO savepoint_ku; UPDATE account SET saldo = saldo + 100000 WHERE nama = Wally ; COMMIT;
  • Penjelasan :Transaksi diatas bertujuan untuk mentransferuang dari Account Alice sebanyak Rp. 100.000 keAccountnya Wally.Proses yang dilakukan adalah:1. Mengurangi jumlah uang yang ada pada Accountnya Alice (baris 2 dan 3)2. Membuat Save Point jika ada sesuatu yang tidak diinginkan terjadi [seperti mati lampu] (baris 4).3. Menambah jumlah uang yang ada pada Account Bob (baris 5 dan 6).4. Oups.. salah, harusnya di masukkan ke accountnya Wally (komentar baris 7) 5. Kembali ke keadaan sebelum accountnya Bob di tambahkan (ROLLBACK TO... baris 8)5. Update account Wally (baris 9 dan 10).6. Lakukan perubahan secara permanen pada data (COMMIT baris 11
  • Contoh lainnya :COMMIT; --untuk memastikan transaksi ini lepasdari transaksi sebelumnya. UPDATE deret SET nilai = 99 WHERE nilai= 1;SAVEPOINT savepoint_ku; UPDATE deret SET nilai = 77 WHERE nilai= 99;-- Oups salah... harusnya 55ROLLBACK TO savepoint_ku; UPDATE deret SET nilai = 55 WHERE nilai= 99;-- Perhatikan parameter pada clause WHEREadalah 99 bukannya 77COMMIT;
  • ISOLASI TRANSAKSIStandar SQL mendefinisikan empat level isolasitransaksi dalam kerangka tiga fenomena yang harus dicegah antara transaksi. Fenomena-fenomena iniadalah :DIRTY READ :Sebuah transaksi membaca data yang dituliskan oleh transaksi yanggagal (kedua transaksi ini bekerja pada waktu bersamaan).Contoh :Transaksi T1 menjalankan perintah UPDATE pada suatu baris(tetapibelum di commit), transaksi T2 lalu membaca baris tersebut, lalutransaksi T1 tidak jadi melakukan update dengan perintah ROLLBACK.Dengan ini transaksi T2 membaca data yang sudah tidak lagi ada. Hal initidak diperbolehkan terjadi oleh Oracle, untuk membuktikannya andadapat mempraktekkannya.
  • Praktek :Gunakan tabel account dengan user satu dan duaseperti contoh diatas, lalu lakukan perintah2 berikut :Waktu User satu User dua w1 SELECT saldo FROM account WHERE nama = Tara; w2 UPDATE account SET saldo = 50000 WHERE nama = Tara; w3 SELECT saldo FROM account WHERE nama = Tara; w4 COMMIT; w5 SELECT saldo FROM account WHERE nama = Tara;
  • Waktu w1 : User satu melihat banyaknya saldo pada nasabah Tarasebanyak Rp. 100.000Waktu w2 : user dua merubah saldo Tara menjadi Rp. 50.000Waktu w3 : user satu melihat lagi banyaknya saldo nasabah Taradan menemukan bahwa saldonya masih belum berubah, yaitusebanyak Rp. 100.000Waktu w4 : user dua meng-COMMIT-kan perubahan, yang olehsystem dituliskan pada HardDisk secara permanenWaktu w5 : user satu melihat lagi banyaknya saldo nasabah Tara danmenemukan bahwa saldonya sudah berubah, yaitu sebanyak Rp.50.000Dengan ilustrasi diatas, sampai dengan langkahpada waktu w3 anda sendiri telah membuktikanbahwafenomena Dirty Read tidak di perbolehkan terjadioleh Oracle.
  • NONREPEATABLE READ :Sebuah transaksi membaca ulang data yang telah di baca sebelumnyadan menemukan bahwa data tersebut telah di modifikasi oleh transaksilain (yang di commit setelah pembacaan pertama).Contoh :Transaksi T1 membaca sebuah baris pada tabel, sedangkan transaksi T2mengupdate row tersebut, lalu kemudian transaksi T1 membaca lagi rowtersebut. Transaksi T1 telah membaca baris yang sama dua kali, tetapi isibarisnya berbeda. (hal ini dapat terjadi pada transaksi di Oracle)Praktek : Gunakan tabel account dengan user satu dan dua seperticontoh diatas, lalu lakukan perintah2 berikut :Catatan : jika sebelumnya anda mencoba praktek pembuktianfenomena Dirty Read diatas, ubah terlebih dahulu saldo nasabahTara menjadi kembali Rp. 100.000 agar tidak ada permasalah.
  • Waktu User satu User dua w1 SELECT saldo FROM account WHERE nama = Tara; w2 UPDATE account SET saldo = 50000 WHERE nama = Tara; w3 COMMIT; w4 SELECT saldo FROM account WHERE nama = Tara;Waktu w1 : User satu melihat banyaknya saldo pada nasabah Tarasebanyak Rp. 100.000Waktu w2 : user dua merubah saldo Tara menjadi Rp. 50.000Waktu w3 : user dua meng-COMMIT-kan perubahan, yang olehsystem dituliskan pada HardDisk secara permanenWaktu w4 : user satu melihat lagi banyaknya saldo nasabah Taradan menemukan bahwa saldonyaSengan ilustrasi diatas, anda sendiri telahmembuktikan bahwa fenomena Nonrepeatable Readdapat terjadi pada Oracle di transaksi yang berjalansecara bersamaan
  • PHANTOM READ :Sebuah transaksi mengeksekusi ulang query yang menghasilkan paketbaris yang memenuhi sebuah kondisi pencarian dan menemukan bahwapaket baris yang memenuhi kondisi pencarian telah berubahdikarenakan transaksi yang baru saja di commit. (waktu di baca lagisudah tidak ada). Untuk lebih mengerti mengenai phantomphenomenon (bhs. indonesia : fenomena hantu)Contoh:Transaksi T1 membaca semua data yangmemenuhi suatu kondisi (semua nasabah bankyang memiliki cabang Bogor). Misalkan transaksiT2 memasukkan data nasabah baru yangmemenuhi kondisi yang sama(memasukkan data nasabah baru dengan cabangBogor) jika transaksi T1 mengulangi operasipembacaanya, transaksi T1 akan melihat ada databaru yang sebelumnya tidak ada. Sebuah “hantu”
  • Praktek :Gunakan tabel account dengan user satu dan dua seperti contoh diatas, lalulakukan perintah2 berikut :Wak User satu User duatu w1 SELECT COUNT * FROM account WHERE cabang = Bogor;w2 INSERT INTO account VALUES (Yuni,90000, Bogor);w3 COMMIT;w4 SELECT COUNT * FROM account WHERE cabang = Bogor;Waktu w1 : User satu melihat banyaknya nasabah yang memilikicabang Bogor dan menemukan ada 2 orang nasabah (Tara dan Alice)Waktu w2 : user dua menambahkan seorang nasabah Yuni yang jugamemiliki cabang BogorWaktu w3 : user dua meng-COMMIT-kan perubahan, yang olehsystem dituliskan pada HardDisk secara permanen.Waktu w4 : User satu melihat lagi banyaknya nasabah yang memilikicabang Bogor dan menemukan sekarang ada 3 orang nasabah (Tara,Alice dan Yuni) dimana Yuni adalah phantom tuple.
  • Inilah yang dinamakan fenomena phantom. Jikafenomena ini tidak di waspadai, pada transaksi yangmembutuhkan keakuratan data akan menjadimasalah, karena fenomena ini seringkali tidakterlihat.Catatan : hati-hati akan perbedaan fenomenaNonrepeatable Read dan Phantom Read, dimanaNonrepeatable Read adalah perbedaan ISIdata, sedangkan Phantom Read adalah perbedaanADA TIDAKNYA data.Seperti telah di sebutkan diatas, ada 4-level isolasiyang di tentukan untuk menangani ke-3 fenomenatersebut, dan hubungan level-level isolasi dengankemungkinan terjadinya fenomena-fenomena diatasdi deskripsikan pada tabel berikut :
  • Nonrepeatable Isolation Level Dirty Read Phantom Read ReadRead uncommitted Mungkin Mungkin MungkinRead committed TIDAK mungkin Mungkin MungkinRepeatable read TIDAK mungkin TIDAK mungkin MungkinSerializable TIDAK mungkin TIDAK mungkin TIDAK MungkinPada Oracle, hanya Read Commited dan Serializable yang dapatdigunakan. (Read Commited adalah defaultnya)Di Oracle, anda dapat meminta salah satu dari empat isolasi levelstandar dari transaksi. Tetapi secara internal, hanya ada dua levelisolasi transaksi yang dapat digunakan, yaitu Read Commited danSerializable. Saat anda memilih Read Uncommited andamendapatkan Read Commited, dan saat anda memilih RepeatableRead, anda mendapatkan Serializable, jadi level isolasi sebenarnyabisa jadi lebih ketat dari apa yang anda pilih. Hal ini diizinkan olehstandar SQL : keempat level isolasi hanya mendefinisikan fenomenaapa yang tidak boleh terjadi, keempat level isolasi tersebut tidakmendefinisikan fenomena apa yang harus terjadi. Alasan mengapaOracle hanya menyediakan dua level isolasi adalah karena kedualevel isolasi tersebut adalah satu-satunya cara yang masuk akal untukmemetakan level isolasi standar ke arsitektur pengendalianconcruency secara multiversion.
  • Seperti telah di Jelaskan Diatas, ada 4 level isolasiyang dapat digunakan untuk menanggulangi ketigafenomena yang mungkin terjadi pada transaksi.Namun pada Oracle dari 4 level isolasi yang ada(Read Uncommited, Read Commited, Repeatable Readdan Serializable), hanya dua level isolasi yang dapatdi gunakan yaitu : Read Commited dan Serializable.Penjelasan mengenai pengimplemantasian kedualevel isolasi tersebut pada Oracle akan di jelaskandisini.
  • READ COMMITEDAdalah isolasi transaksi yang hanya dapat melihat perubahan datasetelah transaksi lain melakukan COMMIT pada data tersebut.Adalah level isolasi default pada Oracle. Contoh-contoh sebelumnyamenggunakan level isolasi default ini.Saat transaksi berjalan pada level isolasi ini, sebuah query SELECThanya melihat data yang di COMMIT sebelum query SELECTtersebut dimulai; transaksi tersebut tidak akan melihat data yangbelum diCOMMIT-kan (tetapi, query SELECT dapat melihat efek dariupdate sebelumnya yang dieksekusi didalam transaksi tersebutsendiri, walaupun transaksi tersebut belum di-COMMIT-kan).Perhatikan bahwa dua SELECT pada waktu yang berbeda dapatmelihat data yang berbeda pula, walaupun keduanya beradapada satu transaksi, jika ada transaksi lain yang men-COMMIT-kan perubahan setelah eksekusi setelah SELECT yang pertama.
  • SELESAI