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;       

27 Eylül 2013 Cuma

SQL TRACE

   Bir session’ın çalıştırdığı sqlleri Enterprise Manager veya Toad gibi toollarla 
her zaman görmek mümkün olmuyor. Kesin olarak görmek ve performans noktaları 
hakkında detaylarını öğrenmek istiyorsanı sql trace açmanız gerekir. Bunu farklı 
şekillerde yapabilirsiniz.
Bunun için öncelikle session hakkında bazı bilgileri aşağıdaki sorguyla alabilirsiniz.
Select pid,spid, s.sid,s.serial#
from gv$process p, gv$session s
where p.addr = s.paddr
and s.sid = 2105;
pid spid serial#
52 32362 3801
Sonra sql trace açmak için 2 yolunuz var;

1. oradebug; oldukça basit ve kullanışlı bir yöntem bunun için;
sqlplus / as sysdba –login olunur
oradebug setorapid 52 –pid set edilir
oradebug event 10046 trace name context forever, level 12 –trace açılır, leveller 4,8,12 olabilir
oradebug tracefile_name –yazdığı dosya görüntülenir
/u01/app/oracle/admin/RAC/udump/rac1_ora_32362.trc
exit
Sonra;
tail -100f /u01/app/oracle/admin/RAC/udump/rac1_ora_32362.trc ile dosyanın içeriği görüntülenir
veya 
tkprof /u01/app/oracle/admin/RAC/udump/rac1_ora_32362.trc
          output = test
ile dosya formatlanarak test isimli dosya okunabilir.
trace’i kapatmak için;
oradebug setorapid 52 –pid set edilir
oradebug event 10046 trace name context off –trace kapatılır
komutu sqlplusdan çalıştırılabilir.

2. dbms_monitor paketi kullanılabilir.Bunun için;
exec dbms_monitor.session_trace_enable(2105,3801,TRUE,FALSE);
–3. parametre waits, 4. parametre bind değişkenler — şeklinde trace açlılır
üreteceği trace dosyası udump dizininde oracle_sid_ora_spid.trc formatındadır.
Sonrasında 1. adımdakine benzer şekilde tkprof ile dosya formatlanarak içeriği incelenebilir.

Trace’i kapatmak için
exec dbms_monitor.session_trace_disable(2105,3801);
komutu sqlplusdan çağrılabilir.



Alıntıdır:

Standby Veri tabanında Fark(GAP) Problemi Çözme

Standby veritabanınız primary veritabanından geri kalmışsa(gap) önünüzde 2 seçenek var.
1. Elinizde o aradaki tüm archiveloglar varsa bunları stanby veritabanına taşıyarak bu farkı kolayca kapatabilirsiniz.
2. Eğer archiveloglardan bir kısmına ulaşamıyorsanız bu gap’i kapatmak için production veritabanından incremental backup alıp , alınan backup’ı standby’ apply ederek bu farkı kapatabilirsiniz.

Bunun adımları aşağıdaki gibidir;
1.standby veritabanı ve primary veritabanı için son scn numaralarını belirle. Bunu aşağıdaki şekilde yapabilirsiniz.
SQL>select current_scn from v$database;
Benim testimde production ve standby için aşağıdaki şekilde.
standby :11657291913
production:11697000123
Eğer isterseniz bu scn’nin hangi zamana denk geldiğini aşağıdaki şekilde görebilirsiniz.
select scn_to_timestamp(11657291913) from dual;

2. production veritabanından standby’ın kaldığı noktadan sonrası için incremental backup al. Örnek
run { 
allocate channel a1 type disk format ‘/backup/%U.rmb’; 
backup incremental from scn 11657291913 database;
release channel a1;
}

3. Bu alınan yedeği scp /backup/ standby_ip:/restore_location/ olacak şekilde standbyda bir lokasyona taşı.
Benim testimde restore_location=/u01/app/oracle/backup

4.Standby veritabanına taşınan yedeği tanıt.Bunun için
rman target /
RMAN> CATALOG START WITH ‘/u01/app/oracle/backup’;
5. Standby veritabanını recover et. Bu biraz zaman alabilir.
RMAN> RECOVER DATABASE NOREDO;
6.Primary veritabanından controlfile yedeği al ve stanby veritabanına taşı.
RMAN> BACKUP CURRENT CONTROLFILE FOR STANDBY FORMAT ‘/backup/backupcontrol.ctl’;
daha sonra
scp /backup/backupcontrol.ctl standby_ip:/restore_location/backupcontrol.ctl

7. Stanby veritabanını kapat ve nomount modda aç.
RMAN> shutdown
RMAN> startup mount;

8. Standby veritabanında controlfile’i backuptan restore et
RMAN> RESTORE STANDBY CONTROLFILE FROM ‘/restore_location/backupcontrol.ctl’;

9. Standby veritabanını kapat ve mount modda aç
RMAN> SHUTDOWN;
RMAN> STARTUP MOUNT;

10. Bu aşamada standby controlfile mevcut datafile’leri görmeyebilir. Onları catalog komutuyla tanıtmak gerekebilir. Bunun için standby veritabanında;
RMAN> CATALOG START WITH ‘<data file location>’;
RMAN> SWITCH DATABASE TO COPY;

11. Standby veritabanında LOG_FILE_NAME_CONVERT parametresini kontrol et, düzgün şekilde yapılandırılmış olması gerekir.
örnek 
LOG_FILE_NAME_CONVERT=’+DATA/PROD’,'+DATA/DG’ gibi.

12.Stanby veritabanında varolan tüm loggroupları clear et
SQL> ALTER DATABASE CLEAR LOGFILE GROUP 1; 
SQL> ALTER DATABASE CLEAR LOGFILE GROUP 2; 
..
SQL> ALTER DATABASE CLEAR LOGFILE GROUP x;

13. Daha sonra standby veritabanını recovery modda aç
SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION;


Alıntıdır;



26 Eylül 2013 Perşembe

Sık Kullanılan RMAN Backup Komutları

  Rman ile ilgili türkçe olarak aşağıdaki isimlerini ve linklerini verdiğim değerli arkadaşlar güzel yazılar yazmışlar. Bu yazımda bende Rman’in sık kullanılan komutlarından bahsetmek istyorum. Fazla detaya girmeden kısa kısa bende bahsediyor olacağım.
Rman hakkında temel fikirler edinmek istiyor iseniz aşağıdaki arkadaşlarında yazısına da mutlaka göz atmanızı öneririm;

Rman konfigurasyonundan bahsettikden sonra birazda nasıl kullanıldığından bahsedelim;
Rman’ e connect olmak için (catalog kullanmıyorsanız) aşağıdaki komutu kullanabilirsiniz. ;
Rman target /
Alınmış olan backupları listemek istediğimizde ;
RMAN> list backup;
using target database control file instead of recovery catalog
List of Backup Sets
===================
BS Key Size Device Type Elapsed Time Completion Time
——- ———- ———– ———— —————
7 57.90M DISK 00:00:02 30-JUL-11
BP Key: 7 Status: AVAILABLE Compressed: NO Tag: TAG20110730T153716
Piece Name: C:\ORACLE\10G\FLASH_RECOVERY_AREA\PROD\BACKUPSET\2011_07_30\
O1_MF_ANNNN_TAG20110730T153716_7391WY5C_.BKP
….
….
Output içerisindeki kolonların ne ifade ettiğini açıklamaya çalışalım;
BS Key ; Her backupın bir backup key değeri vardır ve bu değer de unique’ dir.
Size = Alınan backup parçasının size’ ını ifade eder.
Device Type = Backupın diskemi yoksa tape’ mi alındığını ifade eder.
Elapsed Time = Backupın alınma süresini ifade eder.
Completion Time = Tamamlanma zamanı hakkında bilgi verir.
BP Key = Backup parçacığına ait key bilgisidir. Her backup setinin içindeki backuğ parçaları için bu değer unique’ dir.
Status = Backupın statüsü hakkında bilgi verir. Available, expired gibi.
Commpressed = Alınan backup normal mi yoksa sıkıştırılmış olarakmı alındığı bilgisini verir.
Tag = Backupın ismini verir.
Piece Name = Backupın alındığı dizindeki gerçek ismini verir.

Backup alınırken exclude edilmiş olan tablespace’ leri sorgulamak için;
Rman> show exclude

Rman’ e connect oldukdan sonra yapılan işlemlerin logunu tutmak istersek ;
$> rman target / log=c:\rman.log APPEND
$> rman target / trace=c:\rman.log APPEND
cmd>rman target / trace=c:\log.txt APPEND
cmd>rman target / log=c:\log.txt
rman logların kaydedilmesi ile ilgili olarak yukarıdaki örnekde APPEND kullanımı logun ezilmeden sürekli olarak sona eklenmesi şeklinde kaydeder, append kullanmaz iseniz her seferinde son log dosyasını kaydediyor olursunuz. Trace ile log arasındaki bir fark ise, log= sytanxını kullanırsanız rman de yapılan tüm işleri output olarak ekrana yazmaz loga yazar(dolayısıyla cronjoblarda kullanabilirsiniz), trace ise çıktıyı ekrana da yazar.

Backuplara isim vermek istersek tag etiketini kullanırız;
Backup database tag=db_full_backup;

Rman üzerinden alınmış olan tüm backupları sorgulamak için ;
List backup ;

Tüm backupları silmek için ;
Delete backup

Örnek olması açısından list komutunun kullanımı ile ilgili farklı kullanım şekilleri ;
list backup of database
list backup of controlfile ;
list backup of archivelog all;
list backup of tablespace users ;
list backup of datafile 1 ;
list backup of datafile “c:\oracle\oradata\prod\system01.dbf”;
list copy of tablespace “system”;
list copy of database archivelog from time=’sysdate-2’;
list backup summary ;

Obsolete statüsüne düşmüş olan backupları sorgulamak için ;
Report obsolete

Obsolete’ e düşmüş olan backupları silmek için;
Delete obsolete
Delete backupset 1; (sadece 1 nolu backupseti silmek istersek)
Delete obsolete redundancy 2;

Backup’ ın alınıp alınmamasına ihtiyaç olup olmadığını sorgulamak için ;
Report need backup

Örnek olması açısından report komutunun kullanımı ile ilgili farklı kullanım şekilleri ;
Report schema;
Report need backup days 3;
Report need backup redundacy 3 ;
Report unrecoverable;
Report need backup incremantal 3
Report need backup incremantal 3 database;
Report need backup days 3 tablespace system;
Report need backup redundacy 2; (2 seferdir backupı alınmayanlar)
Report need backup recovery of 3 days;
Report obsolete redundancy 2;

Expired olmuş backupları silmek için ;
CROSSCHECK BACKUP;
CROSSCHECK COPY;
DELETE EXPIRED BACKUP;
DELETE EXPIRED COPY;
delete obsolete;

Full database’ in backupını aldırmak istersek ;
Backup database; #bunun yerine level 0 backupda alınabilir.
backup incremental level 0 database;


İncremental backup almak istersek ;
İncremental backup aslında full backup alınmış olan noktadan sonra sadece değişen blockların backuplanması şeklinde yorumlayabiliriz. Birkaç tane farklı yöntemi var, konunun daha iyi anlaşılması için bir full backup scripti (her Pazar çalıştığını varsayalım)sonrasında da Pazar hariç her akşam çalışması gereken bir incremantal backup scripti ile örnekleyelim ;
– Her Pazar çalışması gereken full backup scriptimiz ;

run
{
crosscheck archivelog all;
delete expired archivelog all;
CONFIGURE DEFAULT DEVICE TYPE TO disk;
CONFIGURE DEVICE TYPE disk PARALLELISM 8;
backup incremental level 0 database filesperset=1 format ‘E:\rman_backup\%U’ section size 100G include current controlfile plus archivelog;
delete noprompt force archivelog all completed before ‘sysdate-1′;
}
EXIT;

– Pazar hariç her akşam çalışması gereken incremental backup scriptimiz ;
run {
crosscheck archivelog all;
delete expired archivelog all;
CONFIGURE DEFAULT DEVICE TYPE TO disk;
CONFIGURE DEVICE TYPE disk PARALLELISM 8;
backup incremental level 1 cumulative database filesperset=1 format ‘E:\rman_backup\%U’ section size 100G include current controlfile plus archivelog;
delete noprompt force archivelog all completed before ‘sysdate-1′;
}
EXIT;
EOF

Tablespace bazında backup almak istersek ;
backup as backupset format ‘F:\oracle\rman_backup\users_tbs_%f’ TABLESPACE USERS;

Datafile bazında yedek almak istersek ;
Backup datafile 1,2;
Backup datafile 1;

Database’ in backup’ını backupset formatında almak istersek ;
backup as backupset

Alınan backupa archiveloglarıda dahil etmek istersek;
backup as backupset plus archivelog

Alınan backupa archiveloglarıda dahil edip, sonrasında backupı alınan archivelogları silmek istersek;
Rman> backup as backupset plus archivelog delete input;

Compressed backup almak istersek;
backup as compressed backupset database;

İmaj copy olarak backup almak istersek;
backup as copy database;
backup as copy datafile ‘C:\oracle\10g\oradata\prod\system01.dbf’ format ‘F:\oracle\rman_backup\deneme01_dbf’;
(system01.dbf’ in backupını, deneme01.dbf ismiyle imaj copy olarak alır)

Alınacak backup formatının default olarak kullanılmasının set etmek istersek ;
CONFIGURE DEVICE TYPE DISK BACKUP TYPE TO COPY; # image copies
CONFIGURE DEVICE TYPE DISK BACKUP TYPE TO BACKUPSET; # uncompressed
CONFIGURE DEVICE TYPE DISK BACKUP TYPE TO COMPRESSED BACKUPSET; # compressed

Tüm archivelogların backupını almak için ;
Backup archivelog all;

Sadece belirli archivelogların backupını almak istersek ;
backup format ‘E:\oracle\rman_backup\ar_%t_%s_%p’ archivelog from soquence=170 delete input;
(171’ den sonraki archive logların backupını alır ve siler, delete input’ u kaldırır isek backupı aldıkdan sonra ayrıca bir silme işlemi yapmayacaktır.)

Belirli bir zaman dilimi arasındaki archivelogların backupını almak için ;
Backup archivelog from time ‘sysdate-1’;

Controlfile’ in backupını aldırmanın farklı yolları ;
rman>Backup as copy current controlfile;
rman>backup as backupset current controlfile;
rman>backup tablespace system include current controlfile ;
rman>configure controlfile autobackup on;
Alınmış olan rman backuplarını fiili olarak restore / recover etmeden doğruluğunu test etmek ;
Backup validate ;
Restore database validate ;
(Validate opsiyonu backupı alınmış olan tüm durumlar için kullanılablir)
Alınan backuplarda corruption olup olmadığını kontrol etmek için backup sonrasında aşağıdaki viewler kontrol edilmelidir ;
Select * from v$database_block_corruption
Select * from v$backup_corruption
Select * from v$copy_corruption
Alınmakta olan backup’ ın ne % ne kadarının tamamlandığını takip etmek için ;
select sid, serial#, context, sofar, totalwork,
round(sofar/totalwork*100,2) “% Complete”
from v$session_longops
where opname like ‘RMAN:%’
and opname not like ‘RMAN: aggregate’
and totalwork != 0

Belirli bir tarihden önceki archive logları silmek için;
DELETE ARCHIVELOG UNTIL TIME “SYSDATE-5″;
DELETE NOPROMPT ARCHIVELOG UNTIL TIME “SYSDATE-5″
(nopromt eklentisi kullanıldığında backupları Yes/No sormadan direk sildirmek içindir. Joblar içerisinde kullanılması gerektiğinde nopromt ile kullanılır.)
Kullanılabilecek olan archivelogları görmek için;
Crosscheck archivelog all ;
Delete expired archivelog all;
Rman ile alınan backuplar hakkında sql tarafında durumlarını sorgulamak istersek ;
– son birkaç günlük backup durumu özet;
select * from (
select start_time Backup_baslangıc_süresi,
end_time Backup_bitis_süresi,
output_device_type backup_lokasyonu,
input_type Backup_Type,
status backup_durumu,
output_bytes_display backup_boyutu,
time_taken_display backup_alma_süresi
from V$RMAN_BACKUP_JOB_DETAILS
order by 1 desc )
where rownum < 10
-- son birkaç günlük backup durumu detay ;
select * from (
select start_time,
end_time,
object_type,
operation,
status,
output_device_type
from v$rman_status
order by 1 desc )
where rownum < 20
Tablespace bazında backup modda olup olmadıklarını sorgulamak istersek;
SELECT t.name, d.file# as,
decode(b.status,’NOT ACTIVE’,'BACKUP MODDA DEGİL’,'BACKUP MODDA’) status
FROM V$DATAFILE d, V$TABLESPACE t, V$BACKUP b
WHERE d.TS#=t.TS# AND b.FILE#=d.FILE#
order by 3
Rman kullanımı ile ilgili olarak sıkça karşılabileceğimiz komutlar bunlar diyebiliriz. Burada Restore/recover komutlarından hiç bahsetmedim çünkü ilk yazılarımda rman backupını farklı bir sunucu üzerine nasıl dönülmesi gerektiğinden, kartuşda ise nasıl erişim sağlayıp nasıl recover edildiği gibi konulardan bahsetmiştim. Bundan sonrasında da bu şekilde spesifik örnekler üzerinden yazmaya devam etmeyi planlıyorum. Bu haliyle fikir vermesi açısından umarım faydalı olmuştur.

22 Temmuz 2013 Pazartesi

Oracle Database 12c yeni özellikler.

Arkadaşlar selamlar.

Oracle Database 12c nin bana göre son derece önemli birtakım yeni özelliklerinden bahsedeceğim. 12c veritabanının yüzlerce yeni özelliği olduğunuda unutmamak gerekir.




* Kiracılı model: Oracle veritabanı artık CDB (container database) ve PDB(pluggable database ) gibi iki temel kavramdan oluşuyor.
Container database temel veritabanımız. 12C ile beraber 3 seçeneğimiz var.
Çoklu kiracılı model
Tekli kiracılı model
Eski model
Bir root container ve çekirdek database imiz var. Yeni modelde veritabanları arasında birçok ortak process var bunlar
Background processleri ,shared memory,Oracle metadata,Redolog file,Controlfile ve Undo tablespace leri ortak.
Pluggable databaselerde ise apllication datası ve tablespaceleri, Local user ve Local Roleleri Local metadatayı bulmak mümkün.
 Aslında son derece mantıklı olusturulmuş bir sistem eskiden bir veritabanını kullansanızda kullanmasanızda BP ler çalışırdı. Yeni sistemde gereksiz çalışan hiçbir kaynak yok. Ortak çalışabilecek olanlar ortak tasarlanmış durumda.

Artık SQLdenSorguladığınızda

SQL>Select name,open_mode from v$pdbs;

PDB$seed diye bir database var ve read only durumda
diğer PDBler ise Read Write durumda lar.

* Diğer önemli bir gelişim ise sqldeveloper ürününde 
Artık SQL Developerdan DBA Navigator sayesinde

Pluggable database startup/shutdown
Database configuration: Initialization Parameters, Automatic Undo Management, Current Database Properties, Restore Points, View Database Feature Usage
Database status view
Data Pump Export and  Import jobs
RMAN Backup/Recovery actions
Resource Manager configuration
Scheduler setting
Security configuration like audit settings, profiles, roles, users
Storage configuration for archive logs, control files, data files, redo log groups, tablespaces, temporary tablespace groups



gibi operasyonları yapabileceğiz.Oracle 12c veritabanı ile enterprise manager da yaptığımız birçok iş artık SQLDeveloperdan yapılır hale gelmiş durumda.

* Artık Yarattığımız userlar Container veya local bazda yetkili olacaklar.
Genel yetkili
 SQL> CREATE USER C##_zekeriya IDENTIFIED BY oracle
  2  CONTAINER=ALL;

Lokal yetkili

SQL> CREATE USER Zekeriya IDENTIFIED BY oracle
  2  CONTAINER=CURRENT;

* Online çalışırken bir datafile isim ve/veya yer değiştirmesi

Bir datafile online durumda çalışırken başka bir lokasyona taşınabilir , yer değiştirebilir.
Asm datafiledan OS datafile taşınabilir
Kullanıcılar datafile taşınırken select –dml-ddl işlemlerini yapabilirler.
Bu operasyon tek stepte yapılıyor.


•SQL> ALTER DATABASE MOVE DATAFILE '/u01/data/zekeriya.dbf' TO'/u01/data/yenizekeriya.dbf‘;
•SQL> ALTER DATABASE MOVE DATAFILE '/u01/data/zekeriya.dbf' TO '+DATA';
•SQL> ALTER DATABASE MOVE DATAFILE '+DATA/orcl/DATAFILE/zekeriya.dbf ' TO'+FRA’
•SQL> ALTER DATABASE MOVE DATAFILE '/u01/data/zekeriya.dbf' TO'/u02/data/zekeriya.dbf' REUSE;

* Birden fazla indexi aynı kolonda kullanabilme özelliği

•Tek kolonda birden fazla index yaratabilme özelliği
•Btree ve Bitmap İndex bile aynı kolonda çalışabilecek.


* İnvisible Column-Görünmez Kolon

•11g ile beraber invisible indexlerle tanışmıştık.
•12c database bize invisible kolon özelliğini son derece basit bir şekilde getiriyor.
•Desc yada benzer select işlemleri ile kolonu göremiyoruz.
•İnsert ederken direk ismini belirtirseniz kullanabiliyoruz.

•SQL> CREATE TABLE personel (epno number, isim varchar2(40), maas numberINVISIBLE);

•SQL> ALTER TABLE personelMODIFY (maas visible);


8 Temmuz 2013 Pazartesi

RMAN Backup Püf Noktaları

RMAN yedek alma, silme, raporlama, listeleme, sıkıştırma, şifreleme, doğrulama, crosschek kontrol gibi hızlı erişim amaçlı oluşturmuş olduğum teknik referans dökümanımı sizlerle paylaşmak istiyorum. Bu dökümanı ara ara güncelliyor olacağım. RMAN komutlarını sınıflandırarak genel başlıklar altında toparlamaya çalıştım. Faydalı olması dileğiyle.

Yedek raporlama işlemleri
 Backup gerekiyor mu raporu:
RMAN>report need backup;
Obsolete backup raporu:
RMAN>report obsolete;
Yedek alma işlemleri
Tüm veritabanının varsayılan konfigürasyona göre yedeğini almak:
RMAN>backup database;
veya
RMAN> backup incremental level 0 database;
Tüm veritabanının arşiv loglar ile birlikte yedeğini almak:
RMAN>backup database plus archivelog;
Controlfile yedeğini almak:
RMAN>backup as copy current controlfıle;
Tüm veritabanının arşiv loglar ile birlikte yedeğini almak ve yedeği alınan arşiv logları silmek:
RMAN>backup database plus archivelog delete input;
Belirli bir tablespace i yedek almak:
RMAN>backup as backupset
format '/backup/df_%d_%s.bck'
tablespace users;
Belirli bir veri dosyasını yedek almak:
RMAN>backup datafile 5;
Hergün değişen blokları yedeklemek (Differential Incremental Backup):
RMAN> backup incremental level 1 database;
Son full yedekten sonra tüm blokları yedeklemek (Cumulative Incremental Backup):
RMAN>backup incremental level 1 cumulative database;
Image Copy yedek almak:
RMAN>backup as copy database;
Yedek silme işlemleri
Backup sıra nosuna göre silme:
RMAN>delete backuppiece 101;
Dosya adına göre silme:
RMAN>DELETE CONTROLFILECOPY '/tmp/control01.ctl';
Arşiv dosyalarını silme:
RMAN>DELETE NOPROMPT ARCHIVELOG UNTIL SEQUENCE = 300;
RMAN>DELETE NOPROMPT ARCHIVELOG ALL;
Not:NOPROMPT, yedek silme esnasında Yes/No onay sorusunu sormaz.
Tag verilen yedeği tag adına göre silme:
RMAN>DELETE BACKUP TAG='before_upgrade';
Bütün yedekleri silme:
RMAN>DELETE BACKUP;
Tape kasete yedeği alınmış yedeklerin disk üzerinden silinmesi:
RMAN>DELETE ARCHIVELOG ALL BACKED UP 3 TIMES TO sbt;
Image copy yedeği silme:
RMAN>DELETE COPY;
Obsolete yedek silme
RMAN kurtarma işlemi için gerekli olmayan yedekleri obsolete olarak işaretler. (redundancy veya recovery window set edilmiş ise)
Obsolete yedekleri silmek için:
RMAN>delete obsolete;
3 gün öncesi obsolete yedekleri silmek için:
RMAN> delete obsolete recovery window of 3 days;
Expired yedek silme
RMAN>delete expired backup;
Crosscheck kontrolü
Crosscheck komutu, RMAN repository de bulunan yedeğin disk veya tape üzerinde fiziksel olup olmadığını kontrol eder. Eğer dosya disk veya tape üzerinde fiziksel olarak yoksa (işletim sistemi üzerinden silinmiş olabilir) RMAN repository de ilgili yedeği “EXPIRED” olarak işaretler. Sonrasında, “DELETE EXPIRED” komutuyla RMAN repository den yedek bilgileri silinebilir.
Arşiv dosyaları crosscheck ile kontrol etme:
RMAN>crosscheck archivelog all;
Alınan bütün yedeği crosscheck ile kontrol etme:
RMAN>crosscheck backup;
Image copy yedeği crosscheck ile kontrol etme:
RMAN>crosscheck copy;
Tag verilen yedeği crosscheck ile kontrol etme:
RMAN>crosscheck backuppiece tag = 'nightly_backup';
Yedek listesini görmek
RMAN>list backupset of database;
RMAN>list backup;
Yedek önizlemesini görmek (İçerisinde hangi objeler olduğu listelenir):
RMAN> restore database preview;

RMAN> restore tablespace users preview;
Konfigürasyon işlemleri
Konfigürasyon ayarlarını görmek:
RMAN>show all;
Varsayılan konfigürasyona dönmek:Sonuna “clear” ifadesi yazılır
RMAN>configure backup optimization clear;
Set edilmiş bir konfigürasyonu görmek:Başına “show” ifadesi yazılır
RMAN>show controlfile autobackup format;
Bir ayarı konfigüre etmek:Başına “configure” ifadesi yazılır
RMAN>configure device type disk backup type to copy;

RMAN>configure retention policy to recovery window of 7 days;

RMAN>configure retention policy to redundancy 3;
Yedek ve Geri Dönme işlemlerini doğrulama (validate) 
Alınan tüm yedeği doğrulamak:
RMAN>backup validate;
Arşiv dosyaların yedeğini doğrulamak:
RMAN>backup validate database archivelog all;
Tüm veritabanı geri dönme işlemini doğrulama:
RMAN>restore database validate;
Controlfile geri dönme işlemini doğrulama:
RMAN>restore controlfile validate;
Spfile geri dönme işlemini doğrulama:
RMAN>restore spfile validate;
Belirli bir tablespace geri dönme işlemini doğrulama:
RMAN>restore tablespace users validate;
Yedek sıkıştırma işlemleri (11g ile geldi)
Backupseti sıkıştırma:
RMAN>backup as compressed backupset database;
Yedek şifreleme işlemleri
Encryption set etme:
RMAN> Set  encryption identified by passwprd;
Decryption set etme:
RMAN> Set  decryption identified by passwprd;
Enable & Disable Block change tracking
Sadece değişen blokları takip etmek için bct aktif edilmesi:
SQL>alter database enable block change tracking using file '/rman_bkups/change.log';
Block change tracking iptal edilmesi:
SQL>alter database disable block change tracking;
RMAn yedeğin debug edilmesi ve trace alınması
$rman target=/ debug=all trace=rman.trc
Yedeğin Log dosyasını oluşturmak
$export NLS_DATE_FORMAT=’dd.mm.yyyy hh24:mi:ss’;

$rman target=/ log=rman.log
Recovery area size bilgisini görmek
select name
,        floor(space_limit / 1024 / 1024) "Size MB"
,        ceil(space_used  / 1024 / 1024) "Used MB"
from   v$recovery_file_dest
order by name
/
RMAN Catalog DB işlemleri
  1. Catalog DB üzerinde kullanıcı oluşturulur.
  CREATE USER rman IDENTIFIED BY rman
  TEMPORARY TABLESPACE temp
  DEFAULT TABLESPACE users
  QUOTA UNLIMITED ON users;
  1. Recovery Catalog owner yetkisi verilir
GRANT RECOVERY_CATALOG_OWNER TO rman;
  1. Catalog veritabanına bağlanılıp catalog oluşturulur.
rman CATALOG rman/rman@catalog
RMAN> create catalog;
  1. Yedeği alınacak target veritabanı register edilir.
rman TARGET sys/oracle@test10g CATALOG rman/rman@catolog

RMAN> register database;
RMAN de kanal açma ve objeleri manuel kanallara dağıtma
Örnek script:
RUN
{
  ALLOCATE CHANNEL c1 DEVICE TYPE sbt PARMS="ENV=(BACKUP_SERVER=tape_server1)";
  ALLOCATE CHANNEL c2 DEVICE TYPE sbt PARMS="ENV=(BACKUP_SERVER=tape_server2)";
  ALLOCATE CHANNEL c3 DEVICE TYPE sbt PARMS="ENV=(BACKUP_SERVER=tape_server3)";
  BACKUP
   (DATAFILE 1,2,3
    CHANNEL c1)
   (DATAFILECOPY '/tmp/system01.dbf', '/tmp/tools01.dbf'
     CHANNEL c2)
   (ARCHIVELOG FROM SEQUENCE 100 UNTIL SEQUENCE 102 THREAD 1
     CHANNEL c3);
}

Talip Hakan Öztürk   blogdan alıntıdır...