В различных средах UX я запускаю несколько сценариев оболочки для сбора информации о версии программного обеспечения и отправляю ее обратно на центральный сервер. Один сценарий делает это для Oracle.
На сервере 12.1.0.2.0 Oracle (система Solaris 11.2) учетная запись владельца oracle может выполнить sqlplus в локальной службе Oracle после запуска oraenv с установленным ORACLE_SID & ORAENV_ASK = нет
Любой из этих синтаксисов работает:
sqlplus oracle_ID/password
sqlplus oracle_ID/password@ORACLE_SID
Однако не oracle владелец аккаунта может использовать только синтаксис
sqlplus user_ID/password
для подключения к локальной службе oracle!
sqlplus 'user_ID/password@"//hostname:1521/ORACLE_SID"'
- синтаксис также работает отлично.
Попытка использования следующий синтаксис нарушен - первый представляет интерес (и работает на всех других Oracle хостах базы данных для всех экземпляров):
sqlplus user_ID/password@ORACLE_SID
- ORA-12504: TNS:listener was not given the SERVICE_NAME in CONNECT_DATA
sqlplus user_ID/password@"/ORACLE_SID"
- ORA-12154: TNS:could not resolve the connect identifier specified
tnsping ORACLE_SID
соединяется со службой OK.
ohost:~$ truss sqlplus user_ID/password@ORACLE_SID
truss: cannot trace set-id or unreadable object file: /apps/oracle/product/12.1.0.2/bin/sqlplus
Было бы лучше иметь один согласованный синтаксис на всех моих серверах для скрипт сбора данных, и мне было любопытно, почему изменение UNIX id может вызвать эту аномалию. Есть идеи или идеи как отлаживать? Thx A.
Обновление: 15 апреля 2020 г. - После того, как больше ответов GoogFu заключается в том, какой «адаптер» используется в учетной записи пользователя для разрешения «псевдонима».
oracle владелец использует ' Адаптер TNSNAMES, тогда как учетная запись монитора использует «HOSTNAME», а метод HOSTNAME отправляет нулевое поле SERVICE_NAME в CONNECT_DATA. Я еще не заметил, почему владелец oracle использует метод TNSNAMES. Я просмотрел переменные окружения оболочки для UNIX идентификаторов, и oraenv настроил все те, которые ссылаются на ORACLE_HOME. Ничего конкретного TNS или "net" не видно ...