Rabu, 11 Oktober 2017

Manajemen Transaksi (Basis Data)

Manajemen Transaksi

Transaksi
Transaksi adalah sebuah unit dari eksekusi program yang mampu mengakses dan mengupdate berbagai data yang memiliki kaitan logika transaksi itu sendiri dimana dalam menjaga konsitensi data secara terintegrasi dipertahankan. Sebuah transaksi harus menghasilkan konsistensi database jika sebuah transaksi tersebut sudah dijalankan, atau dengan kata lain setelah transaksi selesai maka database harus kembali konsisten.
Konsistensi suatu database berkaitan erat dengan integritas data, sehingga untuk menjamin integritas tersebut suatu database dalam menjalakan sebuah transaksi harus memiliki sifat –ACID :
1.   ATOMIK : Dimana semua operasi dalam transaksi harus bekerja secara utuh/total atau tidak bekerja sama sekali (artinya pekerjaan transaksi tidak boleh dikerjakan sebagian).
2.   CONSISTEN : Dampak eksekusi dari sebuah trnasaksi harus menjamin keadaan data yg konsisten.
3.   ISOLASI : Pada sejumlah Transaksi yang terjadi secara bersamaan , setiap transaksi tidak boleh terpengaruh transaksi lainnya yang juga sedang berjalan walaupun berhubungan atau menujun pada database yang sama. Hasil transaksi sementara harur terjaga dan terlindungi dari eksekusi-eksekusi yang lain.
4.   DURABILITY : Setelah terjadinya transaksi maka akan diikuti update atau perubahan data pada database, maka perubahan tersebut harus tetap bertahan dan dianggap paling valid dan konsisten.

Dalam Basis Data, Transaksi merupakan satuan unit kerja yang berisi perintah-perintah, yang dimulai dengan klausa BEGIN TRANSACTION dan diakhiri dengan COMMIT atau ROLLBACK.

1.    Membuat Tabel account dengan type Innodb

Type table InnoDB adalah salah satu tipe table dalam MySql yang mengadopsi Enggine Oracle, (beberapa type table dalam my saql adalaha Heap, ISAM,
MERGE, MyISAM, BDB dll) namun beberapa kemampuannya terbatas. Type Tabel InnoDB memungkinkan kita memakai transaksi yang mendukung ACID dan memiliki fasilitas row level locking. Type Tabel InnoDB ini telah mendukung kemampuan-kemampuan dalam pengolahan data yg besar dengan sifat 
“Transaction-Safe” diantara memiliki kemampuan Commit, Rollback dan Crash Recovery. Kemampuan – kemapuan ini dirancang untuk kinerja yang maksimum ketika memproses data data dengan volume besar. Type table ini memiliki kemampuan automatic crash recovery, namun tidak dapat disetup “dipoint” mana recovery ini dilakukan layaknya chek point recovery pada Oracle.

Untuk mengechek apakah InnoDb ada pad MySql:

Mysql> show variables li ‘%have%’
Welcome to the MySQL monitor.  Commands end with ; or \g. Your MySQL connection id is 1 to server version: 5.0.22-community-nt Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

mysql> show variables like '%have%';
+-----------------------+--------------+
| Variable_name            | Value    |
+-----------------------+--------------+
| have_archive                 | YES      |
| have_bdb                       | NO      
| have_blackhole_engine | NO       |
| have_compress             | YES      |
| have_crypt                     | NO       |
| have_csv                       | NO       |
| have_example_engine    | NO       |
| have_federated_engine  | NO       |
| have_geometry               | YES      |
| have_innodb                   | YES      |
| have_isam                      | NO       |
| have_ndbcluster             | NO       |
| have_openssl                 | DISABLED |
| have_query_cache         | YES      |
| have_raid                       | NO       |
| have_rtree_keys            | YES      |
| have_symlink                | YES      |
+-----------------------+------------------+
17 rows in set (0.12 sec)

MySql yang didukung Type InnoDb memiliki variabel lingkungan yang disebut autocmmit. Secara default, autocommit diatur ke 1. Jika autocommit di setup ke, kita tidak dapat menjalankan transaksi dengan type table apapun. Dalam Hal ini, Mysql menganggap setiap pernyataan SQL sebagai transaksi tersendiri. Agar dapat memakai “sekumpulan” perintah/pernyataan transaksi dan dianggap masingmasing tidak berdiri sendiri, maka kita harus meng-off kan autocommit. Nilai autocommit diatur atau diset ke 0;

MySql> SET autocommit=0;

Contoh Praktek Seder hana tabel dibawah ini :

Tabel berisi dua kolom yaitu number dengan tipe data integer,merupakan primary key, autoincrement dan tidak diijinkan nilai Null. Kolom  balance bertipe float, perintahnya sebagai berikut :

create table account ( number int not null auto_increment primary key, balance float ) type = InnoDB;


2.    Insert Data Pada tabel account

Perintah di bawah dipergunakan untuk melakukan insert data pada tabel account, karena kolom number autoincrement maka data yang dimasukkan hanya pada kolom balance:

insert into account (balance) values (0.0); insert into account (balance) values (1000.0); insert into account (balance) values (2000.0);

Hasil dari insert data tersebut adalah :

mysql> select * from account;
+--------+---------+
| number | balance |
+--------+---------+
|      1 |       0 |
|      2 |    1000 |
|      3 |    2000 |
+--------+---------+
3 rows in set (0.05 sec)

3.    Operasi Update data pada tabel account

       Seleksi balance pada tabel account dengan number 2

mysql> select balance from account where number=2;
+---------+
| balance |
+---------+
|    1000 |
+---------+

       Update balance menjadi 1100 mysql> update account set balance = 1100 where number = 2;

       Update balance dengan menambahkan 500 mysql> update account set balance = balance + 500 where number = 2;

Setiap Query tunggal seperti di atas bersifat atomik, sebelum satu perintah selesai dieksekusi tidak ada query lain yang  dapat melakukan interupsi terhadap perintah tersebut.

       Update data dengan  operasi transfer data 1000 dari account number 2 ke account number 1.

update account set balance = balance - 1000 where number = 2; update account set balance = balance + 1000 where number = 1;

Apabila terjadi kasus gangguan setelah proses update data pada account number 1, maka update data account number 1 gagal. Sehingga data pada account 2 tidak valid. Karena perintah tersebut terdiri dari dua perintah sehingga tidak atomik. 

ALTERNATIFNYA :

Alternatif yang lain adalah dengan membuat dua perintah tersebut menjadi perintah tunggal (perintah tunggal bersifat atomik).

mysql>update account as source, account as dest  set source.balance = source.balance - 1000, dest.balance = dest.balance + 1000  where source.number = 2 and dest.number = 1;

Pada perintah tersebut dipergunakan dua buah alias pada tabel account yaitu source dan dest. Dengan menggunakan dua buah alias, dua perintah dapat dijadikan menjadi satu buah perintah sehingga apabila satu perintah gagal maka semua gagal .

4.    Update menggunakan manajemen transaksi 

Namun Dalam banyak kasus metode alternative diatasdi atas tidak bisa diterapkan untuk kasus yang lain, artinya peluang kegagalan masih sangat terbuka lebar.
Solusinya adalah dengan menggunakan Manajemen Ttransaksi:

begin transaction;
update account set balance = balance - 1000 where number = 2; update account set balance = balance + 1000 where number = 1; commit;

Atau dengan mengganti perintah BEGIN dengan START.

Start transaction;
update account set balance = balance - 1000 where number = 2; update account set balance = balance + 1000 where number = 1; commit;

Operasi Update data dapat dibatalkan dengan memberikan perintah ROLLBACK pada transaksi tersebut :

start transaction;
update account set balance = balance - 1000 where number = 2; update account set balance = balance + 1000 where number = 1; select balance from account where number = 2; rollback;

Pada perintah tersebut karena account number nilainya menjadi -1000 setelah operasi update dilakukan maka operasi dibatalkan dengan perintah ROLLBACK.

5.    Autocommit mode

Secara default mysql mendukung autocommit mode. Setiap perintah manipulasi(update,insert dll) akan dianggap sebagai perintah yang diakhiri dengan commit. Akan tetapi autocommit mode dapat dihilangkan dengan oleh user. Untuk menghilangkannya berikan perintah:

mysql> set autocommit=0;

Jika perintah ini telah diberikan maka perintah-perintah tunggal harus diakhiri dengan commit secara manual jika akan disimpan. Apabila akan dibatalkan bisa diberikan perintah Rollback secara manual pula. Setelah autocommit di set menjadi 0 berikan perintah berikut :

update account set balance = balance - 1000 where number = 2; update account set balance = balance + 1000 where number = 1;

Proses di atas tidak akan disimpan apabila belum ada klausa COMMIT yang mengakhiri perintah tersebut. Apabila akan disimpan maka perintah tersebut adalah :

begin transaction;
update account set balance = balance - 1000 where number = 2; commit; begin transaction
update account set balance = balance + 1000 where number = 1; commit;

Untuk mengembalikan autocommit ke default mysql perintah yang diberikan adalah :
mysql> set autocommit=1;

6.    Menggunakan Lock 

Untuk mencegah interferensi  antar pengguna/program aplikasi yang melakukan manipulasi pada database digunakan metode isolasi menggunakan klausa Lock. 

Contoh :

lock tables account write;
select balance from account where number = 2; update account set balance = 1500 where number = 2; unlock tables;

Lakukan operasi manipulasi melalui terminal lain atau komputer lain.
Sebelum ada perintah unlock diberikan user/program lain tidak dapat melakukan pengubahan pada tabel account.


A.  Protokol Transaksi Konkuren
            Ketika multiple user mengakses multiple objek basis data yang berada pada multiple site di sistem basis data terdistribusi, maka permasalahan kontrol konkurensi akan terjadi.Konflik terjadi apabila sekumpulan read dari satu transaksi berpotongan dengan sekumpulan read dari transaksi lainnya, dan/atau sekumpulan write dari satu transaksi berpotongan dengan sekumpulan write dari transaksi lainnya. Transaksi T1 dan T2 dikatakan konflik jika kedua-duanya dieksekusi pada waktu yang bersamaan. Bila T1 telah selesai sebelum T2 dikirim ke sistem, dalam kasus ini sekumpulan read dan write saling memotong, tidak dianggap konflik. Konflik diperhatikan pada sekumpulan write yang saling memotong di antara dua transaksi.
Ada tiga pendekatan secara umum untuk mendesain algoritma kontrol konkurensi:
1.      Wait. Jika dua transaksi konflik, transaksi yang konflik harus menunggu sampai transaksi lainnya selesai.
2.      Timestamp. Urutan eksekusi transaksi berdasarkan timestamp. Setiap transaksi memiliki timestamp yang unik dan dua transaksi yang konflik diselesaikan berdasarkan urutan timestamp. Timestamp dapat diletakkan di awal, tengah, atau akhir eksekusi. Pendekatan berdasarkan version digunakan untuk menentukan timestamp objek basis data.
3.      Rollback. Dua transaksi yang konflik, salah satu transaksinya diulang kembali pengerjaannya. Disebut juga optimistic, karena bila terjadi konflik maka beberapa transaksi akan di-rollback. Algoritma berdasarkan Mekanisme Wait

Sistem akan melakukan lock pada entitas basis data. Ada dua tipe lock:
1.      Readlock. Transaksi akan mengunci entitas pada mode shared. Sehingga transaksi lain yang menunggu untuk membaca beberapa entitas juga bisa mendapatkan readlock.
2.      Writelock. Transaksi akan mengunci entitas pada mode eksklusif. Jika ada satu transaksi akan melakukan penulisan pada entitas yang telah di-writelock, maka transaksi lainnya tidak boleh mendapatkan readlock maupun writelock pada entitas ini.
Lock akan menimbulkan masalah baru. Livelock dan deadlock. Livelock terjadi ketika suatu transaksi berkali-kali gagal dalam mendapatkan lock. Deadlock terjadi ketika beberapa transaksi melakukan lock pada beberapa entitas pada saat yang bersamaan; setiap transaksi mendapatkan lock dari entitas yang berbeda dan saling menunggu transaksi lainnya untuk melepaskan lock.
Deadlock dapat diatasi dengan:
Deadlock
ini sangat jarang terjadi, sehingga akan lebih efektif ditanggulangi ketika telah terjadi daripadamelakukantindakan preventif dari awal yang memakan biaya lebih besar.Protokol sederhana yang diperlukan, sehingga setiap transaksi dapat memenuhi aturan keberlanjutan adalah two-phase locking (2PL).
1.      Fase locking. Transaksi mengambil lock tanpa melepasnya.
2.      Fase unlocking. Dalam fase ini, transaksi melepaskan lock yang ada dan tidak boleh mengambil lock.lockpoint merupakan keadaan sesaat sebelum pelepasan lock yang pertama kali dilakukan. Algoritma berdasarkan Mekanisme Timestamp .Untuk mendapatkan timestamp unik untuk transaksi pada node berbeda di sistem terdistribusi, clock setiap node harus disamakan. Untuk menyelaraskan clock dapat digunakan message passing. Algoritma berdasarkan Mekanisme Rollback/Optimistic.
Terdapat 4 fase eksekusi transaksi pada pendekatan kontrol konkurensi optimistic:
1.      Read. Proses membaca tidak terlalu dibatasi. Hasilnya diletakkan pada variabel lokal. Sekumpulan read tergantung juga pada proses validasi.
2.      Compute. Transaksi menghitung sekumpulan nilai dari data entitas yang disebut sekumpulan write. Hasilnya diletakkan pada variabel lokal.
3.      Validate. Sekumpulan write dan read transaksi lokal divalidasi oleh sekumpulan transaksi yang sedang berjalan.
4.      Commit and Write. Setelah berhasil divalidasi, akan dijalankan di sistem dan diberikan timestamp. Sekumpulan write akan diubah menjadi variabel global dan nilainya dikirim ke setiap node. Jika tidak berhasil divalidasi, transaksi diulangi lagi dari fase compute atau read. Evaluasi Performansi dari Algoritma Kontrol Konkurensi

Kontrol Konkurensi yang dapat Disesuaikan
Sistem basis data yang ada, saling terhubung dengan sistem basis data terdistribusi yang heterogen. Penggunaan konsep sistem basis data Reliable, Adaptable, Interoperable, Distributed (RAID), menjadi fasilitas dalam metode kontrol konkurensi. Model umum untuk pendekatan terhadap sistem dan transaksi yang berbeda adalah dengan generic state, converting state, dan suffix sufficient state.   
Kesimpulan :
Kontrol konkurensi adalah masalah yang timbul ketika beberapa proses terjadi pada berbagai tempat di sistem. Solusi awal untuk hal ini adalah dengan memastikan kelas-kelas serializability, two-phase locking, dan formalisasi pendekatan optimistic. Mekanisme populer untuk kontrol konkurensi adalah two-phase locking. Kontrol konkurensi yang dapat disesuaikan diimplementasikan pada sistem RAID. Penelitian diharapkan berlanjut, pada bidang semantik dari transaksi dan terutama pada sistem yang berorientasi objek. Pada sistem berskala besar, sangat sulit untuk mem-blok akses ke objek basis data untuk melakukan transaksi. Locking pada masa yang akan datang tidak akan relevan lagi pada kasus seperti ini.
B.  Recoverability
Recovery dari kegagalan transaksi artinya database dikembalikan ke kondisi yang terdahulu,mendekati waktu terjadinya kegagalan.Untuk melakukan hal tersebut, perlu disimpan informasi mengenai perubahan terhadap data selama pelaksanaan transaksi di luar database. Informasi tersebut disebut sebagai sistem log.
Teknik recovery berhubungan erat dengan mekanisme kontrol konkurensi yang digunakan pada sistem bersangkutan. Sistem Basis Data harus melaksanakan tindakan tertentu untuk menjamin sifat transaksi yang Atomik dan Durable.
Bagian terintegrasi dari sebuah Sistem Basis Data adalah sebuah skema recovery yang dapat memulihkan Basis Data kepada keadaan konsisten sebelum kegagalan sistem.
Kegagalan sistem saat melakukan transaksi merupakan hal yang harus diperhatikan secara seksama karena terkait dengan 4 sifat yang harus dimiliki oleh suatu transaksi, ACID (Atomicity, Consistency, Isolation, dan Durability), Recovery merupakan solusi dari hampir semua fitur ACID yang harus dimiliki oleh setiap transaksi.Oleh karena itu, transaksi tidak hanya disebut sebagai suatu unit pekerjaan, namun juga sebagai suatu unit recovery.
Pada DBMS modern, konsep recovery sangat penting, bahkan konsep Backup pada DBMS modern tidak akan dapat dimengerti sepenuhnya tanpa pengetahuan yang cukup mengenai konsep recovery. Hampir seluruh DBMS modern menggunakan konsep recovery berbasis Log.
C.                Testing For Serializability
Serializability 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). Serializable berarti jika jadual (nonserial) menghasilkan hasil yg sama seperti halnya jadual serial lainnya. Pada saat mendesain skema kontrol konkurensi, kita harus tunjukan bahwa jadwal yang dibuat oleh skema tersebut adalah serializable. Terdapat metode simpel dan efisien untuk menentukan conflict serializability dari suatu jadwal. Misalkan sebuah jadwal S. Kita dapat membuat suatu grafik langsung yang diberi nama grafik preseden (presedence graph).
Grafik preseden terdiri dari sepasang G = (V,E), dimana V adalah serangkaian simpul dan E adalah serangkaian tepian / busur. Serangkaian simpul terdiri dari semua transaksi yang berperan serta di dalam penjadwalan. Serangkaian tepian / busur terdiri dari semua bentuk Ti -> Tj untuk masing – masing dari ketiga kondisi berikut :
• Ti eksekusi write(Q) sebelum Tj eksekusi read(Q)
• Ti eksekusi read(Q) sebelum Tj eksekusi write(Q)
• Ti eksekusi write(Q) sebelum Tj eksekusi write(Q)

Jika bentuk Ti -> Tj ada di dalam grafik preseden, maka di setiap jadwal S’ serial yang ekivalen ke jadwal S, Ti harus muncul sebelum Tj.



KESIMPULAN
Transaksi adalah sebuah unit dari eksekusi program yang mampu mengakses dan mengupdate berbagai data yang memiliki kaitan logika transaksi itu sendiri dimana dalam menjaga konsitensi data secara terintegrasi dipertahankan.
Sebuah transaksi harus memiliki sifat –ACID : Atomik, Consisten, Isolasi, Durability.


TRIGGER (Basis Data)

TRIGGER


A.    Definisi Trigger

Trigger adalah blok PL/SQL atau prosedur yang berhubungan dengan table, view, skema atau database yang dijalankan secara implicit pada saat terjadi sebuah event.
Trigger dapat pula didefinisikan sebagai objek database yang di asosiasikan dengan sebuah tabel dan akan aktif (terpicu/trigger) ketika sebuah event terjadi pada tabel tersebut Trigger hanya terjadi ketika ada eksekusi INSERT, DELETE, dan UPDATE pada tabel yang bersangkutan Waktu eksekusi trigger yang mungkin terjadi terdiri dari 2 yaitu BEFORE dan AFTER dari statement SQLnya. 
Implementasi trigger yang sering ditemui dalam dunia nyata adalah untuk mengeset dan mengubah nilai kolom dalam suatu tabel sehingga validasi nilai dari tabel tersebut akan terjaga. Adanya trigger dalam database akan meringankan kita dalam pembuatan aplikasi karena di dalam aplikasi yang kita buat kita tidak perlu lagi untuk melakukan validasi data.
Konsep Trigger
·         Trigger adalah object database yang berisi kumpulan perintah SQL yang akan dieksekusi atau dijalankan ketika suatu event terjadi.
·          Dalam satu database kita dapat mendefinisikan lebih dari satu Trigger, asalkan nama dari masing masing trigger berbeda.
·         Trigger harus berasosiasi dengan tabel tertentu sebagai pemicu trigger untuk menentukan kapan trigger tersebut dieksekusi.
·         Trigger memiliki referensi New dan OLD.


B.     Jenis Trigger

Ada 2 jenis trigger yaitu:

·         Application trigger
Terjadi pada saat sebuah kejadian terjadi dengan aplikasi tertentu.
·         Database trigger
Terjadi pada saat terjadi sebuah perubahan data seperti DML pada table (INSERT, UPDATE atau DELETE)

C.    Penggunaan Trigger

Trigger dibuat sesuai dengan keperluan. Ada kalanya trigger perlu dibuat, dan kadangkala tidak perlu dibuat.
Trigger perlu dibuat pada saat :

·         embentuk sebuah aksi tertentu terhadap suatu event
·         Memusatkan operasi global Trigger tidak perlu dibuat, jika :
·         Fungsionalitas yang diperlukan suatu ada pada Oracle server
·         Duplikat atau sama dengan fungsi trigger yang lain.

Prosedur bisa dibuat dalam database, kemudian prosedur tersebut dipanggil pada trigger.  Jika penggunaan trigger terlalu berlebihan, maka akan menyebabkan terjadi sifat ketidaktergantungan yang terlalu kompleks sehingga akan mempersulit pemeliharaan dari aplikasi yang besar.


Pada gambar tersebut, database trigger CHECK_SAL memeriksa nilai gaji pada saat suatu aplikasi mencoba untuk memasukkan baris baru ke dalam table EMPLOYEES. Nilai yang terletak pada jangkauan diluar kategori pekerjaan akan diabaikan.
Sintak penulisan dari database trigger, berisi komponen berikut :
1.      Trigger timing : 
a)      Untuk tabel : BEFORE, AFTER
b)      Untuk view : INSTEAD OF
2.      Trigger event : INSERT, UPDATE atau DELETE
3.      Nama tabel : yaitu nama tabel atau view yang berhubungan dengan trigger
4.      Tipe trigger : Baris atau Pernyataan (statement)
5.      Klausa WHEN : untuk kondisi pembatasan
6.      Trigger body : bagian prosedur yang dituliskan pada trigger


D.    Komponen Trigger

Komponen dari sebuah trigger ada 6 (enam), yaitu : trigger timing, trigger event, nama tabel, tipe trigger, klausa WHEN, dan trigger body.
Berikut ini penjelasan komponen dari trigger. Trigger timing adalah waktu kapan trigger diaktifkan.  Ada tiga macam trigger timing, yaitu :
·         BEFORE : trigger dijalankan sebelum DML event pada tabel
·         AFTER : trigger dijalankan setelah DML event pada tabel
·         INSTEAD OF : trigger dijalankan pada sebuah view.
Trigger event ada 3 kemungkinan : INSERT, UPDATE atau DELETE. Pada saat trigger event UPDATE, kita dapat memasukkan daftar kolom untuk mengidentifikasi kolom mana yang berubah untuk mengaktifkan sebuah trigger (contoh : UPDATE OF salary ... ).  Jika tidak ditentukan, maka perubahannya akan berlaku untuk semua kolom pada semua baris.

Tipe trigger ada 2 macam, yaitu :
·         Statement : trigger dijalankan sekali saja pada saat terjadi sebuah event.  Statement trigger juga dijalankan sekali, meskipun tidak ada satupun baris yang dipengaruhi oleh event yang terjadi.
·         Row : trigger dijalankan pada setiap baris yang dipengaruhi oleh terjadinya sebuah event.  Row trigger tidak dijalankan jika event dari trigger tidak berpengaruh pada satu baris pun.  

Trigger body mendefinisikan tindakan yang perlu dikerjakan pada saat terjadinya event yang mengakibatkan sebuah trigger menjadi aktif.


E.     Keuntungan Trigger

Dalam sebuah tabel dapat mempunyai beberapa trigger. Trigger sangat berguna karena dapat secara otomatis dilaksanakan dalam server, sehingga menyederhanakanpemorgraman, sekaligus menjaga konsistensi informasi dalam database.
Keuntungan penggunaan Trigger antara lain :
a)        Standarisasi (penyeragaman) proses. Trigger dibuat satu kali dan tersimpan dalamdatabase, sehingga semua client yang menggunakan database tersebut sekaligus adalah pengguna Trigger. Dengan demikian seluruh client akan menggunakan operasi yang samaterhadap suatu proses dalam database, karena Trigger yang dipakai sama.
b)        Menyederhanakan pemrograman. Apabila Trigger sudah dibuat dalam database server, seluruh program dalam bahasa apapun, yang mengakses database tersebut akan secara otomatis menggunakan Triger yang ada tanpa perlu membuat perintahnya dalam program
aplikasi.
c)        Mudah diperbaharui. Apabila Trigger pernah di-update dalam database server, semua client akan menggunakan perbaruan yang terakhir
d)        Kecepatan dan efisiensi proses. Oleh karena Trigger disimpan dalam server dalam kode yang sudah terkompilasi, dan dilaksanakan dalam server sehingga lalu-lintas jaringan menjadi berkurang.
e)        Memudahkan kerja secara tim. Apabila Trigger dan Stored Procedure sudah dibuat, anggota tim kerja dapat menggunakan bahasa pemrograman yang berbeda dalam mengaksesnya, karena Trigger disimpan dan dilaksanakan oleh server, tanpa melihat
bahasa pemrograman apa yang dipakai oleh pengguna database.

Manfaat menggunakan trigger:
·         Trigger dapat mengubah nilai kolom pada tabel ini
·         Trigger dapat memperoleh nilai lama dari baris data yang telah dihapus atau diubah.



PENUTUP


Trigger adalah blok PL/SQL atau prosedur yang berhubungan dengan table, view, skema atau database yang dijalankan secara implicit pada saat terjadi  event.
 Tipe dari trigger adalah Application trigger (diaktifkan pada saat terjadi event yang berhubungan dengan sebuah aplikasi) dan database trigger (diaktifkan pada saat terjadi event yang berhubungan dengan data). Trigger dibuat pada saat yang tepat jika diperlukan yaitu untuk membentuk sebuah aksi tertentu terhadap suatu event dan memusatkan operasi global
Penggunaan trigger yang terlalu berlebihan akan menyebabkan terjadi sifat ketidaktergantungan yang terlalu kompleks sehingga akan mempersulit pemeliharaan dari aplikasi yang besar.Trigger berisi komponen-komponen : trigger timing, trigger event, nama tabel, tipe trigger, klausa WHEN dan trigger body.
Beberapa event pada trigger bisa dikombinasikan dalam sebuah trigger dengan menggunakan predikat kondisional INSERTING, UPDATING dan DELETING. Pada Row Trigger, nilai dari kolom sebelum dan sesudah perubahan data dapat dirujuk dengan menggunakan OLD dan NEW qualifier.