10 Ekim 2013 Perşembe

Fiziksel Standby Database'in Raporlama ve Test İçin Kullanılması

   Oracle dataguard, restore point ve flashback database özelliği kullanılarak bir fiziksel veritabanı okuma/yazma(read/write) modda açılabilir. Açılan veritabanı test ,
raporlama vb. sistemler için kullanılabilir. Bu kullanımın ardından tekrar standby moda çekilelebilir.
Bu işlemi aşağıdaki adımları izleyerek yapabiliriz;

1.Fiziksel Standby Veritabanında Yapılması Gerekenler
 a. Flash recovery alananının ayarlanması gerekir bu işlem aşağıdaki şekilde yapılır.
    SQL> ALTER SYSTEM SET DB_RECOVERY_FILE_DEST_SIZE=50G;
    SQL> ALTER SYSTEM SET DB_RECOVERY_FILE_DEST='+RECOVER';
 b.Stanby veritabanını log apply moddan çıkartıp, guarantee(garantili) restore point oluşturulur.
    SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;
    SQL> CREATE RESTORE POINT before_dr GUARANTEE FLASHBACK DATABASE;

2.Primary(birincil) veritabanında yapılması gerekenler
 a. Mevcut logların arşivlenmesi sağlanır
    SQL> ALTER SYSTEM ARCHIVE LOG CURRENT;
 b. Stanby veritabanına log gönderen servis defer moda çekilir.
    SQL> ALTER SYSTEM SET LOG_ARCHIVE_DEST_STATE_3=DEFER;

3. Stanby veritabanının aktifleştirilmesi
 a.stanby database aktifleştirilmesi aşağıdaki şekilde yapılır
   SQL> ALTER DATABASE ACTIVATE STANDBY DATABASE;
 b.stanby veritabanının koruma modunu maksimum performans olacak şekilde aşağıdaki şekilde değiştirilir.
   SQL> STARTUP MOUNT FORCE;
   SQL> ALTER DATABASE SET STANDBY DATABASE TO MAXIMIZE PERFORMANCE;
   SQL> ALTER DATABASE OPEN;


3. Aktifleştirilen veritabanının standby moda dönüştürülmesi.
   SQL> STARTUP MOUNT FORCE;
   SQL> FLASHBACK DATABASE TO RESTORE POINT before_dr;
   SQL> ALTER DATABASE CONVERT TO PHYSICAL STANDBY;
   SQL> STARTUP MOUNT FORCE;
4. Standby veritabanının tekrar recovery moda çekilmesi
   SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION;

5. Primary veritabanından log gönderiminin aktifleştirilmesi
   SQL> ALTER SYSTEM SET LOG_ARCHIVE_DEST_STATE_3=ENABLE;


#standby taraftaki listener, listener123'ü ethernet aktif edildikten sonra aç



Falshback Database'in Açılması
Falashback database bir veritabanının zaman içerisinde kaynakların elverdiği ölçüde ileri geri alınmasına yardımcı olan, bu sayede kullanıcı hatalarına karşı bir önlem

olarak kullanılan bir teknolojidir. Genellikle veri silinmesi(drop,tuncate, delete) durumlarında kaybolan verileri çok basit şekilde geri getirmeye yardımcı
olur.Flashback database teknolojisi datafile silinmesine bir önlem değildir. Flashback logları controlfile'in recreate edildiği durumlarda da işe yaramaz.
1. Veritabanı açıksa kapatılır ve mount modda açılır.
SQL> SHUTDOWN IMMEDIATE;
SQL> STARTUP MOUNT;
2. Eğer istenirse flashback retention süresi değiştirilebilir.
SQL> ALTER SYSTEM SET DB_FLASHBACK_RETENTION_TARGET=4320; # 3 gün,defaultu 1 gündür(1440) dakika
3. flashback database aktifleştirilir
SQL> ALTER DATABASE FLASHBACK ON;


Bir tablespace için flashback loglama özelliğini aşağıdaki şekilde devre dışı bırakılabilir.
SQL> ALTER TABLESPACE tbs_3 FLASHBACK OFF;
ya da devre dışıysa aşağıdaki şekilde aktifleştirilebilir
SQL> ALTER TABLESPACE tbs_3 FLASHBACK OFF;

örnek flashback komutları;
FLASHBACK DATABASE TO TİMESTAMP SYSDATE-2;
FLASHBACK DATABASE TO RESTORE POİNT ‘before_dr’;
FLASHBACK DATABASE TO SCN 1012568;
4. Flashback database in kapatılması
Veritabanı mount modda açılır ve aşağıdaki komut çalıştırılır.
SQL> ALTER DATABASE FLASHBACK ON;


Normal Ve Garantili Restore Point Oluşturma
restore poin ; flashback açık olan veritabanlarında bir isimle belirlenen noktaya kolayca dönmek için kullanılan bir teknolojidir. guarantee ve normal olmak üzere 2

şekilde oluşturulabilir. normal şekilde oluşturulduğu zaman o noktaya geri dönebilmenin garantisi yoktur. eğer DB_RECOVERY_FILE_DEST_SIZE alanı dolarsa varolan
logların üzerine yazılır ve normal yaratılan restore point ler bozulabilir. Bir restore point in hiç bir şekilde bozulmasını istemiyorsanız bunu guarantee restore
point olarak oluşturmak gerekir.
Normal restore point oluşturma;
SQL> CREATE RESTORE POINT before_upgrade;
Restore point created.
Guarantee restore point oluşturma

select flashback_on from v$database;
SQL> CREATE RESTORE POINT before_upgrade GUARANTEE FLASHBACK DATABASE;
Restore point created.

Restore Point'lerin listelenmesi
SQL> SELECT NAME, SCN, TIME, DATABASE_INCARNATION#,
        GUARANTEE_FLASHBACK_DATABASE,STORAGE_SIZE
        FROM V$RESTORE_POINT;
sorgusuyla tüm restore point'ler veya aşağıdki sorguyla Guarantee restore point'ler listelenebilir.
SQL> SELECT NAME, SCN, TIME, DATABASE_INCARNATION#,
        GUARANTEE_FLASHBACK_DATABASE, STORAGE_SIZE
        FROM V$RESTORE_POINT
      WHERE GUARANTEE_FLASHBACK_DATABASE='YES';


Restore Point'in silinmesi
Aşağıdaki şekilde yapılır.
SQL> DROP RESTORE POINT before_app_upgrade;
Restore point dropped.

4 Ekim 2013 Cuma

ARCHIVELOG moda geçiş ve BACKUP yapılandırması

Oracle veritabanında 2 çeşit bakup türü vardır.Online ve Offline alınan backuplar. Offline alınan backuplarda olası bir durumda sistemi son ana döndüremeyip veri kayıplarına neden olabiliriz.O yüzden "sıfır veri kaybı mantığı ile yola çıkacaksak, muhakkak online backup almak durumundayız. Bu da db imizin ARCHIVELOG mod da çalışmasıyla mümkündür. Archivelog modda yapılan işlem aslında basit anlatımla, db üzerinde yapılan değişiklikler, redolog dosyaları üzerinde tutulur.Bu tutulan logların belli aralıklarla arşivlendiği moda, ARCHIVELOG mode deniyor.Veritabanını ARCHIVELOG moda aldığımızda db üzerinde ayrıca bir kaynak harcayacağından, db imizde yavaşlama olabilir. Güçlü bir sistem altyapısına sahip isek, bu yük hissedilmeyecektir. Db' imizin ARCHIVELOG modda olup olmadığını şu şekilde sorgulayabiliriz. 
SELECT LOG_MODE FROM v$database;Sonuç ARCHIVELOG değil de NOARCHIVELOG iseARCHIVELOG moda almak için aşağıdaki adımlar sırasıyla uygulanır;1) shutdown immeidate                                                    //db i kontrollü kapatırız   Db imizi ARCHIVELOG moda aldıktan sonra işimiz bitmiyor. Hemen rman backup için backup planı çıkarıyoruz. Kurumumuza uygun olan backup planını belirleyip, bunu sisteme uyarlamanız gerekiyor.sonuç: ARCHIVELOG ise kullanılıyor, değil ise NOARCHIVELOG olarak görülecektir.Eğer NOARCHIVELOG modda ise şu şekilde ARCHIVELOG moda alabiliriz.2) startup mount                                                                   //mount durumuna alırız3) alter database archivelog / alter database noarchivelog         //archivelog moduna alırız4) alter database open                                                           //db imizi açarız.bu genelde küçük boyutlu ve kısa sürede bitecek databaselerde her gün full backup şeklinde, çok daha büyük database lerde haftanın ilk günü full, sonraki günleride incremental backup şeklinde alabiliriz.    Şimdi burada , her gün full backup alan ve bu backupların son 5 ini disk üzerinde tutan bir backup senaryosunu yapılandıracağız.


Öncelikle sisteme bağlanıp RMAN scriptimizi yazıyoruz.
login as: root
root@192.168.1.1's password:  *****
 [root@oracle01~]# su – oracle
[oracle@oracle01~]# cd /oracle/scripts/
oracle@oracle01~]#vi rman_backup_todisk_full.sh
rman target / <<EOF
run {
backup database filesperset 4 format "/backup/DB_%d.%s.%t.%p.dbf";
sql 'alter system archive log current';
backup format '/backup/ARC_%d_%s_%t_%p.arc' archivelog all not backed up 1 times skip inaccessible;
delete noprompt archivelog until time 'sysdate-7' backed up 1 times to device type disk;
backup format '/backup/CTL_%s_%t_%p.ctl' current controlfile;
}

  Önce ESC tuşu sonra
  :wq! İle dosyamızı kaydedip çıkıyoruz.

Sıra geldi scriptimizi crontab’a eklemeye.

oracle@oracle01~]# crontab -e
Karşımıza açılan editöre aşağıdaki komut satırını ekliyoruz.
#backuplar                                                                         // job başlığı
0 18 * * * /oracle/admin/BISAR/scripts/full_rman.sh          // her gün saat 18 de bu job çalışsın

Sıra geldi değişkenlerin ve loğ mekanizmasının atanmasına;
Bunun için de bir sh dosyasına ihtiyacımız var.
oracle@oracle01~]# cd /oracle/admin/MASCADB/scripts/
oracle@oracle01~]# vi full_rman.sh
  

#!/bin/bash
export ORACLE_BASE=/oracle
export ORACLE_SID=MASCADB
export ORACLE_HOME=/oracle/product/11.2.0/db_1
PATH=$PATH:$HOME/bin:$ORACLE_HOME/bin
export PATH
find /backup/* -mtime +4 –exec rm {} \;                                 // Bugünden önceki 4 backubu siler, bugün ile 5 olacak     
/oracle/admin/MASCADB/scripts/rman_backup_todisk_full.sh > /oracle/admin/MASCADB/scripts/full_rman.tmp

#mailx -s "RMAN: $CUST $SID FULL" $DBA < /masca/log_rman_full_db.tmp



Artık sistemimiz günlük olarak online RMAN backup alacaktır.
Burada bir önemli konuya daha dikkat çekmek istiyorum;
Sistemi ARCHIVELOG moda aldığımız için db sürekli ARCHIVELOG üretecek ve diskte belirli bir yer tutacaktır.

Özellikle Update ve insert işlemlerinin yoğun olduğu işlemlerin yapılması sırasında üretilen archivelog ların boyutu,
normal zamandaki işlemlere göre çok daha fazla olacak ve diskte daralmalara sebep olacaktır. Eğer diskte yerimiz yeterince yok ise, sistemin durması bile kaçınılmaz olacaktır. Bunu önlemenin yolu, işlem sırasında 
şu adımları izlemektir;


>root
>password :\..../

>su - oracle

export ORACLE_SID=MASCADB

>rman
RMAN>connect target/
RMAN>list archivelog all;
RMAN>delete noprompt archivelog until time 'sysdate-1';  ya da                                   
RMAN>delete noprompt archivelog all;      //tamamı
RMAN> crosscheck archivelog all;          
RMAN> delete expired archivelog all;