15 Kasım 2015 Pazar

UNDO Tablespace’i ve Verilerin Yönetimi

UNDO TABLESPACESİ
SQL eğitiminde de undoyu kısmen anlatmıştık. Undo datanın değişmeden önceki halini tutar, ve commitedilmemişse değişikliği yapan session haricindeki herkes datayı undo üzerinden okur. Undo tablespacei olmazsa olmaz, undoya bir şey olsa veri tabanı çalışmayacaktır. Yani a kullanıcısı x tablosu üzerinde bir update işlemi yapsa,  tablonun değişmeden öncekihalini undo üzerine atar. b kullanıcısı x tablosuna sorgu atsa sorguyu undo üzerinden çeker. Taki a kullanıcısı yaptığı değişikliği commit işemi yapana kadar. A kullanıcısı commit ettikten sonra bkullanıcısı o zaman x tablosu üzerinden okumaya başlar ve artık datanın değiştirilmiş halini görür. Commit işlemi yapıldıktan sonra data undo üzerinde çok fazla kalmaz. Yani commit işleminden sonra undo tablespace’i dolmuşsa silecektir. Yada commitlendiği için silecektir. Bu tür eylemler ayarlanabilir. Ancak tavsiye edilen otomatik olarak oracle tarafından yönetilmesidir.
Yukarıdaki tanıma göre undo aşağıdaki görevleri sağlar.
1.       Transaction’ı rollback yapabilir.
2.       Veri tabanı recover işlemleri için kullanılabilir.
3.       Veri tabanında tutarlığı sağlamak için kullanılabilir.
4.       Flashback sorguları ile önceden kullanılmış bir DML işlemlerini yeniden sorgulayabilirir.
5.       Kaybolan verilere yeniden ulaşabilmek için undo kullanılabilir.
Peki undo nasıl çalışır. Oracle üzerinde, değişiklik yapılan tablo ile undo tablespace’i arasında bir bayrak koyar ve değişikliği yapan kullanıcı haricindeki, diğer tüm kullanıcılar o değişiklik yapılan tabloya erişmek istediğinde, o bayrak undo tablespace’ine yönlendirir. Değişikliği yapan kullanıcı commit, rollback gibi işlemler yaparsa aradaki payrak kaldırılır.
Üstteki resimi incelediğimizde bir update işi yapılmış, orijinal data buffer cachee yazılmış değişmeden önceki haliUndo’ya log dosyasıda redo log buffera yazılmış. Transactionların hangi undo segmentine kopyalandığınıV$TRANSACTION ve V$UNDOSTAT viewlarından öğrenebiliriz.
Undo segmentleri özel bir segmenttir. Undo segmentleri undo tablespaceinde tutulur. Veri tabanı oluştutulurken default olarak oluşturulur. Undo tablespacesi 1 tane olur. Ve undo verilerinin yazılması için kullanılır. Ve veri tabanı tarafından yönetilir. Transactionlarda hata olursa recover işlemleri undo üzerinden yapılır. Eğer undo üzerinden recover işlemi yapılacaksa veri tabanı mount modda açılması gerekecektir.
Undo tablespacei 11G ile birlikte default olarak gelmiştir. Veri tabanı iki datafile, iki tablespace, iki online redo log file ve bir control file ile oluşturulur. undo istenirse el ilede oluşturulabilr. Yukarıda da dediğimiz gibi Oracleundonun otomatik olarak yönetimesini tavsiye eder, undonun otomatik olarak yönetilmesi içinUNDO_MANAGEMENT parametresini AUTO konumuna getirmemiz yeterli olacaktır. Ancak veri tabanında fazla hata oluşuyor ve fazla flashback kullanıyorsak o zaman undo tablespaceinin commitlenmiş verileri ne kadar tutulacağını belirleyebiliriz. UNDO_RETENTION undo bilgilerinin commitlendikten sonra segmentlerde ne kadar tutulacağının bilgisini tutan ve belirleyen parametredir. Eğer undo auto extend modda ise ve retention parametresilarge object (LOB)ler için ayarlayacaksanız ve commitlenen veriyi belli bir süre undo üzerinde tutmak istiyorsanız bu parametreyi ayarlamanız gerekecektir. Bir tablespace için birden fazla undo atanabilir. Ancak birtanesinin varsayılan olarak ayarlanması gerekemktedir. UNDO_TABLESPACE parametresi ile varsayılan olarak ayarlayabiliriz.
Undo tablespace’i dolabilir. Ve dolduğunda yeni eklenecek veriler varsa commit lenmiş verileri silecektir. Ancak bu silinecek verilerin ne kadar uzun süre saklanacağını biz belirleyebiliriz. Örneğin bir üst sınır belirleriz. Ve o üst sınıra kadar extend almasını sağlar ve üst sınıra geldiğinde en eski verilerden başlayarak silinmesini sağlayabiliriz.
Undo tablespaceinin otomatik olarak extend almasını istersek, bir autoextend belirterek belirleyeceğimiz miktara kadar extend almasını sağlaybiliriz.
Retention Garantisi
Veri tabanımız için uzun süren sorgualrın undo üzerinden silinmemesini garantiye alabiliriz. Bu işleme dakika belirleyebiliriz. Default süresi 15 dakikadır. Flashback sorguları için tutarlılığı sağlamak adına kullanılabillir. Ancak bu durumda yer kaplayacaktır. Eğer retention garantisi aktifse undo_retention parametresinin saniye değiri kadar biliundoda saklanacaktır. Tablespace dolmuş olsa bile undo daki bilgiler silinmeyecektir. Varsayılan olarak bu opsiyon kapalı olarak gelmektedir. Bir komut ile aktifi hale getirilebileceği gibi Enterprise Manager üzerinde de aktif edilebilir. Enterprise Manager üzerinde server tabında, tablespaces sayfasına gelerek.
Yukarıda, tablespace ki sayfasındaki undo tablespaceini görmekteyiz. Şimdi seçerek edit diyelim.
Eğer ki undo Retention Guarantine’yi yes yaparsak o zaman defaul olarak 15 dakikadır.
 İstersek aşağıdaki datafiles bölümünden undo tablespaceinin datafilei ile oluşturabiliriz. Undo tablespaceinin file sizeını yükseletebiliriz. storage bölümünden de autoextendi ayarlayabiliyoruz.
İstersek bu retention guarantinenin paramatre ayarını değiştirerek, defaultta 15 dakika olan süreyi istediğimiz süreye çekebiliriz. Bu işlemi yapabilmek için server tabından database configuration bölümünden initialization parameters sayfasına geliriz.
Yukarıdaki sayfa initialization parameters sayfasına girince karşımıza gelen sayfada arama bölümüne undo (1)yazınca çıkan sayfadır. Ve aşağıda undo_retention parametresini görmekteyiz. Ve süre olarak 900 saniye belirtilmiş biz bu süreyi istediğimiz kadar uzatabiliriz. Ancak unutulmamalıki süre uzadıkça daha çok yer kaplayacaktır. Gereksinimler iyi tespit edilmeli ve ona göre bir süre atanmalıdır.
Alter system set undo_retention = 2400;
Yukarıdaki syntax ile undo_retention değerini 2400 saniyeye çekmiş olurur.
Undo retention parametresi ile undo üzerine giden verilerin belirtilen saniye süresince undo üzerinde saklanmasını sağlar. Ancak bu süre içinde gelen bütün transaction (DML)’lar için undo daki veriyi saklayacaktır. Yani bir update işlemi yapıldığında eski veri undo’ya gönderilir ve varsayılan süre 15 dakikadır demiştik, 15 dakika boyunca bu verileri saklayacaktır. Bu nedenle her yeni Transaction için büyüme olacakıtır. Yer kalmadığında ise veri tabanı kendini kapatacaktır. Bu DBA olarak bizim istemeyeceğimiz bir durum olacaktır. Böyle durumlarda undo_retention kaldırılır ve sistem yeniden açılır. Bu nedenle undo_retention ve undo tablespace’i yönetimi çok önemlidir. Varsayılan olarak undo_retention açık değildir. Undo tablespace’i için tablespace sayfasına geldiğimizde ve undo tablespace’ini edit’lediğimizde TYEPE altında UNDO altında undo retention guarantee’ye yes dememiz gerekmekte. Varsayılan olarak no olarak gelir. Komut ile aşağıdaki gibi açılır.
ALTER TABLESPACE “undo_tablespace_adı” RETENTION GUARANTEE;
UNDO için tanımlı 3 tane parametre var bu parametreleri görmek için istersek yukarıdaki resimdeki gibi initialization parameters sayfasından görebileceğimiz gibi, istersek bu parametreleri sorgulayadabiliriz. Bunun için SQL Plus ya da SQL Developer araçlarını kullanabiliriz. SYS Kullanıcısı ile login olunur ve aşağıdaki sorgu çalıştırılır.
SQL> SHOW PARAMETER UNDO;
Undo için tanımlı üç parametereyi görmekteyiz. İstersek Alter komutu ile düzenleye bilir istersek enterprise manager üzerinden düzenleyebiliriz.
Eğer veri tabanı için yeni bir undo tablespace oluşturursak, undo tablespace’inin nasıl oluşturulacağını önceki konularda anlatmıştık. Oluşturacağımız yeni undo tablespace’inin kullanılabilmesi için undo_tablespaceparametresinin ayarlanması gerekir. Bunu yapmak için,
SQL> ALTER SYSTEM SET UNDO_TABLESPACE yeni_undo_tablespace_adı;
Eski oluşturulmuş tablolar için eski undo tablespace’i kullanılmaya devam edecek. Ancak bu tanımlamadan sonraki objeler için yeni ayarlanan undo tablespace’i kullanılacak. Peki neden yeni undo tablespace’i ayarlanarak parametre değişikliği yapılır zaten undo tablespace geçici olarak veri tutar? diye bir soru sorarsak. Eski undo çok fazla büyürse yenisini oluşturup eskisini sileriz. Bu amaçla yeni bir undo tablespace’i oluşturulur ve parametreye tanımlanır.
Eğer sabit boyutlu bir undo belirlemek istersek yada yeni bir yapı kurmuş olup autoextend ne kadar olacağını tahmin edemiyosak işte o zaman devreye bu tahmini bizim yerimize yapabilecek bir çok araç girebilir. Bunlardan birisi DBMS_ADVISOR aracı kullanılabilir. Enterprise Manager tarafıdna undo advisor AWR tarafından toplanan bilgilerle oluşturulmaktadır. Veri tabanı yeni kurulduğu zama tutarlı bir AWR raporu almak için autoextendin açık olması zorunluluğu vardır. Belirteceğimizi süre için bir analiz çıkarır ve rapor sonucunda bize ne kadarlık bir dosya alanı gerektiğini belirleyecek. Şimdi bu konuyu inceleyelim.
Enterprise manager üzerinde undo advisoru inceleyelim. Bunun için server tabından Automatic undo Management sayfasına gelelim.
Automatic Undo Management sayfasında görülmekteki retention guarantine olması gerektiği gibi açık ve auto extend açık. İstersek Undo tablespace for dhis instance bölümündeki change tablespace butonuna basarsak oluşturula yeni undo tablspace’ini açılan sayfadan değiştirebiliriz.
Eğer change tablespace botununu tıklarsak yukarıdaki gibi bir sayfa açılacaktır. Eğer ayarlanmış başka bir undo tablespace olmuş olsaydı UNDOTBS1 gibi görünecekti. Bizde o tablespace’i seçerek OK butonuna basarsakundo_tablespace parametresini değiştimiş olacaktık.
Analysis period bölümünden ise ne kadarlık undo alanı ayırmamız gerektiğinin analizini yapacağız. Analysis Time Period olarak son 7 günün istatistiğini alacağımızı açılır menüden seçeriz. Desined Undo Retention ister otomatik olarak belirletiriz. İstersek manuel olarak ne kadar süre ile undo üzerinde veri tutulacağının hesabını yaptırabiliriz. Ben Duration olarak 60 yazarak sağındaki açılır menüden minutes (dakika) seçiyorum. İsterseniz gün isterseniz saat gibi seçenekleride bulunmakta. Şimdi Run Analysis butonuna basıyorum sonucu bir alttaki bölümden görüyoruz.
Run Analysis butonun bastıktan sonra alttaki Analysis Results (analiz sonuçları) bölmünde sonuçlarımızı döndürecektir. Benim yaptğım sorguya göre undo tablsepace’imin boyutu 202 MB olursa 60 dakika boyunca undo’daki verileri saklayacaktır. Bu değerin fazlasında değer atamak daha da güvenilir olabilecektir. Ancak analiz işlemlerinde hafta sonlarını baz almayacaktır.
Yine bu bölümdeki sol üstte bulunan edit undo tablespace butonu ile undo tablespace’imizi edit edebiliriz. Ve yanındaki edit undo retention ile de undo retention’ı ayarlayabiliriz.
Automatic Undo Management sayfasında system activity tabına geçersek undo tablespace’i ile ilgili bilgileri görüntüleyebiliriz. Yine bu tabın altındaki Show Graph linkine tıklayarak bu sayfayı genişletiriz ve undo tablespace’inin kullanımı ile ilgili olarak detaylı bilgilere ulaşabiliriz. Şimdi show graph linkini tıklayarak bu sayfayı inleyelim.
System Activity tabı karşımıza yukarıdaki gibi gelecetir. Show graph butonunu tıkladıktan sonra aşağıdaki gibi grafik’ler çıkacaktır.
Yeşil alan            : kullanılabilir alanı yani boş alanı göstermektedir.
Sarı alan              : geri döndürülebilir alan yani içinde veri var flashback senaryolarında kullanılacak olan veriyi belirtir.
Kırmızı alan         : transaction tarafından kullanılan alandır. Yani henüz commit’lenmemiş veriyi bildirir.
Mavi alan           : Geri dönülebilecek sorguları gösterir.
Bordo alan         : En uzun çalışan sorguyu gösterir.
Bu grafik undo’nun saniyede ürettiği KB sayısını göstermekte.

Hiç yorum yok:

Yorum Gönder