18 Mayıs 2010 Salı

Flash Recovery Area büyüklüğü hatalı görünüyor. Nasıl doğru hale getirebilirim?

Bu sorun genellikle işletim sistemi seviyesinde backup/archivelog silinmesi veya donanım ağrızası sonucunda oluşur.
Sorunun nedeni ise RMAN in tuttuğu backup dosyaları ile ilgili datanın bir nedenle güncelliğini kaybetmiş olmasıdır.

RMAN komutlarından olan CROSSCHECK komutu daha onceden disk veya teybe alınmış olan backupset, image copy ve archived log dosyalarının kontrolü için kullanılır.

CROSSCHECK BACKUPSET; #backup parçalarını kontrol eder.
CROSSCHECK COPY; #datafile,control file, archived redo log ları kontrol eder.
CROSSCHECK archivelog all; #archivelog dosyalarini kontrol eder

CROSSCHECK komutu; işletim sistemi dosyalarını veya RMAN in tuttuğu dosyalar ile ilgili hatalı dataları silmez.
Sadece RMAN datasında bulunan, backup yada archive log dosyasının status/durum bilgisini günceller.
RMAN in varolan backup dosyaları ile ilgili tuttuğu datadan, artık diskte olmayan dosyaları kaldırmak için DELETE komutu kullanılır.

Expired backup veya copy lerin CROSSCHECK komutunun
çalıştırılması ardından silinmesi
***************************************************
CROSSCHECK komutu, kullanımına bağlı olarak RMAN repository(RMAN in backup, archivelog vs dosyalarını tuttuğu disk alanı) üzerinde kayıtlı
bulunan backup, archivelog vs. dosyalarının disk veya teyp üzerinde kontrol eder ve bulmadığı her dosyaya ait kendi tuttuğu
kaydı 'EXPIRED' olarak işaretler.
Daha sonra bu dosyaları RMAN repository den silmek için aşağıdaki komutlar kullanılır.

DELETE EXPIRED BACKUP;
DELETE EXPIRED COPY;
delete expired archivelog all;

Sorun : İşletim sistemi seviyesinde archive log dosyalarından bazılarını sildik. Flash Recovery Area büyüklüğü 50 gb fakat 80 gb gözüküyor.

Çözüm:
1.
RMAN>crosscheck archivelog all;
2.
RMAN>delete expired archivelog all;

veya aşağıdaki gibi script çalıştırılabilir.



run {
crosscheck archivelog all;
delete expired archivelog all;
}



V$BACKUP_FILES gorunumu RMAN repository de bulunan backup and copy lerini göstermektedir.

Diskte bulunan bütün backup ve copy lerin kontrolü ve RMAN repository düzeltmeleri için aşağıdaki script kullanılabilir.

run {
crosscheck backup;
crosscheck copy;
DELETE EXPIRED BACKUP;
DELETE EXPIRED COPY;
}

3 Mayıs 2010 Pazartesi

IFS kullanıcı grubu

Merhaba

Uzun zamandır IFS kullanıcılarının birbirleriyle bilgi/deneyim paylaşabilecekleri
bir platform olması gerektiğini düşünüyordum. Eminim bunu tek düşünen ben değilim :)
Artık böyle bir platform var. Tabi aktifliği Türkiye deki IFS kullanıcılarına bağlı olacaktır.

IFS ERP Turkiye Kullanici Grubu
http://www.linkedin.com/e/vgh/3012612/

Her ne kadar artık IFS developer/admin/user olmadığımı onceki postlarımda belirtmiş olsam da, zaman zaman bazı arkadaşların soruları mail kanalıyla gelmeye devam ediyor.
Düşündüm ki sorularımızı ve cevaplarımızı LinkedIn üzerine yazarsak, daha fazla kişinin deneyimlerinden faydalanabiliriz veye başka arkadaşlara da faydamız olabilir.

Saygılar.
Barış

26 Nisan 2010 Pazartesi

Oracle DB erişiminde OS Authentication nasıl iptal edilir?

Terminal ekranında aşağıdaki şekilde db erişimi
oracle db yi ilk kurduğumuzda açık durumdadır.

sqlplus / as sysdba

Ancak bu durum güvenlik açığı oluşturmaktadır. Engellemek
için ise sqlnet.ora dosyasında aşağıdaki satırın bulunmasını sağlamak yeterlidir.

SQLNET.AUTHENTICATION_SERVICES=(NONE)

sqlnet.ora dosyası $ORACLE_HOME/network/admin içerisinde bulunur.
Yani bir başka değişle tnsnames.ora dosyası ile aynı klasörde bulunur.

11gR2 database kurulumunun ardından sqlnet.ora dosyası $ORACLE_HOME/network/admin klasöründe yaratılmaz. Eğer bu dosyayı olması gereken yerde bulamıyorsanız siz oluşturun ve SQLNET.AUTHENTICATION_SERVICES=(NONE) satırını ekleyin.

Değişiklik anında etkili olmaya başlayacaktır. Yani db servisinin veya listener in yeniden başlatılması gerekli değildir.

Durumu eski haline çevirmek ve OS Authentication özelliğini yeniden kullanılabilir yapmak için aşağıdaki değişiklik yeterli olacaktır.

SQLNET.AUTHENTICATION_SERVICES=(ALL)

9 Nisan 2010 Cuma

ORACLE - EM Backup job ları hakkında

Bir backup job oluşturmak için EM kullandığınızda, bu job ile ilgili bilgiler SYSMAN.MGMT_JOB tablosunda depolanır.
DBA_JOBS veya USER_JOBS tablosunda bu job ile ilgili bilgi bulunmaz.

Tüm EM backup jobları görüntülemek için SYSMAN.MGMT_JOB tablosu sorgulanmalıdır.

Alternatif olarak EM içerisinde "Availability" tabında, alt tarafındaki linler arasında bulunan "Jobs" linkinden de görüntülenebilir.

Ayrıca EM kapalı iken bu tip backup job larının da çalışmayacağı unutulmamalıdır.

23 Mart 2010 Salı

Linux - Açılışta script çalıştırma

root olarak script çalıştırmak için :

/etc/rc.local

dosyasını edit ederek çalıştırılacak script i ekleyebilirsiniz.

Eğer başka bir kullanıcı session açılışında
bir script çalıştıracaksanız :

/home/user_neyse_o/bash_profile

dosyasını edit ederek çalıştırmak istediğiniz script i ekleyebilirsiniz.

Örn : Burada "oracle" kullanıcı adı. Editor olarak vi kullanıyoruz.

[oracle@bizimserver ~]$ pwd
/home/oracle
[oracle@bizimserver ~]$vi .bash_profile

11 Mart 2010 Perşembe

Linux - Crontab kullanarak tekrarlayan işlerin başarımı

Linux işletim sistemi; bir programı veya scripti belirli bir zamanda, bir defaya mahsus olarak veya tekrarlayan şekilde çalıştırmayı desteklemektedir. Bu makalede, periyodik şekilde tekrarlayan işlerin Linux üzerinde "cron" ile nasıl başarılacağını anlatmaya çalışacağım.

Crond servisi, her dakika cron job larını kontrol eder ve çalışma zamanı gelen job lar çalıştırılır. crond servisi ,eğer siz kapatmadıysanız, her açılışta çalışır durumdadır. Bir görev en az 1 dk. da bir çalıştırılabilir. 1 dk. dan daha kısa süreli bir tekrar çalıştırma söz konusu ise cron işinizi görmeyecektir.

Şimdi ,aşağıdaki örnek sh scriptini her 5 dakikada bir çalıştırarak kavramları açıklayacağım.

Örnek sh scripti
****************************
[oracle@oradb ~]$ cat mycrontest.sh
#!/bin/bash
echo "Saat simdi $(date +%T) - $(date +%A)"
[oracle@oradb ~]$ ./mycrontest.sh Saat simdi 18:37:42 - Friday
****************************

Yukarıdaki scripti 5 dk. da bir çalıştıracak crontab girişini yapalım.
****************************
[oracle@oradb ~] crontab -e

yukarıdaki komutu çalıştırdığınızda, çalıştırdığınız kullanıcıya ait zamanlanmış
görev listesi vi editörüne gelir. Aşağıdaki satıra vi editörüne ekleyip kaydetmemizin ardından mycrontest.sh scriptimiz her 5 dk. da bir çalışacaktır.

*/5 * * * * /home/oracle/mycrontest.sh

Yukarıdaki örnek job setup satırının açıklamaları aşağıdaki gibidir.

script_dosyasi : /home/oracle/mycrontest.sh

* * * * * script_dosyasi
- - - - -
| | | | |
| | | | +----- day of week (0 - 6) (Sunday=0)
| | | +------- month (1 - 12)
| | +--------- day of month (1 - 31)
| +----------- hour (0 - 23)
+------------- min (0 - 59)

Bu konuda bir örnek daha vereyim. Örneğin aynı script dosyasını
her gün sabah 04:15 çalıştırmak için aşağıdaki satır cron jobları
arasına eklenebilir.

crontab -e

15 4 * * * /home/oracle/mycrontest.sh

****************************

Cron job görüntüleme ve tüm cron jobları silme
****************************
[oracle@oradb ~]$ crontab -l
5 * * * * /home/oracle/mycrontest.sh
[oracle@oradb ~]$ crontab -r
[oracle@oradb ~]$ crontab -l
no crontab for oracle

Yukarıdaki şekilde crontab -r komutu ile geçerli user için crontab boşaltılabileceği gibi isterseniz crontab -e kullanarak da görev ekleme, çıkarma veya görevlerde değişiklikler yapabilirsiniz.

Ek olarak aşağıdaki linkleri inceleyebilirsiniz.

Türkçe
----------------
http://www.belgeler.org/man/man5/man5-crontab.html

İngilizce
----------------
http://adminschoice.com/crontab-quick-reference

11 Aralık 2009 Cuma

Redolog dosyalarımın boyutunu nasıl değiştirebilirim?

Boyutu değiştirilmek istenen her redo log dosyasını içeren group ,
önce silinir sonra yeniden oluşturulur. Bu yöntemle redo log
dosyalarının yerleri ve isimleri de değiştirilebilir.
Bir log grubunu silebilmek için silmek istediğimiz grup statusu
INACTIVE olmalıdır. Redo log grubuna
ait her dosya birbirinin aynısı olacağı için büyüklükleri de aynı olmak zorundadır.
Farklı redo log gruplardaki dosyalar farklı büyüklükte olabilir.
Aşağıda örnek bir silme ve yeniden oluşturma işlemi gerçekleştirdim.

1. select * from v$log;

Bu sorguyla hangi log grubunun inactive olduğunu öğrenip
o log grubunu drop edeceğim.

2. alter database drop logfile group 1;

INACTIVE durumdaki redo log grubumu sildim.

3. alter database add logfile group 1 ('/u01/app/oracle/oradata/orcl/redo01a.log','/u01/app/oracle/oradata/orcl/redo01b.log') size 150m;

Burada yeni oluşturduğum redo log dosyasının boyutunu 150 mb olarak ayarladım.

Bu noktada 1 numaralı redo grubumuz için işlem tamam.
Şimdi log grobumuzu switch ederek diğer grupları da aynı şekilde
önce silip sonra yeniden oluşturarak işlemi tamamlayabiliriz.
Aşağıdaki sql leri çalıştırıp bir sonraki log file e geçebiliriz.

alter system switch logfile;

alter system checkpoint;

Redo log konusunda daha fazla bilgi
*************************************
Bir transaction, commit edildiğinde ; redo log file üzerinde bir fiziksel yazma gerçekleşir.
Commit istemi kontrolü kullanıcıya geri vermeden önce yazma işlemi tamamlanmak zorundadır.
Yazma işleminin çeşitli nedenlerle uzaması beklemeye neden olur. Redo log dosyalarının
boyutu bu beklemeyi etkileyen bileşenlerden birisidir.

Redo log I/O işlemleri eğer log dosyaları ayrı ve redo log dosyalarından başka veri içermeyen
bir fiziksel sürücüde ise optimize edilmiş olur. Eğer bu başarılabilirse,
yazma anında disk kafası zaten doğru konumda olduğundan
hareket ihtiyacı duymayacaktır ve yazma zamanı minimize edilmiş olur.
Çünkü log yazma işlemi bir sıralı yazma işlemidir ve sadece logwriter process i ile gerçekleştirilir.

Her hangibir veri kaybına karşı redo log dosyaları mirror edilebilir.
Bu Oracle tarafından yazılım tabanlı olarak yapılabileceği gibi (redo log multiplexing),
donanım temelli de olabilir. (RAID 1)

Redo log ların switch olması sonucu database checkpoint meydana gelir.
Checkpoint işlemi tamamlanmadan ilgili redo log grubu yeniden
kullanılabilir duruma (INACTIVE) gelmeyecektir. Bu nedenle büyük ve çok sayıda
redo log grubu olması daha iyi sonuç verebilir.Çok sayıda redo log grubu
oluşturulursa; redo log grubunun kendisinin içerdiği data aktif olarak
checkpointte kullanılırken, aynı redo log grubuna yeni redo log larının yazılması
ihtiyacının ortaya çıkma dolayısıyla wait oluşma ihtimali düşecektir.
Redo log dosyalarının büyütülmesi ise checkpoint oluşma sıklığını azaltacaktır.

Redo log dosyalarının uygun büyüklüğü transaction miktarına göre değişiklik gösterir.
Redo log dosyalarının boyutu sık sık log switch olayı meydana gelmeyecek kadar büyük olmalıdır.
64-256 mb aralığında 10-20 farklı redo log group olması alışılmadık bir durum değildir.

Genel tavsiye log switch sıklığının
15-20 dk. olması yönündedir. Redo log dosyasının boyutu konusundaki hesaplama
yoğun zamana göre yapılmalıdır.
v$log_history tablosunu kullanarak yoğun zamanlardaki log
değiştirme sıklığı kolayca incelenebilir.

select * from v$log_history
order by sequence# desc

Örneğin yoğun zamanda 7 dk aralıkla değişen 50 mb boyutunda log file lerimiz olsun.
Yeni log file buyukluğümüz yaklaşık 15-20 dk bir log switch
olmasını istediğimiz için 150 mb. civarinda olabilir.

Aşağıdaki sorgudan yola çıkarak, mevcut redo log gruplarını, member dosyaların yerlerini,
redo log dosyalarının boyutlarını ve son zamanlardaki log file değitirme sıklığını görebiliriz.

select l.sequence#,l.group#,l.bytes,lf.type,lf.member,l.first_time from v$log l, v$logfile lf
where l.group# = lf.group#
order by l.sequence#

Ayrıca "v$log" tablosundaki "status" alanı aşağıdaki değerleri alabilir.

UNUSED
*******************
Oracle daha once bu gruba hiç yazmamış.
Yeni yaratılan redo log grup için status.

CURRENT
*******************
Aktif olarak yazılan redo log grubu bu grup.
Log group drop edilemez.

ACTIVE
*******************
Oracle daha once bu gruba yazmış; yazılanlar instance recovery için gerekli.
Log group drop edilemez.

INACTIVE
*******************
Oracle daha once bu gruba yazmış; yazılanlar instance recovery için gerekli.
Log group drop edilebilir.

Konuyla ilgili aşağıdaki linkler de incelenebilir.

Ingilizce
****************
http://download.oracle.com/docs/cd/E11882_01/server.112/e10595/onlineredo002.htm

http://download.oracle.com/docs/cd/B10500_01/server.920/a96521/onlineredo.htm

Türkçe
****************
www.cagataycebi.com/oracle/oracle_redologs.pdf

http://www.gokhanatil.com/redo-log-dosyalarinin-boyutu-ne-kadar-olmali/

http://www.mysqlsupport.net/oracle-redo-log.html