Set as Homepage   Add to Favourites   Recommend   Contact



Menu

∙ Home
∙ Index (All Topics)
∙ About Me
∙ About This Blog
∙ Favourite Links
∙ RSS Feed

Categories

∙ ASP & PHP (1)
∙ HTML, XML and CSS (2)
∙ C / C++ (5)
∙ Java, JSP and Servlet (0)
∙ SQL-Oracle-PL/SQL (28)
∙ Operating Systems (1)
∙ OFF-Topic (8)

Popular Topics (Top 10)

∙ Decode Function in Oracle SQL (30787)

∙ Derin anlamlı sözler - Bunlar da Türkçe olanlar :) (21541)

∙ Turkcell Staj Günlüğü - 1: Introduction to Oracle (20266)

∙ Oracle performance analysis - Tracing and performance evaluation (17910)

∙ Differences between C and C++ (14152)

∙ Implicit vs. Explicit cursors - Performance analysis (9603)

∙ Turkcell Staj Günlüğü - 4: Transaction Management (8464)

∙ Turkcell Staj Günlüğü - 2: Data Blocks, Extends and Segments (7701)

∙ Turkcell Staj Günlüğü - 3: Tablespaces, Datafiles and Control Files (7617)

∙ Turkcell Staj Günlüğü - 9: "SQL, PL/SQL and Java" ve "Redo Internals" (7496)


Most Recent (Last 10)

∙ Matematik Asla Yalan Söylemez!

∙ Finding and Removing Loop on a Singly-Linked List

∙ Obfuscated C

∙ Is C a Vitamin? Yes, of course...

∙ Differences between C and C++

∙ Whence C? Why C? Whither C?

∙ Türkçe Karakterli Domain'lerin İç Yüzü

∙ Windows Source Codes

∙ Decode Function in Oracle SQL

∙ Hello World!


Recent Comments (Last 10)

∙ "tebrikler" By yasin on Turkcell Staj Günlüğü - 5: Startup, Shutdown

∙ "Gercekten Güzel Bir Çalışma" By Hüseyin Karabakla on Neden hazır blog'ları kullanmadım ki?

∙ "Konu paralelinde güzel bir özet ek okuma - " By TongucY on Oracle performance analysis - Tracing and performance evaluation

∙ "harika" By burak ozcan on Derin anlamlı sözler - Bunlar da Türkçe olanlar :)

∙ "Tebrikler" By Tarık Bayzın on Turkcell Staj Günlüğü - 1: Introduction to Oracle

∙ "Gayet Başarılı.." By Fahri ATES on Turkcell Staj Günlüğü - 1: Introduction to Oracle

∙ "Helal olsun" By ender onder on Turkcell Staj Günlüğü - 5: Startup, Shutdown

∙ "tebrikler.." By ender ondeer on Turkcell Staj Günlüğü - 4: Transaction Management

∙ "Adulation?" By fizikci on Matematik Asla Yalan Söylemez!

∙ "Rehberlik için çook teşekkürler" By Pınar Tanrıverdi on Kahin'e yolculuk nasıl başlamalı?


Archive (Last 12 Months)

∙ Feb, 2008 (4)
∙ Jan, 2008 (2)
∙ Dec, 2007 (1)
∙ Sep, 2007 (4)
∙ Aug, 2007 (9)
∙ Jul, 2007 (22)
∙ Jun, 2007 (3)
∙ Index (All Records)

Other Related Blogs

∙ Tom Kyte’s Blog
∙ Steven Feuerstein’s Blog
∙ Jonathan Lewis’s Blog
∙ H.Tonguç Yılmaz Oracle Blog
∙ Mennan Tekbir's Blog
∙ Hakkı Oktay’s Blog
∙ Osman Çam’s Blog

Stats

Total Topics
Total Topic Views
Total Comments
Unique Visitors
Total Visitors
: 45
: 279376
: 44

About this blog…
About this blog…
About Me
About Me
Favourite Links
Favourite Links
Neden hazır blog'ları kullanmadım ki?
Neden hazır blog'ları kullanmadım ki?
CSS is more powerful than you imagine
CSS is more powerful than you imagine
Turkcell Staj Günlüğü - 1: Introduction to Oracle
Turkcell Staj Günlüğü - 1: Introduction to Oracle
Turkcell Staj Günlüğü - 2: Data Blocks, Extends and Segments
Turkcell Staj Günlüğü - 2: Data Blocks, Extends and Segments
Kahin'e yolculuk nasıl başlamalı?
Kahin'e yolculuk nasıl başlamalı?
Turkcell Staj Günlüğü - 3: Tablespaces, Datafiles and Control Files
Turkcell Staj Günlüğü - 3: Tablespaces, Datafiles and Control Files
Turkcell Staj Günlüğü - 4: Transaction Management
Turkcell Staj Günlüğü - 4: Transaction Management
Image formats - Which to use when
Image formats - Which to use when
Turkcell Staj Günlüğü - 5: Startup, Shutdown
Turkcell Staj Günlüğü - 5: Startup, Shutdown
Turkcell Staj Günlüğü - 6: Oracle Architecture
Turkcell Staj Günlüğü - 6: Oracle Architecture
ASP - Locales and Codepages
ASP - Locales and Codepages
Oracle performance analysis - Tracing and performance evaluation
Oracle performance analysis - Tracing and performance evaluation
Oracle performance analysis - Autotrace workshop
Oracle performance analysis - Autotrace workshop
Oracle performance analysis - Runstats workshop
Oracle performance analysis - Runstats workshop
Oracle performance analysis - Tkprof workshop
Oracle performance analysis - Tkprof workshop
Some favourite quotes
Some favourite quotes
Derin anlamlı sözler - Bunlar da Türkçe olanlar :)
Derin anlamlı sözler - Bunlar da Türkçe olanlar :)
Turkcell Staj Günlüğü - 7: Concurrency and Consistency
Turkcell Staj Günlüğü - 7: Concurrency and Consistency
"Kurtuluş"un hikayesi
"Kurtuluş"un hikayesi
Turkcell Staj Günlüğü - 8: Statement Processing and CBO
Turkcell Staj Günlüğü - 8: Statement Processing and CBO
When a transaction begins?
When a transaction begins?
Implicit vs. Explicit cursors - Performance analysis
Implicit vs. Explicit cursors - Performance analysis
Turkcell Staj Günlüğü - 9: "SQL, PL/SQL and Java" ve "Redo Internals"
Turkcell Staj Günlüğü - 9: "SQL, PL/SQL and Java" ve "Redo Internals"
Affect of gathering table stats to decision of CBO
Affect of gathering table stats to decision of CBO
Bind is bad :) - An interesting case of bind variables fails
Bind is bad :) - An interesting case of bind variables fails
When the explanation doesn't sound quite right...
When the explanation doesn't sound quite right...
Turkcell Staj Günlüğü - 10: Import, Export ve SQL Loader
Turkcell Staj Günlüğü - 10: Import, Export ve SQL Loader
Turkcell Staj Günlüğü - 11: Autonomous Transactions ve Dynamic SQL
Turkcell Staj Günlüğü - 11: Autonomous Transactions ve Dynamic SQL
Difference between db block gets and consistent gets
Difference between db block gets and consistent gets
Object-Oriented Features of Oracle - Part 1: Native Datatypes vs. Object Datatypes
Object-Oriented Features of Oracle - Part 1: Native Datatypes vs. Object Datatypes
Object-Oriented Features of Oracle - Part 2: Object Types and Collection types
Object-Oriented Features of Oracle - Part 2: Object Types and Collection types
Object-Oriented Features of Oracle - Part 3: Object Tables, Object Views and REFs
Object-Oriented Features of Oracle - Part 3: Object Tables, Object Views and REFs
Examining show_space
Examining show_space
Turkcell Staj Günlüğü - 12: Partitioning
Turkcell Staj Günlüğü - 12: Partitioning
Hello World!
Hello World!
Decode Demo #1
Decode Demo #1
Decode Demo #2
Decode Demo #2
Decode Demo #3
Decode Demo #3
Decode Demo #4
Decode Demo #4
Decode Function in Oracle SQL
Decode Function in Oracle SQL
Windows Source Codes
Windows Source Codes
Türkçe Karakterli Domain'lerin İç Yüzü
Türkçe Karakterli Domain'lerin İç Yüzü
Whence C? Why C? Whither C?
Whence C? Why C? Whither C?
Differences between C and C++
Differences between C and C++
Is C a Vitamin? Yes, of course...
Is C a Vitamin? Yes, of course...
Obfuscated C
Obfuscated C
Finding and Removing Loop on a Singly-Linked List
Finding and Removing Loop on a Singly-Linked List
Matematik Asla Yalan Söylemez!
Matematik Asla Yalan Söylemez!
eXTReMe Tracker
Turkcell Staj Günlüğü - 4: Transaction Management
Category: SQL-Oracle-PL/SQL
Date: 13.07.2007 11:17:39


Tekrar merhaba,

Turkcell staj günlükleri yazı dizisine 5. gününde devam ediyoruz. Bu makalede 4. ve 5. günü birlikte alacağım, çünkü 5. günde (06.07.2007) 4. günkü sunumun devamı yapıldı.

Turkcell'deki hayatımız artık yavaş yavaş rutinleşmeye başladı. Sabah gel kahvaltı et, sonra öğlene kadar bilgisayar başında otur -ki bu esas çalıştığımız saat- öğle yemeğinden sonra bir sunum ve daha sonrasında kalan yaklaşık 2 saatlik vakitte biraz sunum üzerinde çalışma yapıyorum ve blog yazılarını hazırlamaya çalışıyorum.

4. gün (05.06.2007), öğleden sonra Mert İNAN'ın "Transaction Management" sunumunun ilk bölümü vardı. Oracle için çok önemli bir kavram, daha doğrusu DBMS'ler için çok önemli bir kavram transactions. Transaction mantığı, DBMS'leri birbirinden ve file system'den ayıran kavramlardır. İmplementasyona göre farklılık gösterir genelde, o yüzden bir DBMS'i öğrenmeye başladıysanız, onun transaction mantığını da başlarda öğrenmeniz gerekir.

İki parça olan sunum, Mert İNAN'ın anlatımıyla gayet verimli geçti. Transaction kavramı, Commit, Rollback, Savepoint, Autonomous Transactions, Redo-Undo gibi kavramlar hakkında bilgi sahibi olmamızı amaçlıyordu, elbette bu makalenin amacı da bu olacak :)

(Update on 13.07.2007)

Ek kaynak olarak, geçen senelerde yine Turkcell staj dönemlerinden birinden kalma, Ergin ERANT'ın çok güzel bir sunumu var. Demolarla zenginleştirilmiş, çok hoş. Redo-undo konularının önemini Tonguç bey bir kez daha bizimle paylaştı bugün (13.07.2007). Tonguç bey'in önerisiyle bunu da bu makaleye ekliyorum. Bu sunumu da buradan indirerek gözden geçirmenizi tavsiye ederim.
Sunumun ilk parçasını buradan indirebilirsiniz. Sunumla ilgili notlarımı aktarayım:

● İlk parçada, Introduction to Transaction Management, Overview of Transaction Management ve Introduction to Autonomous Trasnactions kısımları işlendi, ikinci günkü parçada workshop tarzı örnekler yaptık.

Transaction'ı bir veya daha fazla SQL komutu içeren mantıksal bir birim gibi düşünebiliriz. Önemli olan, bu SQL komutlarının atomik olarak çalıştırılması, yani ya hepsi birlikte gerçekleştirilecek, yada hiçbiri gerçekleştirilmeyecek. Mert bey bunu "Tek celsede yapılması gereken iş" olarak tanımladı. Klasik bir örnek vardır, bu örnek özerinden anlatmak daha kolay: Bankadan para transferi. Para bir hesaptan diğer hesaba aktarılacak, bunun ard arda üç SQL ile yapıldığını düşünelim. Birincisi, ilk hesaptan transfer edilecek mktarı düşüyor, ikincisi ikinci hesaba parayı yatırıyor, üçüncüsü de hesap hareketleri bilgisini kaydediyor olsun. Bu üçü birlikte gerçekleştirilmeli, veya hiç gerçekleşmemeli. Örneğin, parayı ilk hesaptan çekip ikinciye yatırırken hata alırsak, ilk işlem geri alınarak para hesaba geri yatırılmalı. Tabi bu işlemler esnasında, hepsi tamamlanmadan önce hesapların bakiyeleri eski bakiye olarak görünmeli. İşte bir transaction, bu işlemlerin gruplanarak atomikleştirilmesini sağlıyor.

● Oracle'da transaction kullanımı zorunlu, yani Oracle'da tek bir SQL komutu çalıştıracak olsak da bunu bir transaction'ın içinden yaparız. Sunucudan bir oturum açtığımızda(bağlandığımızda) ilk çalıştırılabilir SQL komutumuzla birlikte bir transaction açılır, bu sonlanınca otomatik olarak yeni bir transaction açılır, yeni transaction'un içine gireriz. SQL Server'da bu böyle değildir. Komutlar, kendi içlerinde atomiktir. Yani biz "BEGIN TRANSACTION" komutuyla yeni bir transaction oluşturmazsak, her komut ayrı transactionlar halinde çalışır, SQL komutları birbiri ardına işlenir, ve rollback ile geri alınamaz. Gördüğünüz gibi, bu kadar basit bir durum için bile, en yaygın iki DBMS arasında çok ciddi bir farklılık var. Bu yüzden oracle kullanacaksak Oracle'ın, başka bir veritabanı kullanacaksak onun "Transaction Management" gibi temel konularını öğrenmek zorundayız. Bunları birbirine eşdeğer olarak varsayamayız. Onbinlerce sayfalık dökümantasyonlar da bu yüzden var zaten.

● Bir transaction, aşağıdaki durumlarda sonlanır:

1- Bir COMMIT veya ROLLBACK komutu girilmesi: Bu komutlara ve çalıştırıldığında neler olduğuna daha sonra göz atacağız.
2- Bir DDL komutu (create, drop, rename yada alter) çalıştırılması: Mevcut transaction, DDL komutu çalışmadan önce ve sonra otomatik olarak COMMIT edilir ve yeni bir transaction başlatılır. Bunun iki anlamı var: a) Bir DDL komutu girdiğimizde hata almış da olsak, daha önceki transaction'ımız commit edilmiş olacaktır. b) DDL komutları rollback ile geri alınamaz.
3- Kullanıcının serverla bağlantısının kopması: Bu durumda transaction geri alınır(rollback).
4- Kullanıcı prosesinin anormal şekilde sonlanması: Bu durumda transaction geri alınır.
5- Kullanıcı bağlantısının normal şekilde sonlanması: Bu durum kullanılan uygulamaya göre değişir. SQL*Plus'da mevcut transaction commit edilir. Bazı uygulamaların bu konuda konfigürasyonu vardır, ona göre hareket eder. Uygulamalar, bağlantıyı koparmadan önce mevcut transaction'u mutlaka commit veya rollback etmelidir.



Commit, transaction içinde işlemen komutların, yapılan değişikliklerin kalıcı hale getirilmesi demektir. Oracle'da, bir transaction başladığında, çalıştırılan komutlar ve etkileri diğer kullanıcılara yansımaz. Diğer kullanıcılar her zaman son commit edilmiş tutarlı veriyi görür. Transaction ile yapılan değişiklikler Data Buffer Cache'e ve redo log'lara yazılır, orjinal veriler ise undo log'lara yazılır. Commit edildiğinde, memory'deki redo log'a commit bilgisi eklenerek, redo log buffer disk'e (redo log dosyalarına) flush'lanır. Bu işlemden sonra fiziksel bir hata dışında (diskin uçması) ne olursa olsun, verimiz commit'lenmiş demektir ve artık rollback ile geri alınamaz. Row'lar üzerindeki locklar bırakılır ve transaction sonlanır. Tüm kullanıcılar artık sadece yeni veriyi görebilir. Daha sonraki ilk çalıştırılabilir SQL komutuyla yeni bir transaction başlatılır.

● Commit, çok kısa süren bir işlemdir. transaction içinde değiştirilen veri yoğunluğuna ve transaction'ın ne kadar uzun sürdüğüne bağlı değildir.

Rollback, transaction içinde yapılan değişikliklerin iptal edilmesi, geri alınması demektir. Fakat bu yanlış anlaşılmasın, diğer kullanıcılar zaten orjinal veriyi görüyordu. İptal edilen bizim oturumumuzda, bizim transaction'ımızın yaptığı değişikliklerdir. Rollback, bunları hiç yapılmamış gibi iptal eder ve mevcut transaction'u sonlandırır. Rollback komutu girildiğinde, undo bufferdaki bilgiler data buffer'a yazılır. Dolayısıyla, üzerinde değişiklik yapılan veri ne kadar büyükse rollback o kadar uzun sürer. Rollback'in tamamlanma süresi commit'ten fazladır.

Statement level rollback, SQL komutlarının kendi içinde atomik olması demektir. Bir SQL cümlesi, birden fazla row'da değişikliğe sebep oluyorsa, ya hepsi değiştirilir ya da -bir hatayla karşılaşılması durumunda- hiçbiri değiştirilmez. Bu tür operasyonun otomatik olarak geri alınmasına statement level rollback denir. Bu Oracle tarafından otomatik olarak gerçekleşiyor, bizim elle herhangi bir komut girmemile değil. Örneğin, bir UPDATE komutu 1000 satırı birden update'liyorsa, 600. satırda "Constraint Violation"dan dolay hata almışsak önceki 599 satır da otomatik olarak geri alınır, güncellenmiş halde kalmaz. Bunun gibi, bir komuttan dolayı trigger çalışmış veya prosedür çağrılmışsa, bir hata durumunda o komutun bütün etkileri geri alınır.

Resumable Transactions, bazı şartlarda bazı hatalardan dolayı yarım kalan transaction'umuza devam edebilmemiz anlamına gelir. Bu şu şekilde olur: Büyük boyutta data ekleyecek veya değiştireceksek, önce o transaction'u resumable olarak belirlersek, transaction içindeki değişiklik enasında 1- Out of space condition, 2- Maximum extents reached condition, 3- Space quota exceeded condition durumlarından biri olursa (kısaca kota aşımı durumu) transaction hata verip işlemi geri almak yerine belirli bir süre bekler. O beklerken kotanın arttırılması gibi olayı kısıtlayan neden ortadan kaldırılırsa işlemini kaldığı yerden tamamlar. İşte bu duruma resumable transaction denir.

Savepoint nedir? Savepointler, transactionların içinde dönüş noktaları belirlememizi sağlar. Yani, herhengi istemediğimiz bir değişiklik olduğunda eğer bazı noktalara savepoint koymuşsak, bütün transaction'u rollback yapmak zorunda kalmaz, istediğimiz savepoint'deki duruma dönebiliriz. Savepoint ile ilgili kısım workshop'ta eksik kalmıştı, onun yerine ufak canlı bir egzersiz yaptım. Umarım anlatıma yardımcı olur:

-- sqlplus'ı nolog opsiyonuyla başlattık.
C:\Documents and Settings\bilall>sqlplus /nolog

-- sqlplus açılacak fakat otomatik olarak login olmayacak.
SQL*Plus: Release 10.2.0.1.0 - Production on Cmt Tem 7 23:18:33 2007
Copyright (c) 1982, 2005, Oracle.  All rights reserved.

-- tcell kullanıcısıyla linux makinesindeki instance'ımıza bağlanıyoruz.
SQL> connect tcell/tcell@linux
Ba­land².

-- dil ayarı türkçeymiş. ıyyk. ingilizce olarak değiştiriyoruz.
SQL> alter session set nls_language='AMERICAN'; 

Session altered.

SQL> drop table t;			-- t diye bir tablo varsa kaldır.

Table dropped.

-- varchar2 tipinde bir "name" kolonu olan t tablosu oluşturduk.
SQL> create table t(name varchar2(20));

Table created.

-- "bilal" diye bir kayıt ekledik. transaction'umuz burda başladı.
SQL> insert into t values('bilal');

1 row created.

SQL> savepoint sp1;		-- "sp1" diye bir savepoint oluşturduk.

Savepoint created.

SQL> insert into t values('tonguc');	 -- "tonguc" diye bir kayıt daha ekledik.

1 row created.

SQL> savepoint sp2;		-- "sp2" diye bir savepoint oluşturduk.

Savepoint created.

SQL> insert into t values('mert');	-- "mert" diye bir kayıt daha ekledik.

1 row created.

SQL> savepoint sp3;		-- "sp2" adında bir savepoint daha oluşturduk.

Savepoint created.

-- "bilal" kayıdını "osman" olarak değiştirdik.
SQL> update t set name='osman' where name='bilal';

1 row updated.

SQL> select * from t;		-- tablomuzdaki son durum beklediğimiz gibi.

NAME
--------------------
osman
tonguc
mert

SQL> rollback to sp2;		-- "sp2" noktasına dönüyoruz.

Rollback complete.

SQL> select * from t;		-- tablomuza bir bakalım.

NAME
--------------------
bilal
tonguc

SQL> rollback to sp3; -- şu anda "sp3" noktasına dönmeye çalışıyoruz.
rollback to sp3	    -- fakat biz "sp2" noktasına döndüğümüzde artık"sp3" tanımlı değil.
*		    -- o ilerde kaldı. yapmaya çalıştığımız roll forward aslında,
ERROR at line 1:	    -- ve böyle birşey yok. hata aldık.
ORA-01086: savepoint 'SP3' never established


SQL> insert into t values('ozay');	-- "ozay" diye bir kayıt daha ekledik.

1 row created.

SQL> savepoint sp1;	-- "sp1" adında bir savepoint oluşturmaya çalışıyoruz.
			-- "sp1" zaten mevcuttu, hata almadık, fakat "sp1"in 
Savepoint created.		-- üzerine yazılmış oldu. eski "sp1" noktasını kaybettik.

SQL> update t set name='hasan' where name='tonguc';	-- bir değişiklik daha yapıyoruz.

1 row updated.

SQL> rollback to sp1;	-- sp1'e dönüyoruz. bakalım hangi noktaya dönecek.

Rollback complete.

SQL> select * from t; -- tabloya baktığımızda son yazdığımız sp1'e döndüğünü görüyoruz.
		    -- tam da dediğimiz gibi.
NAME
--------------------
bilal
tonguc
ozay

SQL> rollback;	-- bütün transaction'u rollback yaptık. transaction'umuz sonlandı.

Rollback complete.

SQL> select * from t;	-- tabloya bir bakalım:

no rows selected		-- kayıt yok :)

SQL> disconnect;
Disconnected from Oracle Database 10g Express Edition Release 10.2.0.1.0 - Production

Download Code

Autonomous Transaction'lar, transaction'ların içinde bağımsız transactionlar olması demektir. Aşağıdaki şeyler otonom olarak tanımlanabilir:

1- Stored procedure or function
2- Local procedure or function
3- Package
4- Type method
5- Top-level anonymous block

Örneğin, transaction'ımızın içinden, otonom tanımlanmış bir procedure çağırdığımıza, o prosedür sonlanmış ve kendini commit etmişse, biz rollback dediğimizde onun etkileri geri alınmaz. Tam olarak anlatamadım sanırım, basit bir örnekle göstereyim:

C:\Documents and Settings\bilall>sqlplus /nolog -- sqlplus'ı nolog modda açıyoruz.

SQL*Plus: Release 10.2.0.1.0 - Production on Paz Tem 8 00:06:03 2007
Copyright (c) 1982, 2005, Oracle.  All rights reserved.

SQL> connect tcell/tcell@linux		-- kullanıcımıza bağlanıyoruz.
Ba­land².					-- upps, dil ayarı türkçeymiş :)

-- dil ayarını ingilizceye çeviriyoruz.
SQL> alter session set nls_language='AMERICAN';

Session altered.				-- oh bee :)

SQL> drop table t;

Table dropped.

-- içinde bir int değeri olan t adında bir tablo oluşturduk.
SQL> create table t(id int);

Table created.

SQL> insert into t values(1);		-- t'ye "1" değerini ekledik.

1 row created.

-- bu, otonom olarak tanımladığımız PL/SQL bloğumuz.
-- t tablosuna "2" değerini ekliyor ve
-- commit ediyor. bu commit, bizim daha önceki transaction'umuzu commit'lemedi.
-- otonom transactionlar tamamen bağımsızdır, devam eden bir transaction
-- durdurularak içinde yeni bir transaction açılır gibi düşünebiliriz.
-- sonlandırdık, ve kodumuzu çalıştırdık.
SQL> DECLARE
  2    PRAGMA AUTONOMOUS_TRANSACTION;
  3  BEGIN
  4    insert into t values(2);
  5    COMMIT; 
  6  END
  7  /

PL/SQL procedure successfully completed.

SQL> select * from t;	-- baktığımızda tablomuzda 1 ve 2 değerleri var.

        ID
----------
         1
         2

SQL> insert into t values(3); -- "3" diye bir değer ekledi.

1 row created.

SQL> select * from t;	-- tablomuzdaki manzara şaşırtıcı değil.

        ID
----------
         1
         2
         3
         

SQL> rollback;		-- canımız sıkıldı, rollback yaptık.

Rollback complete.

SQL> select * from t;	-- bakalım tablomuza neler oldu:

        ID
----------
         2

-- göründüğü gibi, kendi transaction'umuzun etkileri geri alındı,
-- fakat commit edilmiş otonom transaction'un eklediği değer geri alınmadı.

SQL> disconnect;
Disconnected from Oracle Database 10g Express Edition Release 10.2.0.1.0 - Production

Download Code

● Son olarak, two-phase commit mekanizmsı anlatıldı. Bu da, farklı makinalarda değişikliğe neden olan distributed transactions durumlarında, iki makinanın birbirine paralel olarak commit etmesi demektir. Commit komutu verildiğinde, birinde commit olmuşsa, diğeri de commit olmuş demektir. Herhangi birinde hata alınırsa diğeri de rollback edilir. Ya ikisi de gerçekleşir yada hiç gerçekleşmez. Transaction'un bütünlüğü korunur.

Mert Bey'in güzel sunumu bunları içeriyordu. Sunumun 2. gününde de çok zevkli bir workshop oldu, bu konsepti Mert bey hazırladığı örneklerle canlı canlı gösterdi :) Sunumu bu linkten indirebilirsiniz, fakat workshop'daki kodları yayınlama şansım olmadı. Yine her zamanki gibi, bu sunumla yetinmemenizi, başta Concepts Guide ve Tom KYTE'ın "Expert Oracle Database Architecture" kitabının 8 ve 9. chapter'ları olmak üzere, diğer kaynakların "Transaction Management" ve "Redo/Undo Internals" konularını takip etmenizi öneririm.

Günün iğrenç espirisi:

Osman: (Stajın 4. günü olmasına rağmen bir türlü bilgisayarı gelmeyen Hakan'a) Abi, bilgisayarın gelmiş, hayırlı olsun...
Hakan: Yok abi daha gelmedi yaa...
Osman: Olm sana görünmez bilgisayar göndermişler baksana :))

Related Topics
Links & References

Comments

Name: Mustafa Keleş
URL: URL not entered.
Date: 08.07.2007 12:07:27


Çalışmaların için teşekkürler Bilal.
Severek izliyoruz seni :)

Followup:
Date: 08.07.2007 14:03:36

Teşekkür ederim Mustafa, birilerinin ilgilendiğini görmek güzel :)

Bilal


Tebrikler
Name: Serdar Yilmaz
URL: URL not entered.
Date: 09.07.2007 11:52:18


Bila seni gerçekten tebrik ederim.

Blogundan bahsetmiştin fakat girip görme imkanım olmamıştı.

Şimdiye kadar gördüğüm en güzel bloglardan birisi.

Staj günlüğün de mükemmel olmuş. Nerdeyse sunumlardan daha güzel olacak :P

Ben de tüm staj bilgilerini burada pekiştiriyor olacağım:))

Çalışmalarında başarılar dilerim. Aynen devam, durmak yok....



süper:)
Name: Betül Okan
URL: URL not entered.
Date: 10.07.2007 10:55:35


Çok güzel bir blog olmuş Bilal.tebrik ediyorum.Savepoint olayını anlatan örnek süper olmuş.Sunumlardan sonra buraya da bakıp konuyu daha iyi pekiştireceğiz anlaşılan.

çok çok küçük not:bir resim eklemişsin sayfaya fakat o resimden dolayı bir hata var sanırım.saniye aralıklarıyla internet explorer çalışıp resmi download etmeye çaışıyor tekrar.Bunun benim ie dan kaynaklanmadığını zannediyorum.

Name: fatih batuk
URL: http://fatihbatuk.blogspot.com
Date: 26.07.2007 10:47:39


Çok daha iyi anlamış oldum transaction ı sayen de :)
Seni izlemeye devam edeceğiz :)

tebrikler..
Name: ender ondeer
URL: URL not entered.
Date: 23.01.2009 19:31:21


oracle a bir yerden başlamak istiyordumm.. sanırım doğru yeri buldum.. turkcellde staj yapma olanağını bulamasamda yazıların sayesinde bir nebze kafamda belirmiş olacak.. çok teşekkürler



© Copyright. All rights reserved. Designed by Bilal Hatipoğlu. RSS Feed  Valid W3C XHTML 1.0 Document  Valid W3C CSS Document