среда, 1 апреля 2009 г.

Как выяснить ORACLE_HOME инстанса

В AIX'e и Linux'e:
ps axeww | grep pmon | grep -v grep | awk -F ORACLE_HOME= '{print $2}' | awk '{print $1}'


В Solaris'e:
ps -ef |grep pmon|grep -v grep|awk '{print $2}'|xargs pargs -e|grep ORACLE_HOME| grep -F= '{print $2}'


В HP-UX
rm -rf /
и установить другую ОС :-)

Upd:

Не заходя в базу, из шелла :-p
Для чего нужно? Ну, например, на сервере AIX находятся несколько инстансов, которые запущены из разных $ORACLE_HOME, но не все прописаны в /etc/oratab. Задача: выяснить сколько SGA выделено для каждой базы.

ps -ef | grep pmon | grep -v 'grep' | awk '{print $NF}' | awk -F_ '{print $NF}' | while read sid
do
export ORACLE_HOME=`ps axeww | grep ora_pmon_$sid | grep -v grep | awk -F ORACLE_HOME= '{print
$2}' | awk '{print $1}'`
export ORACLE_SID=$sid
res=`$ORACLE_HOME/bin/sqlplus -S "/ as sysdba" <<END
set termout off
set echo off
set head off
set feedback off
select '$sid ' || round(sum(value)/1024/1024) from v\\$sga;
END`
echo $res
done

3 комментария:

nuke комментирует...

SELECT NVL(SUBSTR(FILE_SPEC, 1, INSTR(FILE_SPEC, '\', -1, 2) -1) , SUBSTR(FILE_SPEC, 1, INSTR(FILE_SPEC, '/', -1, 2) -1)) FOLDER FROM DBA_LIBRARIES WHERE LIBRARY_NAME = 'DBMS_SUMADV_LIB';

nuke комментирует...

SELECT SUBSTR(FILE_SPEC,1,INSTR(FILE_SPEC,'LIB')-2) ORACLE_HOME
FROM DBA_LIBRARIES
WHERE LIBRARY_NAME='DBMS_SUMADV_LIB';

и еще


SQL > VAR OHM VARCHAR2(100);
SQL > EXEC DBMS_SYSTEM.GET_ENV('ORACLE_HOME', :OHM) ;
SQL > PRINT OHM

or

DECLARE
FOLDER VARCHAR2(100);
BEGIN
SYS.DBMS_SYSTEM.GET_ENV('ORACLE_HOME', FOLDER);
DBMS_OUTPUT.PUT_LINE(FOLDER);
END;

nuke комментирует...

SQL> set autopri on
SQL> var oracle_home varchar2(255)
SQL> exec dbms_system.get_env('ORACLE_HOME',:ORACLE_HOME)