Ubuntu Oracle Instant Client tnsnames.ora - PullRequest
       100

Ubuntu Oracle Instant Client tnsnames.ora

0 голосов
/ 06 октября 2018

Я недавно настроил Oracle Instant Client в Ubuntu 18.04 и пытаюсь подключиться к базе данных, расположенной на другом сервере, через sqlplus с помощью команды:

sqlplus username@orcl

Я отредактировал свой файл tnsnames.oraв следующем формате:

ORCL= 
 (DESCRIPTION= 
   (ADDRESS=(hostname)(PORT=1521))
   (CONNECT_DATA= 
     (SERVICE_NAME=service_name))) 

И после того, как я введу пароль, он получит сообщение об ошибке:

ORA-12504: TNS:listener was not given the SERVICE_NAME in CONNECT_DATA

Если бы я вручную вводил данные соединения, такие как

sqlplus username/password@orcl:portnumber/service_name

Я собираюсь подключиться, но я не хочу вводить все данные о соединении и оставить только имя пользователя @ host

Я не уверен, что является причиной ошибки, и донНе знаю, нужно ли мне редактировать какие-либо файлы на стороне сервера, где размещена фактическая база данных, чтобы разрешить такое соединение.Спасибо

Ответы [ 2 ]

0 голосов
/ 08 октября 2018

при условии, что вы не хотите вводить пароль;

этот метод обычно выполняется dba'ами, которые входят в систему как ssh-пользователь непосредственно на этот конкретный сервер / хост, где их пароль хранится как hashed-private /открытые ключи (не с удаленных машин)

более простой способ - использовать, например, имя пользователя / пароль sqlplus @ remote_host_ip: 1521 / orcl, но лучше создать псевдоним в файле kshrc / bashrc (и их исходный код) для вышеприведенноготак что вы получаете то, что вам нужно, с меньшим количеством нажатий клавиш.

например: nano .bashrc alias tosql = 'имя пользователя / пароль sqlplus @ remote_host_ip: 1521 / orcl'

0 голосов
/ 06 октября 2018

Если произойдет сбой, как описано, service_name для записи в файле tnsnames.ora неверно.

Я бы сделал копию файла tnsnames.ora в папку и переименовал запись в ORCL во что-тоуникальный для моего теста

oracle @ befb83f389c6: ~ $ mkdir tst oracle @ befb83f389c6: ~ $ cp product / 11.2.0 / xe / network / admin / tnsnames.ora tst / oracle @ befb83f389c6: ~$ vim tst / tnsnames.ora oracle @ befb83f389c6: ~ $ cat tst / tnsnames.ora

tnsnames.ora Файл конфигурации сети:

ONLYFORME = (ОПИСАНИЕ = (АДРЕС = (ПРОТОКОЛ = TCP)) (HOST = befb83f389c6) (PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = XE)))

EXTPROC_CONNECTION_DATA = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = PRO)KEY = EXTPROC_FOR_XE))) (CONNECT_DATA = (SID = PLSExtProc) (PRESENTATION = RO)))

в этот момент tnsping к имени ONLYFORME завершится сбоем, так как клиент не знает о копии имен tnsname.ora file

oracle @ befb83f389c6: ~ $ tnsping ONLYFORME

Утилита TNS Ping для Linux: версия 11.2.0.2.0 - выпуск 06-ОКТ-2018 12: 18: 51

Copyright (c) 1997, 2011Oracle.Все права защищены.

Используемые файлы параметров:

TNS-03505: Не удалось разрешить имя

для компенсации, мы устанавливаем переменную TNS_ADMIN envable

oracle @ befb83f389c6: ~ $ export TNS_ADMIN = / u01 / app / oracle / tst / oracle @ befb83f389c6: ~ $ tnsping ONLYFORME

Утилита TNS Ping для Linux: версия 11.2.0.2.0 - производство06 октября 2018 12: 19: 16

Copyright (c) 1997, 2011, Oracle.Все права защищены.

Используемые файлы параметров:

Используется адаптер TNSNAMES для разрешения псевдонима Попытка связаться (ОПИСАНИЕ = (АДРЕС = (ПРОТОКОЛ = TCP) (HOST = befb83f389c6) (PORT = 1521))) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = XE))) OK (0 мс) oracle @ befb83f389c6: ~ $

теперь tnsping для ONLYFORME работает

соединение сsqlplus, использующий это имя, также отлично работает

oracle @ befb83f389c6: ~ $ sqlplus iasim @ ONLYFORME

SQL * Plus: выпуск 11.2.0.2.0 Производство в субботу, 6 октября 12:22: 43 2018

Copyright (c) 1982, 2011, Oracle.Все права защищены.

Введите пароль:

Подключено к: Oracle Database 11g Express Edition, выпуск 11.2.0.2.0 - 64-разрядная версия

SQL>

чтобы воспроизвести полученную ошибку, мы могли бы указать неизвестное имя службы

oracle @ befb83f389c6: ~ $ cat tst / tnsnames.ora

tnsnames.ora Файл конфигурации сети:

ONLYFORME = (ОПИСАНИЕ = (АДРЕС = (ПРОТОКОЛ = TCP) (HOST = befb83f389c6) (PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = UNKNOWN_XE)))

1067 * EXTPROC_CONNECTION_DATA = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = IPC) (KEY = EXTPROC_FOR_XE)))) (CONNECT_DATA = (SID = PLSExtProc) (PRESENTATION = RO)))
* 6b6686f6696~ $ sqlplus iasim @ ONLYFORME

SQL * Plus: выпуск 11.2.0.2.0 Производство в субботу, 6 октября 12:25:17 2018

Copyright (c) 1982, 2011, Oracle.Все права защищены.

Введите пароль: ОШИБКА: ORA-12514: TNS: слушатель в настоящее время не знает об услуге, запрошенной в дескрипторе соединения

Введите имя пользователя:

на данный момент мы знаем, какой именно файл tnsnames.ora разрешает используемое нами tnsname (ONLYFORME), и мы знаем, где ошибка

надеюсь, это поможет ...

...