DDL işlemleri AUTOCOMMIT tir.Gerçekleştirilemese de!
Posted by hakkioktay on March 15, 2007
Bilindigi üzere DDL işlemleri (ALTER, CREATE vs..) gerçekleştirilmeden evvel COMMIT işlemi gerçektirilir.Ancak genel yanılgı DDL in basarili olmasi durumunda COMMIT gerçekleşir gibi bir izlenim olmasıdır.Yani başarılı bir şekilde sonlamasına gerek yoktur.DDL çalıştırılma akışı aşağıdaki gibidir :
begin
[commit]
[DDL parse edilir]
begin
[DDL çalıştırılır]
commit;
exception
when Others Then rollback;
end;
end;
Şimdide bunu basit bir senaryo ile görelim.
::: SESSION 1 :::SQL> create table TTEST (name varchar2(15), ddate date);Table created.SQL> insert into ttest select ‘alperen-ahmet’, sysdate from dual;1 row created.SQL>
SQL> commit;Commit complete.SQL> insert into ttest values(’Hakki’, sysdate);1 row created.
Burada COMMIT yapmadan hemen diğer session a geçelim.
::: SESSION 2 :::SQL> select * from ttest;NAME DDATE
————— ———
alperen-ahmet 22-FEB-07SQL>
::: SESSION 1 :::
SQL> insert into ttest values(’Hakki’, sysdate);1 row created.SQL> create table TTEST as select * from all_objects where 1=2;
create table TTEST as select * from all_objects where 1=2
*
ERROR at line 1:
ORA-00955: name is already used by an existing object
DDL işlemimizde bir HATA aldık , COMMIT demedik.Diger session dan tabloya bakalım
::: SESSION 2 :::
SQL> select * from ttest;NAME DDATE
————— ———
alperen-ahmet 22-FEB-07
Hakki 22-FEB-07
Görüldüğü üzere ilk sessionda bilinçli şekilde COMMIT yapmadıgımız halde 2.session ekledigimiz satırı gördük.Halbuki DDL düzgün sonlanmamıştı!Alınacak ders transaction lar içersine DDL işlemi konulmamalıdır.DDL bir şekilde çalışmasa bile transaction akışınızı kırabilir , istenmeyen sonuçlara yol açar.
ahmet yetgin said
Buradan çıkacak sonuc ORACLE gibi aptal veritabanlarından arkanıza bakmadan uzaklaşın olacak.
Bakın PostgreSQL e. DDL komutları da atomik işin bir parçası.
Ozgur T. said
Gercekten guzel bir ornek olmus .. Tesekkurler ..
PostgreSQL’i destekliyorum .. Ancak, su anki gercekleri kabul etmek lazim .. Bire-bir inceleme firsatim oldu teknik olarak, hatta Devrim Gunduz’un oratopgsql seminerlerine de katildim .. PostgreSQL’in ORACLE’i yakalamasi icin daha coooook yol almasi lazim .. “B*k at izi kalsin” yapmaya gerek yok