Sunum yükleniyor. Lütfen bekleyiniz

Sunum yükleniyor. Lütfen bekleyiniz

Oracle Veritabanında İşlem(Transaction) Yönetimine Giriş Oracle Veritabanında Eş Zamanlılık(Concurrency), Tutarlılık(Consistency), Kilitler, COMMIT ve.

Benzer bir sunumlar


... konulu sunumlar: "Oracle Veritabanında İşlem(Transaction) Yönetimine Giriş Oracle Veritabanında Eş Zamanlılık(Concurrency), Tutarlılık(Consistency), Kilitler, COMMIT ve."— Sunum transkripti:

1 Oracle Veritabanında İşlem(Transaction) Yönetimine Giriş Oracle Veritabanında Eş Zamanlılık(Concurrency), Tutarlılık(Consistency), Kilitler, COMMIT ve ROLLBACK Süreçleri CETURK Oracle Day etkinliği Bahçesehir Üniversitesi 04/11/2010 H.Tonguç Yılmaz -

2  H.Tonguç Yılmaz: Oracle veritabanı uzmanı - iyi bir Fenerbahçe taraftarı - Metal müzik sever - Bol bol DVD izler vs.  Fethiye Lisesi, İTÜ Bilgisayar Müh., Bilgi MBA  C Developer, Informix DBA-Hp Unix Admin, Oracle DBA, Oracle ETL Developer, DW Development Team Leader  1996 Tekstilbank, 2000 Turkcell, 2008 Turkcell Teknoloji  10+ sene Oracle veritabanı tecrübesi, Oracle 8i,9i,10g OCP, 2007 Oracle ACE, 2005 Oracle blogger  2002 Turkcell Akademi Oracle veritabanı iç eğitmeni, 2002 TTech Paf koçu  1999 OracleTurk moderatör, 2010 TROUG kurucu üye

3 - Çalışmalarını sayılarla ifade edebileceğin sonuçlara dayandır, tekrarlanabilir denemeler hazırla. - Herşey bu dünyada ispat edilebilir ve zarar görmemek için de edilmelidir, çalıştığın kişileri bu anlamda zorla. Öncelikle, hangi tarafta olacağına karar vermelisin Çalışma hayatında bu tarz cümlelere dikkat : Bence.. İddia ederim.. Düşünüyorum.. Hissediyorum.. Tahmin ediyorum.. Akıl’ın hislere/tahminlere/önyargılara karşı mücadelesi..

4 Neden bu konu ‘ Transactions: Transactions are a fundamental feature of all databases – they are part of what distinguishes a database from a file system. And yet, they are often misunderstood and many developers do not even know that they are accidentally not using them. ‘ ‘ Locking & Concurrency: Different databases have different ways of doing things (what works well in SQL Server may not work as well in Oracle) and understanding how Oracle implements locking and concurrency control is absolutely vital to the success of your application. ‘ Expert Oracle Chapter 4 & 5, Thomas Kyte -

5 Balığı kendin tutabilirsin – Ücretsiz Dökümanlar

6 Balığı kendin tutabilirsin – Ücretsiz Ortamlar Oracle Database 10g Express Edition(Oracle XE) is a great starter database for Developers working on PHP, Java,.NET, XML, and open source applications. Free to develop, deploy, and distribute Fast to download, simple to install and simple to administer. Entry-level, small-footprint database based on the Oracle Database 10g Release 2 code base Oracle SQL Developer is a free graphical tool for database development. you can browse database objects, run SQL statements and SQL scripts, edit and debug PL/SQL statements. Yeni başlayan Oracle Developer veya DBA için çok daha fazlası OTN başlangıç portalinde:

7 Oracle kısa tarihçe 1978 Oracle V1; pazardaki ilk *satış* amaçlı ilişkisel SQL veritabanı yönetim sistemi … Oracle V3; Transactions 1984 Oracle V4; Read Consistency 1986 Oracle V5; Distributed Queries 1989 Oracle V6; Row Level Locking … Oracle Oracle 8i Release Oracle 8i Release Oracle 8i Release Oracle 9i Release Oracle 9i Release Oracle 10g Release Oracle 10g Release 2 ( XE ! ) Oracle 11g Release Oracle 11g Release 2 ( XE ? )

8 8 Veritabanı İşlemleri(Transactions) Veritabanı işlemleri, bir bağlantıdan işletilen bir küme - birbiri ile anlam kazanan veri işletme dili(Data Manuplation Language-DML) cümlesidir. Alttaki SQL cümlelerinden biri ile başlar: INSERT UPDATE DELETE MERGE SELECT FOR UPDATE LOCK TABLE COMMIT veya ROLLBACK tamamlanır.

9 9 Veritabanı İşlemleri(Transactions) – Bitirme Yöntemleri COMMIT veya ROLLBACK Bağlantı kapama Normal bir şekilde kapatıldı ise kullanılan istemci ayarlarına göre hareket edilir Anormal bir şekilde kapatıldı ise ROLLBACK işlemi gerçekleştirilir Veri tanımlama dili(Data Definition Language-DDL: CREATE, ALTER, DROP, TRUNCATE, RENAME gibi) cümleleri kullanıldığında DML’leri takip eden DDL cümleleri veritabanı işlem mantığınızı kırar, çünkü DDL çalıştırma aşamasının ilk adımı örtülü bir COMMIT’dir. * * Notlar kısmında DDL için sözde kod(pseudo) ve örneğe göz atınız.

10 10 Veritabanı İşlemleri(Transactions) – Basit Örnek SQL> UPDATE hr.employees SET salary=salary; 107 rows updated. SQL> SELECT XID, STATUS FROM V$TRANSACTION; XID STATUS ACTIVE SQL> ROLLBACK; Rollback complete. SQL> SELECT XID FROM V$TRANSACTION; no rows selected SQL> UPDATE hr.employees SET last_name=last_name; 107 rows updated. SQL> SELECT XID, STATUS FROM V$TRANSACTION; XID STATUS ACTIVE

11 ACID Özellikler Atomicity: Bir veritabanı işlemi bir bütün olarak ya gerçekleşir ya da gerçekleşmez (A transaction either happens completely, or none of it happens) * Consistency: 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: 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: 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) * Notlar kısmında Oracle veritabanında Atomicity örneklerine göz atın.

12 Veritabanı İşlemleri(Transactions) Denetim Cümleleri COMMIT: Veritabanı işlemini sonlandırır, değişiklikleri kalıcı kılar. ROLLBACK: Veritabanı işlemini sonlandırır, değişiklikleri geri sarar. SAVEPOINT: Bir veritabanı işlemi içinde işaretli noktalar yaratmak için kullanılır, birden fazla işaret noktası yaratılabilinir ROLLBACK TO : Belirtilen işaretli noktaya geri sarma için kullanılır. SET TRANSACTION: Birçok veritabanı işlem özelliğinin(sadece okuma gibi) değiştirilmesi için kullanılabilir. Elle geri sarma yönetimi(Manual Rollback Segment Management) kullanılan veritabanlarında bir veritabanı işlemine belirli bir alanı kullanmaya zorlanmak için kullanılırdı.

13 Dağıtık(Distributed) Veritabanı İşlemleri(Transactions) ve İki Aşamalı COMMIT(Two Phase Commit-2PC) İstemci Uzaktaki sunucu 2 Uzaktaki sunucu 1 Ana Oracle Veritabanı COMMIT; ? ? Onay Dağıtık işlem başarı ile tamamlandı.

14 14 Başarım(Performance) ve Ölçeklenirlik(Scalability) Kavramları “Performance is interested with avoiding unnecessary work on limited system resources, where as Scalability is interested with avoiding blocking others doing same operations(serialization). These need different attentions, especially second is very important for heavy loaded OLTP systems. Sometimes you may sacrifice in one to gain in other.” * * Memory Management and Latching Improvements in Oracle9i and 10g Presentation, Tanel Põder

15 15 Eş zamanlılık(Concurrency) ve Kilit Kavramları Gerçek yaşamda tek kullanıcısı olan veritabanı uygulamaları geliştirmiyoruz. Çok kullanıcılı sistemlerde aynı kaynaklara aynı anda ulaşmını düzenleme önemli bir konudur. Eş zamanlılık, birçok kullanıcının veriye ulaşımının uyumu- düzeni ile ilgilidir. Bu düzen Kilit kullanımı ile yönetilir, ama kilit miktarı-seviyesi arttıkça veritabanı uygulamasının ölçeklenirliği düşer, dolayısı ile düzen en az kilit ile korunmalıdır. Oracle veritabanı ile yüksek eş zamanlı veritabanı uygulamaları geliştirebilirsiniz, siz koruma düzenini-kilitleri bilinçli arttırmadıkça Oracle veritabanı özdevimli(automatic) olarak en düşük kilit koruma düzeyi ile düzeni korur; 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ır*ları değiştirmek istediklerinde beklerler.* * Notlar kısmında özel durum örneklerine göz atın.

16 16 Kilit Kavramları Detaylar Yaratılan kilitler COMMIT veya ROLLBACK buyruklarından biri veritabanı işlemi sonlanana dek canlı tutulur. DML kilitleri satırlar ve veriyi korurken, DDL kilitleri çizem(schema) nesnelerini korur. Dışlayan(Exclusive) kilitler, ilgili kaynakların paylaşımı engelleyen kilit tipidir. Paylaşılan(Shared) kilitler, ilgili kaynakların paylaşımına izin veren kilit tipidir. Kilit dönüştürme(Conversion), daha alçak seviye koruma düzeyine geçiş sorun yaratmaz iken daha yüksek koruma düzeyi talepleri için bekleme yaşanabilir. Kilit artırımı(Escalation), Oracle veritananında kilit arttırımı yapılmaz çünkü kilitler Oracle veritabanından kısıtlı bir kaynak değildir. Başka veritabanlarında durum; satır kilitleri artınca -> sayfa bazında kitle -> çizelgenin(table) tamamını kitle Ölçeklenirlik için ölümcül bir davranış, çıkmaz kilit(Deadlock) oluşumuna yol açar

17 17 REDO ve UNDO kavramları 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; 1.DELETE sonrasında başarıyla COMMIT ettiğimiz durumu tartışalım. 2.DELETE sonrasında başarıyla ROLLBACK ettiğimiz durumu tartışalım. 3.UPDATE sonrasında veritabanı kontrolsüz(ABORT) kapanırsa ne olur tartışalım.

18 18 REDO ve UNDO kavramları Redo Log Buffer Data Buffer Cache UndoIndexTableRedo

19 19 ONLINE REDO ve ARCHIVED REDO 1a2a3a 1b2b3b ARCH X:/ Y:/ Z:/ LGWR ARC

20 20 ONLINE REDO ve ARCHIVED REDO 1a 1b ARCH Disk1 Disk5 2a 2b 3a 3b 4a 4b Disk2 Disk3 Disk4 ARCH Disk6 LGWR ARC

21 COMMIT 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, ortalıkta birçok ‘efsane’ dolaşır - daha sık COMMIT etmek, COMMIT süresine olumlu etkileMEZ. # of rows inserted Time to INSERT (secs) Time to COMMIT (secs) Redo Generated (bytes) , , ,924 9, ,103,524 99, ,220,656

22 ROLLBACK 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. Uygulamalarınızda ROLLBACK yazarken bir daha düşünün : time COMMIT << time ROLLBACK # of rows inserted Time to INSERT (secs) Time to ROLLBACK (secs) Redo Generated (bytes) , , ,852 9, ,170,112 99, ,842,168

23 Kötü Veritabanı İşlemi(Transaction) Alışkanlıkları Oracle için, bir veritabanı işlemi olması gerektiği kadar uzun olabilir, işlem mantığına uygun olarak COMMIT edilmesi gerektiği anda bitirilebilir. BEGIN FOR x IN ( SELECT rowid rid, object_name FROM t4 ) LOOP UPDATE t4 SET object_name = lower(x.object_name) WHERE rowid = x.rid; IF ( MOD(x.r, 100) = 0 ) THEN COMMIT; END IF; END LOOP; COMMIT; END; / UPDATE t4 SET object_name = LOWER(object_name); COMMIT; OperationRow Affected Total Redo (no COMMITs) Total Redo (with COMMITs) % increase INSERT 200 rows200442,784530,39620% UPDATE 200 rows200849,600956,66013% DELETE 200 rows200469,152537,13214%

24 Dikkat, Java Database Connectivity(JDBC) AUTOCOMMIT özelliği ön değeri TRUE ayarlıdır. İşlemlerinizin denetimini ele geçirmek için FALSE ayarlamalısınız. pstmt.setLong(1,2345); pstmt.setString(2,”Sam”); pstmt.execute(); pstmt.setLong(1,2346); pstmt.setString(2,”Steve”); pstmt.execute(); pstmt.setLong(1,2347); pstmt.setString(3,”Scott”); pstmt.execute(); commit connection.setAutoCommit(false); pstmt.setLong(1,2345); pstmt.setString(2,”Sam”); pstmt.execute(); pstmt.setLong(1,2346); pstmt.setString(2,”Steve”); pstmt.execute(); pstmt.setLong(1,2347); pstmt.setString(3,”Scott”); pstmt.execute(); connection.commit(); Kötü Veritabanı İşlemi(Transaction) Alışkanlıkları

25 Katmanlı yapıda kim işlemi yönetecek ve sonlandıracak? B içinde COMMIT veya ROLLBACK geçiyor ise, ya da A için AUTOCOMMIT TRUE kaldı ise: Java Procedure A PL/SQL Procedure B PL/SQL Procedure C Not: Özerk (Autonomous) veritabanı işlemleri ile PL/SQL blokları içindeki COMMIT veya ROLLBACK çağırımlarından dış blokların etkilenmemesi sağlanabilir. *

26 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'; Ürettiğim REDO miktarını nasıl ölçebilirim

27 REDO üretimini kapatabilir miyim 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) * Notlar kısmında REDO üretim maliyetleri ve TEMPORARY TABLE örneklerine göz atın.

28 Oku, dene, sorgula, geliştir, *paylaş*.. Kaynakça – Turkcell Staj Transactions-Redo/Undo sunumu, Ergin Erant, Expert Oracle Chapter 4,5 Thomas Kyte, Oracle® Database Concepts 11g Release 2 Chapter 10 Transactions Chapter 9 Data Concurrency and Consistency Çok daha fazlası için * – Transaction Internals, Julian Dyke Oracle Concepts and Architecture tonguc.wordpress.com Part 3: How Atomicity is implemented on Oracle Part 4: Overview of Transaction Management Internals Part 5: Concurrency versus Locking Concepts, Understanding Lock Contention with Examples * Bu sunum giriş düzeyi için tasarlandı, ikinci bir ileri seviye sunumuna hazırlanacağım, Türk Oracle Kullanıcı Grubu – Veritabanı Geliştirme Özel İlgi Grubu buluşmasında çok yakında

29 H.Tonguç Yılmaz - ? ? ? ? ? ? ? ? ? Senelerdir bilgi paylaşımına fırsat yarattığı için CETURK’e çok teşekkürler Sorularınız ve/veya yorumlarınız


"Oracle Veritabanında İşlem(Transaction) Yönetimine Giriş Oracle Veritabanında Eş Zamanlılık(Concurrency), Tutarlılık(Consistency), Kilitler, COMMIT ve." indir ppt

Benzer bir sunumlar


Google Reklamları