29 Mart 2012 Perşembe

[EN] The user is root. OPatch cannot continue if the user is root. OPatch failed with error code 255

Problem: The user is root. OPatch cannot continue if the user is root. OPatch failed with error code 255


[HHYTS]/u01/app/oracle/admin $
[HHYTS]/u01/app/oracle/product/11.2.0/dbhome_1/oui/bin $ sudo su -
[root@hhytsdb1 ~]#
[root@hhytsdb1 ~]# cd /u01/app/oracle/patchdepot
[root@hhytsdb1 patchdepot]# export PATH=$PATH:/u01/app/11.2.0.3/grid/OPatch
[root@hhytsdb1 patchdepot]# opatch apply 13513783
The user is root. OPatch cannot continue if the user is root.

OPatch failed with error code 255
[root@vfxadb03 patchdepot]# whoami
root

Solution: OPatch can not run as user root. When "opatch apply" statement runs, it initiates Java OPatch and Java OPatch can not run as user root. But when "opatch auto" statement runs, it initiates "autopatch" and autopatch can run as user root. So when you get this error, it means you must use "opatch auto".

24 Mart 2012 Cumartesi

[EN] Error starting ORMI server ... port 5520 The socket name is already in use

Problem: Enterprise Manager Console won't start with error "Error starting ORMI server ... port 5520. The socket name is already in use".

Solution: 

1. Shutdown Enterprise Manager Console.
emctl stop dbconsole

2. Check if there are any processes with name like "oc4j". If there are, kill them.
ps -ef | grep oc4j
kill -9 ....

3.  Open Enterprise Manager Console.  
emctl start dbconsole

[EN] 8 Quick Steps of IPS via ADRCI

----------- STEP 1 ------------------

[ASOS3]/u01/app/oracle/admin/asos3/bdump $ adrci

ADRCI: Release 11.2.0.3.0 - Production on Fri Mar 23 10:13:47 2012
Copyright (c) 1982, 2011, Oracle and/or its affiliates. All rights reserved.
ADR base = "/u01/app/oracle"

----------- STEP 2 ------------------

adrci> show home

ADR Homes:
diag/rdbms/asos/ASOS3
...
...

----------- STEP 3 ------------------

11 Mart 2012 Pazar

[TR] Global Database Name

Global Database Name
-------------------------------



Distributed bir Database Sistemine dahil olan tüm db'lerin Global Database Name'leri farklı olmak zorundadır.

Global Database Name, bir db yaratılırken aşağıdaki 2 başlangıç parametresinin değerleriyle belirlenir ve data dictionary'de saklanır. Formül şu şekildedir;

Global Database Name = DB_NAME.DB_DOMAIN (DB_NAME, en fazla 8 karakter olabilir)

Örnekler;
ALFADB.xxdomain.com
sales.us.oracle.com

Db yaratıldıktan sonra; DB_DOMAIN başlangıç parametresi değiştirilirse, aynı zamanda Global Database Name de değiştirilmiş olmaz. Global Database Name'i de bu şekilde güncellemek için ayriyetten "ALTER DATABASE RENAME GLOBAL_NAME TO db_name.yeni_db_domain;" komutu çalıştırılmalıdır.

Bir db'nin Global Database Name'ini öğrenmek için aşağıdaki komut kullanılır;

SELECT * FROM GLOBAL_NAME;

[TR] ORA-02020: too many database links in use

Db'de bir oturum açılıp bu oturum üzerinden bir db link kullanıldığında; commit yada rollback yapılmış olsa bile, o oturum sona erene kadar yada bağlantı manuel olarak kapatılana kadar network bağlantısı açık kalır. Network bağlantısının açık kalması demek, db link bağlantısı ile birbirine bağlanan remote db ve lokal db tarafında birer process'in sürekli olarak aktif olması demektir. Eğer db link o oturumda bir daha kullanılmayacaksa, aradaki network bağlantısının aşağıdaki komutla kapatılması şiddetle tavsiye edilir. Aşağıdaki komut sadece, bağlı olunan oturumda belirtilen db link için açık olan network bağlantılarını kapatır. "ALTER SESSION" sistem yetkisi gerektirir.

ALTER SESSION CLOSE DATABASE LINK dblnk1;

OPEN_LINKS başlangıç parametresi; lokal db'deki bir oturumun, db link üzerinden aynı anda kaç tane network bağlantısı açabileceğini belirler. Burada söz konusu remote db sayısı 1 de olabilir 1'den fazla da olabilir önemli olan kullanılan birbirinden farklı db link sayısıdır. Yani mesala bu parametrenin değeri 5 iken, aynı remote db'ye farklı db linkler üzerinden en fazla 5 tane network bağlantısı açılabilir. Ancak aynı db link istenildiği kadar kullanılabilir zira tüm kullanımlar aynı network bağlantısı üzerinden gider. Bu limit aşıldığında ORA-02020 hatası alınır. Bu parametrenin varsayılan değeri 4'tür ve statik bir parametredir. Daha önce açılmış sık kullanılmayan db link network bağlantıları; biraz önce anlatılan yöntemle kapatılmak suretiyle, açık db link network bağlantı sayısı kontrol altına alınabilir. Aksi halde bu parametreye takılmak kaçınılmazdır.

[TR] Oracle nesne isim çözünürlüğü mekanizması

Oracle veritabanında; SQL cümleleri içerisinde db nesne isimlerinin, aşağıdaki formatta belirtilmesi tavsiye edilir.

          şema_ismi.nesne_ismi.nesne_bileşen_ismi

Ancak SQL cümleleri içerisinde genelde bu format kullanılmaz. Çoğunlukla "şema_ismi" ve "nesne_bileşen_ismi" belirtilmez, sadece "nesne_ismi" belirtilir. Bu sebeple Oracle, SQL cümleleri içerisinde tam ve kesin olarak hangi nesnenin belirtildiğini saptamak üzere bir mekanizma geliştirmiştir. Oracle nesne
isim çözünürlüğü mekanizması. Bu mekanizma şu mantıkta çalışır;

1. SQL komutundaki birinci parça kontrol ediliyor.

 A1. Birinci parça, SQL komutunu çalıştıran db kullanıcısının şeması altındaki bir nesne ile eşleşiyor mu kontrol edilir. Eşleşiyorsa A2'ye geçilir.Eşleşmiyorsa, B1'e geçilir.

[TR] Database Gateway for Microsoft SQL (DG4MSQL) kurulum operasyonu

OPERASYON: alfadb1 (10.1.3.143) üzerine DG4MSQL kurulumu. (Linux)


Kurulum
-------


DG4MSQL software mevcut ORACLE_HOME'dan farklı bir dizine kuruldu (/oradata/DG4MSQL).

Mevcut ORACLE_HOME'a kurulsaydı bazı dosyaları ezme riski vardı. Bu durum Metalinkte de belirtiliyor.

Kurulumdan önce "Oracle® Database Gateway Installation and Configuration Guide 11g Release 2 (11.2) for AIX 5L Based Systems (64-Bit), HP-UX Itanium, Solaris Operating System (SPARC 64-Bit), Linux x86, and Linux x86-64 E12013-02" dökümanından öngereksinimler kontrol edildi. Herhangi bir eksiklik yoktu.

Kurulum sırasında aşağıdaki bilgilerin girilmesi gerekiyor.

8 Mart 2012 Perşembe

[EN] PIN, UNPIN, PURGE SQL FROM SHARED POOL

select address||','||hash_value from v$sqlarea where sql_id = 'd12dc094hz335';

exec sys.dbms_shared_pool.keep   ('00000003CB2559C0,1225755749','C',1);
exec sys.dbms_shared_pool.unkeep ('00000003CB2559C0,1225755749','C',1);
exec sys.dbms_shared_pool.purge  ('00000003CB2559C0,1225755749','C',1);

[TR] Veritabanında aynı isimli database file var mı?

SELECT SUBSTR(file_name, INSTR(file_name, '/', -1, 1) + 1) pure_file_name, COUNT(*)
FROM dba_data_files
GROUP BY SUBSTR(file_name, INSTR(file_name, '/', -1, 1) + 1)
ORDER BY 2 DESC;

[TR] Kullanıcı adı ve parolası bilinmeyen bir şemada private database link yaratma

-- Kullanıcı adı ve parolası bilinmeyen bir şemada private database link yaratmak için kullanılır.

grant create database link to SEMA1;

create or replace procedure SEMA1.procx ( str in varchar2) is
begin
execute immediate str;
end;
/

call SEMA1.procx('drop database link dblnk1');
call SEMA1.procx('create database link "dblnk1" connect to REMOTE_SEMA1 identified by  remote_sema1_sifre" using ''tns_kaydi''');
call SEMA1.procx('select * from dual@dblnk1');

drop procedure SEMA1.procx;
revoke create database link from SEMA1;

[TR] DBSNMP ve SYSMAN kullanıcılarının şifrelerini değiştirme (11g)

SYSMAN
------

1. Değişkenler doğru olarak ayarlanır.

export ORACLE_SID=xxx
export ORACLE_HOME=yyy

2. Konsol kapatılır.

emctl stop dbconsole

3. Her ikisinin de kapalı olduğundan emin olunur.

emctl status dbconsole
emctl status agent

4. Şifre değiştirilir.

[TR] Online index build-rebuild kill temizleme

Bir index yaratma yada rebuild etme işlemi istenerek yarıda kesilir veya başka bir oturum tarafından bu oturum kill edilirse, index gerçekte var olmadığı halde data dctionary'de kaydı kalır. Bu tutarsızlığı temizlemek için sırasıyla aşağıdaki prosedür uygulanır.

Bu prosedür SMON tarafından otomatik ve periyodik olarak düm db'yi kapasayacak şeklide zaten yapılır.

1. Index'in data dictionary'de olduğu teyid edilir.

select * from dba_indexes where owner = 'SEMA1' and index_name = 'INDEX1';

2. Index'in fiziksel olarak db'de bulunmadığı, drop etmeye çalışılarak test edilir.

drop index SEMA1.INDEX1;

drop index sema1.index1
          *
ERROR at line 1:
ORA-08104: this index object 66960 is being online built or rebuilt


[EN] TOAD login.sql SAMPLE

-- For most of TOAD users the following login.sql script should be adequate

SET LINESIZE  2000
SET TAB OFF
SET VERIFY OFF
SET PAGESIZE 999
SET TRIMOUT ON
SET TRIMSPOOL ON
set serveroutput on size 1000000
SET ESCAPE ON
set sqlprompt'===>'
SET ECHO ON

[EN] WHICH SPs ARE USING DATABASE LINKS

select * from dba_dependencies where referenced_link_name is not null and (owner,name,type) in
(select owner,object_name,object_type from dba_objects
where object_type in ('FUNCTION','TRIGGER','PROCEDURE','PACKAGE','VIEW')
--and status = 'INVALID'
and owner = 'SEMA1')

[EN] COMPILE ALL SPs

---compile all invalid
$>cd $ORACLE_HOME/rdbms/admin
$> sqlplus / as sysdba
SQL> @utlrp.sql


---compile all bodies

SELECT 'ALTER PACKAGE ' || a.owner || '.' || a.object_name || ' COMPILE BODY;'
FROM    dba_objects a
WHERE   a.object_type = 'PACKAGE BODY'
AND     a.status      = 'INVALID'
AND     a.owner       = Decode(Upper('BUNYAMIN'), 'ALL',a.owner, Upper('BUNYAMIN'));


---compile all specs

SELECT 'ALTER PACKAGE ' || a.owner || '.' || a.object_name || ' COMPILE;'
FROM    dba_objects a
WHERE   a.object_type = 'PACKAGE'
AND     a.status      = 'INVALID'
AND     a.owner       = Decode(Upper('BUNYAMIN'), 'ALL',a.owner, Upper('BUNYAMIN'));


---compile all procs

SELECT 'ALTER PROCEDURE ' || a.owner || '.' || a.object_name || ' COMPILE;'
FROM    dba_objects a
WHERE   a.object_type = 'PROCEDURE'
AND     a.status      = 'INVALID'
AND     a.owner       = Decode(Upper('BUNYAMIN'), 'ALL',a.owner, Upper('BUNYAMIN'));

---compile all funcs

SELECT 'ALTER FUNCTION ' || a.owner || '.' || a.object_name || ' COMPILE;'
FROM    dba_objects a
WHERE   a.object_type = 'FUNCTION'
AND     a.status      = 'INVALID'
AND     a.owner       = Decode(Upper('BUNYAMIN'), 'ALL',a.owner, Upper('BUNYAMIN'));


---compile all trigs

SELECT 'ALTER TRIGGER ' || a.owner || '.' || a.object_name || ' COMPILE;'
FROM    dba_objects a
WHERE   a.object_type = 'TRIGGER'
AND     a.status      = 'INVALID'
AND     a.owner       = Decode(Upper('BUNYAMIN'), 'ALL',a.owner, Upper('BUNYAMIN'));

---compile all views

SELECT 'ALTER VIEW ' || a.owner || '.' || a.object_name || ' COMPILE;'
FROM    dba_objects a
WHERE   a.object_type = 'VIEW'
AND     a.status      = 'INVALID'
AND     a.owner       = Decode(Upper('BUNYAMIN'), 'ALL',a.owner, Upper('BUNYAMIN'));