Türkiye’de ilk defa OCM- Oracle Certified Master Eğitimi ve Sınavı

Merhaba Arkadaşlar,

Oracle’ın en üst seviye sertifikası olan OCM (Oracle Certified Master) eğitimi ve sınavı şimdiye kadar Dubai (BAE), Amerika, Kore gibi ülkelerde yapılmaktaydı. Ekim ayında ilk defa İstanbul’da OCM eğitimi ve sınavı gerçekleştirilecek. Bu duyduğum en güzel haberlerden biriydi ve sizlerle paylaşmak istedim.

OCM eğitimi aşağıdaki konuları kapsamakta ve 5 gün sürmektedir.

Server Configuration
Managing Database Availability
Data Management
Data Warehouse Management
Performance Management
Enterprise Manager Grid Control
Data Guard
Replication

Ayrıntılı bilgi için;

http://education.oracle.com/pls/web_prod-plq-dad/db_pages.getCourseDesc?dc=D69748GC10&p_org_id=18&lang=US

OCM Sınavına girebilmeniz için aşağıdaki ön gereksinimleri tamamlamanız gerekmektedir. OCM sınavı 2 gün süren ve tamamen uygulamalı bir sınavdır.

Linux komut bilgisi
11g OCP Sertifikası
SQL bilgisi
Oracle veritabanı teknolojileri üzerine tecrübeli olmak gerekiyor.

Ayrıntılı bilgi için;

http://education.oracle.com/pls/web_prod-plq-dad/db_pages.getCourseDesc?dc=D61731GC10&p_org_id=18&lang=US

Reklamlar

Stajokulu 2011 Oracle Eğitim Sonrası…

Merhaba Arkadaşlar,

Stajokulunda 7 Temmuz’da başladığım Oracle seminer serimi 1,5 aylık bir süre sonunda tamamlamış bulunuyorum. Haftada 2’şer saat süre ile sizlerle yaptığım söyleşilerle ORACLE’ı tanımaya çalıştık. Oracle bilmenin bir ayrıcalık olduğunu gördük. Oracle Mimarisi ile başladığımız seminer serimize, veritabanı objelerini uygulamalı tanıyarak devam ettik. Bu sırada DBA kariyeri üzerine sohbetlerimiz oldu. DBA olmak, Oracle DBA olmak üzerine detaylı bilgi paylaşımında bulunduk. Sonra ileri seviye konulara doğru ilerledik. Oracle RAC ne olduğunu, bize ne yarar sağladığı hakkında konuştuk. Veritabanı kilitleri, okuma tutarlılığı hakkında uygulamalı beyin cimnastiği yaptık 🙂  ve yedek alma, felaket kurtarma çözümü hakkında bilgi sahibi olduk.

Her ders, bir önceki dersin özetini aktarmaya çalıştım. Günlük hayattan örneklerle mimarimizi aklımızda canlandırmaya çalıştık. Tüm bunların yanında sosyal anlamda da nacizane tecrübelerimi sizlerle paylaşmaya çalıştım. Profesyonel iş hayatında olan bitenden CV hazırlamaya kadar… 🙂 Hatta iyi bir konuşmacıda olması gerekenleri bile 🙂  Kısa sürede vaktimizi dolu dolu geçirmenin keyfini yaşıyorum 🙂

Üniversitede veritabanı dersi alan arkadaşlarımız olmasına rağmen Oracle ile ilk defa tanışan arkadaşlarımız oldu. Bizi bir araya getiren stajokuluna teşekkür ediyorum. Sizinle vakit geçirmem için bana izin veren değerli müdürümede özellikle teşekkür ediyorum.  Oracle dersime ilgi gösteren ve heyecan ile her hafta derse katılan arkadaşlarıma da ayrıca teşekkür etmek istiyorum.

Bu heyecanınızın hiç bitmemesi dileğiyle…

Seminer sunumlarına aşağıdaki linklerden ulaşabilirsiniz. Uygulamalı yaptığımız çalışmalar için video görüntülerini sizlerle yakın zamanda paylaşacağım.

DBA olmak! Oracle DBA olmak!

DBA olmak! Oracle DBA olmak!

Merhaba Arkadaşlar,

Şimdiye kadar hep teknik makale yazdım, yazıyorum ve yazacağım. Ama bu yazımda biraz teknikten çıkıp, sosyal anlamda bir yazı yazmak istiyorum.

Bu yazımda, DBA olmaktan bahsedeceğim. DBA olmak için izlememiz gereken yoldan, çıkmamız gereken merdivenlerden bahsedeceğim sizlere…Üniversite yıllarında yazılımla yoğun ilgilenen, üniversiteden sonra sistem uzmanı olarak iş hayatına atılan ve sistem uzmanlığından Oracle DBA’liğe uzanan bir serüvenden bahsedeceğim sizlere…

DBA (Database Administrator) genel bir kavramdır. Türkçe açılımı “veritabanı yöneticisi” dir. Microsoft SQL Server yönetimi yapan kişilere veritabanı yöneticisi denilir, IBM DB2 yönetimi yapan kişilerede, SAP Sybase ASE yönetimi yapan kişilerede… Ama bir DBA vardırki çok daha özeldir. Oracle DBA!

Yeni başlayan arkadaşlarıma hep şu örneği veririm. Bir çorba yaptığımızı düşünelim. Çorbamızın tadı güzel olsun diye biraz tuz birazda baharat atarız değil mi? Şimdi bunu kendimize uyarlayalım. Biraz sistem bilgisi ve birazda yazılım bilgisini tencereye atıp karıştırdığımızda ve bunuda çeviklik ile birleştirdiğimizde ortaya çıkan nefis tatdır Oracle DBA 🙂 Biraz sistem bilgisi gerekir dedim. Çünkü veritabanı bir işletim sistemi üzerinde çalışır. Bu durumda işletim sistemi hakkında biraz fikir sahibi oluyor olmamız gerekir. Araba ehliyeti gibi. Siz motor ustası olmasanızda ehliyet alabilmek için motordan biraz anlıyor olmanız lazım. Motoru söküp tamir edecek kadar bilginiz olmasına gerek yok. Ama arıza durumunda problemin kaynağını tespit edebilmek adına biraz bilgi sahibi olmalısınız. Biraz da yazılım bilgisi gerekir dedim. Çünkü yazılımcı arkadaşlarımızın yazmış olduğu uygulama veritabanımızla çalışıyor. Veritabanımızdaki probleme sebep olan sorguyu tespit edip, olması gereken sorgu hakkında yazılımcı arkadaşımızı bilgilendirmek de bizim görevimizdir.

Peki Oracle DBA olmak isteyen neleri göze almalıdır? Oracle DBA olmaya karar verdiyseniz okumaktan sıkılmamalısınız. Çünkü okumanız gereken okadar çok konu varki… Ama hepside inanın birbirinden zevkli konular. Öğrenmeyi sevmelisiniz. Hatta öğretmeyide 🙂 Yenilikçi olmalısınız. Meşhur ORA hatalarıyla boğuşmaktan sıkılmamalısınız. Mücadeleci olmalısınız. Azimli ve kararlı olmalısınız. Risk almayı sevmelisiniz. Sürekli beyin cimnastiği yapmalısınız. Matematiği sevmelisiniz. Byte, kilobyte, megabyte, terabyte hesapları sizin için kaçınılmazdır 🙂 Yeri geldiğinde soğuk kanlı olmalı, stresden şikayet etmemelisiniz. F5 veya F9 sihirli tuşlarına basmaktan korkmamalı ama basarkende emin olmalısınız. İngilizceniz iyi seviyede olmalı. Teknik makaleleri takip etmelisiniz.

Gözünüz korktumu yoksa arkadaşlar? Sakın gözünüz korkmasın. Oracle DBA olmak kadar zevkli bir iş yok bence. Her işin başı eğitimdir. Oracle DBA olmaya karar verdiğimiz zaman almamız gereken üç temel eğitim vardır.

  1. Introduction to SQL
  2. Database Administration I
  3. Database Administration II

Bu üç eğitimin yanında tahiti.oracle.com dan ücretsiz elde edebileceğimiz “Oracle Database Concepts” dokümanını anlayarak okumamız gerekiyor. Yukarıdaki üç eğitimin herbirinin bir sınavı vardır. Birinci eğitimin sonunda tercihinize göre girebileceğiniz iki SQL sınavı vardır. 007 sınavı ile sadece SQL sınavından geçmiş olacaksınız. 047 SQL expert sınavına girerseniz, hem SQL sınavından geçmiş olacaksınız hem de Oracle SQL Expert sertifikası almış olacaksınız. İkinci eğitimin sonunda gireceğiniz sınav ile OCA (Oracle Certified Associate) ve üçüncü eğitimin sonunda gireceğiniz sınav ile OCP (Oracle Certified Professional) ünvanlarını alarak dünya çapında Oracle bilginizi belgelemiş olacaksınız. Oracle’ın en üst ünvanı OCM (Oracle Certified Master) dir. OCM sınavı iki gün süren tamamen uygulamalı bir sınavdır. OCM sınavı Türkiye’de yapılmamaktadır. Bu sınava düzenli ve sıkı bir çalışmanın ardından Dubai,Amerika,Kore gibi ülkelerde girebilirsiniz. Bu sınavda bilgi yanında canlı sistemler üzerindeki tecrübenizde ön plana çıkmaktadır. Türkiye’de bu sertifikaya sahip bir kişi bulunmaktadır.

Oracle DBA olarak işe başladığınızda öğrenmeniz gereken ileri seviye konular vardır. Bunlar RAC Administration, Performance Tuning, Data Guard, Backup and Recovery gibi konulardır. Jonathan Lewis, Thomas Kyte, Julian Dyke, Richard Foote gibi Oracle üstadlarını takip etmek gerekiyor. İşe başladığınızda ustanız size ustalık belgesi verene kadar çıraklık yapacaksınız 🙂 Ustalık belgesini almak okadar da kolay değil. Unutmayın her insan önce emekler, iki ayağının üstünde dengede durmayı öğrenir, düşe kalka yürümeyi öğrenir, yürümeyi öğrenir ve nihayetinde koşmayı…Tüm bunlar sabır,azim ve zaman ister.

Oracle DBA olmaya karar verdiniz. Yukarıdaki temel eğitimleri aldınız. “Oracle Database Concepts” dokümanını anlayarak okudunuz. Oracle sertifikalarını alarak birkaç basamak daha çıktınız. Şimdi sıra bir usta bulmak ve onun çıraklığını yapmakta. Ustanın verdiği her işi eksiksiz yerine getirmek gerekiyor. “Ustam bana bir iş versede yapsam” düşüncesinin yanında, “ustam o işde bende çalışmak istiyorum!” demelisiniz. Yani proje peşinde koşturmalısınız. Projelerle boğuşurken piştiğinizi farkedeceksiniz.

Peki ne iş yapar Oracle DBA? Kısaca aşağıdaki işleri yapar ve aşağıdaki sorulara cevap arar:

– DBMS Kurulumları (Oracle kurulumları okadar kolay değil) – Hangi uygulamanın veritabanı kurulumu yapılacak? Veriler büyük mü olacak küçük mü? Online veritabanı mı? DSS veritabanı mı? OLTP veritabanı mı? Single Instance mı? RAC mı? RAC ise kaç node? Versiyonu ne olacak? Bu versiyonda bir BUG ile karşılaşırmıyım?

– İzleme (Monitoring) – Kim ne yapıyor? Kim kimi bekletiyor? Kim bekletiyor? Kim bekliyor? Neden bekliyor?

– Güvenlik (Security) – Veritabanımıza kimler bağlanıyor ve ne yapıyorlar?

– Olağan üstü durum merkezi kurulum ve yönetimi – Doğal afet sonucu veri merkezimizi (Data Center) tamamen kaybedersek ne yapacağız? En kısa sürede ayağa kalkabilecekmiyiz? Ayağa kalktık peki nekadar veri kaybedebiliriz?

– Performance Tuning – Ne yapsamda veritabanı daha efektif çalışsa?

– SQL Tuning – Bu kötü SQL kime ait? Bu böyle çalışmamalı. Yanlış index kullanıyor.

– Yedekleme (Backup and Recovery) – Aldığımız yedek doğru mu? Ya veritabanı göçerse? A planım ne olmalı? B planım? C planım?

– Sürüm Yükseltme (Upgrade) – 11g upgrade yapmalımıyız? Yaparsak artılarım ne olur? Uygulamalarım etkilenir mi? Ne kadar hizmet kesintim olur?

7/24 desteğide göz ardı etmemek gerek. Hazır! Daima hazır! Kim? DBA! 🙂

Üniversite öğrenci yıllarında yazılımla yoğun ilgilenen, üniversiteden sonra sistem uzmanı olarak iş hayatına başlayan ve kariyerine Oracle DBA olarak devam eden biri olarak, yukarıda yazdıklarımı harfiyen uyguladım.

Oracle DBA olmaya karar veren veya verecek olan arkadaşlarıma nacizane yol göstermek amacıyla bu makaleyi yazdım. Unutmayın başarının sırrı parmaklarınızın ucunda… 🙂

Faydalı olması temennisiyle…

Talip Hakan Öztürk

RMAN Veri Kurtarma Yöntemleri

Merhaba,

Bu yazımda  RMAN ile alınan yedekten geri dönme yöntemlerimizi madde madde anlatacağım.

1-   Bütün datafile lar kaybedildiğinde, tüm yedeğin geri dönülmesi için;

SQL> startup mount;
RMAN> restore database;
RMAN> recover database;
SQL> alter database open;

 2-   Bir tablespace kaybedildiğinde, kaybedilen tablespace in geri dönülmesi için;

 SQL> alter tablespace users offline;
RMAN> restore tablespace users;
RMAN> recover tablespace users;
SQL> alter tablespace users online;

Tablespace offline yapılamazsa aşağıdaki yol izlenmelidir.

$ sqlplus “/ as sysdba”
SQL> shutdown abort;
SQL> startup mount;
$ rman target / catalog_user/catalog_user_password@catalogdb
RMAN> restore tablespace users;
RMAN> recover tablespace users;
SQL> alter database open;

3-   Bir datafile kaybedildiğinde, kaybedilen datafile ın geri dönülmesi için;

SQL> alter database datafile '/oracle/oradata/users.dbf' offline;
RMAN> restore datafile '/oracle/oradata/users.dbf'
RMAN> recover datafile '/oracle/oradata/users.dbf'
SQL> alter database datafile '/oracle/oradata/users.dbf' online;

Datafile offline yapılamazsa aşağıdaki yol izlenmelidir.

$ sqlplus “/ as sysdba”
SQL> shutdown abort;
SQL> startup mount;
$ rman target / catalog_user/catalog_user_password@catalogdb
RMAN> restore datafile '/oracle/oradata/users.dbf';
RMAN> recover datafile '/oracle/oradata/users.dbf';
SQL> alter database open;

4-   Controlfile lar kaybedildiğinde, kaybedilen controlfile ın geri dönülmesi için;

$ sqlplus “/ as sysdba”
SQL> shutdown abort;
SQL> startup nomount;
$ rman target / catalog_user/catalog_user_password@catalogdb
RMAN> set dbid = 3970640872;
RMAN> restore controlfile;
SQL> alter database mount;
SQL> alter database open;

Controlfile yedekten geri dönüldükten sonra, veritabanının açılması esnasında aşağıdaki gibi ORA-01589 hatası ile karşılaşılabilir.

ORA-01589: must use RESETLOGS or NORESETLOGS option for database open

Bu durumda aşağıdaki işlemler yapılmalıdır.

SQL> shutdown abort;
SQL> startup mount;
$ rman target / catalog_user/catalog_user_password@catalogdb
RMAN> recover database;
SQL> alter database open resetlogs;
RMAN> reset database;

Veritabanı “resetlogs” ile açıldığı için controlfile daki SCN numarası sıfırlanacaktır. Bu durumda önceki alınan yedekler geçersiz olacaktır. Yeniden full yedek alınması zorunludur.

5-   Özel bir durum gerekebilir. Ve bizden belirli bir zamana dönmemiz istenebilir. Belirli bir zamana dönmek için 3 yöntem mevcuttur. Zamana göre, Arşiv sıra nosuna göre ve SCN (System Change Number) ye göre incomplete recovery (Belirli bir zamana dönme işlemi) yapabiliriz.

            A.   Zamana göre (Time-Based) incomplete recovery;

$ sqlplus "/ as sysdba"
SQL> shutdown abort;
SQL> startup mount;
$ rman target / catalog_user/catalog_user_password@catalogdb
RMAN> restore database until time "to_date('06/05/11 12:0:00','DD/MM/YY HH24:MI:SS')";
RMAN> recover database until time "to_date('06/05/11 12:0:00','DD/MM/YY HH24:MI:SS')";
SQL> alter database open resetlogs;

           B.   Sistem değişiklik numarasına göre (SCN-Based) incomplete recovery;

$ sqlplus "/ as sysdba"
SQL> shutdown abort;
SQL> startup mount;
$ rman target / catalog_user/catalog_user_password@catalogdb
RMAN> restore database until scn 1000;
RMAN> recover database until scn 1000;
SQL> alter database open resetlogs;

             C.   Arşiv dosyası sequence numarasına göre incomplete recovery;

$ sqlplus "/ as sysdba"
SQL> shutdown abort;
SQL> startup mount;
$ rman target / catalog_user/catalog_user_password@catalogdb
RMAN> restore database until sequence 9923;
RMAN> recover database until sequence 9923;
SQL> alter database open resetlogs;

6-   Alınan yedekte arşiv dosyaları varsa ve belirli arşiv dosyalarının geri dönülmesi gerekirse;

$ rman target / catalog_user/catalog_user_password@catalogdb
RMAN> restore ARCHIVELOG FROM TIME 'SYSDATE-1' UNTIL TIME 'SYSDATE';

Ya da

RMAN> restore ARCHIVELOG FROM TIME "to_date('07/11/05 00:00:01','MM/DD/YY HH24:MI:SS')
UNTIL TIME 'SYSDATE';

7-   Herhangi bir datafile ın bir bloğunda corruption oluşursa aşağıdaki gibi bir hata alınır ve ilgili datafile ın ilgili bloğu aşağıdaki gibi kurtarılır.

Hata:

ORA-01578: ORACLE data block corrupted (file # 8, block # 13)

ORA-01110: data file 8: ‘/oracle/oradata/users.dbf’

Kurtarmak için:

$ rman target / catalog_user/catalog_user_password@catalogdb
RMAN>blockrecover datafile 8 block 13;

         Kurtarmak için özel bir backup set verebiliriz;

# backupset den kurtarma
RMAN> BLOCKRECOVER DATAFILE 8 BLOCK 13 DATAFILE 2 BLOCK 19 FROM BACKUPSET;
# image copy den kurtarma
RMAN> BLOCKRECOVER DATAFILE 8 BLOCK 13 DATAFILE 2 BLOCK 19
      FROM DATAFILECOPY;
# "FULL" taglı olan backupset den kurtarma
RMAN> BLOCKRECOVER DATAFILE 8 BLOCK 13 DATAFILE 2 BLOCK 199
       FROM TAG = FULL;

Backup esnasında veya “Backup Validate” komutuyla RMAN bulduğu corrupted blokları V$DATABASE_BLOCK_CORRUPTION viewına yazar. Corrupt olan blok recover edildiğinde RMAN otomatik bu view ı günceller. Geçmişe yönelik tüm corruption listesi V$BACKUP_CORRUPTION ve V$COPY_CORRUPTION viewlarından bakılabilir. Aşağıdaki komut çalıştırıldığında RMAN,  V$DATABASE_BLOCK_CORRUPTION viewında bulunan tüm corrupted blokları recover eder.

RMAN>BLOCKRECOVER CORRUPTION LIST
  RESTORE UNTIL TIME 'SYSDATE-10';

8-   2. veri dosyamızda problem olduğunda, 2. veri dosyamızı “image copy” yedeğe switch etmek için;

RMAN>sql ‘alter database datafile 2 offline’;
RMAN>switch datafile 2 to copy;
RMAN>recover datafile 2;
RMAN>sql ‘alter database datafile 2 online’;

Sağlam yedekli, problemsiz veritabanlarınız olması dileğiyle 🙂 …

Talip Hakan Öztürk

Oracle UNDO Parametrelerinin Optimize Edilmesi

Merhaba Arkadaşlar,

Bu makale ile ORACLE ayrılmaz parçası UNDO muzu nasıl optimize edebiliriz sorusunun cevabını inceliyor olacağız.

Veritabanında oluşan transaction undo bilgileri commit veya rollback yapılana kadar rollback segmentlerinde tutulmaktadır. Bazen veritabanındaki uzun süren sorgularımız “ORA-01555:Snapshot Too Old” hatası ile karşılaşmaktadır. Bu UNDO parametrelerimizin doğru konfigüre edilmediğinden kaynaklanmaktadır.  UNDO_RETENTION parametresiyle, biz veritabanının commit sonrası ne kadar undo verisini tutacağına karar veririz. Bu parametre default 900 sn gelmektedir. Sonradan bu değeri yükseltmek bizim elimizdedir. 900sn(15 dk) değerini yükseltmek doğru orantılı olarak daha fazla space gerektirecektir. Rollback segmentlerini tanımlamak ve yönetmek zahmeti yerine, undo tablespace i oluşturmak ve undo yönetimini oracle a bırakmak oldukça kolaydır. UNDO_MANAGEMENT parametresini AUTO olarak set ettiğinizde ORACLE gerisini kolay bir şekilde halledecektir. “ORA-01555:Snapshot Too Old” hatasından kurtulmanın yolları UNDO_RETENTION parametresi ve UNDO Tablespace büyüklüğünün doğru konfigüre edilmesinden geçmektedir 🙂

Peki UNDO_RETENTION süremiz ne kadar olmalıdır? Bu sorunun cevabı UNDO Tablespace büyüklüğünüzle orantılıdır. UNDO Tablespace için diskinize ve verilerinizin kritikliğine göre bir alan verebilirsiniz. Bu büyüklüğe görede optimum süreyi hesaplayarak UNDO_RETENTION parametresini set etmelisiniz.

Şimdi biraz matematiksel hesap yapalım. Önce Undo tablespace büyüklüğümüzü aşağıdaki sorgu ile tespit edelim;

SELECT SUM(a.bytes) as UNDO_SIZE
  FROM v$datafile a,
       v$tablespace b,
       dba_tablespaces c
 WHERE c.contents = 'UNDO'
   AND c.status = 'ONLINE'
   AND b.name = c.tablespace_name
   AND a.ts# = b.ts#;

Sonra saniye başına undo block sayısını bulalım;

SELECT MAX(undoblks/((end_time-begin_time)*3600*24)) as UNDO_BLOCK_PER_SECOND
  FROM v$undostat;

Son olarak veritabanı block size ımızı bulalım;

SELECT TO_NUMBER(value) as DB_BLOCK_SIZE
 FROM v$parameter
WHERE name = 'db_block_size';

Şimdi elde ettiğimiz üç sonuca göre optimum UNDO_RETENTION süremizi hesaplayacağız. Kullanacağımız formül şu şekilde;

 UNDO RETENTION TIME=(UNDO SIZE)/(DB BLOCK SIZE × UNDO BLOCK PER SECOND)

 Yukarıda hesapladığımız değerleri bu formülde yerlerine yerleştirdiğimizde optimum UNDO_RETENTION süremizi bulmuş olacağız.

Şimdi olaya tersden bakalım. Yeteri kadar disk yerimiz ve kritik veritabanı işlemlerimiz varsa, commitlenmiş undo verilerimizi tutmak için  UNDO RETENTION süremizi 1 saat (3600 sn) olarak düşünüyorsak optimum UNDO büyüklüğümüzü yukarıda vermiş olduğum formülden yararlanarak hesaplayabiliriz. Bu durumda formülümüz;

UNDO SIZE=UNDO RETENTION TIME × DB BLOCK SIZE × UNDO BLOCK PER SECOND

Son olarak hepsini tek bir sorgu ile çözelim. Optimum UNDO_RETENTION süresini bulmak için;

SELECT d.undo_size/(1024*1024) as UNDO_SIZE,
       SUBSTR(e.value,1,25) as UNDO_RETENTION,
       ROUND((d.undo_size / (to_number(f.value) *
       g.undo_block_per_sec))) as OPTIMUM_UNDO_RETENTION
  FROM (
       SELECT SUM(a.bytes) undo_size
          FROM v$datafile a,
               v$tablespace b,
               dba_tablespaces c
         WHERE c.contents = 'UNDO'
           AND c.status = 'ONLINE'
           AND b.name = c.tablespace_name
           AND a.ts# = b.ts#
       ) d,
       v$parameter e,
       v$parameter f,
       (
       SELECT MAX(undoblks/((end_time-begin_time)*3600*24))
              undo_block_per_sec
         FROM v$undostat
       ) g
WHERE e.name = 'undo_retention'
  AND f.name = 'db_block_size';

Belirleyeceğimiz UNDO RETENTION süresine göre optimum UNDO büyüklüğünü bulmak için;

SELECT d.undo_size/(1024*1024) as UNDO_SIZE,
       SUBSTR(e.value,1,25) as UNDO_RETENTION,
       (TO_NUMBER(e.value) * TO_NUMBER(f.value) *
       g.undo_block_per_sec) / (1024*1024)
      as NEEDED_UNDO_SIZE"
  FROM (
       SELECT SUM(a.bytes) undo_size
         FROM v$datafile a,
              v$tablespace b,
              dba_tablespaces c
        WHERE c.contents = 'UNDO'
          AND c.status = 'ONLINE'
          AND b.name = c.tablespace_name
          AND a.ts# = b.ts#
       ) d,
      v$parameter e,
       v$parameter f,
       (
       SELECT MAX(undoblks/((end_time-begin_time)*3600*24))
         undo_block_per_sec
         FROM v$undostat
       ) g
 WHERE e.name = 'undo_retention'
  AND f.name = 'db_block_size';

Veritabanımızın son açıldığı andan itibaren kaç ORA-1555 hatası aldığını merak ediyorsanız aşağıdaki sorgu ile bulabilirsiniz.

  select '"ORA-01555 (Snapshot too old)" hata sayısı: ' 
  || sum(ssolderrcnt)
  from v$undostat;

Optimum değerlerimizle sağlıklı çalışan veritabanlarınız olması dileğiyle 🙂

Talip Hakan ÖZTÜRK