PERTEMUAN 12
Transaksi adalah sebuah unit kerja logis yang berisi sekumpulan perintah.
Transaksi dan lock dipakai untuk menjamin konsistensi dan integritas database.
Transaksi memakai lock untuk mencegah user mengubah data yang sedang dipakai oleh transaksi.
Setiap database SQL Server mempunyai sebuah log transaksi yang mencatat semua transaksi dan modifikasi database yang dibuat oleh transaksi.
Log tersebut mendukung 3 operasi : 1. Proses recovery dari transaksi-transaksi tunggal. Jika sebuah aplikasi menjalankan perintah ROLLBACK atau SQL Server mendeteksi sebuah kesalahan, record-record dalam log dipakai untuk kembali ke data sebelum transaksi dimulai.
2.
Proses recovery semua transaksi yang belum selesai pada saat SQL Server dimulai. Jika SQL Server berhenti tiba-tiba karena suatu hal, database mungkin dalam keadaan sedang mengalami perubahaan yang belum dituliskan ke file data. Jika SQL Server dimulai, proses recovery akan dijalankan pada setiap database. Setiap modifikasi yang dicatat di dalam log dan belum ditulis ke dalam file data akan dikembalikan ke keadaan sebelum transaksi dimulai.
3.
terjadi kegagalan pada hard disk, maka user dapat mengembalikan data pada keadaan
sebelum terjadi kerusakan
Log transaksi bukanlah sebuah tabel, tetapi merupakan sebuah file atau beberapa file terpisah dalam database.
Log transaksi juga dapat dibuat menjadi beberapa file terpisah, sehingga log tersebut menjadi lebih jelas maksudnya.
Log transaksi juga dapat diatur sehingga menghindari ukuran log yang tidak terkontrol.
Log transaksi diatas ditampung bisa ditampung kedalam sebuah tabel tersendiri, tapi juga bisa didalam bagian sebuah tabel (field).
Record log untuk modifikasi data dapat berupa operasi yang dilakukan atau data sebelum dan sesudah terjadi perubahan. Beberapa operasi yang dicatat di dalam log transaksi :
1. Awal dan akhir transaksi 2. Setiap perubahan data (INSERT, UPDATE, dan DELETE) 3. Setiap perluasan alokasi atau dealokasi 4. Pembuatan dan penghapusan tabel atau index
Membuat Transaksi
Transaksi yang di commit adalah transaksi yang meyimpan semua perubahan secara permanen ke dalam database yang artinya jika perintah yang diberikan berhasil dijalankan maka data tidak akan kembali pada keadaan semula.
Sebuah transaksi akan berhasil di-commit jika setiap perintah yang diberikan berhasil dijalankan.
Awal transaksi ditandai dengan perintah BEGIN TRANSACTION yang disingkat BEGIN TRAN dan diakhiri dengan COMMIT TRANSACTION (disingkat dengan COMMIT TRAN)
Berikut ini adalah contoh penggunaan COMMIT pada T-SQL : Tabel mahasiswa sebelum di COMMIT
Lalu apa perbedaan nya COMMIT dengan perintah update biasa pada database ??
GO
BEGIN TRAN INSERT authors VALUES (etc) SELECT * FROM authors COMMIT TRAN GO
Untuk melihat lebih jelas maksud dari penggunaan COMMIT pada T-SQL, perhatikan contoh berikut :
Ada 3 tabel, 2 diantaranya memiliki sebuah hubungan primary key/foreign key. Tabel b memiliki foreign key yang merujuk pada tabel a. Setiap insert data pada tabel b akan gagal bila nilai dari data yang di insert tidak ada dalam tabel a. Sebuah procedure akan mencoba memasukkan data ke dalam 2 tabel, kemudian procedure yang ditulis untuk melaksanakan pemeriksaan error.
Dengan sebuah cabang untuk melaksanakan rollback jika ada error yang ditemukan. Karena tidak ada data yang dimasukkan ke dalam tabel a, maka setiap proses insert data ke dalam tabel b pasti gagal.
CREATE TABLE a ( a char(1) primary key) CREATE TABLE b ( b char(1) references a) CREATE TABLE c ( c char(1))
GO
CREATE PROC test as BEGIN TRANSACTION INSERT c VALUES ('X') IF (@@ERROR <> 0) GOTO on_error INSERT b VALUES ('X') -- Fails reference IF (@@ERROR <> 0) GOTO on_error COMMIT TRANSACTION RETURN(0)
LOCK
Lock lain.
adalah sebuah objek SQL Server untuk mencegah beberapa user secara bersama-sama
mengubah data dalam database dan mencegah user membaca data yang sedang diubah oleh user
Data yang di-lock oleh user dapat berupa sebaris data, satu page, sebuah extent (8 page), sebuah tabel atau satu database secara keseluruhan. Misalnya, jika seorang user melakukan lock pada sebuah tabel katakan lah tabel A, maka user lain tidak dapat melakukan operasi apapaun pada tabel tersebut. Prinsipnya adalah 2 user tidak dapat me-lock atau mengubah data pada data yang sama dan di saat yang bersamaan.
DEADLOCK
Deadlock adalah keadaan dimana 2 buah transaksi yang sedang blocking dan saling menunggu. Misalnya transaksi pertama sudah lock pada tabel 1 dan transaksi kedua sudah lock pada tabel 2. Transaksi pertama menunggu tabel 2 dan transaksi kedua menunggu tabel 1. Jadi kedua transaksi tersebut saling menunggu dan tidak ada yang dapat melepaskan lock yang dimilikinya, karena memerlukan tabel yang sedang di-lock oleh transaksi lain.
Terjadilah deadlock, pada saat terjadi deadlock, SQL Server akan memberhentikan salah satu