Anda di halaman 1dari 14

PERANCANGAN DATABASE DAN IMPLEMENTASI

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.

Mengembalikan database ke keadaan semula setelah terjadi kegagalan. Setelah

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.

Contoh log transaksi :

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

Tabel mahasiswa setelah diberikan T-SQL dan di COMMIT

Lalu apa perbedaan nya COMMIT dengan perintah update biasa pada database ??

Script berikut hanya terdiri dari 1 transaksi saja :

BEGIN TRAN INSERT authors VALUES (etc) GO SELECT * FROM authors GO

UPDATE publishers SET pub_id = (etc)


GO COMMIT TRAN

GO

Script berikut terdiri dari 2 transaksi :

BEGIN TRAN INSERT authors VALUES (etc) SELECT * FROM authors COMMIT TRAN GO

BEGIN TRAN UPDATE publishers SET pub_id = (etc)

INSERT publishers VALUES (etc)


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)

on_error: ROLLBACK TRANSACTION RETURN(1)

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

transaksi tersebut dan transaksi tersebut akan dimulai dari awal.

Anda mungkin juga menyukai