Oracle SQL PLSQL Java üzerine Türkçe bilgi döküman

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-07
SQL>

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

 

2 Responses to “DDL işlemleri AUTOCOMMIT tir.Gerçekleştirilemese de!”

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

  2. 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 :)

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Connecting to %s

 
Follow

Get every new post delivered to your Inbox.