Гость
Map
Форумы / Oracle [игнор отключен] [закрыт для гостей] / SHELL цикл / 10 сообщений из 10, страница 1 из 1
17.01.2022, 12:33
    #40127184
6ATON
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SHELL цикл
Добрый день!

Подстажите пожалуйста, как можно выйти из ситуации. Нужно запросить статус экземпляров Oracle. Написал нехитрый скрипт, но он выдаёт a*b вариантов. А нужно чтобы только один раз по ORACLE_SID с соответствующим ORACLE_HOME

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
for ORACLE_HOME in $(for spid in $(pgrep -fl smon | grep -v ASM | awk '{print $1;}')
                      do pwdx $spid | sort | uniq | awk '{print $2;}' | sed 's/....$//';done | sort)
 do

    export ORACLE_HOME=$ORACLE_HOME

    for ORACLE_SID in $(pgrep -fl smon | grep -v ASM | awk '{print substr($2,10);}')
     do

        $ORACLE_HOME/bin/srvctl status database -d $ORACLE_SID
	 
	 done
 
 done
 


спасибо!
...
Рейтинг: 0 / 0
17.01.2022, 16:18
    #40127235
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SHELL цикл
6ATON
Добрый день!

Подстажите пожалуйста, как можно выйти из ситуации. Нужно запросить статус экземпляров Oracle. Написал нехитрый скрипт, но он выдаёт a*b вариантов. А нужно чтобы только один раз по ORACLE_SID с соответствующим ORACLE_HOME
Избавься от внутреннего цикла.
Получил ORACLE_HOME - преврати его в ORACLE_SID. Как это сделать думай сам - только ты знаешь какие варианты комбинаций ORACLE_HOME-ORACLE_SID у тебя бывают.
...
Рейтинг: 0 / 0
17.01.2022, 16:46
    #40127244
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SHELL цикл
Кажется задача выходит за рамки shell-скрипта.
Я-бы предложил брать Python и обходить файловую систему
и искать все конфиги и прочее. Для списка из нескольких ORACLE_HOME
выполнить скрипт короче.

Модератор: Тема перенесена из форума "Программирование".
...
Рейтинг: 0 / 0
17.01.2022, 19:42
    #40127289
SeaGate
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SHELL цикл
6ATON
Код: plsql
1.
$ORACLE_HOME/bin/srvctl status database -d $ORACLE_SID



Clusterware:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
[grid@rac1 ~]$ crsctl stat res -w 'TYPE = ora.database.type' -p -attr ORACLE_HOME,USR_ORA_INST_NAME,STATE
NAME=ora.racdb.db 1 1
ORACLE_HOME=/u01/app/oracle/product/19.3.0/dbhome_1
USR_ORA_INST_NAME=racdb2
STATE=ONLINE

ORACLE_HOME=/u01/app/oracle/product/19.3.0/dbhome_1
USR_ORA_INST_NAME=racdb1
STATE=ONLINE


Standalone:
Код: plsql
1.
2.
3.
4.
5.
[grid@db-21 ~]$ crsctl stat res -w 'TYPE = ora.database.type' -p -attr ORACLE_HOME,USR_ORA_INST_NAME,STATE
NAME=ora.orcl.db 1 1
ORACLE_HOME=/u01/app/oracle/product/21.0.0/dbhome_1
USR_ORA_INST_NAME=orcl
STATE=ONLINE
...
Рейтинг: 0 / 0
17.01.2022, 19:49
    #40127292
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SHELL цикл
/etc/oratab не?
...
Рейтинг: 0 / 0
17.01.2022, 19:53
    #40127293
6ATON
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SHELL цикл
SeaGate
6ATON
Код: plsql
1.
$ORACLE_HOME/bin/srvctl status database -d $ORACLE_SID



Clusterware:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
[grid@rac1 ~]$ crsctl stat res -w 'TYPE = ora.database.type' -p -attr ORACLE_HOME,USR_ORA_INST_NAME,STATE
NAME=ora.racdb.db 1 1
ORACLE_HOME=/u01/app/oracle/product/19.3.0/dbhome_1
USR_ORA_INST_NAME=racdb2
STATE=ONLINE

ORACLE_HOME=/u01/app/oracle/product/19.3.0/dbhome_1
USR_ORA_INST_NAME=racdb1
STATE=ONLINE


Standalone:
Код: plsql
1.
2.
3.
4.
5.
[grid@db-21 ~]$ crsctl stat res -w 'TYPE = ora.database.type' -p -attr ORACLE_HOME,USR_ORA_INST_NAME,STATE
NAME=ora.orcl.db 1 1
ORACLE_HOME=/u01/app/oracle/product/21.0.0/dbhome_1
USR_ORA_INST_NAME=orcl
STATE=ONLINE



нене, мне нужно проверить баз is running или is not running. ну и для кучи чтобы ловить ещё ошибки, типа ресурс не найден
...
Рейтинг: 0 / 0
17.01.2022, 20:24
    #40127297
SeaGate
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SHELL цикл
Elic
/etc/oratab не?

В общем случае, нет, т.к.: 12.2 Real Application Cluster DBCA Do Not Update Oratab (Doc ID 2278584.1)
crsctl применим, т.к. был указан srvctl.
...
Рейтинг: 0 / 0
18.01.2022, 18:42
    #40127550
shane54
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SHELL цикл
SeaGate
Elic
/etc/oratab не?

В общем случае, нет, т.к.: 12.2 Real Application Cluster DBCA Do Not Update Oratab (Doc ID 2278584.1)


Нота 2278584.1 интересная, заставляет задуматься. Она ведь of type "Нота" а не "Bug", суть они считают такое поведение нормальным, суть это фича, а не баг. У нас уже несколько лет назад были всякие странности из-за записей в oratab с комментарием "#line added by agent" - тоже из той же серии, ноги оттуда же растут.

Первая же ссылка релевантна проблеме - в блоге Mike Dietrich все тоже самое, и та же Нота 2278584.1 упоминается, и решения нет, но хотя бы люди оказывается знают о ситуации:

https://mikedietrichde.com/2017/12/20/dbca-12-2-not-update-etc-oratab-gi/

Причём, и блог и комменты - аж от 2017 года.

Ладно, автору топика, чтоб не расценивать уход от темы - вот наш подход:

  • идёшь скриптом по записям в /etc/oratab
  • для каждой записи вызываешь (с правильным OH) srvctl
  • ну или crsctl, но тут нужно проверить, работает ли crsctl из под ОС пользователя oracle, или же требуется root
  • тут тоже есть выход - настроенный sudo
  • у нас например разделение обязанностей такое, crsctl - утилита для Unix SA (суть для root), srvctl - утилита для Oracle DBA (суть для oracle)
  • и есть хитрость - для совсем уж надоедливых команд, чтоб каждый раз не дёргали SA, админы серверов настраивают sudo с "гранулярностью" до конкретных параметров утилиты crsctl - смысл в том что в общем случае crsctl для запуска требует root, но для запуска например crsctl stop cluster - сработает из под Oracle (и таких параметров настроено разрешённых разных штук 5-10, список постепенно расширяется)
  • распарсить вывод из crsctl или srvctl и понять статус базы (или листенера, или агента, или ASM)
  • ну и дальше уже по вкусу - можно в каждой базе какой-нибудь скрипт выполнить, uptime показать, количество сессий, место и тд, на сколько фантазии хватит (или требований)
...
Рейтинг: 0 / 0
18.01.2022, 21:20
    #40127590
SeaGate
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SHELL цикл
oratab работает в ограниченном кол-ве случаев. Смысла нет его использовать, когда обсуждается srvctl.
О чем и говорилось в приведенной выше ссылке:
https://mikedietrichde.com/2017/12/20/dbca-12-2-not-update-etc-oratab-gi/ What should you do instead if you would like to find out if a database is present or not? Use crsctl stat res to get the database name and then use srvctl status -d <dbname>:
Проблемы, возникающие с oratab:
1. convenience alias для ORACLE_HOME. Т.е. строка для установки окружения соответствующего ORACLE_HOME без наличия БД:
Код: plsql
1.
db21:/u01/app/oracle/product/21.0.0/dbhome_1:N



2. использование ORACLE_SID вместо DB_UNIQUE_NAME:
Код: plsql
1.
inst:/u01/app/oracle/product/21.0.0/dbhome_1:N          # line added by Agent


Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
[oracle@db-21 ~]$ srvctl config database -db inst
PRCD-1120 : The resource for database inst could not be found.
PRCR-1001 : Resource ora.inst.db does not exist
[oracle@db-21 ~]$ srvctl config database -db dbunqname
Database unique name: dbunqname
Database name: dbname
Oracle home: /u01/app/oracle/product/21.0.0/dbhome_1
Oracle user: oracle
Spfile: /tmp/spfile
Password file:
Domain:
Start options: open
Stop options: immediate
Database role: PRIMARY
Management policy: AUTOMATIC
Disk Groups:
Services:
OSDBA group:
OSOPER group:
Database instance: inst


shane54 идёшь скриптом по записям в /etc/oratab
для каждой записи вызываешь (с правильным OH) srvctl
Пример БД указан выше, с которой это не будет работать.
Понятно, что можно добавить вручную запись с DB_UNIQUE_NAME, а потом в скриптах игнорировать все, что добавил агент.
Однако будет возникать неудобство с oraenv, который смотрит на ORACLE_SID.
Требовать DB_UNIQUE_NAME=ORACLE_SID нельзя в общем случае.

3. игнорирование oratab в RAC, начиная с некоторых версий

Если нужно, чтобы работало без доп ограничений в любой среде с GI, то используется cluster registry.
...
Рейтинг: 0 / 0
19.01.2022, 01:49
    #40127641
Вячеслав Любомудров
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SHELL цикл
Насколько помню, одна из рекомендаций избавиться от мусора, добавляемого агентом -- это запретить запись владельцу (chmod u-w /var/opt/oracle/oratab)
...
Рейтинг: 0 / 0
Форумы / Oracle [игнор отключен] [закрыт для гостей] / SHELL цикл / 10 сообщений из 10, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]