2013-02-15 1 views
0

Я установил Oracle на Ubuntu с пользователем ОС oracle. Когда я пытаюсь подключиться к Oracle при входе в систему в качестве другого пользователя операционной системы (кроме oracle), я получаю сообщение об ошибке:Невозможно подключиться к оракулу с разным пользователем ОС

SQL> connect user1/[email protected] 
ORA-12154: TNS:could not resolve the connect identifier specified 

Однако, если я не упоминаю Oracle SID, то я не получаю сообщение об ошибке:

SQL> connect user1/user1 
Connected to: 
Oracle Database 
SQL> 

Я объявил ORACLE_HOME и SID в профиле пользователя. Но это не сработало. Может кто-то, пожалуйста, помогите мне понять проблему.

ответ

1

В некотором смысле у вас действительно нет проблем; вы можете подключаться локально, используя переменные окружения ORACLE_HOME и ORACLE_SID, что прекрасно.

При использовании версии connect user1/[email protected], то orcl является не ваш SID; как объясняется в the documentation, это «идентификатор подключения Oracle Net».

connect_identifier

An Oracle Net connect identifier. The exact syntax depends on the Oracle Net configuration. For more information, refer to the Oracle Net manual or contact your DBA. SQL*Plus does not prompt for a service name, but uses your default database if you do not include a connect identifier.

Таким образом, вы подключаетесь к сетевому соединению, даже если оно находится на одном и том же хосте, а не внутренне с использованием IPC. Вам даже не нужно устанавливать ORACLE_SID, когда вы это делаете, потому что это используется для IPC и не является частью сетевого подключения.

Теперь идентификатор соединения может фактически быть той же строкой, что и ваш идентификатор SID, но это необязательно. Обычно, когда вы используете один термин, например orcl, вы используете «сетевое имя службы», которое определено в вашем файле tnsnames.ora. (В зависимости от того, как naming methods are configured in your sqlnet.ora, который определяет, как разрешен идентификатор соединения, но это все еще самая распространенная конфигурация, я думаю).

Конфигурация Oracle Net может быть сконфигурирована с помощью помощника по настройке netca в качестве пользователя oracle, хотя вы можете создать частный tnsnames.ora, чтобы переопределить это.

Дополнительную информацию о настройке и настройке подключения см. На странице Oracle Net admin guide, а также на SQL*Plus user guide для более короткой версии.

Для того, чтобы ваш user1/[email protected] связи для работы вам потребуется tnsnames.ora запись ищет что-то вроде:

orcl = 
(DESCRIPTION = 
    (ADDRESS = (PROTOCOL=tcp)(HOST=my_host)(PORT=1521)) 
    (CONNECT_DATA = (SERVICE_NAME = orcl))) 

... где my_host это имя DNS или IP-адрес сервера Oracle и 1521 является порт, слушатель настроен на запуск. (Слушатель должен работать, чтобы вы могли также подключаться к этому пути). SERVICE_NAME не обязательно совпадает с вашим SID, но зависит от конфигурации базы данных; команда lsnrctl status покажет, какие имена служб доступны.

Ошибка ORA-12154 сообщает вам, что у вас либо нет файла tnsnames.ora, либо что он не содержит записи для псевдонима orcl.

Как указывает @a_horse_with_no_name, существуют другие формы идентификатора соединения, и для сетевого подключения необязательно нужен файл tnsnames.ora; варианты: explained here.Я просто сосредоточился на том, что вы пытались использовать. Вам не обязательно использовать какие-либо из них, поскольку вы можете подключаться локально.

+0

Одна вещь, о которой стоит упомянуть: вы можете обойтись без использования 'tnsnames.ora', поставив используя полную строку соединения в командной строке (после' @ ') –

+0

@a_horse_with_no_name - действительно, но это было уже длинный и бессвязный (и запутанный), поэтому я просто сосредоточился на методе, который пытался использовать ОП. Я добавил ссылку на альтернативы - спасибо. –