Настройка сети (Настройка слущающего процесса Listener)
2 конфигурационных файла отвечают за подключение к Oracle.
Один обязательный (listener.ora) и один скорее для удобства, но для работы некоторых программ, он также может быть обязательным (tnsnames.ora).
По умолчанию файлы хранятся:
listener.ora
LISTENER = (DESCRIPTION_LIST = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = hostname.domain.com)(PORT = "port_number")) ) ) ) SID_LIST_LISTENER = (SID_LIST = (SID_DESC = (GLOBAL_DBNAME = SID1) (ORACLE_HOME = /u01/app/oracle/product/11.2) (SID_NAME = SID1) ) (SID_DESC = (GLOBAL_DBNAME = SID2) (ORACLE_HOME = /u01/app/oracle/product/11.2) (SID_NAME = SID2) ) )
tnsnames.ora
В данном файле описываются подробности подключения к базе данных. Т.о, становится возможным явно не указывать некоторые параметры. (Например, хост, порт и др.). И сразу обращаться по имени.
SID1 = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = hostname.domain.com)(PORT = "port_number")) ) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = SID1) ) ) SID2 = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = hostname.domain.com)(PORT = "port_number")) ) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = SID2) ) )
// Должен работать (Но это не точно) $ tnsping SID2
В следующем примере, происходит подключение к базе данных с использованием записи с именем orcl в файле tnsnames.ora.
Т.е. для подключения к базе, не приходится дополнительно вводить host, port, sid
Основные команды службы слушателя (Listener):
$ lsnrctl status $ lsnrctl stop $ lsnrctl start $ lsnrctl restart
Информация о Listener из командной строки:
$ ps -edf | grep tns root 13 2 0 Aug09 ? 00:00:00 [netns] oracle12 6604 1 0 Aug09 ? 00:00:02 /u01/oracle/grid/12.1/bin/tnslsnr LISTENER -no_crs_notify -inherit oracle12 16991 14456 0 09:26 pts/1 00:00:00 grep tns
$ lsnrctl services LSNRCTL for Linux: Version 12.1.0.2.0 - Production on 15-AUG-2015 15:09:04 Copyright (c) 1991, 2014, Oracle. All rights reserved. Connecting to (ADDRESS=(PROTOCOL=tcp)(HOST=)(PORT=1521)) Services Summary. Service "+ASM" has 1 instance(s). Instance "+ASM", status READY, has 1 handler(s) for this service. Handler(s): "DEDICATED" established:0 refused:0 state:ready LOCAL SERVER Service "orcl12XDB" has 1 instance(s). Instance "orcl12", status READY, has 1 handler(s) for this service. Handler(s): "D000" established:0 refused:0 current:0 max:1022 state:ready DISPATCHER (ADDRESS=(PROTOCOL=tcp)(HOST=piter.localdomain)(PORT=60254)) Service "slave" has 1 instance(s). Instance "orcl12", status READY, has 1 handler(s) for this service. Handler(s): "DEDICATED" established:0 refused:0 state:ready LOCAL SERVER Service "slave_DGB" has 1 instance(s). Instance "orcl12", status READY, has 1 handler(s) for this service. Handler(s): "DEDICATED" established:0 refused:0 state:ready LOCAL SERVER The command completed successfully
Информация о Listener из консоли sqlplus:
SQL> show parameter local_listener; NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ local_listener string LISTENER_ORCL12
SQL> show parameter listener NAME TYPE ------------------------------------ --------------------------------- VALUE ------------------------------ listener_networks string local_listener string remote_listener string
SQL> alter system set local_listener='(DESCRIPTION =(ADDRESS = (PROTOCOL = TCP)(HOST = moscow.localdomain)(PORT = 1521)))' scope=both;
OFFTOPIC Listener для grid
$ srvctl status listener Listener LISTENER is enabled Listener LISTENER is running on node(s): piter
$ srvctl config listener Name: LISTENER Type: Database Listener Home: /u01/oracle/grid/12.1 End points: TCP:1521 Listener is enabled.
Способ настроить tnsnames, предложенный в чате:
connect / as sysdba alter session set container=pdb_a; alter system register;
После этого она зарегается в листенере, если до этого её не было.
В tnsnames.ora: (ip адрес только поправь)
pdb_a = (DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP) (HOST=10.1.1.14) (PORT=1521))) (CONNECT_DATA=(SERVICE_NAME=pdb_a)))
Tags: Oracle Database, Network, Listener
Oracle DBA
Собираем также материалы по: SQL & PL/SQL
Лучше потратить какое-то количество времени, чтобы записать успешный опыт, чем потом повторно воспроизводить его по памяти.
Все материалы обновляются по мере нахождения лучших практик и апгрейда знаний. Если будут желающие добавлять свои знания или исправлять ошибки и неточности, пишите в телеграм чате. Если будет учавствовать больше людей, качество материалов будет улучшаться и обновляться быстрее. Ссылки на ваши профили в соц. сетях будут добавлены в статьях, в которых вы учавствуете.
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.
Почему не соединяется клиент с базой данных Oracle?
Добрый всем! Выручайте, проблема такая. Есть сервер Oracle 11G enterpise, он установлен на операционной системе Centos 6. База данных запущена и функционирует на нем. Открыл порты 1158 и 1521. На другую машину Windows7 был установлен Оracle client. В файле /etc/hosts на Centos и в файле c. etcdriverhosts на Windows соответственно, прописан мой тестовый сервер centos6.dbaora.com. Пинг от Windows7 до Centos6 проходит по имени сервера. Так вот когда в клиенте Oracle пытаюсь подключиться через Oracle Net Configuration Assistan то пишет ошибка соединения при этом логин и пароль ввожу верный. В чем может быть проблема? Спасибо. P.s добавил скриншоты и логи.
pastebin.com/auMFPKeg
pastebin.com/LNsFWYEM
- Вопрос задан более трёх лет назад
- 2864 просмотра
1 комментарий
Оценить 1 комментарий
Для начала проверьте с клиента: telnet centos6.dbaora.com 1521
Решения вопроса 0
Ответы на вопрос 1
По пунктам:
1. Пробуй подключиться к БД локально (подключаешься по SSH, в командной строке su — oracle, прыгаешь в папку размещения sqlplus, запускаешь sqlplus /nolog, далее conn / as sysdba, вводишь пароль SYS’a.
Если, ОК значит БД может принимать подключения.
Заодно проверь, что экземпляр запущен.
2. Там же из SSH пробуй подключиться через листенер (sqlplus /nolog, вводишь sys@имя_БД, если получишь приглашение на ввод пароля, то всё ОК.
3. Если нет, то tnsping имя_БД. Если пинга нет, то настраивай tnsnames.ora. Рекомендую хранить только один экземпляр файла с таким именем на хосте. Путь к файлу можно задать через переменную окружения TNS_ADMIN.
4. Если в п.2. ОК, то повтори п.3 с удаленного хоста.
5. Если в п.4. ОК, то выгони инопланетян из компьютера)
6. Если в п.4 не ОК. Пробуй сначала «telnet имя_хоста 1521». Есть приглашение — есть доступ к хосту. Нет приглашения — кури файрвол.
7. Если есть доступ к хосту и нет связи, настраивай удаленный tnsnames.ora. Рекомендации теже.
tnsnames.ora расположен в ORA_HOME/NETWORK/ADMIN или по пути в переменной окружения TNS_ADMIN.
Вот пример одной настройки из файла
Имя_БД=
(DESCRIPTION=
(ADDRESS=(PROTOCOL=TCP)(HOST=IP_хоста_или_доменное_имя)(PORT=1521))
(CONNECT_DATA=(SID=SID_БД)(SERVER=DEDICATED))
)
SID_БД можно глянуть командой lsnrctl status в командной строке по SSH
Ответ написан более трёх лет назад
Комментировать
Нравится 2 Комментировать
Ваш ответ на вопрос
Войдите, чтобы написать ответ
- Linux
- +2 ещё
Есть утилита для мониторинга UPS?
- 2 подписчика
- 6 часов назад
- 95 просмотров
Установка и настройка 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
- Администрирование баз данных