Автор Тема: Определение ORACLE_HOME по GLOBAL_DBNAME  (Прочитано 4062 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн rjhdby

  • Постоялец
  • ***
  • Сообщений: 432
  • Рейтинг: 3
  • Пол: Мужской
    • rjhdby
    • Просмотр профиля
Определение ORACLE_HOME по GLOBAL_DBNAME
« : 08 ноября 2010, 16:04:26 »
Для массы старенького своего заброшу.

На сервере одновременно работают несколько инстансов oracle разных версий. С ними надо производить однотипные рутинные операции – возникает вопрос, как определить ORACLE_HOME необходимый для работы с конкретной БД.
Подразумеваем, что listener.ora заполнен должным образом.

На вход подаем GLOBAL_DBNAME, на выходе имеем соответствующий ему ORACLE_HOME

DB_NAME=$1
for I in `ps -ex|awk  '/[t]nslsnr/ {print $4":"$5}'`
do
        L=`echo $I|cut -f2 -d":"`
        P=`echo $I|sed 's|\(.*\)/bin/.*|\1|g'`/network/admin/listener.ora
        ORACLE_HOME_TMP=`paste -s $P | tr -d " \t" | sed 's/.*SID_LIST_'"$L"'=(SID_LIST=\(.*)))\).*/\1/g' | sed 's/))(/))\
(/g' | grep "=$DB_NAME)" | sed 's/.*(ORACLE_HOME=\([^)]*\)).*/\1/'`
        [ ".$ORACLE_HOME_TMP" != "." ]&&export ORACLE_HOME=$ORACLE_HOME_TMP
done

ВНИМАНИЕ!!! Перенос строки с sed обязателен!
sed 's/))(/))\
(/g'
А вот тут можно посмотреть картины моей супруги http://sevil.pro