2. http://emrahmete.wordpress.com/about/
Marmara Üniversitesi - Bilgisayar Teknolojisi ve
Programlama
Yıldız Teknik Üniversitesi - Bilgisayar Mühendisliği
Turkcell Teknoloji - Yazılım Geliştirme Mühendisi
emrahmete.wordpress.com
TROUG - Yönetim Kurulu Üyeliği
Emrah METE
Yahoo OracleTurk Grubu Moderatör
3. Ajanda
• Transaction Kavramı
• Transaction Özellikleri
• Transaction Control
• Concurrency ve Consistency
• Redo ve Undo Üretimi
• Transaction Locks
• Autonomous Transaction
4. Transactions (ACID)
• Atomicity: Transaction’lar atomiktir, parçalanamazlar.
Ya tamamı çalışır yada hiç çalışmaz.
• Consistency: Transaction’lar database’i tutarlı bir
durumdan diğer bir tutarlı duruma taşır.
• Isolation: Transaction commit ile sonlanana kadar
yapılan değişiklikler diğer sessionlarda görünmez.
• Durability: Transaction commit ile sonlanmış ise artık
yapılan tüm değişiklikler kalıcı hale gelmiştir.
6. Begining Of a Transaction
• Assigns UNDO DATA Segment
• Allocating UNDO SEGMENT and UNDO
Segment Table Slot
• Generating Transaction ID (XID)
XIDUSN Segment number
XIDSLOT Slot number
XIDSQN Sequence number
Example:0002.028.000004DA
• SELECT XID FROM v$transaction
9. Distributed Transactions
Two Phase COMMIT
İstemci
Uzaktaki sunucu 2
Uzaktaki sunucu 1
Ana Oracle
Veritabanı
COMMIT;
?
?
Onay
Onay
Dağıtık işlem başarı ile tamamlandı.
Transaction’ı başlatan node hata alsaydı?
10. Concurrency and Locks
• Oracle, birden çok user’ın eş zamanlı olarak veri erişimini kilitler
kullanarak yönetir.
• DML cümleleri row level kilit kullanırken, DDL kilitleri şema
nesnelerini kilitleyebilir.
• Yazma yönünde eriştiğimiz bilgi satır seviyesinde kilit alır ve başka
bir user o kilit serbest bırakılana kadar kilitli satıra yazma erişimi
sağlayamaz.
• Kilit sayısı arttıkça concurrency düşer. Bu bağlamda transaction
yönetimi oldukça önemlidir.
• Oracle otomatik olarak kilit seviyesini en düşük seviyede tutar.
• Oracle lock eskalasyonu hiç bir zaman yapmaz. Çünkü lock
eskalasyonu olası deadlock problemlerine sebiyet verebilir.
• Oracle concurrency seviyesini arttırmak için kilit dönüştürme
işlemini gerçekleştirebilir.
14. How can I measure produced Redo
Size?
• Bir tabloya INSERT – UPDATE – DELETE işlemleri
gönderek COMMIT veya ROLLBACK çalıştırmadan
REDO üretimini bu basit görüntü yardımı ile
ölçebiliriz.
• CREATE OR REPLACE VIEW redo_size AS
SELECT value
FROM v$mystat ms, v$statname sn
WHERE ms.statistic# = sn.statistic# AND
sn.name = 'redo size';
15. Redo Üretimi Azaltılabilir mi?
Oracle veritabanında TEMPORARY TABLE seçeneğini kullanarak REDO
üretimini kısıtlayabilirsiniz, UNDO üretimi ROLLBACK edebilmek için yine
yaratılacaktır. *
Oracle veritabanında sadece bazı özel işlemler NOLOGGING seçeneği ile
yapılabilinir. *
Index creations and ALTERs (rebuilds)
Bulk INSERTs using a ‘direct path insert’ via the /*+APPEND */ hint
LOB operation (updates to large objects do not have to be logged
Table creations via the CREATE TABLE AS SELECT
Various ALTER TABLE operations such as MOVE and partition SPLIT
TRUNCATE (but it does not need a NOLOGGING clause, as it is always in
NOLOGGING mode)
16. COMMIT
• Generating System Change Number(SCN)
• All changes in the transactions permanent
• Erases all savepoints and Relaeses All Locks
• LGWR process writes remaining REDO into Redo
Log Buffer to Online Redo Log and Writes SCN
Online Redo Log
• Optimistic Approach/Low Cost
# of rows
inserted
Time to INSERT (secs) Time to COMMIT (secs) Redo Generated (bytes)
1 .01 .00 496
10 .01 .00 4476
100 .01 .00 26664
1000 .03 .00 266628
100000 3.35 .00 26520524
17. ROLLBACK
• Undoes all changes from transaction Undo
segments
• Release All Locks held by transaction
• Erase All Savepoints
• Optimistic Approach/High Cost
# of rows
inserted
Time to INSERT (secs) Time to ROLLBACK (secs) Redo Generated (bytes)
9 .06 .02 1,648
99 .04 .00 12,728
999 .04 .01 122,852
9,999 .94 .08 1,170,112
99,999 8.08 4.81 11,842,168
18. Recommendation
• Bitmap Index Kullanımı?
• Redo Üretimini Azaltmak?
• Prosedür/Fonksyon Yazarken nasıl
davranmalıyız?
• JDBC(AutoCommit)
#5:https://emrahmete.wordpress.com/2012/05/26/oracle-transactions-1/
https://emrahmete.wordpress.com/2012/05/26/oracle-transactions-2/- Statement Level Atomicity
- Procedural Level Atomicty
- Transaction Level Atomicty
DDL Atomicity
DDL and Atomicity
DDL cümlecikleri otomatik olarak, çalıştıktan önce ve sonra sanki commit komutu verilimiş gibi çalışmaktadır. Yazdığımız PL/SQL kod bloklarında bu ayrıntının unutulmaması gerekmektedir. Aksi takdirde çalıştırdığımız DDL’er auto commit olduğundan dolayı transaction mantığımızı kırabilir ve db’nin atomicity ile bize sunduğu consistent yapıyı bozmamıza sebeiyet verebilir.
#7:Bir transactiom DML, DDL yada SET TRANSACTION söz deyimi ile başlatılabilir.
#8: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. DDL Cümleleri.
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.
SAVEPOINT: Save point transaction için check point noktaları oluşturmamıza yarar. Bir transaction içinde birden fazla savepoint noktası oluşturabilmekteyiz.
ROLLBACK TO SAVEPOINT: Savepoint komutu ile beraber kullanılmaktadır. Bu komut ile beraber transaction savepoint ile belirtilen noktaya kadar geri sardırılır ve o noktadan sonra yapan değişiklikler geri alınır.
Ör:
INSERT INTO x(cola) VALUES (y);
SAVEPOINT a;
UPDATE x
SET cola = 5;
ROLLBACK WORK TO a;
COMMIT;
burada en son commit çalıştırıldıktan sonra sistem sadece ilk insert cümlesini kalıcı olarak saklıyacaktır.
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.
Bu komutlardan en sık kullanılanları COMMIT ve ROLLBACK’tir. SAVEPOINT ise bazı özel durumlarda kullanılmaktadır.
Bu yazıda Transactionlara kısa bir giriş yaptık. Bu yazı dizisine ait bir sonraki makalede ATOMICTY kavramını derinlemesine inceleyeceğiz. Umarım giriş ve farkındalık anlamında faydalı bir çalışma olmuştur.
#9:http://emrahmete.wordpress.com/2012/01/14/oracleda-autonomous-transactions-ozerk-db-islemleri-yapisi-ve-kullanimi/
Önemli Not: Autonomous olarak belirttiğimiz kod blokları mutlaka bir commit veya rollback komutu ile sonlandırılmalıdır. Aksi takdirde compile-time da hatalar alınacaktır.
Şimdi Autonomus Transactionların Teorik Özelliklerinden Bahsedeceğim
a) Autonomous Transactions ana transactiondan bağımsızdır.
b) Ana transaction Autonomous Transaction’dan dönülene kadar suspend edilir.
c) Autonomous Transactions nested bir yapıya işaret etmez. Nested bir transaction değildir.
d) Ana transaction’da yapılacak ROLLBACK, Autonomous Transaction’ları etkilememektedir.
e) Autonomus Transactionların sınırları begin-end blokları arasında belirlenmiştir.
f) Autonomous Transaction üzerinden yapılmış commit işlemi, bu bölgede yapılmış değişikliklerin geçerli olması için yetecektir.
g) İç içe yazılmış begin end bloklarını autonomous olarak belirleyemeyiz.
Örnek:
DECLARE
PRAGMA AUTONOMOUS_TRANSACTION;
BEGIN
DECLARE
PRAGMA AUTONOMOUS_TRANSACTION;
BEGIN
INSERT INTO autotable
VALUES (514355);
COMMIT;
END;
INSERT INTO autotable
VALUES (355);
ROLLBACK;
END;
h) Yazılacak otonom bloklarda sayı limiti yoktur. Dilenen sayıda otonom kod bloğu yazılıp ana transaction tarafından çağırılabilinir.
#10:2PC – Two Phase Commit:
In distributed transactions, Transparent to user.
First phase: All the servers are put in pre-commit status (some of them may abort).
Second phase: If all the servers are in pre-commit, all of them commit otherwise all of them roll back.
RECO process resumes in-doubt 2PC’s (network failures etc..)
Limits in a distributed transaction
You cannot issue a COMMIT over a database link, you may only commit from the site that initiated the transaction
You cannot do DDL over a database link, because DDL commits
You cannot issue a SAVEPOINT over a database link, in shortly, you cannot issue any transaction control statements over a database link
If you need DDL in a distributed transaction, you can use remote server’s DBMS_JOB supplied package, We use a link to schedule a job to be executed for a DDL, then it will work locally in remote server
Ana node’un düştüğü durumu dperlendirmek lazım.
#11:1- Okuyucular, aynı kaynaklar için diğer okuyucuları beklemez.
2- Yazıcılar da aynı kaynaklar için diğer okuyucuları beklemez.
3- Yazıcılar diğer yazıcıları sadece aynı anda aynı satırları değiştirmek istediklerinde beklerler.
İnsert,update,select for update,merge TX lock alır. Row level lock
#12:DBA’in en önemli görevi kesinti oluşmasını engellemek, kesin oluşursa en kısa sürede veritabanını çalışır hale geri getirmektir.
REDO bilgisi geri dönüş(Recovery)için ciddi önem taşır. Veri kaybı yaşanmaması gereken veritabanları için REDO dosyaları arşivlenmelidir.
Her satır için o işlemin tekrar yapılabileceği bilgiler REDO, geri alınabileceği bilgiler de UNDO olarak Oracle veritabanı tarafından yaratılır.
UNDO içinde sadece tablo değil ilgili tüm nesnelere ait geri alma bilgileri saklanır.
UNDO üretimi de REDO üretilir ve korunur.
INSERT INTO t (x,y) VALUES (1,1);
UPDATE t SET x = x+1 WHERE x = 1;
DELETE FROM t WHERE x = 2;
DELETE sonrasında başarıyla COMMIT ettiğimiz durumu tartışalım.
DELETE sonrasında başarıyla ROLLBACK ettiğimiz durumu tartışalım.
UPDATE sonrasında veritabanı kontrolsüz(ABORT) kapanırsa ne olur tartışalım.
#17:DDL Cümleleri Auto Commitdir, transaction mantığımızı kırabileceğinden kullanırken dikkatli olmalıyız.
#19:Redo Üretimini Azaltmak
Oracle veritabanında sadece bazı özel işlemler NOLOGGING seçeneği ile yapılabilinir. *
Index creations and ALTERs (rebuilds)
Bulk INSERTs using a ‘direct path insert’ via the /*+APPEND */ hint
LOB operation (updates to large objects do not have to be logged
Table creations via the CREATE TABLE AS SELECT
Various ALTER TABLE operations such as MOVE and partition SPLIT
TRUNCATE (but it does not need a NOLOGGING clause, as it is always in NOLOGGING mode)