Transaksi basis data

**Transaksi basis data** merupakan suatu unit kerja, yang dilakukan oleh perangkat lunak dalam sistem manajemen basis data (atau sistem serupa) untuk melakukan modifikasi terhadap basis data. Suatu transaksi basis data dilakukan secara koheren dan andal, serta dibedakan dari transaksi sistem lainnya. Istilah transaksi umumnya digunakan untuk menggambarkan setiap perubahan yang terjadi dalam basis data. Transaksi dalam basis data memiliki dua tujuan utama:

# Menyediakan unit-unit kerja yang andal, memfasilitasi pemulihan terhadap data dan menjaga konsistensi pada isi basis data apabila terjadi kegagalan. Misalnya: apabila eksekusi suatu program terhenti secara tiba-tiba, baik sebagian atau sepenuhnya, akan banyak operasi pada basis data terhenti dan menjadi tidak jelas statusnya.
# Mengisolasi program-program yang mengakses basis data secara bersamaan. Jika isolasi ini tidak disediakan, hasil program kemungkinan besar mengalami galat.

Dalam sistem manajemen basis data, *transaksi* adalah satu unit logika atau pekerjaan, yang bisa jadi terdiri dari beberapa operasi. Setiap operasi logika yang dilakukan secara konsisten dalam basis data dikenal sebagai transaksi. Salah satu contohnya adalah operasi transfer dari satu rekening bank ke rekening bank lain: seluruh transaksi memerlukan pengurangan sejumlah uang yang akan ditransfer dari satu rekening dan penambahan dalam jumlah yang sama ke rekening lainnya.

Suatu transaksi basis data harus bersifat atomik (harus selesai secara tuntas atau tidak sama sekali), konsisten (harus sesuai dengan kendala/*constraint* maupun aturan lain yang ada dalam basis data), terisolasi (satu transaksi tidak boleh memengaruhi transaksi lain) dan tahan lama (transaksi harus tersimpan secara persisten). Praktisi basis data sering menyebut prinsip ini sebagai prinsip ACID.

## Tujuan
Basis data dan penyimpanan data lain yang mengutamakan integritas data sering kali memiliki kemampuan untuk menangani transaksi guna menjaga integritas data. Satu transaksi terdiri dari satu atau lebih unit kerja independen, yang masing-masing membaca dan/atau menulis informasi ke basis data atau penyimpanan data lainnya. Ketika hal ini terjadi, penting untuk memastikan bahwa semua pemrosesan tersebut meninggalkan basis data atau penyimpanan data dalam kondisi yang konsisten.

Salah satu contoh yang sering digunakan untuk menggambarkan transaksi basis data adalah transaksi perbankan. Dalam contoh tersebut, suatu rekening yang memiliki, misal, saldo sebesar Rp5.000.000 melakukan transfer ke rekening lain, semisal Rp1.000.000. Dalam transaksi tersebut terjadi dua proses yang berjalan secara berurutan.

# Pengurangan sebanyak Rp1.000.000 dari rekening asal
# Penambahan sebanyak Rp1.000.000 ke rekening tujuan

Penanganan transaksi dalam basis data akan membuat kedua entri lolos atau kedua entri akan gagal. Dengan memperlakukan pencatatan beberapa entri sebagai unit kerja transaksional secara atomik, sistem menjaga integritas data yang tercatat. Dengan kata lain, tidak akan ada lagi situasi di mana suatu pengeluaran rekening tercatat tetapi tidak ada penambahan di rekening lain yang tercatat, atau sebaliknya.

## Basis data transaksional
**Basis data transaksional** adalah DBMS yang menyediakan properti ACID untuk serangkaian operasi basis data dalam tanda kurung (mulai-komit). Transaksi memastikan bahwa basis data selalu dalam keadaan konsisten, bahkan jika terjadi pembaruan dan kegagalan bersamaan.  Semua operasi penulisan dalam transaksi berprinsip tuntas atau tidak sama sekali, yaitu, transaksi berhasil dan semua penulisan berlaku, atau jika tidak, basis data dikembalikan ke keadaan sebelum transaksi terjadi. Transaksi juga memastikan bahwa efek transaksi yang terjadi secara konkuren/serentak memenuhi jaminan tertentu, yang disebut sebagai tingkat isolasi. Tingkat isolasi tertinggi adalah serialisasi, yang menjamin bahwa efek transaksi bersamaan setara dengan eksekusi serialnya (yaitu berurutan).

Kebanyakan sistem manajemen basis data relasional modern mendukung sistem transaksi. Basis data NoSQL mengutamakan skalabilitas dan mendukung transaksi untuk menjamin konsistensi data jika terjadi pembaruan dan akses bersamaan.

Dalam sistem basis data, sebuah transaksi dapat terdiri dari satu atau lebih pernyataan dan kueri manipulasi data, masing-masing membaca dan/atau menulis informasi ke dalam basis data. Prioritas utama dalam proses ini adalah konsistensi dan integritas data. Sebuah transaksi sederhana biasanya dikeluarkan ke sistem basis data dalam bahasa seperti SQL, menggunakan pola yang mirip dengan berikut ini:

# Mulai transaksi.
# Menjalankan serangkaian manipulasi data dan/atau kueri.
# Jika tidak terjadi kesalahan, maka lakukan transaksi.
# Jika terjadi kesalahan, maka putar kembali transaksi tersebut.

Operasi komit transaksi menyimpan semua hasil manipulasi data dalam lingkup transaksi ke basis data *secara persisten*. Operasi pengembalian transaksi tidak menyimpan sebagian hasil manipulasi data dalam lingkup transaksi ke basis data. Transaksi sebagian tidak boleh dikomit ke basis data karena hal itu akan membuat basis data berada dalam keadaan tidak konsisten.

Secara internal, basis data multi-pengguna menyimpan dan memproses transaksi, sering kali menggunakan ID transaksi atau XID.

Terdapat beberapa cara berbeda untuk mengimplementasikan transaksi selain cara sederhana yang dicontohkan di atas. Transaksi bersarang, misalnya, adalah transaksi yang berisi pernyataan di dalamnya yang memulai transaksi baru (yaitu sub-transaksi). *Transaksi bertingkat* adalah varian dari transaksi bersarang di mana sub-transaksi terjadi pada berbagai tingkat arsitektur sistem berlapis (misalnya, dengan satu operasi di tingkat mesin basis data, satu operasi di tingkat sistem operasi). Jenis transaksi lainnya adalah transaksi kompensasi.

### Dalam SQL
Transaksi tersedia di sebagian besar implementasi basis data SQL, meskipun dengan tingkat ketahanan yang bervariasi. Misalnya, MySQL mulai mendukung transaksi sejak versi awal 3.23, tetapi mesin penyimpanan InnoDB belum menjadi standar sebelum versi 5.5. Mesin penyimpanan yang tersedia sebelumnya, MyISAM, tidak mendukung transaksi.

Transaksi biasanya dimulai menggunakan perintah `BEGIN` (meskipun standar SQL menetapkan `START TRANSACTION` ). Ketika sistem memproses pernyataan `COMMIT`, transaksi berakhir dengan penyelesaian yang berhasil. Pernyataan `ROLLBACK` juga dapat mengakhiri transaksi, membatalkan semua pekerjaan yang telah dilakukan sejak `BEGIN` . Jika autocommit dinonaktifkan di awal transaksi, autocommit juga akan diaktifkan kembali di akhir transaksi.

Tingkat isolasi dapat diatur untuk operasi transaksi individual maupun global. Pada tingkat tertinggi ( `READ COMMITTED` ), hasil operasi apa pun yang dilakukan setelah transaksi dimulai akan tetap tidak terlihat oleh pengguna basis data lain hingga transaksi berakhir. Pada tingkat terendah ( `READ UNCOMMITTED` ), yang terkadang digunakan untuk memastikan konkurensi tinggi, perubahan tersebut akan langsung terlihat.

## Basis data objek
Basis data relasional secara tradisional terdiri dari tabel-tabel dengan kolom dan rekaman berukuran tetap. Basis data objek terdiri dari blob berukuran variabel, yang mungkin dapat diserialisasi atau memiliki tipe MIME . Kesamaan mendasar antara basis data relasional dan objek terletak pada awal proses dan komitmen atau pengembalian data.

Setelah memulai transaksi, rekaman atau objek basis data dikunci, baik baca-saja maupun baca-tulis. Proses baca dan tulis kemudian dapat dilakukan. Setelah transaksi didefinisikan sepenuhnya, perubahan akan dikomit/disahkan (*commit*) atau dibatalkan secara atomik (*rollback*), sehingga di akhir transaksi tidak terdapat inkonsistensi pada rekord data.

## Transaksi terdistribusi
Sistem basis data menerapkan transaksi terdistribusi  sebagai transaksi yang mengakses data melalui beberapa node. Transaksi terdistribusi memberlakukan properti ACID pada beberapa node, dan mungkin mencakup sistem seperti basis data, pengelola penyimpanan, sistem berkas, sistem pengiriman pesan, dan pengelola data lainnya. Dalam transaksi terdistribusi, biasanya ada entitas yang mengoordinasikan semua proses untuk memastikan bahwa semua bagian transaksi diterapkan ke semua sistem yang relevan. Selain itu, integrasi *Storage as a Service* (StaaS) dalam lingkungan ini sangat penting, karena menawarkan kumpulan sumber daya penyimpanan yang hampir tak terbatas, mengakomodasi berbagai kelas penyimpanan data berbasis cloud dengan ketersediaan, skalabilitas, dan properti ACID yang bervariasi. Integrasi ini penting untuk mencapai ketersediaan yang lebih tinggi, waktu respons yang lebih rendah, dan efisiensi biaya dalam aplikasi intensif data yang diterapkan di seluruh penyimpanan data berbasis cloud. 

## Sistem berkas transaksional
Sistem berkas Namesys Reiser4 untuk Linux  mendukung transaksi, dan sejak Microsoft Windows Vista, sistem berkas Microsoft NTFS  mendukung transaksi terdistribusi di seluruh jaringan. Penelitian mengenai sistem berkas yang lebih koheren data sedang dilakukan, seperti Warp Transactional Filesystem (WTF). 

## Lihat juga

* ACID
* Kontrol konkurensi
* Jadwal transaksi basis data

## Referensi


## Bacaan lebih lanjut

* Philip A. Bernstein, Eric Newcomer (2009): ''Principles of Transaction Processing'', 2nd Edition,  Morgan Kaufmann (Elsevier),  
* Gerhard Weikum, Gottfried Vossen (2001), *Transactional information systems: theory, algorithms, and the practice of concurrency control and recovery*, Morgan Kaufmann,