Bir transaction; birden çok SQL sorgularının çalıştırıldığı ama Oracle’ın, bu sorguların tamamını bir ünite(set) olarak algıladığı mantıksal sorgu bloğudur. Bu blok rollback ya da commit ile parçalanabilir veya sonlandırılabilir. Yani begin yada herhangi bir SQL cümlesi ile başladığımız ve COMMIT, ROLLBACK veya işlemleri sonlandıracak bir söz deyimi ile karşılaşmamız arasında yapılan tüm aksiyonlardır. Transaction işlemi başlar ve bitirilir. Transaction’nın başlaması için;

  • Veri tabanına bağlanıp ilk SQL cümlesinin çalışması
  • Her transaction bitiminden sonra sonra yeni bir SQL’in çalışması ile

Bir transaction’ın  bitmesi için aşağıdaki işlemlerden birinin olması yeterlidir.

  • COMMIT veya ROLLBACK işlemlerinden birinin yapılması
  • DDL işlemlerinden birinin(CREATE ,DROP,ALTER ve RENAME) yapılıyor olması. Bunun nedeni ise hatırlayacağınız gibi DDL işlemleri AUTO COMMIT ‘dir. Yani sizin commit etmenize gerek yoktur direk commitler.
  • DCL işlemlerininden birinin yapılması GRANT,REVOKE gibi. Bunun nedeni de yine AUTO COMMIT olmasıdır.
  • Kullanıcının veri tabanından bağlantısının kesilmesi.

COMMIT :  Çalışmasını dışardan vereceğimiz komut ile tetiklebilmek için 2 farklı komut çalıştırabiliriz. Bunlar COMMIT ve COMMIT WORK’tür. Commit transaction’ı sonlandırarak tüm yapılan değişikliklerin kalıcı olmasını sağlamaktadır. Bu sayede yapılan tüm değişiklikler tüm sessionlar tarafından görünür olabilecektir.Örneşin aşağıdaki işlem bir transactiondır ve işlemin sonunda herhangi bir problem olmadığında  COMMIT işlemi ile transactionımız son bulur.

INSERT INTO CUSTOMERS (ID,NAME,AGE,ADDRESS,SALARY)
VALUES (5, 'Hardik', 27, 'Bhopal', 8500.00 );
INSERT INTO CUSTOMERS (ID,NAME,AGE,ADDRESS,SALARY)
VALUES (6, 'Komal', 22, 'MP', 4500.00 );
COMMIT;


ROLLBACK : Çalışmasını dışardan vereceğimiz komut ile tetiklebilmek için 2 farklı komut çalıştırabiliriz. Bunlar ROLLBACK ve ;ROLLBACK WORK’tür. Bu komutda transaction’ı sonlandırır ancak yapılan değişiklikleri bir önceki tutarlı duruma geri alır. Database transaction başlamadan hemen önceki durumuna geri döner. ROLLBACK segmentler okunarak data eski haline geri getirilir. Aşağıdaki örnek sonucunda tabloya yeni kişiler eklenmemiş olacak.

INSERT INTO CUSTOMERS (ID,NAME,AGE,ADDRESS,SALARY)
VALUES (5, 'Hardik', 27, 'Bhopal', 8500.00 );
INSERT INTO CUSTOMERS (ID,NAME,AGE,ADDRESS,SALARY)
VALUES (6, 'Komal', 22, 'MP', 4500.00 );
ROLLBACK;

SAVEPOINT: Save point transaction için check point noktaları oluşturmamıza yarar. ROLLBACK yapısı ile tüm transactionları geri almak yerine ROLLBACK TO SAVEPOINT ile spesifik bir koruma noktasına kadar olan işlemleri geri alabiliriz. Bir transaction içinde birden fazla savepoint noktası oluşturabilmekteyiz. SAVEPOINT ile oluşturur kullanacağımız/gideceğimiz zaman ROLLBACK to savepoint_name sintaksisini kullanırız.

INSERT INTO CUSTOMERS (ID,NAME,AGE,ADDRESS,SALARY) VALUES (7, 'Rajnish', 27, 'HP', 9500.00 );
INSERT INTO CUSTOMERS (ID,NAME,AGE,ADDRESS,SALARY) VALUES (8, 'Riddhi', 21, 'WB', 4500.00 );
SAVEPOINT sav1;

UPDATE CUSTOMERS
SET SALARY = SALARY + 1000;
ROLLBACK TO sav1;

UPDATE CUSTOMERS
SET SALARY = SALARY + 1000 WHERE ID = 7;
UPDATE CUSTOMERS
SET SALARY = SALARY + 1000 WHERE ID = 8;
COMMIT;

SET TRANSACTION : Bu komut transaction’ın sahip olduğu isolation seviyesi, read only veya read write özelliklerin set edilmesine olanak sağlayan bir komuttur. Bu komut aurıca manual undo management yapılırken transaction’ı bilgilendirme amaçlıda kullanılabilmektedir.

COMMIT; 

SET TRANSACTION READ ONLY NAME 'Toronto'; 

SELECT product_id, quantity_on_hand FROM inventories
   WHERE warehouse_id = 5
   ORDER BY product_id; 

COMMIT;
COMMIT; 

set transaction read write;

UPDATE servers
SET srvr_id = 501
WHERE srvr_id = 900;

commit;

NOT : INSERT, UPDATE veya DELETE komutlarından sonra otomatik olarak COMMIT olsun istersek AUTOCOMMIT ON yapabiliriz.

SET AUTOCOMMIT ON;
SET AUTOCOMMIT OFF;

Yararlı olması Dilegiyle …
Yazar : Mustafa Bektaş Tepe

Kaynaklar;
http://www.tutorialspoint.com/plsql/plsql_basic_syntax.htm
https://developersdaily.wordpress.com
http://docs.oracle.com/cd/B19306_01/appdev.102/b14261/
https://docs.oracle.com/cd/E11882_01/appdev.112/e40758/toc.htm
https://oracle-base.com/articles/misc/introduction-to-plsql

Loading