5 Kasım 2011 Cumartesi

PL/SQL'e Giriş

PL/SQL açılımı Procedural Language/Structured Query Languge'dir.Yani Prosedür Dili/ Yapılandırılmış Sorgulama Dili.PL/SQL yapısal dillere ait özelliklerin SQL’e eklenmesiyle ortaya çıkan Oracle’a has bir dildir.PL/SQL Oracle firmasının piyasaya sürdüğü her üründe önemli bir yere sahiptir. Kullanıcılar PL/SQL’i kullanarak programlarına bir çok yeni özellikler katmaktadırlar. Bunlar arasında;
  • PL/SQL tabanlı kaydedilmiş yordamlar(stored procedures) ve veritabanı tetiklemeleri(triggers) ile önemli iş kurallarını programlamak
  • Oracle Developer ürünleri ile güçlü ve kolay kullanılabilir görsel ortamlarla programları detaylandırmak ve daha rahat kontrol etmek
  • Oracle tabanlı uygulamalarda nesne-tabanlı(object-oriented) tasarımlar yapma Web sayfalarından Oracle veritabanlarına link yapma
  • PL/SQL’in belki de en önemli özelliği istemci-sunucu ortamları tasarlama ile ağ üzerinde dağıtık işlemler yapma ve bir çok sorguyu çalıştırma imkanı sunmasıdır.
PL/SQL nesneleri :
  • Constant(Sabitler),
  • Variable(Değişkenler),
  • Exception(İstisnalar),
  • Procedure(Prosedürler),
  • Function(Fonksiyonlar),
  • Package(Paketler),
  • Record(Kayıtlar),
  • PL/SQL Table,
  • Cursor(İmleçler),
  • Reserved Word(Reserve Edilmiş Kelimelerdir BEGIN, END gibi)
*PL/SQL çalıştırmak içn Sql*Plus, Toad, PL/SQL Developer gibi programlara giriş yaparak kullanabiliriz.Ben uygulamaları Toad kullanarak yapacağım.

BEGIN
DBMS_OUTPUT.PUT_LINE('Merhaba PL/SQL!');
END;
/
Ekran Çıktısı:
Merhaba PL/SQL!
PL/SQL procedure successfully completed.

Eğer sizin bilgisayarınız bu çıktı görünmüyorsa SQL kodun başına
SET SERVEROUTPUT ON; kodunu ekleyin.Bu sunucunun dışaraya yazı çıkartmasını sağlar.

1.Blok Yapısı
PL/SQL programı blok yapılarına bölünür.Her blok PL/SQL ve SQL deyimlerini içerir.Tipik bir PL/SQL bloğu aşağıdaki yapıya sahiptir.

[DECLARE
declaration_statements
]
BEGIN
executable_statements
[EXCEPTION
exception_handling_statements
]
END;

I)Tanımlama ve istisna blokları isteğe bağlıdır.
II)declaration_statements sonradan geri kalanı blok kullanılan değişkenler bildirir.
III)Bu değişkenler, o blok için yerel.
IV)Bildirimleri her zaman blok başında yerleştirilir.
V)executable_statements blok için gerçek çalıştırılabilir ifadeler.
VI)
executable_statements döngüler, koşullu mantığı, vb gibi görevleri gerçekleştirmek için ifadeler içerebilir.
VII)
exception_handling_statements herhangi bir hata yakalama ifadelerdir.
VIII
Her deyim, bir noktalı virgül ile sonlandırılır (;).
IX)
Bir blok END anahtar kelime kullanarak sonlandırılır.

Örnekbir blok yapısı şu şekildedir:
DECLARE
genislik INTEGER;
yukseklik INTEGER :=2;
alan INTEGER;
BEGIN
alan := 6;
genislik := alan / yukseklik;
DBMS_OUTPUT.PUT_LINE('Genişlik = ' || genislik );
EXCEPTION
WHEN ZERO_DIVIDE THEN
DBMS_OUTPUT.PUT_LINE('Sıfıra Bölme Hatası');
END;
/
Output:
Genislik = 3
PL/SQL procedure successfully completed.

  • BAŞLICA PL/SQL VERİ TİPLERİ:
NUMBER: 38 basamağa kadar destek sunan nümerik veri tipidir.
BINARY_INTEGER: Nümerik bir yapıya sahiptir.Number veri tipinden farkı veritabanında daha az yer kaplamasıdır.
CHAR: Karakter veri tipidir.
VARCHAR2: Karakter veri tipidir.Değişken uzunlukta karakterleri tutabilir. Maksimum uzunluğu 32767 bytedır.
LONG: Varchar2 veri tipi gibidir. Fakat karakter tutma sınırı 2GB’a kadar yükselir.
LONG RAW: Long tipinde binary olarak veri tutan veri tipidir.
BOOLEAN: True-False tipi değerleri depolar.
DATE: Tarih ve saat unsurlarını tutabilen veri tipidir.
TIMESTAMP: Date gibi tarih saat değerlerini tutar. Ayrıntılı olarak yüzyıldan saniyeye kadar olan bütün bilgileri tutar.

Veri Tipleri ile İlgili Başlıca Özellikler:
  • PL/SQL de değer atama := sembolleriyle yapılır
  • Değişken tanımlanması şu şekilde yapılmaktadır;
<değişken ismi> veri tipi [NOT NULL ] [:= <ilk değer>]

DECLARE
sistem_tarihi DATE := sysdate;
BEGIN
DBMS_OUTPUT.PUT_LINE(sistem_tarihi);
END;
/
Output:
05/11/2011
PL/SQL procedure successfully completed.

  • Sabitlerin tanımlanması ise adı üzerinde sabit bir değer verilir ve sonradan değiştirilemez.Değişkenlerden farkı bununla birlikte ilk değer atamasının hemen yapılmasıdır
   <sabit_ismi> veri tipi CONSTANT [NOT NULL] [:=<ilk değer>]
 Pi_sayisi CONSTANT NUMBER := 3.14; gibi

  • Pl/Sql’de veritabanı ile iletişimde olan tipler tanımlamaktan bahsedersek %TYPE ve %ROWTYPE niteleyicilerini kullanabilirsiniz.Örneğin aşağıdaki cümlede çalışanlar tablosundaki çalışan adı bilgisini tutan kolon tipinde bir veri tipi tanımlayabiliriz.Örneğin;
calisan_ismi employees.FIRST_NAME%TYPE

declare
v_ename employee.first_Name%TYPE;
v_emp_rec employee%ROWTYPE;
begin
v_ename := 'MURAT';
v_emp_rec.first_Name := 'ALİ';
end;
/
  • Eğer bir değişkene değer atanmazsa oracle bu değişkenin değerini null olarak görür.
SET ECHO ON
SET SERVEROUTPUT ON
DECLARE
test INTEGER;
BEGIN
   IF test IS NULL THEN
DBMS_OUTPUT.PUT_LINE(' TEST değişkeni null''dur ');
   END IF;
test := 1;
DBMS_OUTPUT.PUT_LINE('TEST = ' || TO_CHAR(test));
   IF test IS NOT NULL THEN
DBMS_OUTPUT.PUT_LINE('TEST değişkeni null değildir.');
   END IF;
END;
/
OUTPUT:
TEST degiskeni null'dur
TEST = 1
TEST degiskeni null degildir.
PL/SQL procedure successfully completed.

Kaynakça:
  • Learning Oracle PL/SQL ,Bill Pribyl&Steven Feuerstein
  • Oracle PL/SQL Programming Steven Feuerstein with Bill Pribly

  • http://www.ceturk.com/oracle-veritabanina-kusbakisi/
  • http://www.ceturk.com/plsql-blok-yapilariveri-tipleri/
  • http://www.java2s.com/Tutorial/Oracle/0420__PL-SQL-Data-Types/BlockStructure.htm

  • http://datawarehouse.gen.tr/Makale.aspx?ID=443&seo=plsql-yazi-dizisi2  

27 Ekim 2011 Perşembe

Oracle 11 G Kurulumu

Oracle veritabanı kurulumu yapmak için oracle versiyonlarına ait kurulum CD'leri veya dosyalarına ihtiyacımız olacaktır.Çeşitli versiyonlara ait kurulum dosyalarına http://www.oracle.com adresinden indirebilirsiniz.Ancak indirme yapabilmeniz için OTN(Oracle Tecnology Network) üyeliğiniz gerekir.Üyelik ücresizdir.

Oracle Universal Installer (OUI)
Oracle Universal Installer (OUI), Oracle'ın CD'den ya da web'den kurulumlarını yapılması için kulladığı java tabanlı bir programdır.Kurulum java yer alan her platformda çalışır.
OUI Sistem Gereksinimleri
  • Java Çalıştıma Ortamı(JRE): Bir çok platformda OUI ile birlikte otomatik olarak kurulmaktadır.İsternilirse http://java.sun.con adresinden indirebilir.
  • Bellek İhtiyaçları: Kurulacak bileşen sayısına göre bellek ihtiyacı değişmektedir.Genelde tüm sistemerlede 32 MB önerilmektedir.
  • Disk Alanı İhtiyaçları: Windows platformunda Oracle Universal Installer için en en azından 60 MB ihtiyaç vardır.
    Oracle 11G Kurulumu
Oracle Windows 7 işletim sistemi için iki farklı şekile kurumunu gösteceğim:
 
1.Oracle Veri Tabanın oluşurarak
2.Sadece Veri tabanı yazılımını kurarak

Eğer siz Oracle Veri tabanını yeni tanışıyorsanız ilk seçeneği kurun.İkinci seçenekte ise veri tabanın yazılımını yükleyerek , Database Configuration sayesinde veri tabanı oluşturma, dinleyeci ayarları yaparak bir web sunucu, şirket veritabanı, vb. bir dev veritabanına sahip olabileceğiz.

1.Oracle 10g Veritabanı Kurulumu

Yazılımın bulunduğu klasörde setup tıkladığınızda ms-dos penceresi açılıp bi kaç işlem yaparak sistem uyumluluğunu test edecek, daha sonra da aşağıdaki ekranla karşılaşacağız.
bu ekran çıkacak.E-mail adresimi giriyoruz.Oracle Destek üzerinden güvenlik güncellemelerini istersek oracle kullandığımız şifreyi girebiliriz.Tabi bu isteğe bağlı.İsterseniz seçimi kaldırabilirsiniz.

Next seçeneği ile bir sonraki ekrana geçiyoruz… 

  
Create and configure a database işaretliyoruz.
İleri seçeneği ile bir sonraki ekrana geçiyoruz…


 
Desktop Class seçiyoruz.Bize başlangıç bir database ve minimum işlem ayarlamaları içerir.
İleri seçeneği ile bir sonraki ekrana geçiyoruz…


Oracle Veritabanın kurulacağı uzantılarda boşluk olmamalı ve şifre ise 8 karakter uzunluğunda olmalı.Büyük harf, küçük harf ve rakam içermelidir.

Next seçeneği ile bir sonraki ekrana geçiyoruz…


Önceden gerekli olan kontrolleri yapıyor...
Bittiğinde ileri seçeneği ile bir sonraki ekrana geçiyoruz…

 
Özet olarak yükenecek dosyaları gösteriyor.
Bitir seçeneğine ile bir sonraki ekrana geçiyoruz…



Kurulum devam ederken Windows işletim sistemi bizden erişim izni isteyecektir.İzin vererek kuruluma devam ediyoruz...


 
Kurulum bittiğinde bitir seçeneğine tıklıyoruz.


 
Oracle 11G Veritabanımız kurrulmuş oldu.Burada bilgileri bir kenara not alırsak iyi olur.İnsanız ya belki unutbiliriz sonra :). 


Sistemimize Yüklendiğini Görüyoruz.


  Services.msc de olan servislerde çalıştığını görüyoruz.


  Task Manager yani görev yöneticisinde ondan fazla çalışan uygulama göremiyoruz :).O kadar olacak koskocaman veritabanı kurduk :).

Şimdi de Sadece Oracle Veritabanı Yazılımı Kuralım.

 
2.Sadece Veritabanı yazılımını Kurma

Yazılımın bulunduğu klasörde setup tıkladığınızda ms-dos penceresi açılıp bi kaç işlem yaparak sistem uyumluluğunu test edecek, daha sonra da email girerek Next seçeneğine ile bir sonraki ekrana geçiyoruz… 

 

Install database software only sekmesini seçip,
Next seçeneğine ile bir sonraki ekrana geçiyoruz…

 
Single Instance Database Installation seçiyoruz.
Next seçeneğine ile bir sonraki ekrana geçiyoruz…

 
Tükçe dilini de ekliyoruz.
Next seçeneğine ile bir sonraki ekrana geçiyoruz…


 
Gelen ekranımızdan enterprise edition seçimini yapalım… ve next ile sonraki ekrana geçelim …
Gelen ekrandan herhangi bir ayarı değiştirmeden devam edelim … (C sürücüsünde yer yoksa D,E,F kullanılabilir.)



Kurulacak olan ayarları ve bilgiler özet halinde görüyoruz.
ve Finish ile bitirelim ve Oracle veritabanını yazılımını kurmaya başlayalım.


Ve bitti çok şükür :).İnternette dolanırken zamanın nasıl geçtiğinin farkına varamadım :).
 
Database Configuration Assistant ile Veritabanı Oluşturma

Başlat → Oracle- OraDb11g_home1 → Configuration and Migration Tools → Database Configuration Assistant tıklıyoruz.



 
 ve next ile sonraki ekrana geçelim …

Create Database seçeneğini işaretliyoruz.
ve next ile sonraki ekrana geçelim …


  İşaretli olan General Purpose or Transaction Processing dokunmuyoruz..
ve next ile sonraki ekrana geçelim …


 
Global Database Name : ORCL ve SID : ORCL yazalım.
ve next ile sonraki ekrana geçelim …


 
Next Seçeğine tıkladığımızda bize uyarı verdi.Bu işlemi gerçekleştirmeden önce bir dinleyiciye ihtiyacımız var.Şimdilik bu sayfayı Böyle bırakıp Başlat -> Oracle-OracDb11G_home1-> Configuration and Migration-> Oracle Net Configuration Assistant'ı çalıştırıyoruz.


Listener Configuration seçiyoruz...
ve next ile sonraki ekrana geçelim …

Add seçiyoruz.
ve next ile sonraki ekrana geçelim …


Listener name: LISTENER olarak yazıyoruz..
ve next ile sonraki ekrana geçelim …


TCP Protoklünü ekli halde gelir.Aynen bu şekilde next ile sonraki ekrana geçelim …


  Standart Port Numarası 1521'dir.Değiştirmeden devam edelim...

 
Windows Security Alert bizi uyarıyor kurduğumuz program hakkında.Private networks, such as my home or work home işaretliyoruz.Allow Access tıklıyoruz.


  Şimdilik bir başka dinleyici eklemeye gerek yok.Aynen next ile bir sonraki ekrana geçiyoruz...

 
Next ile bitiriyoruz.Listener yani dinleyici ayarlarımızı bitirdik.Tekrardan Database Configuration Assistant'a kaldığımız yere dönüyoruz.








Oracle için Password oluşturuyoruz.Bu password büyük harf, küçük harf ve rakam içermeli ve 8 karakter uzunluğunda olmalıdır.
Next diyerek sonraki ekrana geçelim...


 
File Location Variables dosyaların değerlerini görebiliriz.
Next ile diğer ekrana geçelim... 

 
Specify Flashback Recovery Area seçelim.Area Size ise 3852 olarak atayalım.
Next ile bir sonraki ekrana geçelim....

Sample Schemas işaretleyelim...
Next ile bir sonraki ekrana geçelim....



Typical işaretleyerek SGA ve PGA Memory Size 818 MB atamak bize yeterli olacaktır.

 
Tab üzerinde bulununa Connection Modu Dedicated Server Mode olarak ayarlayalım.
Aşağıdaki ekran gelene kadar Next tıklayalım.Aşağıdaki ekrana gelene kadar DataFiles, Control Files ve Redo Log Files ile ilgili ekranlar vardır.Okuyarak geçmenizde fayda vardır.


 
Şekilde gibi işaretler secip Name ve Description bölümlerini dolduruyoruz.
Next ile bir sonraki ekrana geçiyoruz...


Burada özet bilgiler database kurulum ve ayar ile ilgili.Html olarak kaydetmeniz faydalı olacaktır.Unutmamanız için.
Ok basarak devam ediyoruz ve Kuruluma başlıyoruz.Biraz uzun sürebilir.


Ve Oracle Databas 11G Release 2 kurmuş bulunuyoruz.Database Adı:ORCL, SID=ORCL ve URL miz ise: https://makineAdı:1158/em giriş yapabiliriz.Biliyoruz Çok uzun ve ama bir o kadar da kolar makale oldu.Umarım çok işimize yarayacak.Sonraki derslerimde görüşmek dileğiyle Selamun Aleykum....

Oracle Transaction Management

Transaction, basit anlamda veri tabanı işlemleridir.Birbiri ile ilgili kendi içinde anlamı vardır.Transaciton, bütün veritabanlarının temel bir özelliğidir.Daha küçük parçalara ayrılamayan en küçük işlem yığınına Transaction denir. Geçerli kabul edilmesi bir dizi işlemin tamamının yolunda gitmesine bağlı durumlarda transaction kullanılır.
Örneğin; bir havale işleminde, havale yapanın hesap bilgilerinden havale yaptığı miktar düşüldükten sonra, elektrik kesintisi, donanımsal veya yazılımsal bir arıza nedeniyle alıcının hesabına bu miktar eklenemez ise; gönderenin hesabından düşülen paranın iade edilmesi gerekir.Aksi halde bu paranın sahibinin kimliği kaybedilmiş olur. Bu da sistemin olası haller dışında veri kaybetmeye müsait bir durumda olması demektir. Bu tür aksaklıklar transaction kavramı sayesinde kontrol altına alınır.
 




















           Transaction bloğu ya hep ya hiç mantığı ile çalışır. Ya tüm işlemler düzgün olarak gerçekleşir ve geçerli kabul edilir veya bir kısım işlemler yolunda gitse bile, blok sona ermeden bir işlem bile yolunda gitmese hiçbir işlem olmamış kabul edilir.

Veritabanı işlemleri, ACID özelliklerini tarafından açıklanan özelliklerini göstermelidir.

ACID properties
Atomicity: Bir işlem ya tamamen gerçekleşir ya da hiçbir gerçekleşmez.Ya hepsi ya hiç.(– A transaction either happens completely, or none of it happens.)

Consistency(tutalılık): Bir veritabanı işlemi veritabanını tutarlı bir noktadan diğer bir tutarlı noktaya taşır.(– A transaction takes the database from one consistent state to the next)

Isolation(ayırma) : Bir veritabanı işlemi COMMIT ile sonuçlanana kadar yaptıkları diğer oturumlarda görünür değildir(– The effects of a transaction may not be visible to other transactions until the transaction has committed)

Durability (süreklilik,kalıcılık): Başarı ile COMMIT edilmiş bilgisi alınan bir veritabanı işlemi kalıcıdır, kaybedilemez.(– Once the transaction is committed, it is permanent)

Transaction Control Statements (Veritabanı İşlemleri Denetim Cümleleri)
COMMIT: Veritabanı işlemini sonlandırır, değişiklikleri kalıcı kılar.(-Ends transaction and makes any changes permanent.)

ROLLBACK: Veritabanı işlemini sonlandırır, değişiklikleri geri sarar.(-Ends transaction and undoes any uncommitted changes.)

SAVEPOINT:Bir veritabanı işlemi içinde işaretli noktalar yaratmak için kullanılır, birden fazla işaret noktası yaratılabilinir.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. (-Marked point in a transaction and may be given more than one in a single transaction.)

ROLLBACK TO <SAVEPOINT>: Belirtilen işaretli noktaya geri sarma için kullanılır.(-Rolls back the transaction until the stated save point .)

SET TRANSACTION: Birçok veritabanı işlem özelliğinin(sadece okuma ve okuma-yazma gibi) değiştirilmesi için kullanılabilir.Dahası ,özel bir roll back segmenti kullanılması için transaction'a talimat verilir.(-Sets various transaction attributes (read-only or readwrite, etc.). Also, instruct the transaction to use a specific rollback segment.)

When A transaction starts? (Bir Transaction Ne zaman başlar?)
Bir transaction çalıştırabilir ilk SQL deyimiyle başlar. (-A transaction begins with the first executable SQL statement.)

When A transaciton ends? (Bir Transaction ne zaman sona erer?)

  • Bir transaction COMMIT veya ROLLBACK işlemi ile tamamlanır.(-A Transaction ends a COMMIT or a ROLLBACK statement .)
  • Bir DDL cümleri kullanıldığında.Çünkü, DDL çalıştırma aşamasının ilk adımı örtülü bir COMMIT’dir.(-When a DDL statement is issued.Because,First step of DDL statement is an implicit commits.)
  • Bir kullanıcı Oracle'dan bağlantısının kesildiğinde.Transaction COMMIT edilir.(-A user disconnects from Oracle.Transaction is committed.)
  • Bir kullanıcı prosesi anormal bir şekilde sonlandığında.Transaction ROLL BACK edeilir.(-A user process terminates abnormally.Transaction is rolled back.)

    Örneğin: SQL> UPDATE employees SET salary=salary;
    35 rows updated.
    SQL> SELECT XID, STATUS FROM V$TRANSACTION;
    XID STATUS
    ---------------- ----------------
    05000B0034010000 ACTIVE
    SQL> ROLLBACK;
    Rollback complete.
    SQL> SELECT XID FROM V$TRANSACTION;
    no rows selected

     
    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 edildikten sonra Transactionın özgü SCN(System Change Number ) atanır ve kayılar tabloya yazılır.Satır ve tablo üzerinde kilitler kaldırılır.Oracle Transaction'ı işlenemiş olarak işaretlenir.
  • Oracle için , COMMIT hızlı bir işlemdir, çünkü o ana kadar veritabanı gerekli ön hazırlığı iyimser bir şekilde yapmıştır.
  • Bir veritabanı uygulama geliştiricisi COMMIT sürecini anlamalıdır, daha sık COMMIT etmek, COMMIT süresine olumlu etkilemez!!!.

Rollback

  • 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
  • Tüm Transaction'ların veri kilidini kaldırır.Transaction sonlanır
  • Oracle için , ROLLBACK ise daha yavaş ve pahallı bir işlemdir, çünkü o ana kadar yapılan tüm hazırlığın cidden geri alınması gerekir.

Örneğin;

SQL*Plus: Release 10.2.0.1.0 - Production on Per Eki 27 16:13:18 2011

Copyright (c) 1982, 2005, Oracle. All rights reserved.


Bağlantı:
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options

SQL> create table employees (id int, name varchar2(30), salary int);

Tablo yaratıldı.

SQL> insert into employees Values (1,'erdi','3000');

1 satır yaratıldı.

SQL> select * from employees;

ID NAME SALARY
---------- ------------------------------ ----------
1 erdi 3000

SQL> Rollback;

Geri alma tamamlandı.

SQL> select * from employees;

satır seçilmedi

SQL> insert into employees Values (1,'murat','1600');

1 satır yaratıldı.

SQL> Commit;

Kaydetme tamamlandı.

SQL> Rollback;

Geri alma tamamlandı.

SQL> select * from employees;

ID NAME SALARY
---------- ------------------------------ ----------
1 murat 1600

SQL>



Statement-Level Rollback
  • Eğer herhangi bir zamanda çalışan SQL cümlesi bir hataya neden olmuşsa, ya hepsi değiştirilir.Bu operasyona statement-level rollback denir.
  • Çalışma esnasında hata tesbit edilise rollback edilir.Örneğin bir primary key'e aynı değeri girme hatası 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.
  • Eğer Sql cümlesinin ayrışması anında yani syntax hatası gibi hata varsa o zaman rollback'e neden olmaz.

Resumable Transaction
  • Bazı şartlarda bazı hatalardan dolayı yarım kalan transaction'umuza devam edebilmemiz anlamına gelir.
  • Alan dışı koşullarda ,Maximum extente ulaşma koşullarında ve kotayı aşma durumlarında transaction hata verip işlemi geri almak yerine belirli bir süre bekler.
  • Örneğin;O beklerken kotanın arttırılması gibi olayı kısıtlayan neden ortadan kaldırılırsa işlemini kaldığı yerden tamamlar:
    ALTER SESSION ENABLE RESUMABLE TIMEOUT 10800;

Savepoint
  • Savepoint uzun Transactionları daha küçük kısımlara böler.
  • 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.

Örneğin;

SQL*Plus: Release 10.2.0.1.0 - Production on Per Eki 27 16:28:12 2011


Copyright (c) 1982, 2005, Oracle. All rights reserved


Bağlantı:
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options


SQL> insert into employees values (3, 'Ali', 2000);


1 satır yaratıldı.


SQL> Select * from employees;


ID NAME SALARY
---------- ------------------------------ ----------
3 Ali 2000


SQL> Savepoint sp1;


Kayıt noktası yaratıldı.


SQL> insert into employees values (2,'Erdi', 3000);


1 satır yaratıldı.


SQL> Select * from employees;


ID NAME SALARY
---------- ------------------------------ ----------
3 Ali 2000
2 Erdi 3000


SQL> Savepoint sp2;


Kayıt noktası yaratıldı.


SQL> insert into employees values (4,'Hasan', 1500);


1 satır yaratıldı.


SQL> Select * from employees;


ID NAME SALARY
---------- ------------------------------ ----------
3 Ali 2000
2 Erdi 3000
4 Hasan 1500


SQL> Savepoint sp3;


Kayıt noktası yaratıldı.


SQL> insert into employees values (5, 'Yiğit', 2000);


1 satır yaratıldı.


SQL> Select * from employees;


ID NAME SALARY
---------- ------------------------------ ----------
3 Ali 2000
2 Erdi 3000
4 Hasan 1500
5 Yigit 2000


SQL> Rollback to sp3;


Geri alma tamamlandı.


SQL> Select * from employees;


ID NAME SALARY
---------- ------------------------------ ----------
3 Ali 2000
2 Erdi 3000
4 Hasan 1500


SQL> Rollback to sp2;


Geri alma tamamlandı.


SQL> Select * from employees;


ID NAME SALARY
---------- ------------------------------ ----------
3 Ali 2000
2 Erdi 3000


SQL> Rollback to sp1;


Geri alma tamamlandı.


SQL> Select * from employees;


ID NAME SALARY
---------- ------------------------------ ----------
3 Ali 2000


SQL>


Autonomous Transactions
  • Autonomous Transactions bağımsız Transaction'lardırd.Diğer bir transaction tarafından çağrılabilir
  • Stored procedure or function, Local procedure or function, Package, Type method ve Top-level anonymous block hepsi autonomous transactiondır.
  • Ö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.Autonomous transaction kullandığımızda çok dikkatli olmamız gerekir.

Örneğin;

SQL*Plus: Release 10.2.0.1.0 - Production on Per Eki 27 16:48:32 2011


Copyright (c) 1982, 2005, Oracle. All rights reserved.




Bağlantı:
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options




SQL> insert into employees values (1, 'Ali', 2000);


1 satır yaratıldı.


SQL> Select * from employees;


ID NAME SALARY
---------- ------------------------------ ----------
1 Ali 2000


SQL> DECLARE
2 PRAGMA AUTONOMOUS_TRANSACTION;
3 BEGIN
4 insert into employees values (2,'Erdi', 3000);
5 COMMIT;
6 END
8 /


PL/SQL yordamı başarıyla tamamlandı.


SQL> Select * from employees;


ID NAME SALARY
---------- ------------------------------ ----------
1 Ali 2000
2 Erdi 3000


SQL> insert into employees values (3,'Hasan', 1500);


1 satır yaratıldı.


SQL> Select * from employees;


ID NAME SALARY
---------- ------------------------------ ----------
3 Hasan 1500
1 Ali 2000
2 Erdi 3000


SQL> Rollback;


Geri alma tamamlandı.


SQL> Select * from employees;


ID NAME SALARY
---------- ------------------------------ ----------
2 Erdi 3000


SQL>

Görüldüğü gibi Rollback, Autonomous Transactions eklediğimiz kayıdı etkilemedi.

Two-Phase Commit Mechanism

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


Kaynakça: