Всех приветствую.
Подскажите куда копать. Особо не понимаю Oracle поэтому часть терминов не знаю.
Исходные данные:
Centos 7
Софт zabbix 5.0.2
oracle-instantclient19.8-basic.x86_64
oracle-instantclient19.8-devel.x86_64
oracle-instantclient19.8-odbc.x86_64
oracle-instantclient19.8-sqlplus.x86_64
Собрал zabbix с поддержкой на бэкенде Oracle. Тут никаких проблем.
Залили данные в БД Oracle.
Прописал в конфиге DBHost(тут указал непосредственно удаленный хост с Oracle базой),DBName,DBUser и DBPassword.
Все замечательно сервер читает БД и нормально стартует.
Но охота настроить это всё через TNS_ADMIN, чтобы автоматом переключался zabbix на резервную БД. Как это делает другой софт работая через oracle instant client
Для этого я добавил в файл /etc/profile записи(хотя я думаю это не обязательно так как enveroment я еще прописываю через сервис):
export ORACLE_HOME=/usr/lib/oracle/19.8/client64
export PATH=$PATH:$ORACLE_HOME/bin
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/usr/lib64:/usr/lib:$ORACLE_HOME/bin
export TNS_ADMIN=$ORACLE_HOME/lib/network/admin
Так же прописал enveroment через systemd для zabbix-server(/etc/sysconfog/zabbix-server) с таким содержимым:
ORACLE_HOME=/usr/lib/oracle/19.8/client64
TNS_ADMIN=/usr/lib/oracle/19.8/client64/lib/network/admin
LD_LIBRARY_PATH=/usr/lib/oracle/19.8/client64/lib:/usr/lib64:/usr/lib:/usr/lib/oracle/19.8/client64/bin
Через /prov/pid_zabbix/environ видно, что ENV выставляются
Создал файл /usr/lib/oracle/19.8/client64/lib/network/admin/tnsnames.ora с содержимым:
zabbix.ora.local =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = dc3-srv-dbora1.testdomain.local)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = zabbix.ora.local)
)
)
Соответственно в DBName я указал zabbix.ora.local
Закомментировал DBHost
Как я понимаю хост подключения должен взяться из /usr/lib/oracle/19.8/client64/lib/network/admin/tnsnames.ora
Но в логах zabbix получаю connection to database '//localhost/zabbix.ora.local' failed: [-1] ORA-12541: TNS:no listener
Вот и не понятно почему не идет на хост который указан в tnsname.ora
Думал не может прочитать /usr/lib/oracle/19.8/client64/lib/network/admin/tnsnames.ora, но strace показывает, что zabbix(или эта библиотека) вычитывает данный файл
access("/usr/lib/oracle/19.8/client64/lib/network/admin/tnsnames.ora", F_OK) = 0
stat("/usr/lib/oracle/19.8/client64/lib/network/admin/tnsnames.ora", {st_mode=S_IFREG|0644, st_size=209, ...}) = 0
open("/usr/lib/oracle/19.8/client64/lib/network/admin/tnsnames.ora", O_RDONLY) = 5
...
Не знаю, что еще поправить. Спасайте
З.Ы. dc3-srv-dbora1.testdomain.local - нормально резольвится и нормально с ним работает если указать в zabbix_server.conf DBHost=dc3-srv-dbora1.testdomain.local
А может ли zabbix так работать с TNS_ADMIN(тут я имею ввиду не проверки ODBC, а именно как бэкенд для zabbix)? В скудных ответах гугла некоторые пишут, что у них нормально работает переключения БД, но конкретики нет.