SlideShare una empresa de Scribd logo
1 de 19
Descargar para leer sin conexión
Transaksi dan Data Integrity
M. Ammar Shadiq
Ilmu Komputer  Universitas Pendidikan Indonesia, Bandung
17 Maret 2009 [ V.beta 1 ]



TABEL YANG DIGUNAKAN :

DERET : (NILAI NUMBER(32))
       CREATE TABLE deret (nilai number(32));
Dengan Dummy data : 1, 2, 3, 4, 5
         INSERT   INTO   deret   VALUES   (1);
         INSERT   INTO   deret   VALUES   (2);
         INSERT   INTO   deret   VALUES   (3);
         INSERT   INTO   deret   VALUES   (4);
         INSERT   INTO   deret   VALUES   (5);

ACCOUNT : (NAMA CHAR ACTER(50), SALDO NUMBER(32,5), CABANG CHARACTER(5 0))
CREATE TABLE account (nama varchar2(50),saldo number(32,5),cabang varchar2(50));
Dengan Dummy Data : (Tara, Rp. 100.000, Bogor), (Alice, Rp. 1.000.000, Bogor), (Bob, Rp. 700.000,
Bandung), (Wally, Rp. 500.000, Bandung)
INSERT   INTO   account   VALUES   ('Tara',100000,'Bogor');
INSERT   INTO   account   VALUES   ('Alice',1000000,'Bogor');
INSERT   INTO   account   VALUES   ('Bob',700000,'Bandung');
INSERT   INTO   account   VALUES   ('Wally',500000,'Bandung');


TRANSAKSI

Transaksi adalah konsep fundamental dari system database. Inti dari transaksi adalah membundel
operasi-operasi kedalam sebuah atau tidak sama sekali operasi.

Bayangkan pada sebuah transaksi perbankan yang mentransfer uang antara account :

Sebagai contohnya, nasabah Alice mentransfer uang sebanyak Rp 100.000 kepada nasabah Tara, maka
ada dua operasi yang harus di lakukan, yaitu : (1) mengurangi saldo pada Nasabah Alice sebanyak Rp
100.000 dan (2) menambah saldo pada nasabah Tara sebanyak Rp 100.000.

Pada kondisi yang ideal, kedua operasi tersebut berjalan lancar (saldo Alice berkurang Rp 100.000 dan
saldo Tara bertambah Rp 100.000). Sedangkan pada kondisi yang tidak ideal saldo Alice berkurang Rp
100.000 sedangkan saldo Tara tidak bertambah Rp 100.000.




                                 Ilustrasi kondisi transaksi yang tidak ideal
Untuk menghindari kondisi kegagalan seperti ilustrasi diatas, DBMS menggunakan system Transaksi,
yang memaketkan beberapa operasi menjadi satu blok operasi Atomik, yaitu seluruh operasi 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 memiliki sifat-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)
    2. Konsistensi (Consistency): eksekusi transaksi secara tunggal harus dapat menjamin data tetap
       konsisten setelah transaksi berakhir.
       (dari pak Yudi Wibisono : transaksi mempertahankan konsistensi database)
    3. 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)
    4. 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 TRANSAKSI
Terhenti atau tidak sempurnanya pelaksanaan sebuah transaksi tidak selalu diakibatkan oleh kegagalan
insidential baik dari perangkat keras (crash) ataupun kemacetan sistem operasi (hang). Keadaan ini
justru lebih sering terjadi secara sengaja, baik oleh aksi user yang sengaja menghentikan eksekusi
transaksi karena terlalu lamanya pelaksanaan transaksi atau oleh keputusan penghentian transaksi oleh
DBMS akibat kondisi yang tidak diinginkan seperti Dead Lock atau terlewatinya batas waktu (timeout)
pelaksanaan transaksi yang telah di tetapkan.
         Dengan kenyataan ini, penting untuk di ketahui status (state) yang telah dicapai dalam
pelaksanaan sebuah transaksi. Transaksi yang terhenti pengeksekusiannya di tengah jalan (karena sebab
apapun), akan dinyatakan dalam status gagal (failed). Selanjutnya transaksi itu akan di batalkan
(aborted). Terhadap transaksi yang dibatalkan itu, data yang telah mengalami perubahan akibat
pengeksekusian transaksi tersebut oleh modul recovery dalam DBMS harus di kembalikan kekeadaan
semula (ROLLBACK), seperti keadaan dimana transaksi belum di kerjakan sama sekali. Sementara
transaksi yang telah di eksekusi dengan sempurna, biasa disebut berada dalam kondisi berhasil
(commited). Perubahan nilai-nilai dalam basisdata oleh transaksi yang telah berada dalam status
berhasil(commited) ini akan bersifat menetap (persistent) dan tidak ada mekanisme apapun dalam DBMS
yang dapat kita gunakan untuk mengembalikannya ke nilai-nilai semula. Kecuali jika kemudian kita
secara sengaja dan ekspisit membuat/menjalankan transaksi yang merupakan kebalikan dari transaksi
sebelumnya(contoh: jika anda telah mengcommit sebuah transaksi transfer uang pada bank, tidak ada
mekanisme apapun di DBMS yang dapat mengembalikan kekeadaan semula, kecuali jika anda membuat
sebuah transaksi yang bekerja membalikkan proses transfer uang tersebut).
        Secara lengkap, status-status yang dapat dicapai oleh sebuah transaksi sejak mulai dilaksanakan
hingga selesai atau dibatalkannya 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 siklus peralihan status (state) dari sebuah transaksi :




Ketika sebuah transaksi mulai di kerjakan, maka transaksi tersebut segera berada dalam status Active.
Status ini akan terus dialami selama eksekusi operasi-operasi dalam transaksi tersebut masih
berlangsung. Jika terjadi penghentian sebelum operasi terakhir dalam transaksi, maka transaksi segera
beralih ke status baru, yaitu failed. Namun jika keseluruhan operasi dalam transaksi selesai di kerjakan,
maka transaksi tersebut dinyatakan berada dalam status berakhir sebagian (Partially Committed), dimana
perubahan-perubahan data masih berada dalam memory utama yang bersifat tidak permanen (Volatile).
Transaksi dalam status ini masih mungkin untuk berpindah ke status failed ( karena ada pembatalan
transaksi baik disengaja maupun tidak). Jika beralih ke status failed, maka nilai-nilai data yang baru yang
masih ada di memory utama akan di salin/direkam ke dalam disk yang bersifat permanen. Begitu proses
perekaman tersebut selesai di kerjakan, maka transaksi beralih ke status yang baru, yaitu berhasil
sempurna (committed). Sementara itu, terhadap transaksi yang berada dalam status failed, maka DBMS
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 selesai di lakukan, maka transaksi berpindah ke status batal
(aborted). Status berhasil sempurna (committed) maupun batal (aborted) merupakan status terminasi,
yaitu status akhir dalam pelaksanaan transaksi.
TRANSAKSI DI ORACLE 10G

Oracle tidak menggunakan klausa BEGIN untuk memulai transaksi, karena klausa BEGIN digunakan
dalam PL/SQL dalam struktur Blocknya.

secara default, seluruh perintah di Oracle adalah sebuah transaksi yang diawali dengan sebuah perintah
DML dan diakhiri 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 dapat mengaplikasikan contoh-contoh yang ada? Mudah ! ada berbagai
cara untuk pengaplikasian ini. Cara yang paling mudah adalah dengan membuka session baru dengan
user yang sama.
Untuk memudahkan dalam membedakan 2 session tersebut, anda dapat bedakan tampilan pada
Windows Command Line pada Properties.
Pada contoh disini, saya memisalkan Command Line dengan background berwarna Hitam adalah User 1
sedangkan Command Line dengan background berwarna putih adalah User 2.

Langkah-langkah :
   1. Jalankan 2 SQL Command Line
   2. 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 lain sebelum transaksi di commit :

    1. Gunakan user satu, masukkan 6 pada tabel deret : INSERT INTO deret VALUES (6);
    2. Lalu cek isi tabel deret : SELECT COUNT(*) FROM deret;
    3. Pindah dan gunakan user dua, lalu cek isi tabel deret. Apakah anda melihat perbedaan?
4. Pindah lagi ke user satu lalu jalankan perintah : COMMIT;
   5. Pindah lagi ke user dua lalu cek isi tabel deret. Lagi, apakah anda melihat perbedaan?

Contoh diatas adalah contoh sederhana akan transaksi. Anda dapat mencoba perintah ROLLBACK; untuk
pembuktian lebih lanjut.

Waktu              User satu                           User dua                       keterangan
  w1    SELECT COUNT(*) FROM deret;         SELECT COUNT(*) FROM deret;          Hasil = 5
  w2    INSERT INTO deret VALUES (6);
  w3    SELECT COUNT(*) FROM deret;                                              Hasil = 6
  w4                                        SELECT COUNT(*) FROM deret;          Hasil = 5
  w5    COMMIT;
  w6                                        SELECT COUNT(*) FROM deret;          Hasil = 6
SAVE POINT

Save point mengizinkan kita untuk membatalkan bagian tertentu dari transaksi, tetapi tetap meng-
commit bagian yang lain. Pendeklarasian : SAVEPOINT [nama_savepoint]

 1        COMMIT; --untuk memastikan transaksi ini lepas dari transaksi sebelumnya.
 2              UPDATE account SET saldo = saldo – 100000
 3              WHERE nama = 'Alice';
 4        SAVEPOINT savepoint_ku;
 5              UPDATE account SET saldo = saldo + 100000
 6              WHERE nama = 'Bob';
 7        -- Oups salah... harusnya dimasukin ke Accountnya Wally
 8        ROLLBACK TO savepoint_ku;
 9              UPDATE account SET saldo = saldo + 100000
10              WHERE nama = 'Wally';
11        COMMIT;

Penjelasan :

Transaksi diatas bertujuan untuk mentransfer uang dari Account Alice sebanyak Rp. 100.000 ke
Accountnya 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)
     6.   Update account Wally (baris 9 dan 10).
     7.   Lakukan perubahan secara permanen pada data (COMMIT baris 11).

Contoh lainnya :

1         COMMIT; --untuk memastikan transaksi ini lepas dari transaksi sebelumnya.
2               UPDATE deret SET nilai = 99 WHERE nilai = 1;
3         SAVEPOINT savepoint_ku;
4               UPDATE deret SET nilai = 77 WHERE nilai = 99;
5         -- Oups salah... harusnya 55
6         ROLLBACK TO savepoint_ku;
7               UPDATE deret SET nilai = 55 WHERE nilai = 99;
8         -- Perhatikan parameter pada clause WHERE adalah 99 bukannya 77
9         COMMIT;
ISOLASI TRANSAKSI

          Standar SQL mendefinisikan empat level isolasi transaksi dalam kerangka tiga fenomena yang harus di
          cegah antara transaksi. Fenomena-fenomena ini adalah :

          DIRTY READ :

          Sebuah transaksi membaca data yang dituliskan oleh transaksi yang gagal (kedua transaksi ini bekerja
          pada waktu bersamaan).

          Contoh :

          Transaksi T1 menjalankan perintah UPDATE pada suatu baris(tetapi belum di commit), transaksi T 2 lalu
          membaca baris tersebut, lalu transaksi T1 tidak jadi melakukan update dengan perintah ROLLBACK.
          Dengan ini transaksi T2 membaca data yang sudah tidak lagi ada. Hal ini tidak diperbolehkan terjadi oleh
          Oracle, untuk membuktikannya anda dapat mempraktekkannya.

          Praktek :

          Gunakan tabel account dengan user satu dan dua seperti 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 Tara sebanyak Rp. 100.000

          Waktu w2 : user dua merubah saldo Tara menjadi Rp. 50.000

          Waktu w3 : user satu melihat lagi banyaknya saldo nasabah Tara dan menemukan bahwa saldonya
                    masih belum berubah, yaitu sebanyak Rp. 100.000

          Waktu w4 : user dua meng-COMMIT-kan perubahan, yang oleh system dituliskan pada HardDisk secara
                    permanen

          Waktu w5 : user satu melihat lagi banyaknya saldo nasabah Tara dan menemukan bahwa saldonya
                    sudah berubah, yaitu sebanyak Rp. 50.000

          Dengan ilustrasi diatas, sampai dengan langkah pada waktu w3 anda sendiri telah membuktikan bahwa
          fenomena Dirty Read tidak di perbolehkan terjadi oleh Oracle.

          NONREPEATABLE READ :

          Sebuah transaksi membaca ulang data yang telah di baca sebelumnya dan menemukan bahwa data
          tersebut telah di modifikasi oleh transaksi lain (yang di commit setelah pembacaan pertama).

          Contoh :

          Transaksi T1 membaca sebuah baris pada tabel, sedangkan transaksi T2 mengupdate row tersebut, lalu
          kemudian transaksi T1 membaca lagi row tersebut. Transaksi T1 telah membaca baris yang sama dua kali,
          tetapi isi barisnya berbeda. (hal ini dapat terjadi pada transaksi di Oracle)

          Praktek :

          Gunakan tabel account dengan user satu dan dua seperti contoh diatas, lalu lakukan perintah2 berikut :
Catatan : jika sebelumnya anda mencoba praktek pembuktian fenomena Dirty Read diatas, ubah terlebih dahulu saldo nasabah Tara
           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 Tara sebanyak Rp. 100.000

           Waktu w2 : user dua merubah saldo Tara menjadi Rp. 50.000

           Waktu w3 : user dua meng-COMMIT-kan perubahan, yang oleh system dituliskan pada HardDisk secara
                     permanen

           Waktu w4 : user satu melihat lagi banyaknya saldo nasabah Tara dan menemukan bahwa saldonya
                     sudah berubah, yaitu sebanyak Rp. 50.000

           Sengan ilustrasi diatas, anda sendiri telah membuktikan bahwa fenomena Nonrepeatable Read dapat
           terjadi pada Oracle di transaksi yang berjalan secara bersamaan.

           PHANTOM READ :

           Sebuah transaksi mengeksekusi ulang query yang menghasilkan paket baris yang memenuhi sebuah
           kondisi pencarian dan menemukan bahwa paket baris yang memenuhi kondisi pencarian telah berubah
           dikarenakan transaksi yang baru saja di commit. (waktu di baca lagi sudah tidak ada). Untuk lebih
           mengerti mengenai phantom phenomenon (bhs. indonesia : fenomena hantu)


           CONTOH 1 FENOMENA PHANTOM :

           Transaksi T1 membaca semua data yang memenuhi suatu kondisi (semua nasabah bank yang memiliki
           cabang Bogor). Misalkan transaksi T2 memasukkan data nasabah baru yang memenuhi kondisi yang sama
           (memasukkan data nasabah baru dengan cabang Bogor) jika transaksi T1 mengulangi operasi
           pembacaanya, transaksi T1 akan melihat ada data baru yang sebelumnya tidak ada. Sebuah “hantu”

           Praktek :

           Gunakan tabel account dengan user satu dan dua seperti contoh diatas, lalu lakukan perintah 2 berikut :
Waktu                           User satu                                                                        User dua
 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 memiliki cabang Bogor dan menemukan ada 2
                     orang nasabah (Tara dan Alice)

           Waktu w2 : user dua menambahkan seorang nasabah Yuni yang juga memiliki cabang Bogor

           Waktu w3 : user dua meng-COMMIT-kan perubahan, yang oleh system dituliskan pada HardDisk secara
                     permanen.

           Waktu w4 : User satu melihat lagi banyaknya nasabah yang memiliki cabang Bogor dan menemukan
                     sekarang ada 3 orang nasabah (Tara, Alice dan Yuni) dimana Yuni adalah phantom
                     tuple.

           Inilah yang dinamakan fenomena phantom. Jika fenomena ini tidak di waspadai, pada transaksi yang
           membutuhkan keakuratan data akan menjadi masalah, karena fenomena ini seringkali tidak terlihat.
Catatan : hati-hati akan perbedaan fenomena Nonrepeatable Read dan Phantom Read, dimana
Nonrepeatable Read adalah perbedaan ISI data, sedangkan Phantom Read adalah perbedaan ADA
TIDAKNYA data.

Seperti telah di sebutkan diatas, ada 4-level isolasi yang di tentukan untuk menangani ke-3 fenomena
tersebut, dan hubungan level-level isolasi dengan kemungkinan terjadinya fenomena-fenomena diatas di
deskripsikan pada tabel berikut :


   Isolation Level              Dirty Read           Nonrepeatable Read            Phantom Read

Read uncommitted                Mungkin                     Mungkin                   Mungkin
Read committed               TIDAK mungkin                  Mungkin                   Mungkin
Repeatable read              TIDAK mungkin              TIDAK mungkin                Mungkin
Serializable                 TIDAK mungkin              TIDAK mungkin             TIDAK Mungkin
Pada Oracle, hanya Read Commited dan Serializable yang dapat digunakan. (Read Commited adalah
defaultnya)

Di Oracle, anda dapat meminta salah satu dari empat isolasi level standar dari transaksi. Tetapi secara
internal, hanya ada dua level isolasi transaksi yang dapat digunakan, yaitu Read Commited dan
Serializable. Saat anda memilih Read Uncommited anda mendapatkan Read Commited, dan saat anda
memilih Repeatable Read, anda mendapatkan Serializable, jadi level isolasi sebenarnya bisa jadi lebih
ketat dari apa yang anda pilih. Hal ini diizinkan oleh standar SQL : keempat level isolasi hanya
mendefinisikan fenomena apa yang tidak boleh terjadi, keempat level isolasi tersebut tidak mendefinisikan
fenomena apa yang harus terjadi. Alasan mengapa Oracle hanya menyediakan dua level isolasi adalah
karena kedua level isolasi tersebut adalah satu-satunya cara yang masuk akal untuk memetakan level
isolasi standar ke arsitektur pengendalian concruency secara multiversion.

Seperti telah di Jelaskan Diatas, ada 4 level isolasi yang dapat digunakan untuk menanggulangi ketiga
fenomena yang mungkin terjadi pada transaksi. Namun pada Oracle dari 4 level isolasi yang ada (Read
Uncommited, Read Commited, Repeatable Read dan Serializable), hanya dua level isolasi yang dapat di
gunakan yaitu : Read Commited dan Serializable. Penjelasan mengenai pengimplemantasian kedua level
isolasi tersebut pada Oracle akan di jelaskan disini.

READ COMMITED

Adalah isolasi transaksi yang hanya dapat melihat perubahan data setelah transaksi lain melakukan
COMMIT pada data tersebut.

Adalah level isolasi default pada Oracle. Contoh-contoh sebelumnya menggunakan level isolasi default
ini.

Saat transaksi berjalan pada level isolasi ini, sebuah query SELECT hanya melihat data yang di COMMIT
sebelum query SELECT tersebut dimulai; transaksi tersebut tidak akan melihat data yang belum di-
COMMIT-kan (tetapi, query SELECT dapat melihat efek dari update sebelumnya yang dieksekusi didalam
transaksi tersebut sendiri, walaupun transaksi tersebut belum di-COMMIT-kan).

Perhatikan bahwa dua SELECT pada waktu yang berbeda dapat melihat data yang berbeda pula,
walaupun keduanya berada pada satu transaksi, jika ada transaksi lain yang men-COMMIT-kan
perubahan setelah eksekusi setelah SELECT yang pertama.

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 peng-serial-an 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.

           Praktek :

           Untuk mengaplikasikan kedua level isolasi Read Commited anda tidak perlu menuliskan perintah khusus,
           karena level isolasi tersebut menjadi level isolasi default pada Oracle, sedangkan untuk level isolasi
           Serilizable anda harus menggunakan perintah khusus, yaitu :

           SET TRANSACTION

           Penggunaan kedua perintah diatas adalah berbeda, dimana

           SET TRANSACTION

           Digunakan di dalam transaksi untuk mengubah level isolasi yang digunakan

           Contoh :

             SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
             -- [Perintah Query]

           Catatan : Anda dapat menggunakan READ UNCOMMITTED | READ COMMITTED | REAPETABLE READ | SERIALIZABLE. Dimana pada Oracle Read
           Uncommitted diubah menjadi Read Committed dan Repetable Read diubah menjadi Serializable.


           Praktek :

           Karena level isolasi Read Committed telah banyak di bahas dan di berikan contohnya diatas, saya hanya
           akan memberikan contoh Level isolasi Serializable. Agar memudahkan penulisan, disini akan di
           pergunakan perintah SET TRANSACTION.

           Bukti pada level Serializable, Fenomena Phantom tidak dapat terjadi :
           Dengan asumsi nasabah yang memiliki cabang Bogor ada 2 orang (Alice dan Tara), cabang Bandung ada 2
           orang (Bob dan Wally).

           Catatan : Jangan lupa untuk meng-COMMIT atau me-ROLLBACK untuk mengakhiri transaksi.

Waktu                                 User satu                                                                   User dua
 w1     SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;                              SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
 w2     SELECT COUNT (*) FROM account WHERE cabang = 'Bogor';
 w3                                                                                INSERT INTO account VALUES ('Yuni',90000,'Bogor');
 w4                                                                                COMMIT;
 w5     SELECT COUNT (*) FROM account WHERE cabang = 'Bogor';
 w6                                                                                SET TRANSACTION ISOLATION LEVEL READ COMMITTED;
 w7                                                                                SELECT COUNT * FROM account WHERE cabang = 'Bandung';
 w8     INSERT INTO account VALUES ('Darman',1000000,'Bandung');
 w9     COMMIT;
 w10                                                                               SELECT COUNT * FROM account WHERE cabang = 'Bandung';


           Pada Waktu w2 user satu melihat jumlah banyaknya nasabah yang memiliki cabang Bogor, dan
           menemukan ada 2 orang nasabah.

           Pada Waktu w3 user dua menambahkan nasabah Yuni yang juga memiliki cabang Bogor. Lalu user dua
           meng-COMMIT-kan perubahannya, yang dituliskan secara permanen pada HardDisk secara permanen
           pada Waktu w4.
Pada Waktu w5 user satu melihat lagi banyaknya nasabah yang memiliki cabang Bogor dan
menemukan bahwa banyaknya nasabah yang memiliki cabang Bogor belum berubah, masih 2 orang dan
nasabah Yuni yang dimasukkan(di-COMMIT-kan) datanya oleh user dua pada waktu transaksi yang
dilakukan user satu masih berjalan tidak dibaca.

Pada Waktu w6 user dua memulai transaksi baru dengan level isolasi default (Read Committed), lalu
pada Waktu w7 melihat jumlah banyaknya nasabah yang memiliki cabang Bandung, dan menemukan
ada 2 orang nasabah.

Pada Waktu w8 user satu menambahkan nasabah Darman yang juga memiliki cabang Bandung. Lalu
user satu meng-COMMIT-kan perubahannya, yang dituliskan secara permanen pada HardDisk secara
permanen pada Waktu w9.

Pada Waktu w10 user dua melihat lagi banyaknya nasabah yang memiliki cabang Bandung dan
menemukan sekarang ada 3 orang nasabah (Bob, Wally dan Darman) dimana Darman adalah Phantom
data yang mengindikasikan Fenomena Phantom, selain Fenomena Phantom anda dapat mencoba sendiri
pembuktian Fenomena non repeatable read yang bukan menambahkan data, tetapi mengubah isi data.
LOCKING PROTOCOL            (EXP LI CI T LOC KI NG)

           Setiap transaksi dan query yang berjalan pada Oracle mengimplementasikan Locking (tidak
           terbatas pada level isolasi transaksi apa yang digunakan).

           Share Lock (S-Lock) dan Exclusive Lock (X-Lock) adalah metode penguncian data untuk menjaga
           keabsahan data. Yang membedakan kedua jenis Locking Protocol tersebut adalah Konflik yang terjadi
           satu sama lainnya. Untuk lebih jelasnya perhatikan contoh berikut :

                   Transaksi 1 Memegang X-Lock pada objek A, maka transaksi 2 tidak dapat meminta/memegang
                   S-Lock dan atau X-Lock pada objek A.
                   Transaksi 1 Memegang S-Lock pada objek A, maka transaksi 2 dapat meminta/memegang S-Lock
                   tetapi tidak dapat meminta/memegang X-Lock.

                       Transaksi 1                           Transaksi 2
                                                                                        Keterangan
                       Memegang                               Meminta
                         X-Lock                                  X-Lock                 -- ditolak
                         X-Lock                                  S-Lock                 -- ditolak
                         S-Lock                                  X-Lock                 -- ditolak
                         S-Lock                                  S-Lock                 -- diterima

           Objek diatas dapat berupa tabel, row, database, dll.

           PENGUNCIAN LEVEL TABEL               (T AB L E LE VE L L OC K)

           Adalah metode penguncian yang bekerja dengan cara mengunci suatu tabel sehingga mencegah
           perubahan atau penghapusan tabel selama suatu transaksi yang mereferensi tabel tersebut sedang
           berjalan.
                SELECT/INSERT/UPDATE/DELETE Row terhadap suatu tabel tertentu membutuhkan Table S-Lock.
                DROP atau ALTER terhadap suatu tabel membutuhkan Table X-Lock.
                Menuliskan Perintah LOCK TABLE <nama table>

           Praktek :
Waktu                          User satu                                                              User dua
 w1     SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
 w2     SELECT * FROM deret;
 w3                                                                         DROP TABLE deret;
 w4                                                                         -- akan gagal, karena Oracle user satu masih melock
 w5     COMMIT;
 w6                                                                         DROP TABLE deret; -- Berhasil



Waktu                          User satu                                                              User dua
 w1     UPDATE deret SET nilai = 99 WHERE nilai =1;
 w2                                                                         DROP TABLE deret;
 w3                                                                         -- akan gagal, karena Oracle user satu masih melock
 w4     COMMIT;
 w5                                                                         DROP TABLE deret; -- Berhasil
 w6                                                                         COMMIT;



Waktu                          User satu                                                            User dua
 w1     SET TRANSACTION ISOLATION LEVEL READ COMMITTED;                     SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
 w2     DELETE FROM deret WHERE nilai = 1;
 w3                                                                         ALTER TABLE deret ADD komentar varchar2(10);
 w4                                                                         -- akan gagal karena Oracle user satu masih melock
 w5     COMMIT;
 w6                                                                         ALTER TABLE deret ADD komentar varchar2(10);--Berhasl
 w7                                                                         COMMIT;
PENGUNCIAN LEVEL ROW             ( RO W L EVE L LO C K)

           Adalah metode penguncian yang bekerja dengan cara mengunci suatu row beserta tabel dimana row
           tersebut berada sehingga mencegah perubahan atau penghapusan selama suatu transaksi yang
           mereferensi row tersebut sedang berjalan.


                                                PERNYATAAN YANG SALAH !!!
                                      SELECT membutuhkan Row S-Lock.
                                      INSERT membutuhkan Row X-Lock.



                                                PERNYATAAN YANG BENAR
                                       UPDATE/DELETE membutuhkan Row X-Lock.


           Salah satu sifat yang harus dimiliki transaksi adalah terisolasi (Isolation) dimana transaksi satu dengan
           transaksi lainnya tidak saling mempengaruhi dan disediakan Level-level isolasinya. Dimana Level isolasi
           Default pada Oracle adalah Read Committed, maka penguncian pada Level Row ini hanya berlaku untuk
           operasi UPDATE dan DELETE pada row yang sama. Sedangkan operasi SELECT dan INSERT sama sekali
           tidak terpengaruh. Operasi INSERT tidak berpengaruh pada Penguncian Level Row ini, karena Data yang
           di-INSERT oleh transaksi hanya dapat di baca oleh transaksi tersebut, dan tidak bisa di baca oleh
           transaksi lain sebelum di COMMIT. Hal tersebut dapat di buktikan dengan contoh berikut :

           Contoh Bukti pernyataan yang salah (10 Menit):

Waktu                User satu                              User dua                                  Keterangan
 w1     SELECT * FROM deret;                   SELECT * FROM deret;                    Hasil = 1,2,3,4,5
 w2     DELETE FROM deret WHERE nilai=1;
 w3     UPDATE deret SET nilai = 321
        WHERE nilai = 3;
 w4     SELECT * FROM DERET;                                                           Hasil = 2,321,4,5
 w5                                            SELECT * FROM deret                     Hasil = 1,2,3,4,5
 W5     INSERT INTO deret VALUES (99);         INSERT INTO deret VALUES (66);
 w7     UPDATE deret SET nilai = 77 WHERE                                              -- NULL, nilai 66 belum di COMMIT
        nilai = 66;
 w8                                            UPDATE deret SET nilai = 88 WHERE       -- NULL, nilai 99 belum di COMMIT
                                               nilai = 99;
w9      DELETE FROM deret WHERE nilai=66;                                              -- NULL, nilai 66 belum di COMMIT
w10                                            DELETE FROM deret WHERE nilai=99;       -- NULL, nilai 99 belum di COMMIT
w11     SAVEPOINT savepoint_ku;                SAVEPOINT savepoint_ku;
w12     UPDATE deret SET nilai = 77 WHERE                                              --   OK, nilai 99 ada, diubah nilainya
        nilai = 99;                                                                    --   menjadi 77
w13                                            UPDATE deret SET nilai = 88 WHERE       --   OK, nilai 66 ada, diubah nilainya
                                               nilai = 66;                             --   menjadi 88
w14     SELECT * FROM deret;                                                           --   OK, SELECT boleh
                                                                                       --   Hasil = 2,321,4,5,77
w15                                            SELECT * FROM deret;                    --   OK, SELECT boleh
                                                                                       --   Hasil = 1,2,3,4,5,88
w16     ROLLBACK TO savepoint_ku;              ROLLBACK TO savepoint_ku;
w17     DELETE FROM deret WHERE nilai=99;                                              -- OK, nilai 99 ada
w18                                            DELETE FROM deret WHERE nilai=66;       -- OK, nilai 66 ada
w19     COMMIT;                                COMMIT;
Contoh-Contoh yang Benar mengenai Penguncian Level Row (Row Level Lock):

Waktu                             User satu                                                 User dua
 w1     UPDATE account SET saldo = 500000 WHERE nama = 'Tara';
 w2     -- UPDATE 1 [Memegang X-Lock]                            UPDATE account SET saldo = 70000 WHERE nama = 'Tara';
 w3                                                              -- akan menunggu sampai X-Lock Dilepas
 w4     COMMIT; -- melepas X-Lock
 w5                                                              -- UPDATE 1  Berhasil



Waktu                             User satu                                                 User dua
 w1     DELETE FROM account WHERE nama = 'Tara';
 w2     -- DELETE 1 [Memegang X-Lock]                            UPDATE account SET saldo = 70000 WHERE nama = 'Tara';
 w3                                                              -- akan menunggu sampai X-Lock Dilepas
 w4     COMMIT; -- melepas X-Lock
 w5                                                              -- 0 ROWS UPDATED, nasabah Tara sudah di DELETE



Waktu                             User satu                                                 User dua
 w1     DELETE FROM account WHERE nama = 'Tara';
 w2     -- DELETE 1 [Memegang X-Lock]                            DELETE FROM account WHERE nama = 'Tara';
 w3                                                              -- akan menunggu sampai X-Lock Dilepas
 w4     COMMIT; -- melepas X-Lock
 w5                                                              -- 0 ROWS UPDATED, nasabah Tara sudah di DELETE
DEAD LOCK

         Adalah situasi dimana dua atau lebih transaksi dalam kondisi wait-state, satu sama lain menunggu Lock
         dilepas sebelum di mulai (Yudi Wibisono).

         Dalam lingkungan multi programming, beberapa proses mungkin akan bersaing untuk objek dengan
         jumlah yang terbatas. Sebuah proses meminta Lock untuk menggunakan objek; jika objek tersebut tidak
         dapat digunakan, proses memasuki wait state. Proses waiting dapat terus berlangsung selamanya, karena
         objek yang diminta proses tersebut di pegang oleh proses lain yang juga dalam keadaan menunggu.
         situasi inilah yang dinamakan Dead Lock.




         ilustrasi proses yang baru akan melepas objek yang dimilikinya, jika proses tersebut telah mendapatkan
         objek yang diminta.



         Contoh :

Waktu                         User satu                                                    User dua
 w1     UPDATE deret SET nilai = 111 WHERE nilai = 1;
 w2     -- Memegang X-Lock untuk Row nilai 1                      UPDATE deret SET nilai = 222 WHERE nilai = 2;
 w3                                                               -- Memegang X-Lock untuk Row nilai 2
 w4     UPDATE deret SET nilai = 2345 WHERE nilai = 2;
 w5     -- Menunggu User dua melepas X-Lock untuk nilai 2         UPDATE deret SET nilai = 1234 WHERE nilai = 1;
 w6                                                               -- Menunggu User satu melepas X-Lock untuk nilai 1
 w7                                                     DEAD LOCK
         System Oracle akan menangani Dead Lock ini dengan cara membatalkan salah satu transaksi, dan karena
         Dead Lock telah di hilangkan, transaksi yang lainnya dapat berjalan. berikut pesan Errornya :




         Pertahanan yang terbaik terhadap Dead Lock adalah menghindarinya dengan cara memastikan bahwa
         semua aplikasi yang menggunakan database mendapatkan Lock pada banyak objek dengan urutan yang
         konsisten. Pada contoh diatas, jika kedua transaksi meng-UPDATE dengan urutan yang sama( update nilai
         1 terlebih dahulu), maka tidak akan terjadi Dead Lock. Anda juga harus memastikan bahwa Lock pertama
         pada objek di transaksi adalah tingkatan tertinggi yang akan di butuhkan untuk objek tersebut. Jika anda
         tidak dapat memastikan, maka Dead Lock dapat ditangani dengan mengulang transaksi yang di batalkan.
Selama tidak ada situasi Dead Lock yang terdeteksi, sebuah transaksi yang meminta Row Level Lock
maupun Table Level Lock akan menunggu selamanya sampai Lock yang berkonflik melepas Lock
miliknya. Ini artinya bahwa tindakan yang buruk untuk membuat aplikasi yang membuka suatu proses
transaksi dalam waktu yang lama (misal : menunggu input user)




                              Bukan Dead Lock
                                       Saat Proses 1 meminta Objek 2, tetapi
                                       Proses 2 tidak melepas kepemilikannya
                                       terhadap Objek 2. Ini tidak dapat disebut
                                       sebagai Dead Lock, Namun dinamakan
                                       Infinite Wait State, dimana Proses 1
                                       menunggu selamanya untuk Proses 2
                                       melepas Objek 2.
LATIHAN

      Tuliskan pada selembar kertas, waktu 60 menit :

          1. tuliskan daftar sifat ACID dan jelaskan masing-masing kegunaannya.
          2. pada saat eksekusi, sebuah transaksi melewati beberapa state, sampai transaksi tersebut gagal
             atau berhasil. Tuliskan seluruh kemungkinan state yang dilewati transaki. Jelaskan mengapa
             setiap state dapat muncul pada transaksi tersebut.
          3. berapakah gaji pegawai dengan NIP 189 pada saat transaksi berikut selesai?

                   UPDATE PEG SET GAJI =      1.000.000 WHERE NIP = 189;
                   SAVEPOINT SAVE_1;
                   UPDATE PEG SET GAJI =      GAJI *1.1 WHERE NIP = 189;
                   SAVEPOINT SAVE_2;
                   UPDATE PEG SET GAJI =      GAJI *1.1 WHERE NIP = 189;
                   SAVEPOINT SAVE_3;
                   ROLLBACK TO SAVEPOINT      SAVE_2;
                   COMMIT;
                   UPDATE PEG SET GAJI =      1.500.000 WHERE NIP = 189;
                   SAVEPOINT SAVE_4;
                   ROLLBACK TO SAVEPOINT      SAVE_4;
                   COMMIT;



               A. 1.000.000    B. 1.100.000    C. 1.111.000     D. 1.500.000

          4. pada sekrenario berikut, dua transaksi berbeda mengupdate row pada table yang sama. Apa yang
             terjadi pada jam 11:45? (pilih jawaban terbaik).

                    Session 1                           Waktu                       Session 2
UPDATE peg SET gaji = gaji * 1.2 WHERE nip = 102;       11:29   UPDATE peg SET nip_atasan = 100 WHERE nip = 109;
UPDATE peg SET gaji = gaji * 1.2 WHERE nip = 109;       11:44   UPDATE peg SET nip_atasan = 100 WHERE nip = 102;
                         ?                              11:45                            ?


                   A. salah satu user menghubungi DBA yang kemudian langsung meng-kill salah satu session
                      yang memegang lock
                   B. kedua transaksi akan ROLLBACK setelah menerima pesan error ORA-00060 :Deadlock
                      detected while waiting for resource, dan statement pada kedua transaksi harus di
                      eksekusi ulang, namun tidak ada pekerjaan lain yang hilang.
                   C. kedua session di KILL oleh Oracle dengan ORA-00028 : Your session has been killed dan
                      harus meng undo seluruh statement sejak COMMIT terakhir.
                   D. Session 1 menerima pesan error ORA-00060 :Deadlock detected while waiting for
                      resource dan transaksi ROLLBACK secara otomatis. Session 2 lalu bebas untuk me
                      ROLLBACK atau COMMIT transaksinya.



          5.   sebutkan dan jelaskan 3 fenomena yang dapat terjadi dalam transaksi.
          6.   jelaskan isolasi transaksi read committed secara singkat.
          7.   jelaskan isolasi transaksi serializable secara singkat.
          8.   Pemerintah mengalokasikan dana 1 Triliun Rupiah untuk pengembangan sekolah-sekolah di
               daerah tertinggal dengan pembagian dana yang merata untuk setiap kepala sekolah yang
               mendaftarkan data sekolahnya ke database. Waktu pendaftaran dibatasi sampai kepada tanggal
               tertentu dan segera setelah batas waktu pendaftaran, alokasi dana untuk tiap sekolah akan
               ditentukan dengan membagi dana yang dialokasikan dengan jumlah sekolah yang mendaftar.
Pada saat waktu pendaftaran telah habis, staff yang menangani data segera mengeksekusi Stored
Procedure yang membaca data jumlah sekolah yang mendaftar dan mengalokasikan dana
sejumlah hasil bagi antara alokasi dana dan jumlah sekolah. System memerlukan waktu
beberapa detik untuk menghitung jumlah sekolah yang telah mendaftar (count * from daftar-
sekolah), pada selang waktu tersebut, 100 kepala sekolah mendaftarkan sekolahnya.
Pada saat pertama stored procedure membaca data, system menemukan sebanyak 50.000
sekolah, yang artinya masing-masing sekolah mendapatkan bantuan dana sebanyak Rp.
20.000.000, sedangkan pada saat system mengalokasikan dana kepada tiap sekolah yang
mendaftar (update daftar-sekolah set alokasi-dana = 20.000.000) bukannya 50.000 sekolah yang
datanya terbaca pertama yang di update, melainkan 50.100 sekolah yang datanya di update. Ini
artinya pemerintah memerlukan tambahan dana sebesar Rp. 2.000.000.000.
Dari kasus diatas,
a. [Dari pandangan transaksional database] Jelaskan sebab system mengupdate 50.100 sekolah
     melainkan 50.000 sekolah.
b. Jelaskan apa yang harus dilakukan untuk mencegah kasus seperti diatas?

Más contenido relacionado

La actualidad más candente

Analisis pada e-commerce dan website Tokopedia.com
Analisis pada e-commerce dan website Tokopedia.comAnalisis pada e-commerce dan website Tokopedia.com
Analisis pada e-commerce dan website Tokopedia.comCllszhr
 
Laporan pembuatan aplikasi my so untuk android ppt
Laporan pembuatan aplikasi my so untuk android pptLaporan pembuatan aplikasi my so untuk android ppt
Laporan pembuatan aplikasi my so untuk android pptWahyu Anggara
 
Dts x dicoding #4 memulai pemrograman kotlin
Dts x dicoding #4 memulai pemrograman kotlinDts x dicoding #4 memulai pemrograman kotlin
Dts x dicoding #4 memulai pemrograman kotlinAhmad Arif Faizin
 
Contoh Perubahan Proses Bisnis/Sosial Akibat Teknologi Yang "Melunturkan" Nil...
Contoh Perubahan Proses Bisnis/Sosial Akibat Teknologi Yang "Melunturkan" Nil...Contoh Perubahan Proses Bisnis/Sosial Akibat Teknologi Yang "Melunturkan" Nil...
Contoh Perubahan Proses Bisnis/Sosial Akibat Teknologi Yang "Melunturkan" Nil...naufals11
 
Materi manajemen investasi teknologi informasi-1
Materi  manajemen investasi teknologi informasi-1Materi  manajemen investasi teknologi informasi-1
Materi manajemen investasi teknologi informasi-1Fajar Baskoro
 
Analisis Sistem Informasi Penjualan Alfamart
Analisis Sistem Informasi Penjualan Alfamart Analisis Sistem Informasi Penjualan Alfamart
Analisis Sistem Informasi Penjualan Alfamart SariWahyuningsih4
 
Makalah Sistem Pendukung Keputusan
Makalah Sistem Pendukung Keputusan Makalah Sistem Pendukung Keputusan
Makalah Sistem Pendukung Keputusan Elfrita Sihombing
 
Tugas normalisasi imaika penjualan komputer
Tugas normalisasi   imaika penjualan komputerTugas normalisasi   imaika penjualan komputer
Tugas normalisasi imaika penjualan komputerHamdi Hamdi
 
Dts x dicoding #3 memulai pemrograman kotlin
Dts x dicoding #3 memulai pemrograman kotlinDts x dicoding #3 memulai pemrograman kotlin
Dts x dicoding #3 memulai pemrograman kotlinAhmad Arif Faizin
 
Use case specification dan activity diagram [INTERNAL EDUCATIONAL PURPOSED]
Use case specification dan activity diagram [INTERNAL EDUCATIONAL PURPOSED]Use case specification dan activity diagram [INTERNAL EDUCATIONAL PURPOSED]
Use case specification dan activity diagram [INTERNAL EDUCATIONAL PURPOSED]Theo Pratama
 
Pengantar Dan Konsep Keamanan Sistem Informasi
Pengantar Dan Konsep Keamanan Sistem Informasi   Pengantar Dan Konsep Keamanan Sistem Informasi
Pengantar Dan Konsep Keamanan Sistem Informasi Indri Sukmawati Rahayu
 
Presentasi IT ke 1
Presentasi IT ke 1Presentasi IT ke 1
Presentasi IT ke 1cijerah
 
Kelompok 8 - Implementasi Role & Privilege pada database Oracle & my SQL
Kelompok 8 - Implementasi Role & Privilege pada database Oracle & my SQLKelompok 8 - Implementasi Role & Privilege pada database Oracle & my SQL
Kelompok 8 - Implementasi Role & Privilege pada database Oracle & my SQLDejiko Chaem
 
Proses di Sistem Operasi
Proses di Sistem OperasiProses di Sistem Operasi
Proses di Sistem Operasieddie Ismantoe
 
4 diagram relasi antar entitas (ERD)
4 diagram relasi antar entitas (ERD)4 diagram relasi antar entitas (ERD)
4 diagram relasi antar entitas (ERD)Simon Patabang
 
IT BSC and Strategic Alignment Model (SAM)
IT BSC and Strategic Alignment Model (SAM)IT BSC and Strategic Alignment Model (SAM)
IT BSC and Strategic Alignment Model (SAM)EM Nasrul
 

La actualidad más candente (20)

Dokumen SKPL SIPESTA
Dokumen SKPL SIPESTADokumen SKPL SIPESTA
Dokumen SKPL SIPESTA
 
Analisis pada e-commerce dan website Tokopedia.com
Analisis pada e-commerce dan website Tokopedia.comAnalisis pada e-commerce dan website Tokopedia.com
Analisis pada e-commerce dan website Tokopedia.com
 
Laporan pembuatan aplikasi my so untuk android ppt
Laporan pembuatan aplikasi my so untuk android pptLaporan pembuatan aplikasi my so untuk android ppt
Laporan pembuatan aplikasi my so untuk android ppt
 
Dts x dicoding #4 memulai pemrograman kotlin
Dts x dicoding #4 memulai pemrograman kotlinDts x dicoding #4 memulai pemrograman kotlin
Dts x dicoding #4 memulai pemrograman kotlin
 
Social Gaming
Social GamingSocial Gaming
Social Gaming
 
Contoh Perubahan Proses Bisnis/Sosial Akibat Teknologi Yang "Melunturkan" Nil...
Contoh Perubahan Proses Bisnis/Sosial Akibat Teknologi Yang "Melunturkan" Nil...Contoh Perubahan Proses Bisnis/Sosial Akibat Teknologi Yang "Melunturkan" Nil...
Contoh Perubahan Proses Bisnis/Sosial Akibat Teknologi Yang "Melunturkan" Nil...
 
Materi manajemen investasi teknologi informasi-1
Materi  manajemen investasi teknologi informasi-1Materi  manajemen investasi teknologi informasi-1
Materi manajemen investasi teknologi informasi-1
 
Analisis Sistem Informasi Penjualan Alfamart
Analisis Sistem Informasi Penjualan Alfamart Analisis Sistem Informasi Penjualan Alfamart
Analisis Sistem Informasi Penjualan Alfamart
 
Pertemuan 10
Pertemuan 10Pertemuan 10
Pertemuan 10
 
Makalah Sistem Pendukung Keputusan
Makalah Sistem Pendukung Keputusan Makalah Sistem Pendukung Keputusan
Makalah Sistem Pendukung Keputusan
 
Tugas normalisasi imaika penjualan komputer
Tugas normalisasi   imaika penjualan komputerTugas normalisasi   imaika penjualan komputer
Tugas normalisasi imaika penjualan komputer
 
Dts x dicoding #3 memulai pemrograman kotlin
Dts x dicoding #3 memulai pemrograman kotlinDts x dicoding #3 memulai pemrograman kotlin
Dts x dicoding #3 memulai pemrograman kotlin
 
Laporan analisis sistem informasi
Laporan analisis sistem informasiLaporan analisis sistem informasi
Laporan analisis sistem informasi
 
Use case specification dan activity diagram [INTERNAL EDUCATIONAL PURPOSED]
Use case specification dan activity diagram [INTERNAL EDUCATIONAL PURPOSED]Use case specification dan activity diagram [INTERNAL EDUCATIONAL PURPOSED]
Use case specification dan activity diagram [INTERNAL EDUCATIONAL PURPOSED]
 
Pengantar Dan Konsep Keamanan Sistem Informasi
Pengantar Dan Konsep Keamanan Sistem Informasi   Pengantar Dan Konsep Keamanan Sistem Informasi
Pengantar Dan Konsep Keamanan Sistem Informasi
 
Presentasi IT ke 1
Presentasi IT ke 1Presentasi IT ke 1
Presentasi IT ke 1
 
Kelompok 8 - Implementasi Role & Privilege pada database Oracle & my SQL
Kelompok 8 - Implementasi Role & Privilege pada database Oracle & my SQLKelompok 8 - Implementasi Role & Privilege pada database Oracle & my SQL
Kelompok 8 - Implementasi Role & Privilege pada database Oracle & my SQL
 
Proses di Sistem Operasi
Proses di Sistem OperasiProses di Sistem Operasi
Proses di Sistem Operasi
 
4 diagram relasi antar entitas (ERD)
4 diagram relasi antar entitas (ERD)4 diagram relasi antar entitas (ERD)
4 diagram relasi antar entitas (ERD)
 
IT BSC and Strategic Alignment Model (SAM)
IT BSC and Strategic Alignment Model (SAM)IT BSC and Strategic Alignment Model (SAM)
IT BSC and Strategic Alignment Model (SAM)
 

Similar a Transaksi dan Integritas Data

Aplikasi jual beli online
Aplikasi jual beli onlineAplikasi jual beli online
Aplikasi jual beli onlineHendra Fillan
 
PostgreSQL Transaksi
PostgreSQL TransaksiPostgreSQL Transaksi
PostgreSQL TransaksiAmmar Shadiq
 
Zulyanti Megasari - Konkurensi
Zulyanti Megasari - KonkurensiZulyanti Megasari - Konkurensi
Zulyanti Megasari - Konkurensibelajarkomputer
 
Ferli Apriadi - Konkurensi
Ferli Apriadi - KonkurensiFerli Apriadi - Konkurensi
Ferli Apriadi - Konkurensibelajarkomputer
 
01 sisbasdat a 04
01 sisbasdat a 0401 sisbasdat a 04
01 sisbasdat a 04nursalehah
 
02 simbada a_04_concurrency
02 simbada a_04_concurrency02 simbada a_04_concurrency
02 simbada a_04_concurrencynursalehah
 
Bab 09 -_overview_man_transaksi
Bab 09 -_overview_man_transaksiBab 09 -_overview_man_transaksi
Bab 09 -_overview_man_transaksiisni_novianti
 
Pengenalan konsep dan komponen Oracle database recovery
Pengenalan konsep dan komponen Oracle database recoveryPengenalan konsep dan komponen Oracle database recovery
Pengenalan konsep dan komponen Oracle database recoveryAmmar Shadiq
 
Pertemuan 8-deadloack-
Pertemuan 8-deadloack-Pertemuan 8-deadloack-
Pertemuan 8-deadloack-teguhhh
 
Tipe rcovery database
Tipe rcovery databaseTipe rcovery database
Tipe rcovery databaseILHAMYOGI
 
Pengolahan transaksi
Pengolahan transaksiPengolahan transaksi
Pengolahan transaksiPutra Andry
 
Modul Komparasi Locking Mechanism dan Deadlock Pada Oracle dan MySQL
Modul Komparasi Locking Mechanism dan Deadlock Pada Oracle dan MySQLModul Komparasi Locking Mechanism dan Deadlock Pada Oracle dan MySQL
Modul Komparasi Locking Mechanism dan Deadlock Pada Oracle dan MySQLnurcholistri
 

Similar a Transaksi dan Integritas Data (20)

Aplikasi jual beli online
Aplikasi jual beli onlineAplikasi jual beli online
Aplikasi jual beli online
 
Transaction
TransactionTransaction
Transaction
 
PostgreSQL Transaksi
PostgreSQL TransaksiPostgreSQL Transaksi
PostgreSQL Transaksi
 
Transaction.pptx
Transaction.pptxTransaction.pptx
Transaction.pptx
 
Materi 11
Materi 11Materi 11
Materi 11
 
Zulyanti Megasari - Konkurensi
Zulyanti Megasari - KonkurensiZulyanti Megasari - Konkurensi
Zulyanti Megasari - Konkurensi
 
Ferli Apriadi - Konkurensi
Ferli Apriadi - KonkurensiFerli Apriadi - Konkurensi
Ferli Apriadi - Konkurensi
 
01 sisbasdat a 04
01 sisbasdat a 0401 sisbasdat a 04
01 sisbasdat a 04
 
Saga Pattern in Microservice
Saga Pattern in MicroserviceSaga Pattern in Microservice
Saga Pattern in Microservice
 
02 simbada a_04_concurrency
02 simbada a_04_concurrency02 simbada a_04_concurrency
02 simbada a_04_concurrency
 
Bab 09 -_overview_man_transaksi
Bab 09 -_overview_man_transaksiBab 09 -_overview_man_transaksi
Bab 09 -_overview_man_transaksi
 
Pengenalan konsep dan komponen Oracle database recovery
Pengenalan konsep dan komponen Oracle database recoveryPengenalan konsep dan komponen Oracle database recovery
Pengenalan konsep dan komponen Oracle database recovery
 
Bab. 11
Bab. 11Bab. 11
Bab. 11
 
Pertemuan 8-deadloack-
Pertemuan 8-deadloack-Pertemuan 8-deadloack-
Pertemuan 8-deadloack-
 
Tipe rcovery database
Tipe rcovery databaseTipe rcovery database
Tipe rcovery database
 
ikd312-10-transaksi
ikd312-10-transaksiikd312-10-transaksi
ikd312-10-transaksi
 
Pertemuan 1
Pertemuan 1Pertemuan 1
Pertemuan 1
 
Proses-spec.pdf
Proses-spec.pdfProses-spec.pdf
Proses-spec.pdf
 
Pengolahan transaksi
Pengolahan transaksiPengolahan transaksi
Pengolahan transaksi
 
Modul Komparasi Locking Mechanism dan Deadlock Pada Oracle dan MySQL
Modul Komparasi Locking Mechanism dan Deadlock Pada Oracle dan MySQLModul Komparasi Locking Mechanism dan Deadlock Pada Oracle dan MySQL
Modul Komparasi Locking Mechanism dan Deadlock Pada Oracle dan MySQL
 

Más de Ammar Shadiq

Statement of Accomplisment from Online Machine Learning Class
Statement of Accomplisment from Online Machine Learning ClassStatement of Accomplisment from Online Machine Learning Class
Statement of Accomplisment from Online Machine Learning ClassAmmar Shadiq
 
Mendeteksi Topik Berita Pada Aliran Berita Online Berbahasa Indonesia
Mendeteksi Topik Berita Pada Aliran Berita Online Berbahasa IndonesiaMendeteksi Topik Berita Pada Aliran Berita Online Berbahasa Indonesia
Mendeteksi Topik Berita Pada Aliran Berita Online Berbahasa IndonesiaAmmar Shadiq
 
PostgreSQL Stored-procedure
PostgreSQL Stored-procedurePostgreSQL Stored-procedure
PostgreSQL Stored-procedureAmmar Shadiq
 
PostgreSQL Trigger
PostgreSQL TriggerPostgreSQL Trigger
PostgreSQL TriggerAmmar Shadiq
 
Pelatihan Java - Number & String
Pelatihan Java - Number & StringPelatihan Java - Number & String
Pelatihan Java - Number & StringAmmar Shadiq
 

Más de Ammar Shadiq (6)

Statement of Accomplisment from Online Machine Learning Class
Statement of Accomplisment from Online Machine Learning ClassStatement of Accomplisment from Online Machine Learning Class
Statement of Accomplisment from Online Machine Learning Class
 
Mendeteksi Topik Berita Pada Aliran Berita Online Berbahasa Indonesia
Mendeteksi Topik Berita Pada Aliran Berita Online Berbahasa IndonesiaMendeteksi Topik Berita Pada Aliran Berita Online Berbahasa Indonesia
Mendeteksi Topik Berita Pada Aliran Berita Online Berbahasa Indonesia
 
PostgreSQL Stored-procedure
PostgreSQL Stored-procedurePostgreSQL Stored-procedure
PostgreSQL Stored-procedure
 
PostgreSQL Trigger
PostgreSQL TriggerPostgreSQL Trigger
PostgreSQL Trigger
 
Java numbers
Java numbersJava numbers
Java numbers
 
Pelatihan Java - Number & String
Pelatihan Java - Number & StringPelatihan Java - Number & String
Pelatihan Java - Number & String
 

Transaksi dan Integritas Data

  • 1. Transaksi dan Data Integrity M. Ammar Shadiq Ilmu Komputer  Universitas Pendidikan Indonesia, Bandung 17 Maret 2009 [ V.beta 1 ] TABEL YANG DIGUNAKAN : DERET : (NILAI NUMBER(32)) CREATE TABLE deret (nilai number(32)); Dengan Dummy data : 1, 2, 3, 4, 5 INSERT INTO deret VALUES (1); INSERT INTO deret VALUES (2); INSERT INTO deret VALUES (3); INSERT INTO deret VALUES (4); INSERT INTO deret VALUES (5); ACCOUNT : (NAMA CHAR ACTER(50), SALDO NUMBER(32,5), CABANG CHARACTER(5 0)) CREATE TABLE account (nama varchar2(50),saldo number(32,5),cabang varchar2(50)); Dengan Dummy Data : (Tara, Rp. 100.000, Bogor), (Alice, Rp. 1.000.000, Bogor), (Bob, Rp. 700.000, Bandung), (Wally, Rp. 500.000, Bandung) INSERT INTO account VALUES ('Tara',100000,'Bogor'); INSERT INTO account VALUES ('Alice',1000000,'Bogor'); INSERT INTO account VALUES ('Bob',700000,'Bandung'); INSERT INTO account VALUES ('Wally',500000,'Bandung'); TRANSAKSI Transaksi adalah konsep fundamental dari system database. Inti dari transaksi adalah membundel operasi-operasi kedalam sebuah atau tidak sama sekali operasi. Bayangkan pada sebuah transaksi perbankan yang mentransfer uang antara account : Sebagai contohnya, nasabah Alice mentransfer uang sebanyak Rp 100.000 kepada nasabah Tara, maka ada dua operasi yang harus di lakukan, yaitu : (1) mengurangi saldo pada Nasabah Alice sebanyak Rp 100.000 dan (2) menambah saldo pada nasabah Tara sebanyak Rp 100.000. Pada kondisi yang ideal, kedua operasi tersebut berjalan lancar (saldo Alice berkurang Rp 100.000 dan saldo Tara bertambah Rp 100.000). Sedangkan pada kondisi yang tidak ideal saldo Alice berkurang Rp 100.000 sedangkan saldo Tara tidak bertambah Rp 100.000. Ilustrasi kondisi transaksi yang tidak ideal
  • 2. Untuk menghindari kondisi kegagalan seperti ilustrasi diatas, DBMS menggunakan system Transaksi, yang memaketkan beberapa operasi menjadi satu blok operasi Atomik, yaitu seluruh operasi 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 memiliki sifat-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) 2. Konsistensi (Consistency): eksekusi transaksi secara tunggal harus dapat menjamin data tetap konsisten setelah transaksi berakhir. (dari pak Yudi Wibisono : transaksi mempertahankan konsistensi database) 3. 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) 4. 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 TRANSAKSI Terhenti atau tidak sempurnanya pelaksanaan sebuah transaksi tidak selalu diakibatkan oleh kegagalan insidential baik dari perangkat keras (crash) ataupun kemacetan sistem operasi (hang). Keadaan ini justru lebih sering terjadi secara sengaja, baik oleh aksi user yang sengaja menghentikan eksekusi transaksi karena terlalu lamanya pelaksanaan transaksi atau oleh keputusan penghentian transaksi oleh DBMS akibat kondisi yang tidak diinginkan seperti Dead Lock atau terlewatinya batas waktu (timeout) pelaksanaan transaksi yang telah di tetapkan. Dengan kenyataan ini, penting untuk di ketahui status (state) yang telah dicapai dalam pelaksanaan sebuah transaksi. Transaksi yang terhenti pengeksekusiannya di tengah jalan (karena sebab apapun), akan dinyatakan dalam status gagal (failed). Selanjutnya transaksi itu akan di batalkan (aborted). Terhadap transaksi yang dibatalkan itu, data yang telah mengalami perubahan akibat pengeksekusian transaksi tersebut oleh modul recovery dalam DBMS harus di kembalikan kekeadaan
  • 3. semula (ROLLBACK), seperti keadaan dimana transaksi belum di kerjakan sama sekali. Sementara transaksi yang telah di eksekusi dengan sempurna, biasa disebut berada dalam kondisi berhasil (commited). Perubahan nilai-nilai dalam basisdata oleh transaksi yang telah berada dalam status berhasil(commited) ini akan bersifat menetap (persistent) dan tidak ada mekanisme apapun dalam DBMS yang dapat kita gunakan untuk mengembalikannya ke nilai-nilai semula. Kecuali jika kemudian kita secara sengaja dan ekspisit membuat/menjalankan transaksi yang merupakan kebalikan dari transaksi sebelumnya(contoh: jika anda telah mengcommit sebuah transaksi transfer uang pada bank, tidak ada mekanisme apapun di DBMS yang dapat mengembalikan kekeadaan semula, kecuali jika anda membuat sebuah transaksi yang bekerja membalikkan proses transfer uang tersebut). Secara lengkap, status-status yang dapat dicapai oleh sebuah transaksi sejak mulai dilaksanakan hingga selesai atau dibatalkannya 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 siklus peralihan status (state) dari sebuah transaksi : Ketika sebuah transaksi mulai di kerjakan, maka transaksi tersebut segera berada dalam status Active. Status ini akan terus dialami selama eksekusi operasi-operasi dalam transaksi tersebut masih berlangsung. Jika terjadi penghentian sebelum operasi terakhir dalam transaksi, maka transaksi segera beralih ke status baru, yaitu failed. Namun jika keseluruhan operasi dalam transaksi selesai di kerjakan, maka transaksi tersebut dinyatakan berada dalam status berakhir sebagian (Partially Committed), dimana perubahan-perubahan data masih berada dalam memory utama yang bersifat tidak permanen (Volatile). Transaksi dalam status ini masih mungkin untuk berpindah ke status failed ( karena ada pembatalan transaksi baik disengaja maupun tidak). Jika beralih ke status failed, maka nilai-nilai data yang baru yang masih ada di memory utama akan di salin/direkam ke dalam disk yang bersifat permanen. Begitu proses perekaman tersebut selesai di kerjakan, maka transaksi beralih ke status yang baru, yaitu berhasil sempurna (committed). Sementara itu, terhadap transaksi yang berada dalam status failed, maka DBMS harus menjalankan proses RollBack. Proses tersebut dapat berupa :
  • 4. 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 selesai di lakukan, maka transaksi berpindah ke status batal (aborted). Status berhasil sempurna (committed) maupun batal (aborted) merupakan status terminasi, yaitu status akhir dalam pelaksanaan transaksi.
  • 5. TRANSAKSI DI ORACLE 10G Oracle tidak menggunakan klausa BEGIN untuk memulai transaksi, karena klausa BEGIN digunakan dalam PL/SQL dalam struktur Blocknya. secara default, seluruh perintah di Oracle adalah sebuah transaksi yang diawali dengan sebuah perintah DML dan diakhiri 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 dapat mengaplikasikan contoh-contoh yang ada? Mudah ! ada berbagai cara untuk pengaplikasian ini. Cara yang paling mudah adalah dengan membuka session baru dengan user yang sama. Untuk memudahkan dalam membedakan 2 session tersebut, anda dapat bedakan tampilan pada Windows Command Line pada Properties. Pada contoh disini, saya memisalkan Command Line dengan background berwarna Hitam adalah User 1 sedangkan Command Line dengan background berwarna putih adalah User 2. Langkah-langkah : 1. Jalankan 2 SQL Command Line 2. 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 lain sebelum transaksi di commit : 1. Gunakan user satu, masukkan 6 pada tabel deret : INSERT INTO deret VALUES (6); 2. Lalu cek isi tabel deret : SELECT COUNT(*) FROM deret; 3. Pindah dan gunakan user dua, lalu cek isi tabel deret. Apakah anda melihat perbedaan?
  • 6. 4. Pindah lagi ke user satu lalu jalankan perintah : COMMIT; 5. Pindah lagi ke user dua lalu cek isi tabel deret. Lagi, apakah anda melihat perbedaan? Contoh diatas adalah contoh sederhana akan transaksi. Anda dapat mencoba perintah ROLLBACK; untuk pembuktian lebih lanjut. Waktu User satu User dua keterangan w1 SELECT COUNT(*) FROM deret; SELECT COUNT(*) FROM deret; Hasil = 5 w2 INSERT INTO deret VALUES (6); w3 SELECT COUNT(*) FROM deret; Hasil = 6 w4 SELECT COUNT(*) FROM deret; Hasil = 5 w5 COMMIT; w6 SELECT COUNT(*) FROM deret; Hasil = 6
  • 7. SAVE POINT Save point mengizinkan kita untuk membatalkan bagian tertentu dari transaksi, tetapi tetap meng- commit bagian yang lain. Pendeklarasian : SAVEPOINT [nama_savepoint] 1 COMMIT; --untuk memastikan transaksi ini lepas dari transaksi sebelumnya. 2 UPDATE account SET saldo = saldo – 100000 3 WHERE nama = 'Alice'; 4 SAVEPOINT savepoint_ku; 5 UPDATE account SET saldo = saldo + 100000 6 WHERE nama = 'Bob'; 7 -- Oups salah... harusnya dimasukin ke Accountnya Wally 8 ROLLBACK TO savepoint_ku; 9 UPDATE account SET saldo = saldo + 100000 10 WHERE nama = 'Wally'; 11 COMMIT; Penjelasan : Transaksi diatas bertujuan untuk mentransfer uang dari Account Alice sebanyak Rp. 100.000 ke Accountnya 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) 6. Update account Wally (baris 9 dan 10). 7. Lakukan perubahan secara permanen pada data (COMMIT baris 11). Contoh lainnya : 1 COMMIT; --untuk memastikan transaksi ini lepas dari transaksi sebelumnya. 2 UPDATE deret SET nilai = 99 WHERE nilai = 1; 3 SAVEPOINT savepoint_ku; 4 UPDATE deret SET nilai = 77 WHERE nilai = 99; 5 -- Oups salah... harusnya 55 6 ROLLBACK TO savepoint_ku; 7 UPDATE deret SET nilai = 55 WHERE nilai = 99; 8 -- Perhatikan parameter pada clause WHERE adalah 99 bukannya 77 9 COMMIT;
  • 8. ISOLASI TRANSAKSI Standar SQL mendefinisikan empat level isolasi transaksi dalam kerangka tiga fenomena yang harus di cegah antara transaksi. Fenomena-fenomena ini adalah : DIRTY READ : Sebuah transaksi membaca data yang dituliskan oleh transaksi yang gagal (kedua transaksi ini bekerja pada waktu bersamaan). Contoh : Transaksi T1 menjalankan perintah UPDATE pada suatu baris(tetapi belum di commit), transaksi T 2 lalu membaca baris tersebut, lalu transaksi T1 tidak jadi melakukan update dengan perintah ROLLBACK. Dengan ini transaksi T2 membaca data yang sudah tidak lagi ada. Hal ini tidak diperbolehkan terjadi oleh Oracle, untuk membuktikannya anda dapat mempraktekkannya. Praktek : Gunakan tabel account dengan user satu dan dua seperti 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 Tara sebanyak Rp. 100.000 Waktu w2 : user dua merubah saldo Tara menjadi Rp. 50.000 Waktu w3 : user satu melihat lagi banyaknya saldo nasabah Tara dan menemukan bahwa saldonya masih belum berubah, yaitu sebanyak Rp. 100.000 Waktu w4 : user dua meng-COMMIT-kan perubahan, yang oleh system dituliskan pada HardDisk secara permanen Waktu w5 : user satu melihat lagi banyaknya saldo nasabah Tara dan menemukan bahwa saldonya sudah berubah, yaitu sebanyak Rp. 50.000 Dengan ilustrasi diatas, sampai dengan langkah pada waktu w3 anda sendiri telah membuktikan bahwa fenomena Dirty Read tidak di perbolehkan terjadi oleh Oracle. NONREPEATABLE READ : Sebuah transaksi membaca ulang data yang telah di baca sebelumnya dan menemukan bahwa data tersebut telah di modifikasi oleh transaksi lain (yang di commit setelah pembacaan pertama). Contoh : Transaksi T1 membaca sebuah baris pada tabel, sedangkan transaksi T2 mengupdate row tersebut, lalu kemudian transaksi T1 membaca lagi row tersebut. Transaksi T1 telah membaca baris yang sama dua kali, tetapi isi barisnya berbeda. (hal ini dapat terjadi pada transaksi di Oracle) Praktek : Gunakan tabel account dengan user satu dan dua seperti contoh diatas, lalu lakukan perintah2 berikut :
  • 9. Catatan : jika sebelumnya anda mencoba praktek pembuktian fenomena Dirty Read diatas, ubah terlebih dahulu saldo nasabah Tara 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 Tara sebanyak Rp. 100.000 Waktu w2 : user dua merubah saldo Tara menjadi Rp. 50.000 Waktu w3 : user dua meng-COMMIT-kan perubahan, yang oleh system dituliskan pada HardDisk secara permanen Waktu w4 : user satu melihat lagi banyaknya saldo nasabah Tara dan menemukan bahwa saldonya sudah berubah, yaitu sebanyak Rp. 50.000 Sengan ilustrasi diatas, anda sendiri telah membuktikan bahwa fenomena Nonrepeatable Read dapat terjadi pada Oracle di transaksi yang berjalan secara bersamaan. PHANTOM READ : Sebuah transaksi mengeksekusi ulang query yang menghasilkan paket baris yang memenuhi sebuah kondisi pencarian dan menemukan bahwa paket baris yang memenuhi kondisi pencarian telah berubah dikarenakan transaksi yang baru saja di commit. (waktu di baca lagi sudah tidak ada). Untuk lebih mengerti mengenai phantom phenomenon (bhs. indonesia : fenomena hantu) CONTOH 1 FENOMENA PHANTOM : Transaksi T1 membaca semua data yang memenuhi suatu kondisi (semua nasabah bank yang memiliki cabang Bogor). Misalkan transaksi T2 memasukkan data nasabah baru yang memenuhi kondisi yang sama (memasukkan data nasabah baru dengan cabang Bogor) jika transaksi T1 mengulangi operasi pembacaanya, transaksi T1 akan melihat ada data baru yang sebelumnya tidak ada. Sebuah “hantu” Praktek : Gunakan tabel account dengan user satu dan dua seperti contoh diatas, lalu lakukan perintah 2 berikut : Waktu User satu User dua 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 memiliki cabang Bogor dan menemukan ada 2 orang nasabah (Tara dan Alice) Waktu w2 : user dua menambahkan seorang nasabah Yuni yang juga memiliki cabang Bogor Waktu w3 : user dua meng-COMMIT-kan perubahan, yang oleh system dituliskan pada HardDisk secara permanen. Waktu w4 : User satu melihat lagi banyaknya nasabah yang memiliki cabang Bogor dan menemukan sekarang ada 3 orang nasabah (Tara, Alice dan Yuni) dimana Yuni adalah phantom tuple. Inilah yang dinamakan fenomena phantom. Jika fenomena ini tidak di waspadai, pada transaksi yang membutuhkan keakuratan data akan menjadi masalah, karena fenomena ini seringkali tidak terlihat.
  • 10. Catatan : hati-hati akan perbedaan fenomena Nonrepeatable Read dan Phantom Read, dimana Nonrepeatable Read adalah perbedaan ISI data, sedangkan Phantom Read adalah perbedaan ADA TIDAKNYA data. Seperti telah di sebutkan diatas, ada 4-level isolasi yang di tentukan untuk menangani ke-3 fenomena tersebut, dan hubungan level-level isolasi dengan kemungkinan terjadinya fenomena-fenomena diatas di deskripsikan pada tabel berikut : Isolation Level Dirty Read Nonrepeatable Read Phantom Read Read uncommitted Mungkin Mungkin Mungkin Read committed TIDAK mungkin Mungkin Mungkin Repeatable read TIDAK mungkin TIDAK mungkin Mungkin Serializable TIDAK mungkin TIDAK mungkin TIDAK Mungkin Pada Oracle, hanya Read Commited dan Serializable yang dapat digunakan. (Read Commited adalah defaultnya) Di Oracle, anda dapat meminta salah satu dari empat isolasi level standar dari transaksi. Tetapi secara internal, hanya ada dua level isolasi transaksi yang dapat digunakan, yaitu Read Commited dan Serializable. Saat anda memilih Read Uncommited anda mendapatkan Read Commited, dan saat anda memilih Repeatable Read, anda mendapatkan Serializable, jadi level isolasi sebenarnya bisa jadi lebih ketat dari apa yang anda pilih. Hal ini diizinkan oleh standar SQL : keempat level isolasi hanya mendefinisikan fenomena apa yang tidak boleh terjadi, keempat level isolasi tersebut tidak mendefinisikan fenomena apa yang harus terjadi. Alasan mengapa Oracle hanya menyediakan dua level isolasi adalah karena kedua level isolasi tersebut adalah satu-satunya cara yang masuk akal untuk memetakan level isolasi standar ke arsitektur pengendalian concruency secara multiversion. Seperti telah di Jelaskan Diatas, ada 4 level isolasi yang dapat digunakan untuk menanggulangi ketiga fenomena yang mungkin terjadi pada transaksi. Namun pada Oracle dari 4 level isolasi yang ada (Read Uncommited, Read Commited, Repeatable Read dan Serializable), hanya dua level isolasi yang dapat di gunakan yaitu : Read Commited dan Serializable. Penjelasan mengenai pengimplemantasian kedua level isolasi tersebut pada Oracle akan di jelaskan disini. READ COMMITED Adalah isolasi transaksi yang hanya dapat melihat perubahan data setelah transaksi lain melakukan COMMIT pada data tersebut. Adalah level isolasi default pada Oracle. Contoh-contoh sebelumnya menggunakan level isolasi default ini. Saat transaksi berjalan pada level isolasi ini, sebuah query SELECT hanya melihat data yang di COMMIT sebelum query SELECT tersebut dimulai; transaksi tersebut tidak akan melihat data yang belum di- COMMIT-kan (tetapi, query SELECT dapat melihat efek dari update sebelumnya yang dieksekusi didalam transaksi tersebut sendiri, walaupun transaksi tersebut belum di-COMMIT-kan). Perhatikan bahwa dua SELECT pada waktu yang berbeda dapat melihat data yang berbeda pula, walaupun keduanya berada pada satu transaksi, jika ada transaksi lain yang men-COMMIT-kan perubahan setelah eksekusi setelah SELECT yang pertama. 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
  • 11. bersedia untuk mengulangi transaksi dikarenakan kegagalan peng-serial-an 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. Praktek : Untuk mengaplikasikan kedua level isolasi Read Commited anda tidak perlu menuliskan perintah khusus, karena level isolasi tersebut menjadi level isolasi default pada Oracle, sedangkan untuk level isolasi Serilizable anda harus menggunakan perintah khusus, yaitu : SET TRANSACTION Penggunaan kedua perintah diatas adalah berbeda, dimana SET TRANSACTION Digunakan di dalam transaksi untuk mengubah level isolasi yang digunakan Contoh : SET TRANSACTION ISOLATION LEVEL SERIALIZABLE; -- [Perintah Query] Catatan : Anda dapat menggunakan READ UNCOMMITTED | READ COMMITTED | REAPETABLE READ | SERIALIZABLE. Dimana pada Oracle Read Uncommitted diubah menjadi Read Committed dan Repetable Read diubah menjadi Serializable. Praktek : Karena level isolasi Read Committed telah banyak di bahas dan di berikan contohnya diatas, saya hanya akan memberikan contoh Level isolasi Serializable. Agar memudahkan penulisan, disini akan di pergunakan perintah SET TRANSACTION. Bukti pada level Serializable, Fenomena Phantom tidak dapat terjadi : Dengan asumsi nasabah yang memiliki cabang Bogor ada 2 orang (Alice dan Tara), cabang Bandung ada 2 orang (Bob dan Wally). Catatan : Jangan lupa untuk meng-COMMIT atau me-ROLLBACK untuk mengakhiri transaksi. Waktu User satu User dua w1 SET TRANSACTION ISOLATION LEVEL SERIALIZABLE; SET TRANSACTION ISOLATION LEVEL SERIALIZABLE; w2 SELECT COUNT (*) FROM account WHERE cabang = 'Bogor'; w3 INSERT INTO account VALUES ('Yuni',90000,'Bogor'); w4 COMMIT; w5 SELECT COUNT (*) FROM account WHERE cabang = 'Bogor'; w6 SET TRANSACTION ISOLATION LEVEL READ COMMITTED; w7 SELECT COUNT * FROM account WHERE cabang = 'Bandung'; w8 INSERT INTO account VALUES ('Darman',1000000,'Bandung'); w9 COMMIT; w10 SELECT COUNT * FROM account WHERE cabang = 'Bandung'; Pada Waktu w2 user satu melihat jumlah banyaknya nasabah yang memiliki cabang Bogor, dan menemukan ada 2 orang nasabah. Pada Waktu w3 user dua menambahkan nasabah Yuni yang juga memiliki cabang Bogor. Lalu user dua meng-COMMIT-kan perubahannya, yang dituliskan secara permanen pada HardDisk secara permanen pada Waktu w4.
  • 12. Pada Waktu w5 user satu melihat lagi banyaknya nasabah yang memiliki cabang Bogor dan menemukan bahwa banyaknya nasabah yang memiliki cabang Bogor belum berubah, masih 2 orang dan nasabah Yuni yang dimasukkan(di-COMMIT-kan) datanya oleh user dua pada waktu transaksi yang dilakukan user satu masih berjalan tidak dibaca. Pada Waktu w6 user dua memulai transaksi baru dengan level isolasi default (Read Committed), lalu pada Waktu w7 melihat jumlah banyaknya nasabah yang memiliki cabang Bandung, dan menemukan ada 2 orang nasabah. Pada Waktu w8 user satu menambahkan nasabah Darman yang juga memiliki cabang Bandung. Lalu user satu meng-COMMIT-kan perubahannya, yang dituliskan secara permanen pada HardDisk secara permanen pada Waktu w9. Pada Waktu w10 user dua melihat lagi banyaknya nasabah yang memiliki cabang Bandung dan menemukan sekarang ada 3 orang nasabah (Bob, Wally dan Darman) dimana Darman adalah Phantom data yang mengindikasikan Fenomena Phantom, selain Fenomena Phantom anda dapat mencoba sendiri pembuktian Fenomena non repeatable read yang bukan menambahkan data, tetapi mengubah isi data.
  • 13. LOCKING PROTOCOL (EXP LI CI T LOC KI NG) Setiap transaksi dan query yang berjalan pada Oracle mengimplementasikan Locking (tidak terbatas pada level isolasi transaksi apa yang digunakan). Share Lock (S-Lock) dan Exclusive Lock (X-Lock) adalah metode penguncian data untuk menjaga keabsahan data. Yang membedakan kedua jenis Locking Protocol tersebut adalah Konflik yang terjadi satu sama lainnya. Untuk lebih jelasnya perhatikan contoh berikut : Transaksi 1 Memegang X-Lock pada objek A, maka transaksi 2 tidak dapat meminta/memegang S-Lock dan atau X-Lock pada objek A. Transaksi 1 Memegang S-Lock pada objek A, maka transaksi 2 dapat meminta/memegang S-Lock tetapi tidak dapat meminta/memegang X-Lock. Transaksi 1 Transaksi 2 Keterangan Memegang Meminta X-Lock X-Lock -- ditolak X-Lock S-Lock -- ditolak S-Lock X-Lock -- ditolak S-Lock S-Lock -- diterima Objek diatas dapat berupa tabel, row, database, dll. PENGUNCIAN LEVEL TABEL (T AB L E LE VE L L OC K) Adalah metode penguncian yang bekerja dengan cara mengunci suatu tabel sehingga mencegah perubahan atau penghapusan tabel selama suatu transaksi yang mereferensi tabel tersebut sedang berjalan. SELECT/INSERT/UPDATE/DELETE Row terhadap suatu tabel tertentu membutuhkan Table S-Lock. DROP atau ALTER terhadap suatu tabel membutuhkan Table X-Lock. Menuliskan Perintah LOCK TABLE <nama table> Praktek : Waktu User satu User dua w1 SET TRANSACTION ISOLATION LEVEL SERIALIZABLE; w2 SELECT * FROM deret; w3 DROP TABLE deret; w4 -- akan gagal, karena Oracle user satu masih melock w5 COMMIT; w6 DROP TABLE deret; -- Berhasil Waktu User satu User dua w1 UPDATE deret SET nilai = 99 WHERE nilai =1; w2 DROP TABLE deret; w3 -- akan gagal, karena Oracle user satu masih melock w4 COMMIT; w5 DROP TABLE deret; -- Berhasil w6 COMMIT; Waktu User satu User dua w1 SET TRANSACTION ISOLATION LEVEL READ COMMITTED; SET TRANSACTION ISOLATION LEVEL SERIALIZABLE; w2 DELETE FROM deret WHERE nilai = 1; w3 ALTER TABLE deret ADD komentar varchar2(10); w4 -- akan gagal karena Oracle user satu masih melock w5 COMMIT; w6 ALTER TABLE deret ADD komentar varchar2(10);--Berhasl w7 COMMIT;
  • 14. PENGUNCIAN LEVEL ROW ( RO W L EVE L LO C K) Adalah metode penguncian yang bekerja dengan cara mengunci suatu row beserta tabel dimana row tersebut berada sehingga mencegah perubahan atau penghapusan selama suatu transaksi yang mereferensi row tersebut sedang berjalan. PERNYATAAN YANG SALAH !!! SELECT membutuhkan Row S-Lock. INSERT membutuhkan Row X-Lock. PERNYATAAN YANG BENAR UPDATE/DELETE membutuhkan Row X-Lock. Salah satu sifat yang harus dimiliki transaksi adalah terisolasi (Isolation) dimana transaksi satu dengan transaksi lainnya tidak saling mempengaruhi dan disediakan Level-level isolasinya. Dimana Level isolasi Default pada Oracle adalah Read Committed, maka penguncian pada Level Row ini hanya berlaku untuk operasi UPDATE dan DELETE pada row yang sama. Sedangkan operasi SELECT dan INSERT sama sekali tidak terpengaruh. Operasi INSERT tidak berpengaruh pada Penguncian Level Row ini, karena Data yang di-INSERT oleh transaksi hanya dapat di baca oleh transaksi tersebut, dan tidak bisa di baca oleh transaksi lain sebelum di COMMIT. Hal tersebut dapat di buktikan dengan contoh berikut : Contoh Bukti pernyataan yang salah (10 Menit): Waktu User satu User dua Keterangan w1 SELECT * FROM deret; SELECT * FROM deret; Hasil = 1,2,3,4,5 w2 DELETE FROM deret WHERE nilai=1; w3 UPDATE deret SET nilai = 321 WHERE nilai = 3; w4 SELECT * FROM DERET; Hasil = 2,321,4,5 w5 SELECT * FROM deret Hasil = 1,2,3,4,5 W5 INSERT INTO deret VALUES (99); INSERT INTO deret VALUES (66); w7 UPDATE deret SET nilai = 77 WHERE -- NULL, nilai 66 belum di COMMIT nilai = 66; w8 UPDATE deret SET nilai = 88 WHERE -- NULL, nilai 99 belum di COMMIT nilai = 99; w9 DELETE FROM deret WHERE nilai=66; -- NULL, nilai 66 belum di COMMIT w10 DELETE FROM deret WHERE nilai=99; -- NULL, nilai 99 belum di COMMIT w11 SAVEPOINT savepoint_ku; SAVEPOINT savepoint_ku; w12 UPDATE deret SET nilai = 77 WHERE -- OK, nilai 99 ada, diubah nilainya nilai = 99; -- menjadi 77 w13 UPDATE deret SET nilai = 88 WHERE -- OK, nilai 66 ada, diubah nilainya nilai = 66; -- menjadi 88 w14 SELECT * FROM deret; -- OK, SELECT boleh -- Hasil = 2,321,4,5,77 w15 SELECT * FROM deret; -- OK, SELECT boleh -- Hasil = 1,2,3,4,5,88 w16 ROLLBACK TO savepoint_ku; ROLLBACK TO savepoint_ku; w17 DELETE FROM deret WHERE nilai=99; -- OK, nilai 99 ada w18 DELETE FROM deret WHERE nilai=66; -- OK, nilai 66 ada w19 COMMIT; COMMIT;
  • 15. Contoh-Contoh yang Benar mengenai Penguncian Level Row (Row Level Lock): Waktu User satu User dua w1 UPDATE account SET saldo = 500000 WHERE nama = 'Tara'; w2 -- UPDATE 1 [Memegang X-Lock] UPDATE account SET saldo = 70000 WHERE nama = 'Tara'; w3 -- akan menunggu sampai X-Lock Dilepas w4 COMMIT; -- melepas X-Lock w5 -- UPDATE 1  Berhasil Waktu User satu User dua w1 DELETE FROM account WHERE nama = 'Tara'; w2 -- DELETE 1 [Memegang X-Lock] UPDATE account SET saldo = 70000 WHERE nama = 'Tara'; w3 -- akan menunggu sampai X-Lock Dilepas w4 COMMIT; -- melepas X-Lock w5 -- 0 ROWS UPDATED, nasabah Tara sudah di DELETE Waktu User satu User dua w1 DELETE FROM account WHERE nama = 'Tara'; w2 -- DELETE 1 [Memegang X-Lock] DELETE FROM account WHERE nama = 'Tara'; w3 -- akan menunggu sampai X-Lock Dilepas w4 COMMIT; -- melepas X-Lock w5 -- 0 ROWS UPDATED, nasabah Tara sudah di DELETE
  • 16. DEAD LOCK Adalah situasi dimana dua atau lebih transaksi dalam kondisi wait-state, satu sama lain menunggu Lock dilepas sebelum di mulai (Yudi Wibisono). Dalam lingkungan multi programming, beberapa proses mungkin akan bersaing untuk objek dengan jumlah yang terbatas. Sebuah proses meminta Lock untuk menggunakan objek; jika objek tersebut tidak dapat digunakan, proses memasuki wait state. Proses waiting dapat terus berlangsung selamanya, karena objek yang diminta proses tersebut di pegang oleh proses lain yang juga dalam keadaan menunggu. situasi inilah yang dinamakan Dead Lock. ilustrasi proses yang baru akan melepas objek yang dimilikinya, jika proses tersebut telah mendapatkan objek yang diminta. Contoh : Waktu User satu User dua w1 UPDATE deret SET nilai = 111 WHERE nilai = 1; w2 -- Memegang X-Lock untuk Row nilai 1 UPDATE deret SET nilai = 222 WHERE nilai = 2; w3 -- Memegang X-Lock untuk Row nilai 2 w4 UPDATE deret SET nilai = 2345 WHERE nilai = 2; w5 -- Menunggu User dua melepas X-Lock untuk nilai 2 UPDATE deret SET nilai = 1234 WHERE nilai = 1; w6 -- Menunggu User satu melepas X-Lock untuk nilai 1 w7 DEAD LOCK System Oracle akan menangani Dead Lock ini dengan cara membatalkan salah satu transaksi, dan karena Dead Lock telah di hilangkan, transaksi yang lainnya dapat berjalan. berikut pesan Errornya : Pertahanan yang terbaik terhadap Dead Lock adalah menghindarinya dengan cara memastikan bahwa semua aplikasi yang menggunakan database mendapatkan Lock pada banyak objek dengan urutan yang konsisten. Pada contoh diatas, jika kedua transaksi meng-UPDATE dengan urutan yang sama( update nilai 1 terlebih dahulu), maka tidak akan terjadi Dead Lock. Anda juga harus memastikan bahwa Lock pertama pada objek di transaksi adalah tingkatan tertinggi yang akan di butuhkan untuk objek tersebut. Jika anda tidak dapat memastikan, maka Dead Lock dapat ditangani dengan mengulang transaksi yang di batalkan.
  • 17. Selama tidak ada situasi Dead Lock yang terdeteksi, sebuah transaksi yang meminta Row Level Lock maupun Table Level Lock akan menunggu selamanya sampai Lock yang berkonflik melepas Lock miliknya. Ini artinya bahwa tindakan yang buruk untuk membuat aplikasi yang membuka suatu proses transaksi dalam waktu yang lama (misal : menunggu input user) Bukan Dead Lock Saat Proses 1 meminta Objek 2, tetapi Proses 2 tidak melepas kepemilikannya terhadap Objek 2. Ini tidak dapat disebut sebagai Dead Lock, Namun dinamakan Infinite Wait State, dimana Proses 1 menunggu selamanya untuk Proses 2 melepas Objek 2.
  • 18. LATIHAN Tuliskan pada selembar kertas, waktu 60 menit : 1. tuliskan daftar sifat ACID dan jelaskan masing-masing kegunaannya. 2. pada saat eksekusi, sebuah transaksi melewati beberapa state, sampai transaksi tersebut gagal atau berhasil. Tuliskan seluruh kemungkinan state yang dilewati transaki. Jelaskan mengapa setiap state dapat muncul pada transaksi tersebut. 3. berapakah gaji pegawai dengan NIP 189 pada saat transaksi berikut selesai? UPDATE PEG SET GAJI = 1.000.000 WHERE NIP = 189; SAVEPOINT SAVE_1; UPDATE PEG SET GAJI = GAJI *1.1 WHERE NIP = 189; SAVEPOINT SAVE_2; UPDATE PEG SET GAJI = GAJI *1.1 WHERE NIP = 189; SAVEPOINT SAVE_3; ROLLBACK TO SAVEPOINT SAVE_2; COMMIT; UPDATE PEG SET GAJI = 1.500.000 WHERE NIP = 189; SAVEPOINT SAVE_4; ROLLBACK TO SAVEPOINT SAVE_4; COMMIT; A. 1.000.000 B. 1.100.000 C. 1.111.000 D. 1.500.000 4. pada sekrenario berikut, dua transaksi berbeda mengupdate row pada table yang sama. Apa yang terjadi pada jam 11:45? (pilih jawaban terbaik). Session 1 Waktu Session 2 UPDATE peg SET gaji = gaji * 1.2 WHERE nip = 102; 11:29 UPDATE peg SET nip_atasan = 100 WHERE nip = 109; UPDATE peg SET gaji = gaji * 1.2 WHERE nip = 109; 11:44 UPDATE peg SET nip_atasan = 100 WHERE nip = 102; ? 11:45 ? A. salah satu user menghubungi DBA yang kemudian langsung meng-kill salah satu session yang memegang lock B. kedua transaksi akan ROLLBACK setelah menerima pesan error ORA-00060 :Deadlock detected while waiting for resource, dan statement pada kedua transaksi harus di eksekusi ulang, namun tidak ada pekerjaan lain yang hilang. C. kedua session di KILL oleh Oracle dengan ORA-00028 : Your session has been killed dan harus meng undo seluruh statement sejak COMMIT terakhir. D. Session 1 menerima pesan error ORA-00060 :Deadlock detected while waiting for resource dan transaksi ROLLBACK secara otomatis. Session 2 lalu bebas untuk me ROLLBACK atau COMMIT transaksinya. 5. sebutkan dan jelaskan 3 fenomena yang dapat terjadi dalam transaksi. 6. jelaskan isolasi transaksi read committed secara singkat. 7. jelaskan isolasi transaksi serializable secara singkat. 8. Pemerintah mengalokasikan dana 1 Triliun Rupiah untuk pengembangan sekolah-sekolah di daerah tertinggal dengan pembagian dana yang merata untuk setiap kepala sekolah yang mendaftarkan data sekolahnya ke database. Waktu pendaftaran dibatasi sampai kepada tanggal tertentu dan segera setelah batas waktu pendaftaran, alokasi dana untuk tiap sekolah akan ditentukan dengan membagi dana yang dialokasikan dengan jumlah sekolah yang mendaftar.
  • 19. Pada saat waktu pendaftaran telah habis, staff yang menangani data segera mengeksekusi Stored Procedure yang membaca data jumlah sekolah yang mendaftar dan mengalokasikan dana sejumlah hasil bagi antara alokasi dana dan jumlah sekolah. System memerlukan waktu beberapa detik untuk menghitung jumlah sekolah yang telah mendaftar (count * from daftar- sekolah), pada selang waktu tersebut, 100 kepala sekolah mendaftarkan sekolahnya. Pada saat pertama stored procedure membaca data, system menemukan sebanyak 50.000 sekolah, yang artinya masing-masing sekolah mendapatkan bantuan dana sebanyak Rp. 20.000.000, sedangkan pada saat system mengalokasikan dana kepada tiap sekolah yang mendaftar (update daftar-sekolah set alokasi-dana = 20.000.000) bukannya 50.000 sekolah yang datanya terbaca pertama yang di update, melainkan 50.100 sekolah yang datanya di update. Ini artinya pemerintah memerlukan tambahan dana sebesar Rp. 2.000.000.000. Dari kasus diatas, a. [Dari pandangan transaksional database] Jelaskan sebab system mengupdate 50.100 sekolah melainkan 50.000 sekolah. b. Jelaskan apa yang harus dilakukan untuk mencegah kasus seperti diatas?