Veritabanı Tasarımı Veritabanı Hareketleri
Konular Veri hareketleri ile ilgili olarak COMMIT, ROLLBACK ve SAVEPOINT terimlerini tanımlamak COMMIT, ROLLBACK ve SAVEPOINT ifadelerinin üç avantajını listelemek İşletme açısından hareket işlemi akışını kontrol edebilmenin neden önemli olduğunu açıklamak 2
Amaç Bir bankanın para yatırma ve çekme kaydı için sistematik süreci yoksa ne olur? Para çekmeye ihtiyaç duymanızdan önce hesabınıza bir mevduat yatırıldı ise bunu nasıl bilebilirsiniz? Bunun neden olacağı karışıklığı hayal edebilirsiniz. 3
Amaç Neyse ki, bankalar veri tutarlılığını sağlamak için hareket işlemlerini kontrol eder. Bu derste, veri değişim işleminin nasıl yönetileceğini ve bir veritabanında değişikliklerin nasıl taahhüt veya iptal edileceğini öğreneceksiniz. Oracle Application Express veritabanı bağlantılarını yönettiğinden dolayı COMMIT, ROLLBACK ve SAVEPOINT Oracle Application Express te desteklenmez. 4
Hareketler Hareketler tüm veritabanı sistemlerinin temel kavramıdır. Hareketler verilerde değişiklik yapmak için ve daha sonra çalışmayı kaydetme ya da iptal etmeye karar vermek için kullanıcılara izin verir. 5
Hareketler Veritabanıhareketleri birden fazla adımı tek bir mantıksal birim içine paketler. Bir hareket aşağıdakilerden oluşur: Veride tutarlı bir değişiklik oluşturan DML komutlarıdır. DML komutları INSERT, UPDATE, DELETE ve MERGE içerir. CREATE, ALTER, DROP, RENAMEya da TRUNCATE gibi bir DDL komutu GRANT ya da REVOKE gibi bir DCL komutu 6
Hareket Benzerliği Bir banka veritabanı çeşitli müşteri hesapları için bakiyelerini ve bununla birlikte diğer şubelerdeki toplam mevduat bakiyelerini içerir. Bir müşterinin para çekmek istediğini varsayalım ve onun hesabından parayı transfer edip farklı bir şubedeki başka bir müşterinin hesabına yatıralım. 7
Hareket Benzerliği Bu oldukça basit işlemi gerçekleştirmek için birkaç ayrı adım vardır. Her iki banka şubesi işlemin tüm adımlarının gerçekleştiğinden emin olmak ya da bunların tümünün iptal olmasını ister. Şayet sistemde hata oluşursa hareket kısmen tamamlanmış olarak bırakılmaz. Para çekme ve yatırma adımlarını tek bir hareket içine gruplama bunun garantilenmesini sağlar. Hareket ya tamamen gerçekleşir ya da tamamen gerçekleşmez. 8
Hareketleri Kontrol Etme Hareketler aşağıdaki komutlar kullanılarak kontrol edilir: COMMIT: Kullanıcının yapmış olduğu mantıksal olarak bir araya getirilmek istenen tüm değişikliklerin zaman noktasını temsil eder. Çünkü hiçbir hata yapılmamıştır, kullanıcı çalışmaları kaydetmek için hazırdır. Bir COMMIT deyimi verildiğinde geçerli hareket sonlanır ve bekleyen tüm değişiklikler kalıcı olur. 9
Hareketleri Kontrol Etme Hareketler aşağıdaki komutlar kullanılarak kontrol edilir: ROLLBACK: Kullanıcının veritabanında yaptığı değişiklikleri iptal edebilmesini sağlar. ROLLBACK komutu verildiğinde bekleyen tüm değişiklikler terkedilir. SAVEPOINT: Bir harekette, onu küçük parçalara bölen bir işaretleyici oluşturur. 10
Hareketleri Kontrol Etme Hareketler aşağıdaki komutlar kullanılarak kontrol edilir: ROLLBACK TO SAVEPOINT: Kullanıcının belirli bir kayıt noktasına geçerli işlemi geri almasına izin verir. Bir hata yapılmış ise, kullanıcı SAVEPOINT noktasından sonra yapılan bu değişiklikleri iptal etmek için ROLLBACK TO SAVEPOINT komutu çalıştırır. 11
Hareket Örneği Aşağıda verilen örnekte, kullanıcı bir UPDATE komutu çalıştırmakta ve hemen SAVEPOINT one oluşturmaktadır. 12
Hareket Örneği INSERT ve UPDATE komutları sonrasında kullanıcı WHERE deyiminin son UPDATE deyiminde bulunmadığını fark eder. Hatayı düzeltmek için, kullanıcı ROLLBACK TO SAVEPOINT one yapar. Veri şimdi kayıt noktası SAVEPOINT one durumuna geri yüklenir. 13
Hareket Ne Zaman Başlar ve Biter? Bir hareket ilk DML (INSERT, UPDATE, DELETE ya da MERGE) komutu ile başlar ve aşağıdaki durumlardan biri oluştuğunda sonlanır: COMMIT ya da ROLLBACK komutu verildiğinde Bir DDL (CREATE, ALTER, DROP, RENAME ya da TRUNCATE) komutu verildiğinde Bir DCL (GRANT ya da REVOKE) komutu verildiğinde isql*plus ya da SQL*Plus kullanıcısı varsa Makine hata verdiğinde ya da sistem çöktüğünde 14
Hareket Ne Zaman Başlar ve Biter? Bir hareket sonlandıktan sonra sonraki çalıştırılabilir SQL komutu otomatik olarak bir sonraki harekete başlar. Bir DDL ya da DCL komutu otomatik olarak onaylanır ve bu nedenle örtülü olarak bir hareket biter. Bir işlem sırasında yapılan her veri değişimi işlem onaylanana kadar geçicidir. 15
Veri Tutarlılığı Çalışan verilerinde değişiklik yaparken başka birinin sizin yaptığınız değişikliklerle çakışan bilgi girdiğini tespit etmek için birkaç saat harcadığınızı düşünün. Bu tür kesintileri veya çakışmaları önlemek için ve birden fazla kullanıcının aynı anda veritabanına erişmesi için veritabanı sistemleri "tutarlılık okuma" denen bir otomatik uygulama çalıştırır. 16
Veri Tutarlılığı Tutarlılık okuma, her zaman tüm kullanıcılar tarafından tutarlı bir veri görünümü sağlar. Veri değişim sürecinde olduğundan okuyucular verileri görüntüleyemez. Yazarların veritabanında tutarlı bir şekilde değişiklikler yapması sağlanır. Bir yazar tarafından yapılan değişiklikler başka yazar tarafından yapılan değişikliklerle karışmaz. 17
Okuma Tutarlılığı Okuma tutarlılığı otomatik bir tanımlamadır. Veritabanının kısmi kopyası geri alma segmentlerinde tutulur. Kullanıcı A veritabanına bir ekleme, güncelleştirme ya da silme işlemi gerçekleştirince Oracle sunucu veriler değişmeden anlık kopyasını alır ve onu bir geri alma (rollback) bölümüne yazar. Kullanıcı B hala değişiklikler başlamadan önce var olan veritabanını görür. Geri alma bölümünün anlık veri görünümüne bakar. 18
Okuma Tutarlılığı Değişiklikler veritabanına onaylatılmadan önce sadece veriyi değiştiren kullanıcılar değişiklikleri görür. Diğer herkes geri alma bölümündeki anlık kopyayı görür. Bu okuyucuların değişim geçirmekte olmayan verileri tutarlı görmesini sağlar. 19
Görünür Değişiklikler Bir DML komutu çalıştırıldığında, veritabanında yapılan değişiklik SELECT komutu çalıştıran herhangi birine görünür olur. Hareket geri alınırsa değişiklikler yapılmamış olur: Geri alma bölümündeki orijinal eski sürüm veriler tekrar tabloya yazılır. Tüm kullanıcılar veritabanlarını hareket başlamadan önceki varlıkları olarak görür. 20
COMMIT, ROLLBACK ve SAVEPOINT COMMIT ve ROLLBACK veri tutarlılığını sağlar. Değişikliklerin kalıcı yapmadan önce veri değişikliklerinin ön izleme yapılmasını ve ilgili mantıksal işlemleri grup yapmayı mümkün kılar. SAVEPOINT hareket için tüm hareketi geri almak zorunda kalmamak adına bir kayıt noktası oluşturur. 21
COMMIT, ROLLBACK ve SAVEPOINT Grafikte gösterilen harekette bir DELETE komutu gerçekleştirilmekte ve daha sonra SAVEPOINT A oluşturulmaktadır. Bu SAVEPOINT işaretleyici olarak görev yapar ve kullanıcının bir sonraki değişiklikleri geri alması için izin verir. Veri bu noktada mevcut olduğu değerlere geri döner. 22
COMMIT, ROLLBACK ve SAVEPOINT Örnekte, SAVEPOINT A dan sonra kullanıcı INSERT ve UPDATE komutları çalıştırmakta ve daha sonra başka bir geri alma işaretleyiciyi SAVEPOINT B ye yerleştirmektedir. 23
COMMIT, ROLLBACK ve SAVEPOINT Bazı nedenlerden dolayı kullanıcı bu INSERT ve/ veya UPDATE komutlarının gerçekleşmesini istemezse ROLLBACK TO SAVEPOINT A ifadesi çalıştırılır. Bu veriyi kayıt noktası A daki haline döndürecektir. 24
COMMIT, ROLLBACK ve SAVEPOINT Diğer SAVEPOINTS ekleme geri alma noktaları için ek işaretler oluşturur. Şayet kullanıcı ROLLBACK TO SAVEPOINT ifadesi kullanmadan bir ROLLBACK gerçekleştirirse tüm hareket sona erer ve bekleyen tüm veri değişiklikleri iptal edilir. 25
Dahili Hareket İşlemi Veri değişikliklerini otomatik onaylama şu durumlarda oluşur: DDL komutu çalıştırılırsa DCL komutu çalıştırılırsa COMMIT ya da ROLLBACK komutları açıkça kullanılmadan isql*plus ya da SQL*Plus tan normal bir çıkış 26
Dahili Hareket İşlemi Otomatik geri alma isql*plus ya da SQL*Plus deki normal olmayan sonlandırma ya da sistem hatası oluştuğunda meydana gelir. Bu temel tablolarda istenmeyen değişikliklerden kaynaklanan verilerdeki hataları önler. Veri bütünlüğü bu sayede korunur. 27
Kilitleme Verinin aynı anda birden fazla kullanıcı tarafından değiştirilmesini önlemek için önemlidir. Oracle aynı kaynağa ya da kullanıcı nesnesine ya da kullanıcıya görünmeyen sistem nesnesine erişen hareketler arasındaki yıkıcı etkileşimden korunmak için kilitleri kullanır. 28
Oracle Veritabanı Veriyi Nasıl Kilitler Oracle kilitleme otomatik olarak gerçekleşir ve kullanıcı hareketi gerektirmez. Dahili kilitleme, gereken SQL deyimleri için istenen eyleme bağlı olarak oluşur. Dahili kilitleme SELECT hariç tüm SQL ifadeleri için oluşur. Kullanıcılar verileri harici kilitleme diye adlandırılan yöntemle manuel olarak da kilitleyebilir. COMMIT ya da ROLLBACK komutu gerçekleştirildiğinde etkilenen satırlardaki kilitler serbest bırakılır. 29