Установка и настройка Oracle Internet Directory для разрешения имен баз данных
О настройке доступа к СУБД Oracle, который хранится в файле tnsnames.ora известно каждому, кто работал с этим типом СУБД.
Данные хранятся в файле tnsnames.ora в обычном текстовом виде и легко могут быть изменены с помощью любого текстового редактора. Хорошо если записей в нем не много, а что делать, если в организации сотни баз данных, доступы к которым нужно предоставлять с хостов пользователей различных уровней или с терминальных серверов. А если в один прекрасный момент база переезжает на другой хост, или происходят другие изменения, меняющие параметры доступа к БД, нужно изменить параметры доступа везде.
Решений предложить можно множество, включая редиректы, алиасы и т.п.
Я здесь опишу как установить и настроить единое хранилище для разрешения имен баз данных с помощью Oracle Internet Directory OID, и как обращаться за разрешением имен по LDAP-протоколу. Это гораздо удобнее, чем держать актуальным файл tnsnames.ora в сотни мест.
Установка и настройка СУБД для БД репозитория OID здесь не описывается, указываются ключевые моменты важные именно для этой конфигурации. С лицензионной политикой компании Oracle в части продуктов RDBMS Database, Oracle Fusion Middleware и Oracle Internet Directory вы можете ознакомится на сайте компании.
Установка ПО
Установка ПО производилась на ОС Linux (SUSE Linux Enterprise Server 11 ), для вашей ОС необходимо сверится с матрицей совместимости на сайте oracle.com.
Для установки Standalone сервера (под управлением NodeManager) были взяты следующие версии дистрибутивов, актуальные на момент настройки:
JAVA: jdk-8u171-linux-x64.tar.gz
OID: fmw_12.2.1.3.0_oid_linux64_Disk1_1of1.zip
RDBMS: 12.1.0.2 +PSU +Opatch актуальных версий
Устанавливаем ПО для репозитария, в котором будут храниться схемы OID
СУБД версии 12.1.0.2+PSU
БД. Созадем «пустую» БД:
Необходимо указать
кодировка AL32UTF8, включить ORACLE TEXT в установку ПО
параметры БД:
open_cursors=800
processes=500
Дополнительно потребовалось прогнать скрипт xaview.sql, что выяснилось на этапе проверки установки OID.
конфигурируем и поднимаем LISTENER для базы данных.
Итак, пустая БД создана uhost-oid1:1521/oid1 (в данном случае oid1- SID БД) и готова к созданию в ней репозитария.
Установка OID
Здесь и далее домашний каталог пользователя oracle — /u/app/oracle
Распаковываем java и задаем переменную JAVA_HOME
unzip jdk-8u171-linux-x64.tar.gz export JAVA_HOME=/u/app/oracle/jdk1.8.0_171
unzip fmw_12.2.1.3.0_oid_linux64_Disk1_1of1.zip
Получается файл ./fmw_12.2.1.3.0_oid_linux64.bin
Проверяем, что он исполняемый, если это не так делаем
chmod +x
./fmw_12.2.1.3.0_oid_linux64.bin
(предварительно должны быть настроен проброс X-сервера), запустится java-based инсталлятор.
В качестве ORACLE_HOME было указано:
По этому пути установится ПО для oracle fusion middleware (FMW) и Oracle Internet Directory.
На этапе «тип инсталляции» указываем STANDALONE.

Создаем репозитарий (необходимые схемы в БД)
Создаем схемы для репозитария в БД, для этого запускаем rcu
cd /u/app/oracle/product/middleware/Oracle_IDM1/oracle_common/bin/ ./rcu.sh
На этом этапе создаются схемы ODSSM, ODS и DEV_STB (запоминаем пароль, он потребуется при настройке компонентов домена)
Создаем домен, в котором у нас будет работать OID (домен в терминах FMW)
cd /u/app/oracle/product/middleware/Oracle_IDM1/oracle_common/common/bin ./config.sh
Домен создаем в отдельную от ПО папку. Например указываем так:


Для коннекта к БД указываем параметры ранее созданных схем (и паролей)
При установке задаем логин и пароль для NodeManager (будет в дальнейшем использоваться для коннекта к NodeManager и запуска/останова через него самого OID)
Запуск NodeManager
Для запуска NodeManager нужно сгенерировать файл с ключами: DemoIdentity.jks. (Если кроме установки OID вы поставите обновления, то возможно этот шаг не понадобится)
Генерировать будем «умолчательный», что бы пока не мучатся с параметрами загрузки хранилища ключей в конфиге домена. С такими параметрами работает – это пароль для хранилища по умолчанию:
cd /u/app/oracle/product/middleware/Oracle_IDM1/oracle_common/common/bin
. setWlstEnv.sh
(обязательно с точкой, по-другому не работает)
Переходим в директорию, в которой должен храниться файл:
cd /u/app/oracle/config/domains/oid_domain/security java utils.CertGen -keyfilepass DemoIdentityPassPhrase -certfile democert -keyfile demokey -strength 1024 -noskid java utils.ImportPrivateKey -keystore DemoIdentity.jks -storepass DemoIdentityKeyStorePassPhrase -keyfile demokey -keyfilepass DemoIdentityPassPhrase -certfile democert.pem -keyfile demokey.pem -alias demoidentity
Ключевая фраза DemoIdentityPassPhrase именно такая, иначе придется править конфиг домена.
Нужно разобраться и с этим, но надо сначала запустить, чтобы работало.
export TNS_ADMIN=/u/app/oracle/config/domains/oid_domain/config/fmwconfig/components/OID/config
Нужно, чтобы сконфигурировать сам OID, иначе домен не сможет подключиться к БД репозитария (см.Проблема1)
export LD_LIBRARY_PATH=/u/app/oracle/product/middleware/Oracle_IDM1/lib:$LD_LIBRARY_PATH
нужен для того, чтобы нашлись нужные библиотеки и подтянулись из нужного ORACLE_HOME
Если что, проверяем с помощью ldd куда смотрят:
ldd /u/app/oracle/product/middleware/Oracle_IDM1/bin/oiddispd
Должно быть на ORACLE_HOME с ПО FMW:
libclntsh.so.12.1 => /u/app/oracle/product/middleware/Oracle_IDM1/lib/libclntsh.so.12.1
Ошибки, если это не так, см. в разделе Проблема2
cd /u/app/oracle/config/domains/oid_domain/bin/ ./setStartupEnv.sh – выставляет доп. переменные окружения ./startNodeManager.sh &
Убедимся, что NodeManager запущен.
Логи и конфигурация: /u/app/oracle/config/domains/oid_domain/nodemanager
Проблема1:
Jun 22, 2018 10:27:58 AM MSK Fatal error in NodeManager server weblogic.nodemanager.common.ConfigException: Identity key store file not found: /u/app/oracle/config/domains/oid_domain/security/DemoIdentity.jks
Решение1: Идем и генерируем DemoIdentity.jks, как описано выше
Проблема2:
Jun 28, 2018 12:20:08 PM MSK INFO /u/app/oracle/config/domains/oid_domain>>
Решение2: устанавливаем переменную TNS_ADMIN и проверяем корректность логина/пароля
Первичная конфигурация OID
К этому моменту должны быть выставлены переменные
TNS_ADMIN
LD_LIBRARY_PATH
Предполагается, что NodeManager уже запущен.
Запускаем утилиту WLST:
cd /u/app/oracle/product/middleware/Oracle_IDM1/oracle_common/common/bin export MW_HOME=$ORACLE_HOME
Довыставляем переменные, которые нужны для работы утилиты WLST
./setHomeDirs.sh ./setWlstEnv.sh ./wlst.sh
дальше с помощью утилиты WLST подключаемся к NodeManager. Нам потребуется логин и пароль, заданные при инсталляции (указанные для NodeManager, у нас это weblogic)
nmConnect(username='weblogic',password='пароль от NodeManager ',domainName='oid_domain')
Пример вывода:
[13:45][uhost-oid1.oracle.:/u/app/oracle/product/middleware/Oracle_IDM1/oracle_common/common/bin]$ ./wlst.sh Initializing WebLogic Scripting Tool (WLST) . Welcome to WebLogic Server Administration Scripting Shell Type help() for help on available commands wls:/offline> nmConnect(username='weblogic',password='*****',domainName='oid_domain') Connecting to Node Manager . Successfully Connected to Node Manager.
Запускаем инициализацию, во время которой создается инстанс с именем oid1.
В строке ниже:
odsPassword – пароль к схеме ODS на базе репозитория, который был задан при выполнении ./rcu
orcladminPassword – пароль который будет использован в качестве cn=orcladmin для доступа к LDAP
realmDN – LDAP –схема, которая будет сконфигурирована
oid_setup(orcladminPassword='****',odsPassword='***',realmDN='dc=mycompany,dc=ru')
После выполнения должен будет создан компонент (инстанс в терминах FMW) с именем oid1
Проблема3:
Лог /u/app/oracle/config/domains/oid_domain/servers/OID/logs/oid1/oidmon*.log
содержит
/u/app/oracle/product/middleware/Oracle_IDM1/wlserver/../bin/oiddispd: error while loading shared libraries: libclntshcore.so.12.1: cannot open shared object file: No such file or directory
Решение3:
Задаем переменную окружения
LD_LIBRARY_PATH=/u/app/oracle/product/middleware/Oracle_IDM1/lib:$LD_LIBRARY_PATH
перезапускаем NodeManager,
запускаем компонент:
cd /u/app/oracle/config/domains/oid_domain/bin/ nohup ./startNodeManager.sh & ./startComponent.sh oid1
Если компонет по этой причине создался но не работает, то убиваем процесс oidmon, изменяем в СУБД параметры статуса процесса:
ps –ef|grep oidmon kill oidmon
sqlplus / as sysdba update ods.ods_process_status set pid=0 where compname='oid1'; update ods.ods_process_status set state=4 where compname='oid1';
./ldapbind -h localhost -p 3060 ./ldapbind -h localhost -p 3131 -U 1 -D 'cn=orcladmin' -w ****
Возможно, придется еще раз выполнить инициализацию oid_setup
Проблема4. При попытке сохранения в NetManager:
oracle.net.common.dataStore.DataStoreException: error writing ServiceAlias to: LDAPDataStore [svr: uhost-oid1.mycompany.ru:3060:3131, type: OID, ctxt: cn=OracleContext,dc=mycompany,dc=ru, home: C:\oracle\product\12.1.0\client_1] original exception message: TNS-04409: Ошибка службы каталогов caused by: oracle.net.config.DirectoryServiceException: TNS-04405: Общая ошибка caused by: oracle.net.ldap.NNFLException original stack trace: oracle.net.config.ServiceAliasException: TNS-04409: Ошибка службы каталогов caused by: oracle.net.config.DirectoryServiceException: TNS-04405: Общая ошибка caused by: oracle.net.ldap.NNFLException oracle.net.config.DirectoryServiceException: TNS-04405: Общая ошибка caused by: oracle.net.ldap.NNFLException oracle.net.ldap.NNFLException

Решение4:
Еще раз прогнать oid_setup
Проверить настройки ldap.ora на клиенте с которого запускается Net Manager
DEFAULT_ADMIN_CONTEXT = «dc=mycompany,dc=ru»
Изменение параметра OID (для разрешения запросов от анонимных пользователей)
Когда создается TNS-имя с помощью net manager, но не работает tnsping.
Создаем файл:
cat anonymousbind.ldif
dn: cn=oid1,cn=osdldapd,cn=subconfigsubentry changetype: modify replace: orclAnonymousBindsFlag orclAnonymousBindsFlag: 1
и модифицируем параметры с помощью этого файла:
ldapmodify -D cn=orcladmin -W -p 3131 -h localhost -f anonymousbind.ldif
Диагностика:
tnsping mytest не работает, a ldapsearch работает
Проверяем доступность портов 3060 и 3131(для SSL)
так все работает (с указанием пароля)
ldapsearch -h uhost-oid1.mycompany.ru -p 3060 -D "cn=orcladmin" -w password_hear -b "cn=mytest,cn=OracleContext,dc=mycompany,dc=ru" -s base "objectclass=*"
mytest – созданный ранее псевдоним.
Настройки клиента
На стороне клиента в $ORACLE_HOME/network/admin ложатся файлы:
ldap.ora
sqlnet.ora
tnsnames.ora
Файл tnsnames.ora содержит «локальные» алиасы, как обычно, и используется, если не найдено имя в LDAP.
Файл sqlnet.ora содержит описание порядка резолва:
sqlnet.ora
SQLNET.AUTHENTICATION_SERVICES= (NTS)
NAMES.DIRECTORY_PATH= (TNSNAMES,LDAP)
Параметры доступа к файлу LDAP задаются в ldap.ora
DIRECTORY_SERVERS = (uhost-oid1.mycompany.ru:3060:3131,rephost-oid1.mycompany.ru:3060:3131) DIRECTORY_SERVER_TYPE = OID DEFAULT_ADMIN_CONTEXT = "dc=mycompany,dc=ru"
В описанной конфигруации используется следующий порядок.
Сначала просматривется файл tnsnames.ora, если запись там не нашлась, то спрашиваем у LDAP (если нужно сменить порядок, меняем порядок в параметре NAMES.DIRECTORY_PATH
Далее идет запрос к основному серверу LDAP, если он недоступен по каким-то причинам, идем ко второму серверу в списке DIRECTORY_SERVERS
Порядок опроса в данном случае не важен, первым лучше указывать территориально ближайший сервер.
Default admin context (LDAP) используется для контекста по умолчанию, чтобы не указывать каждый раз mycompany.ru
По этой же причине не рекомендуется в записи алиаса использовать точку, он ее воспринимает как домен.
Дальше расскажу, как настроить репликацию между серверами
- Oracle
- Администрирование баз данных
Устранение неполадок подключений БД Oracle
![]()
Когда базы данных Oracle не работают, целесообразно проверить подключения к ним.
Периодически приходится проверять, работает ли база данных Oracle. Иногда процесс, запущенный на одном сервере, извлекает данные из базы данных на другом сервере, и, если процесс завершается неудачей, тестирование соединения с базой данных является хорошей отправной точкой для определения того, что пошло не так.
Проверка локальной базы данных
Если база данных находится в локальной системе, сперва проверяем состояние процесса и должны увидеть результат, подобный показанному на скриншоте ниже.
Эти выходные данные говорят нам, что процессы Oracle запущены, включая tnslsnr , часто называемый «прослушивателем» и критически важный для подключения к локальной базе данных. Также можно проверить вывод команды netstat , чтобы увидеть, порт, который «опрашивает» Oracle и использует по умолчанию. Это порт, который должен был открыть «прослушиватель».
Использование tnsping
Другая, потенциально более полезная команда - это tnsping , которая использует информацию из файла БД Oracle tnsnames.ora для проверки возможности подключения. Если, например, набрать команду tnsping ORCL , команда будет искать базу данных с именем службы ORCL, отправит запрос типа ping на настроенный порт и сообщит об ответе. Успешный ответ от tnsping будет выглядеть примерно так:
Обратите внимание на ответ «ОК» в последней строке. Также получен отчет о том, сколько времени потребовалось на ответ. Одиннадцать секунд - быстрый ответ. Если проверялась удаленная система, то потребовалось бы в десять или более раз больше времени, чтобы получить ответ.
Если Oracle прослушивает порт, отличный от 1521, команда tnsping все равно будет работать, предполагая, что файл tnsnames.ora содержит правильную информацию. Запись tnsnames.ora для одной базы данных будет выглядеть примерно так:
Обратите внимание, как имя службы (ORCL), которое использовалось в примере команды tnsping , и порт, на который отвечает «прослушиватель» Oracle (1521), настроены в этом дескрипторе базы данных.
Использование sqlplus
Другая команда, которую любят использовать администраторы БД для проверки связи с базой данных Oracle - это sqlplus . С помощью sqlplus (установленного вместе с Oracle) можно проверить, отвечает ли Oracle, а также и запустить несколько команд sqlplus , чтобы убедиться, что таблицы или их содержимое соответствуют тому, что мы ожидаем увидеть. Команда sqlplus имеет следующую форму для подключения к базе данных Oracle:
sqlplus username/password@SID
SID в этом описании может быть SID или SERVICE_NAME , взаимозаменяемыми в некоторых версиях Oracle. Например, можно ввести:
% sqlplus admin/f0xtrawt@ORCL
Эта команда определяет имя пользователя, пароль и SERVICE_NAME/SID в одной команде. После подключения можно ввести пару команд sql, чтобы убедиться, что база данных работает правильно. Можно подсчитать количество пользовательских таблиц с помощью такой команды:
SQL> select count(*) from user_tables; COUNT(*) ---------- 45
Создание скрипта
Поскольку я не так часто пытаюсь устранить неполадки в базах данных Oracle, я предпочитаю сохранять команды для подключения к конкретной базе данных в виде простого скрипта. Я мог бы назвать скрипт для подключения к локальной базе данных connect2local и аналогичный сценарий для подключения к базе данных на удаленном сервере connect2rem или connect2mars (если удаленная система была названа mars ).
Чтобы облегчить мне использование БД Oracle, я сохраню переменные, которые хочу использовать, в профиле и буду использовать их по мере необходимости:
Мною написанный скрипт будет выглядеть так:
Когда я набираю connect2local , я ожидаю увидеть в ответ OK и возможность остаться в приглашении SQL> , из которого я могу выдавать запросы или набрать quit для выхода. Быстрые тесты, позволяющие определить, реагирует ли база данных Oracle, имеют большое значение для устранения проблем с подключением.
UNIX/Linux tnsnames.ora location Tips
Answer: The tnsnames.ora file in UNIX/Linux is by default in the $ORACLE_HOME/network./admin.tnsnames.ora.
According to the docs, the precedence in which SQL*Net determines the location of the tnsnames.ora file.
Configuration files and the tnsnames.ora location is resolved in the following order:
1. SQL*Net files in present working directory (PWD/CWD)
2. TNS_ADMIN set for each session or by a user-defined DOS script
3. TNS_ADMIN set as a Windows global environment variable
4. TNS_ADMIN as defined in the registry
5. Oracle Net files in %ORACLE_HOME\network\admin
6. (Oracle default location)
Hypercharge Oracle on Linux!
The landmark book "Linux for the Oracle DBA" is a complete guidebook of expert tips and secrets for automating Oracle database administration. It's packed with working Linux scripts and tools to make any DBA look like a guru.

Burleson is the American Team

Note: This Oracle documentation was created as a support and Oracle training reference for use by our DBA performance tuning consulting professionals. Feel free to ask questions on our Oracle forum .
Verify experience! Anyone considering using the services of an Oracle support expert should independently investigate their credentials and experience, and not rely on advertisements and self-proclaimed expertise. All legitimate Oracle experts publish their Oracle qualifications.
Errata? Oracle technology is changing and we strive to update our BC Oracle support information. If you find an error or have a suggestion for improving our content, we would appreciate your feedback. Just e-mail:

and include the URL for the page.
Burleson Consulting
The Oracle of Database Support
Copyright © 1996 - 2020
All rights reserved by Burleson
Oracle ® is the registered trademark of Oracle Corporation.
Что за tnsnames.ora?
Никогда не работал с СУБД Oracle. Однако пришлось. причем пришлось не себе её ставить, а в платежной системе, которую я разрабатывал нужно привязать мобильного оператора для онлай-оплаты. Для этого по их протоколу я должен дергать оракловые процедуры. Это ещё пол беды, думаю разберусь. А что за файл tnsnames.ora? Где его взять? Я сам его должен генерировать или они мне должны представить внутренность этого файла?
VirRaa ★★★
07.01.08 16:19:45 MSK
Re: Что за tnsnames.ora?
gaa ★★
( 07.01.08 16:22:48 MSK )

Re: Что за tnsnames.ora?
Работать с ораклом, совсем не почитав доков - чревато.
svu ★★★★★
( 07.01.08 16:51:36 MSK )
Ответ на: Re: Что за tnsnames.ora? от svu 07.01.08 16:51:36 MSK
Re: Что за tnsnames.ora?
вряд ли в отношение оракла уместно выражение "почитав доков" =)
sa22
( 07.01.08 22:09:09 MSK )

Re: Что за tnsnames.ora?
Ну, вкратце, можно так сказать.. На серверной части, необходимый минимум содержимого генерируется автоматически при создании или портировании какой-либо базы, однако, при необходимости, возможно самому ручками вносить необходимые изменения и дополнения.. На клиентской части необходимые дополнения вносятся ручками..
Короче, он содержит в себе описание необходимых для подключения оракловых сервисов..
Смотри сам - MiracleMan ★★★★★
( 07.01.08 22:39:43 MSK )
Ответ на: Re: Что за tnsnames.ora? от MiracleMan 07.01.08 22:39:43 MSK
Re: Что за tnsnames.ora?
А можно ли собрать без установленного Oracle, php c его поддержкой?
[root@master php-5.2.5]# cat 1 | grep oci
--with-oci8[=DIR] Include Oracle (OCI8) support. DIR defaults to $ORACLE_HOME.
Use --with-oci8=instantclient,/path/to/oic/lib
--with-pdo-oci[=DIR] PDO: Oracle OCI support. DIR defaults to $ORACLE_HOME.
Use --with-pdo-oci=instantclient,prefix,version
--with-pdo-oci=instantclient,/usr,10.2.0.3
VirRaa ★★★
( 08.01.08 06:32:59 MSK ) автор топика
Ответ на: Re: Что за tnsnames.ora? от VirRaa 08.01.08 06:32:59 MSK
Re: Что за tnsnames.ora?
Не правильно задал вопрос. Хотел спросить где взять "подходящий" оракловский клиент? Что бы в пыхпыхе к нему путь прописать при конфигурировании.