implicit commit

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..

3 Responses to “implicit commit”

  1. aJOemOni Says:

    huaamm…
    pa kabar lu pik? :mrgreen:

  2. Hendrik Says:

    Yup…untuk explicit commit memang untuk DML, sedangkan DDL dan DCL menggunakan implicit commit.


Leave a Reply