Contoh kasus, semisal tabel SALES akan ditambah kolom, TAX_CODE, dengan menggunakan pernyataan SQL sebagai berikut
SQL> alter table sales add (tax_code varchar2(10));
tapi ternyata tidak berhasil membuat table altered, keluar output sbg berikut
alter table sales add (tax_code varchar2(10))
*
ERROR at line 1:
ORA-00054: resource busy and acquire with NOWAIT specified or timeout expired
Pesan kesalahan tsb menjelaskan bahwa tabel sedang digunakan sekarang, kemungkinan sedang terjadi transaksi, jadi tabel dikunci secara exclusive
Tentu saja row tidak akan di lock selamanya, saat sesi menjalankan commit, maka lock dirow tsb akan dilepas. Tapi sebelum periode unlock tsb terlalu lama
sesi lain mungkin update row lain dalam tabel tsb sehingga sedikit waktu untuk mendapat exclusive lock akan hilang. Dikebanyakan lingkungan bisnis,
waktu untuk lock tabel secara exclusive tidak terbuka secara periodic, dan DBA tidak bisa menjalankan perintah alter tepat diwaktu tsb.
Tentu saja dengan keadaan seperti itu , kita hanya bisa mengetik perintah yang sama berulang-ulang sampai mendapat exclusive lock.
Dalam Oracle 11g, Kita punya pilihan lebih baik, DDL Wait Option
SQL> alter session set ddl_lock_timeout = 10;
Session altered.
Sekarang saat pernyataan DDL dalam sebuah sesi tidak mendapat lock exclusive, ini tidak akan keluar error. Ini akan menunggu selama 10 detik.
Dalam waktu tsb , ini akan berulang-ulang menjalankan operasi DDL sampai sukses atau waktu habis. Saat kita jalankan perintah
SQL> alter table sales add (tax_code varchar2(10));
Pernyataan tersebut hang dan tidak keluar error sama sekali. Tapi pernyataan tsb tetap berjalan seperti sebuah program telepon yang mencoba
terus retry kenomer yang sibuk yang akan dihubungi. Fitur ini sangat membantu , kita jg bisa menjadikan ini sebagai default sehinggan kita tidak perlu
menjalankan ALTER SESSION tiap kali, jika kita menjalankan ALTER SYSTEM SET DDL_LOCK_TIMEOUT = 10 maka secara automatis sesi akan menunggu
selama periode yang kita tentukan selama proses DDL.





Comments