Oracle DB 11.2.0.4 kurulum Hata – error in invoking target 'agent nmhs of makefile ins_emagent.mk'

Merhabalar,
Eğer RHEL tabanlı bir işletim sistemine Oracle Database 11.2.0.4 versiyonu kurarken aşağıdaki hatayı alıyorsanız, çözümü çok basit.

install_11204_problem

Bunu düzeltmek için $ORACLE_HOME/sysman/lib/ins_emagent.mk dosyasını açarak aşağıdaki satırı düzenlemeniz gerekecektir.

171 #===========================
172 #  emdctl
173 #===========================
174
175 $(SYSMANBIN)emdctl:
176         $(MK_EMAGENT_NMECTL) 

176 numaralı satırı aşağıdaki gibi değiştirin.

171 #===========================
172 #  emdctl
173 #===========================
174
175 $(SYSMANBIN)emdctl:
176         $(MK_EMAGENT_NMECTL) -lnnz11

Bu dosyayı kaydettikten sonra “Retry” butonuna basarak kuruluma devam edebilirsiniz.

Oracle Standby Veritabanı Komutları

Merhabalar,
Bu yazımda standby veritabanlarını yönetmek için kullanacağımız birkaç komuttan bahsedeceğim.

Öncelikle produciton veritabanından standby da hata olup olmadığını v$archive_dest view’ina bakarak görebiliriz.

$ sqlplus / as sysdba
SQL> show parameter log_archive_dest

Yukarıdaki komutla standby veritabanının hangi arşiv lokasyonuna yazıldığını öğrenebiliriz. Daha sonra öğrendiğimiz lokasyonun dest_id numarasını aşağıdaki komuta yazacağız.

SQL> select DEST_NAME, status,error from v$archive_dest where dest_id = 2;

DEST_NAME                             STATUS           ERROR
-----------------------------------   ---------        --------------------
LOG_ARCHIVE_DEST_2                    VALID

Yukarıdaki gibi VALID yazısını görüyorsak standby veritabanımız sorunsuz çalışıyor demektir. Eğer status bölümünde INVALID yazısı geliyorsa, Error bölümünde standby veritabanına bağlantı sorununun nedenini yazıyor.
Eğer standby veritabanımız çalışıyorsa, standby veritabanına bağlanıp production veritabanıyla arasındaki eksik arşiv sayısını aşağıdaki komut ile öğrenebiliriz.

SQL> select count(1) from v$archived_log where registrar='RFS' and APPLIED<>'YES';

Standby veritabanını kapatıp açtıktan sonra otomatik arşivleri üzerine apply etmesi için aşağıdaki komutu çalıştırmamız gerekiyor. Genellikle standby veritabanları kapatılıp açıldığında aşağıdaki komut çalıştırılmayı unutulur. Bu durumda production veritabanı standby veritabanına arşivleri yazmaya devam eder fakat standby veritabanı bu arşivleri üzerine apply etmez ve verilerimiz en sonra standby veritabanı kapatıldığı andaki production veritabanındaki verilerle aynı olur.

SQL> alter database recover managed standby database using current logfile disconnect from session;

Genel Oracle Hataları — ORA-12154, ORA-00600, ORA-01722, ORA-03113, ORA-01000

Merhabalar,

Bu yazımda genel olarak Oracle veritabanlarında ve uygulamalarda sıkça karşımıza çıkan oracle hatalarından bahsedeceğim. Genellikle bir oracle hatası aldığımızda ilk yaptığımız şey hata kodunu kopyalayıp Google’da aramaktır. Bence ilk olarak support.oracle.com’u tercih edin. Daha hızlı ve güvenli çözüme ulaşabilirsiniz. Bu yazımda ise Google’da en çok aranan 5 tane hatadan bahsedeceğim.

ORA-12154: TNS:could not resolve the connect identifier specified

Bu hatayı aldığınız zaman veritabanınız TNS bağlantısı kuramıyor demektir. Genellikle bağlantı bilgilerinde sıkıntı olabiliyor. Bağlantı bilgilerini kontrol ettikten sonra Listener’ın açık olup olmadığına bakın.

$ cat $ORACLE_HOME/network/admin/tnsnames.ora

TNSNAMES.ora dosyası içinde bağlanmaya çalıştığınız veritabanı bilgilerinin sunucu adına ve servis adına dikkat edin. Genellikle yanlış bilgiler yüzünden bağlantı sağlanamıyor. Bağlantı bilgileri doğruysa listener’ın açık olup olmadığına bakın.

$ lsnrctl status
$ lsnrctl start -- listener kapalıysa, listener'ı çalıştırın

ORA-00600: internal error code, arguments: [%s], [%s],[%s], [%s], [%s]

Eğer veritabanınızda ora-600 hatası alıyorsanız, veritabanınızda ciddi sıkıntılar var demektir. Belki bir bug’la karşılaşmışsınızdır belki sistem parametrelerini doğru ayarlamamışsınızdır, belki de farklı bir sıkıntıdan kaynaklanıyordur. ORA-600 hatası aldığınız zaman yanında birkaç tane parametre de gelir. İlk yapmanız gereken support.oracle.com a girip ora-600 hatalarına bakmaktır. Support sitesinde Note 153788.1 diye arama yaparsanız karşınıza oracle generic hatalarının olduğu bir araç geliyor. Bu sayfayı kullanarak ora-600 hatasını, onun yanında gelen parametretleri ve veritabanı versiyonunuzu girerek, sorunuzun kaynağını ve onunla ilgili dökümanları görebilirsiniz.

ORA-01722: Invalid Number

Bu hatayı genellikle sql de sayısal olmayan string bir değeri sayıya çevirmeye çalıştığınız zaman alıyorsunuz. Genellikle tablolarımızda verileri varchar2 alanında tutuyoruz. Bazen sayısal verileri de string olarak tutabiliyoruz. Bu sayısal verileri de karşılaştırma yapmak için to_number() gibi fonksiyonlarla dönüştürmek istiyoruz. Fakat bizim string olarak sakladığımız sayısal verilere bazen yanlış veri girişinde bulunuyor ve bu hatayı alıyoruz.
Örneğin,
no adında bir alanımız olsun ve buraya sürekli sayısal değer girelim.

create table deneme (no varchar2(10));
insert into deneme values ('1');
insert into deneme values ('2');
commit;

Peki ya yanlışlıkla biri farklı bir değer girerse:

insert into deneme values ('uc');
commit;

to_number() fonksiyonunu kullandığınızda bu hatayı alacaksınız.

select to_number(no,'999');
ORA-01722: Invalid Number

ORA-03113: end-of-file on communication channel

Bu hatayı aldığımız zaman client makinesinden veritabanına olan bağlantımız bir nedenden dolayı kopmuş demektir. Bu sorunun kaynağı,
Server crashed olmuş olabilir, işletim sistemi seviyesinde çalışan process’ler kapanmış olabilir, ya da oracle veritabanından kaynaklanan içsel bir problem olabilir. Genelde çok basit hatalardan dolayı bile oracle bu hatayı vermektedir.
Bu hatayı aldığınız zaman bence en iyisi alert.log dosyasında hatayla ilgili detaylı olarak logları incelemektir. Çözüm tahmin ettiğinizden de kolay olabilir.

ORA-01000: maximum open cursors exceeded

Bu hata, veritabanında olan maksimum açık cursor sayısına ulaştığınız zaman oluşuyor. Yani genelde programcılar kod kısmında veritabanına bağlantı sağladıktan sonra bağlantıyı sonlardırmıyorlar ya da her işlem için ayrıca bağlantı açıyorlar. Böyle durumlarda sistem çok fazla kullanıldığı anda ORA-01000 hatası oluşuyor. Maksimum açık cursor parametresi veritabanı açılış parametrelerinden biridir. sqlplus ile bağlanıp

SQL> show parameter open_cursor 

komutunu çalıştırdıktan sonra mevcut değeri görebilirsiniz. Çözüm olarak ya bu değeri arttıracaksınız ya da programcılarınızda kodu tekrar inceleyip açık kalan cursor’leri kapatmasını isteyeceksiniz.
Bu değeri arttırmak için, sqlplus‘s bağlanın :

SQL> alter system set OPEN_CURSOR=1000 scope=both;

Burada 1000 yerine, sisteminize uygun bir değer vermelisiniz.

TNS-12545: Hatası

Merhabalar,

Öncelikle eğer bir oracle hatası alırsanız ilk işiniz sunucuya bağlanıp oerr komutuyla sorunun kaynağına ve çözümüne bakmak olmalıdır.
TNS-12545 hatası aldığınız zaman veritabanına bağlantı hatası alıyorsunuz demektir. oerr komutunu kullanarak hataya ve çözümüne bakalım.

oerr TNS 12545 

TNS-12545:  Connect failed because target host or object does not exist

Cause:  The address specified is not valid, or the program being connected to does not exist.

Action:  Ensure the ADDRESS parameters have been entered correctly; the most likely incorrect parameter is the node name. Ensure that the executable for the server exists (perhaps "oracle" is missing.)

Eğer TCP/IP kullanıyorsanız TNSNAMES.ora dosyasında bulunan veritabanı bağlantı bilgilerine dikkat etmeniz gerekiyor. Genellikle yazım yanlışı olabiliyor ya da sunucu adı veya servis adı yanlış giriliyor olabilir. TNSNAMES.ora yı kontrol ettikten sonra tnsping komutuyla veritabanına bağlanmayı deneyin.

tnsping oracledb

Eğer tnsping komutu başarılı çalışırsa problemi çözmüş olursunuz. Hala sorun devam ederse listener ayakta ve çalışıyormu diye kontrol etmelisiniz.

 lnsrctl status

Listener çalışmıyorsa, çalıştırıp tekrar tnsping komutunu çalıştırıp deneyin.

lsnrctl start
tnsping oracledb

Sequence Numarasına ve Thread Numarasına Göre Arşivlerin Yedeğini Almak

Merhabalar,

Bazen kayıtlı arşivlerimizin belirli bir bölümünün yedeğini almak isteriz. Standby veritabanı kurarken belirli arşivlerin eksik olduğunu gördüm. Production veritabanına bağlanarak thread numarasına ve sequence numarasına göre arşivlerin sıkıştırılmış yedeğini alıp standby a kopyaladım. Basit bir script ama sizlerle paylaşmak istedim.

run{
ALLOCATE CHANNEL ch1 DEVICE TYPE DISK FORMAT='/oracle/rman/thread2.bkp';
BACKUP ARCHIVELOG FROM SEQUENCE 7273 UNTIL SEQUENCE 7380 THREAD 2;
release channel ch1;
}

Full Rman Yedek Alma Scripti

Bu yazımda linux işletim sistemleri üzerinden rman scripti yazarak belirlediğimiz zaman dilimleri içerisinde oracle veritabanımızın full yedeğini almak üzere bir şeyler paylaşacağım.

Oracle kullanıcısının profile dosyasına ORACLE_SID ve ORACLE_HOME değerlerini yazıyoruz.

.bash_profile

export ORACLE_SID=orcl

export ORACLE_HOME=/oracle/app/oracle/product/11.2.0.4/db_home1

 

Oracle kullanıcısının altına dbscripts klasörü olusturup onun altına rman.sh dosyasını oluşturuyoruz.

#!/bin/bash

. /home/oracle/.bash_profile

rman target / nocatalog << EOF > /home/oracle/dbscripts/rman.log

run {

allocate channel c1 type disk;

allocate channel c2 type disk;

allocate channel c3 type disk;

allocate channel c4 type disk;

backup as compressed backupset archivelog all not backed up tag='ARCH';

backup as compressed backupset database tag='DATA';

backup current controlfile tag='CCF';

backup spfile tag='SPF';

release channel c1;

release channel c2;

release channel c3;

release channel c4;

}

exit

EOF