Mungkin selama ini saya kira klo setting autocommit off (set autocommit off) di oracle menyebabkan proses commit baru dijalankan kalo user sendiri yang menuliskan perintah commit. Seperti:
tabel – tabel ini saya ambil dari skemanya hr..
1. sql> set autocommit off;
2. sql> create table employees as select * from hr.employees;
3. sql> select count(*) from employees;
COUNT(*)
----------
107
4. sql> delete from employees where employee_id in(189,199);
5. sql> select count(*) from employees;
COUNT(*)
----------
105
6. rollback;
7. sql> select count(*) from employees;
COUNT(*)
----------
107
Dalam transaksi ditunjukkan jika kita setting autocommit off, maka oracle akan melakukan commit secara manual. Ini ditunjukkan pada Jumlah row ketika awal dan setelah rollback hasilnya masih sama( Hal ini karena proses rollback akan mengembalikan nilai pada posisi setelah dicommit). Tapi ternyata oracle juga melakukan implicit commit, kasusnya seperti ini:
1. sql> set autocommit off;
2. sql> create table employees as select * from hr.employees;
3. sql> select count(*) from employees;
COUNT(*)
----------
107
4. sql> delete from employees where employee_id in(189,199);
5. sql> select count(*) from employees;
COUNT(*)
----------
105
6. Misalnya tiba2 admin disuruh membuat user oleh atasannya:
sql> create user test identified by test;
7. Setelah itu admin sadar jika dia telah melakukan kesalahan dengan menghapus employee_id 189 dan 199(pada point 5) sehingga dia ingin merollbacknya kembali.
sql> rollback
8. sql> select count(*) from employees;
COUNT(*)
----------
105
Dalam transaksi ini ternyata admin gagal dalam merollback. Karena oracle melakukan proses implicit commit pada proses “create user”, sehingga ketika dilakukan rollback, maka system akan mengembalikan pas setelah pembuatan user itu terjadi.
Implicit commit adalah commit yang dilakukan secara otomatis oleh sistem pada proses – proses DDL dan DCL. Proses-prosesnya yaitu:
*DDL:
a. Create object
b. alter object
c. drop object
d. truncate table
Object- object yang dimaksud adalah table, view, sequence, index, synonym, dll
Sedangkan perintah DCL yaitu perintah- perintah dalam pengontrolan seperti grant privilege, grant role dan lain lain..