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

80

Я хочу подключиться к базе данных оракула, расположенной на другом хосте, используя sqlplus. На этой странице было предложено добавить элемент в мои tnsnames для подключения к этой базе данных.

local_SID =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL= TCP)(Host= hostname.network)(Port= 1521))
    (CONNECT_DATA = (SID = remote_SID))
  )

а затем использовать это в sqlplus

sqlplus user/pass@local_SID

Однако в моих обстоятельствах изменение локальных имен tnsname невозможно. Можно ли подключиться к удаленной базе данных, просто используя аргумент sqlplus, не меняя tnsnames? Что-то вроде

sqlplus user/pass@remote_SID@hostname.network ;( I know, this one is not valid)
Луис Рис
источник
1
еще короче - sqlplus ИД пользователя / пароль @ база данных
@GlennLong - но в вашей версии databaseвсе еще псевдоним TNS, который должен существовать в tnsnames.ora, так что это то же самое, что Луи пытался избежать?
Алекс Пул

Ответы:

85
 sqlplus user/pass@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(Host=hostname.network)(Port=1521))(CONNECT_DATA=(SID=remote_SID)))

Возможно, и это может зависеть от среды командной строки, которую вы используете, вам нужно заключить строку в кавычки, что-то вроде

 sqlplus "user/pass@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(Host=hostname.network)(Port=1521))(CONNECT_DATA=(SID=remote_SID)))"

или же

 sqlplus 'user/pass@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(Host=hostname.network)(Port=1521))(CONNECT_DATA=(SID=remote_SID)))'
Рене Ниффенеггер
источник
35

Вы можете использовать Easy Connect для этого:

sqlplus usr/pass@hostname.network/remote_service_name

Чтобы включить easy connect на вашем компьютере, вам нужно добавить его NAMES.DIRECTORY_PATH в файл sqlnet.ora, например:

NAMES.DIRECTORY_PATH=(EZCONNECT)

Если ваш слушатель использует порт не по умолчанию, используйте ...@hostname.network:port/....

На самом деле кажется, что вы должны указать имя службы, а не SID; они могут быть одинаковыми, но если нет, вам нужно получить их с сервера.

Алекс Пул
источник
1
Если имя службы совпадает с именем хоста, вам даже не нужно указывать имя службы при подключении. (Практически никто не делает этого, но приятно знать.)
durette
Мертвая ссылка .......
Харви
1
@ Харви - обновил, спасибо.
Алекс Пул
17

Создайте копию файла tnsnames.ora в каталоге, в который вы можете записать, измените файл соответствующим образом, затем установите переменную среды TNS_ADMIN в расположение этого каталога.

например:

cp $ORACLE_HOME/network/admin/tnsnames.ora /tmp/tnsnames.ora
# edit the /tmp/tnsnames.ora file to add your entries

# Set the $TNS_ADMIN environment variable so that sqlplus knows where to look 
export TNS_ADMIN=/tmp
Philᵀᴹ
источник
2
Это намного, намного лучший ответ
Эндрю Сани
Этот подход работает с системой, в которой не установлена ​​инфраструктура Oracle, кроме клиента sqlplus. Просто скопируйте tnsnames.ora с сервера базы данных и следуйте указаниям Фила.
theRiley
3

В системе Unix / Linux вы можете использовать файлы конфигурации уровня пользователя для переопределения записей уровня системы.

Уровень системы Уровень пользователя 
Файл конфигурации Файл конфигурации
------------------ -------------------
sqlnet.ora $ HOME / .sqlnet.ora
tnsnames.ora $ HOME / .tnsnames.ora

Файлы конфигурации системного уровня можно найти в каталоге $TNS_ADMIN. Если переменная TNS_ADMINне установлена, то они ищутся в каталоге $ORACLE_HOME/network/admin.

Файлы конфигурации уровня пользователя не заменяют файлы конфигурации уровня системы в целом (так как TNS_ADMINкаталог заменяет весь $ORACLE_HOME/network/adminкаталог), но они добавляют или изменяют записи файлов конфигурации уровня системы. Если запись существует в файле конфигурации на уровне пользователя, то используется эта запись, если она не существует в файле конфигурации на уровне пользователя, то используется запись в файле конфигурации на уровне системы.

miracle173
источник