В некотором смысле у вас действительно нет проблем; вы можете подключаться локально, используя переменные окружения 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.Я просто сосредоточился на том, что вы пытались использовать. Вам не обязательно использовать какие-либо из них, поскольку вы можете подключаться локально.
Одна вещь, о которой стоит упомянуть: вы можете обойтись без использования 'tnsnames.ora', поставив используя полную строку соединения в командной строке (после' @ ') –
@a_horse_with_no_name - действительно, но это было уже длинный и бессвязный (и запутанный), поэтому я просто сосредоточился на методе, который пытался использовать ОП. Я добавил ссылку на альтернативы - спасибо. –