Tom Kyte tarafından yazılan kitabın Chapter5 Redo and Rollback bölümünün Türkçe sunumunu hazırlayarak, stajyer arkadaşlarımın anlamalarına destek oldum.
3. FIZIKSEL VERITABANI YAPISI
Fiziksel yapıyı oluşturan 5 temel bileşen:
1. Data Dosyaları
2. Control Dosyaları
3. Redo Log Dosyaları
4. Archive Log Dosyaları
5. Parameter Dosyaları
4. VERİTABANI STANDARTLARI
ACİD (Atomicity Consistency İsolation Durability)
Atomicity : Ya hep ya hiç kuralıdır.
Consistency : Veritabanında tutarlılık esastır.
İsolation : Bir operasyon tarafından yapılan
değişikliklerin, diğer işlemler tarafından
nasıl görüntülenmesi gerektiğini belirler.
Durability : Commit edilen işlemlerin veritabanına
yazıldığının ve kaybolmayacağının
garantisidir.
5. LOGLAMA YÖNTEMLERI
ACID standartlarını sağlamak için;
Write Ahead Logging (Transactional Log) ve
Shadow Paging
isimli yöntemler kullanılmaktadır.
6. LOGLAMA YÖNTEMLERI
Write Ahead Logging (WAL), yapılacak islemlerin
öncelikli olarak bir log dosyasına yazılmasının
ardından, veritabanına ait dosyalara aktarılmasıdır.
WAL kavramı, Oracle’da online redo log olarak
geçmektedir.
Shadow Paging, veritabanına gerçek girişin
yapılmasından önce, kopyaya girişin yapılıp, ardından
gerçek değişikliğe gidilmesi olarak düşünülebilir.
7. REDO - REDO LOG DOSYALARI
Türkçe, ‘Yinele’ anlamına gelir.
Veritabanında yapılan COMMIT ile gerçekleşmiş
değişikliklerin kaydedildiği dosyalardır.
Bu dosyalar kurtarma yapılırken kullanılır.Kurtarma
gereken durumlar neler?
Oracle’ı iki tip redo log dosyası korur: Online ve
Arşivlenen.
Bir veritabanı, en az iki veya daha fazla online redo log
dosyasından oluşur. Neden iki?
Oracle ‘ın dezavantajlarından birisi Redo log
dosyalarının boyutunun iyi ayarlanamamasıdır.( 10 KB
mı, 10 GB mı?)
10. REDO - ONLINE REDO LOG DOSYALARI
Genellikle en az 3 dosya olması tavsiye edilir.
Her bir Redo log’un switch etme süresinin 20
dk’dan az olmasına önem verilir, aksi halde
performans sıkıntısı yaşanacaktır.Bunlar
ayarlanabilir sürelerdir.
11. HANGI DURUMLARDA LGWR TETIKLENMEKTEDIR?
Her 3 sn’de bir,
Log buffer 1 MB olduğu zaman,
Redo log buffer’ın 3’te 1’i dolduğu zaman,
Herhangi bir işlem tamamlandığında(commit),
Veritabanı checkpoint oluşturduğu zaman.
LGWR’nin çalışma prensibi ile ilgili değişiklik yapılamamaktadır.
12. COMMIT NE ZAMAN ÇALIŞTIRILIR?
Bilinçli bir şekilde sistemden çıkış yaptığınızda
commit edilir.
Oracle sunucularından disconnect olduğunuz
zaman yapılır.
Bir DDL cümlesi çalıştırıldığı zaman yapılır.Hangi
komutlar DDL cümlesidir?
13. KOMUT ÇEŞITLERI
DDL DML DQL DCL Data
Administration
Commands
Transactional
Control
Commands
Create Table
Alter Table
Drop Table
Create index
.
.
.
Insert
Update
Delete
Select Alter
password
Grant
Revoke
Create
synonym
Start Audit
Stop Audit
Commit
Rollback
Savepoint
Set Transection
17. BIR COMMIT IŞLEMI ILE;
İşlemimiz için bir SCN( System Change Number)
oluşturulur.
Ayrıca online redo log dosyaları içine SCN kaydeder.
Bu adımda COMMIT edilir.Eğer bu adım oluşursa,
verileri garanti etmiş oluruz. Transaction girişi
kaldırılır.V$TRANSACTION kayboldu olarak
görünecektir.
Oturumumuz tarafından tutulan bütün kilitler serbest
bırakılır ve kuyruktaki bekleyen kilitlerin herbiri serbest
bırakılır.
Eğer buffer cache’de hala varsa, hızlı bir modda
‘cleaned out’ ve işlemimiz sırasında değiştirdiğimiz
blokların çoğuna ziyaret edilecek.
18. ROLLBACK NE ZAMAN ÇALIŞTIRILIR?
Bilinçsiz bir şekilde yapılan ( Disk çökmesi,
elektrik kesintisi vs.) işlemler de rollback yapılır.
ROLLBACK; komutu çalıştığı zaman yapılır.
Bağlı olduğunuz oturum KILL edildiği zaman yapılır.
21. BIR ROLLBACK IŞLEMI ILE;
Yapılan değişikliklerin hepsini geri alırız.Yani bir
satır veri eklediysek, eklenen bir satırlık veriyi
sileceğiz.Tam tersi olabilir.
Oturumumuz tarafından tutulan bütün kilitler
serbest bırakılır ve kuyruktaki bekleyen kilitlerin
herbiri serbest bırakılır.
23. NE KADAR REDO OLUŞTURABILIRIM?
Değiştiriyor olduğunuz verilerin ne kadar olduğunu
biliyorsanız, ne kadar redo oluşturacağınızı tahmin
etmek kolay olacaktır.Tahmin etme yöntemleri var
mı?
Transaction boyutunu tahmin edin,yani ne kadar veriyi
değiştirdiğini.
Değiştirmiş olduğunuz verilerin satır sayısına bağlı olarak
yüzde 10 ila 20 arasında ekleme yapın.
UPDATE’ler için bu değeri ikiye katlayın.
24. REDO LOG OLUŞTURMAYI KAPATABILIR MIYIM?
Bu soru sık sık sorulur.Kısa ve basit bir cevabımız
vardır: HAYIR
26. ARCHIVE REDO LOG DOSYALARI
Oracle database iki moddan birinde çalıştırılabilir:
Archivelog Mod,
Noarchivedlog Mod.
Select log_mode from v$database;
İle arşiv modumuzu öğreniriz.
27. VERITABANIMIZIN ARŞIV TIPINI ÖĞRENME
Elapsed: 00:00:00.01 ifadesi daha önce set timing
on komutunun açılmasıyla oluşmaktadır.
28. ARCHIVE REDO LOG DOSYALARI
Eğer NOARCHIVEDLOG modunda çalışıyorsak bu
kesinlikle veri kaybı yaşayacağımız anlamına
gelir.Online Redo Log dosyalarımızın
kaybolmamasına özen gösterilmesi gerekir.
ARCHIVEDLOG modundaysanız, veri kaybı
yapmamak ve veri kaybı olsa dahi arşivlenen
verilerle kurtarabilirsiniz.ARCHIVEDLOG hem
backup dosyalarını hem de Online Redo
dosyalarını arşivler.Bunlar farklı fiziksel disklerde
tutulur ve disk arızası durumunda veriler kurtulur.
29. NOLOGGING VE LOGGING
Oracle’da neredeyse her obje LOGGING
yaratılmaktadır.Bunun anlamı o objenin içinde bulunduğu
her işlemin bir redo log üretileceğidir.
NOLOGGING ise obje üstünde yapılacak işlemlerin redo
log’u üretilmeyeceğini söyler.Direct path load olmayan
normal işlemler redo üretecektir.
Direct Path Load nedir?
Buffer cache'i geç, diskten diske işlem yap demektir.
30. NOLOGGING VE LOGGING KOMUTLARI
ARCHIVE LOG LIST; -- Özellikleri Listeler.
ALTER SYSTEM ARCHIVE LOG START; --
Loglama başlatılır.
ALTER SYSTEM ARCHIVE LOG STOP; --Loglama
durdurulur.
ALTER SYSTEM ARCHIVE LOG ALL; --Zorla log
dosyalarını arşivle
ALTER SYSTEM ARCHIVE LOG CURRENT; --
Zorla current log dosyalarını arşivle
36. ÇÖZÜM NE OLABİLİR?
Daha hızlı DBWR yapın. Birden fazla DBWR kullanarak veya
DBWR I/O slaves kullanarak ASYNC I/O etkinleştirerek
ayarlayan DBA var.
Sistemdeki I/O lara baktığımızda, bir disk veya
diskler seti görüyorsanız, bu DBWR nin verileri
diske yazması dışarıya doğru uzar ve bu yüzden
çözüme ihtiyaç duymamız muhtemeldir.Bu ihtiyaçlar
ARCH içinde benzerdir.Bunun profesyonelliği burada
‘hiçbirşey için birşey’ mantığına dayanır.
Bu sayede, Mantık,yapılar ve kodda herhangi bir
değişiklik olmaksızın performans
arttırılabilir.Gerçekten bu yaklaşım olumlu sonuçlar
verecektir ve hızlanacaktır.
38. ÇÖZÜM NE OLABİLİR?
Bu bazı durumlarda veya uzun bir süre olmayınca
gerçekleşecektir.Checkpoint’in tamamlanmasını
ertelemek çözüm olabilir.Aynı mesaj Archival içinde
geçerlidir.Bu çözümün faydası sistemdeki
duraklamaların çıkarılmasıdır.Bu çözüm DBWR için
yeterli seviyede bir rahatlık vermektedir.
40. ÇÖZÜM NE OLABİLİR?
– REDO LOG DOSYALARININ SÜRESININ UZATILMASI
Redo log dosyalarının boyutunu yeniden
oluşturmak da bir çözümdür.Online redo log
dosyalarının yinelenme süresinin uzatılması işe
yarayaracaktır.
41. ÇÖZÜM NE OLABİLİR?
– KÜÇÜK BIR BLOK BUFFER CACHE KULLANIMI
Çok sık ve sürekli olan Checkpoint’e çözüm olarak;
Küçük bir blok buffer cache kullanın veya init.ora
ayarlarıyla değişiklikler yapın.
Bu çok sık dirty blokları boşaltmak için DBWR
prosesini zorlayacaktır.Bu yaklaşım için profesyonel
yaklaşım, başarısızlık ile karşılaşıldığında kurtarma
süresi azaltılmıştır.
Neden iki?
archivelog seklinde çalısıyorsanız, redo log dosyalarından bir tanesi kullanılırken diğeri
arsive çıkılabilsin diyedir. Böylece her zaman çalısabilir olmayı sağlar. (Gerçi asırı yoğun bir
sistemde sadece iki adet redo log kullanıyorsanız, "Thread 1 cannot allocate new
log, sequence #" seklinde sık sık hata alırsınız. Çünkü redo log’ların arsive çıkması için
yeterli zaman olmayacaktır.)