TOAD – Grant Hatası

Merhabalar,
Geçenlerde bir müşterimizin veritabanına bağlanmaya çalışırken aşağıdaki hatayı aldım.

"Access to the following views required:
V$SESSION, V$PROCESS, V$SESS_IO, V$SESSION_WAIT, V$SESSION_EVENT, V$ACCESS, V$SESSSTAT, V$STATNAME, V$OPEN_CURSOR, V$SQL, V$LOCK, V$SESSION_LONGOPS, SYS.V_$TRANSACTION, SYS.V_$ROLLNAME, V$SQLTEXT_WITH_NEWLINES"

Bu hatanın çözümünü sizle paylaşmak istedim.

SQL> Grant select any dictionary, select any table, select_catalog_role to db_user;

Grant succeeded.

SQL> grant execute on sys.dbms_workload_repository to db_user;

Grant succeeded.

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