Як використовувати sqlplus для підключення до бази даних Oracle, розташованої на іншому хості, не змінюючи мої власні tnsnames.ora


80

Я хочу підключитися до бази даних oracle, розташованої на іншому хості за допомогою sqlplus. На цій сторінці запропоновано додати елемент до моїх імен tns, щоб зв’язатися з цією базою даних

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

а потім використовувати це в sqlplus

sqlplus user/pass@local_SID

Однак, за моїх обставин, змінити локальні tnsname неможливо. Чи можливо підключитися до віддаленої бази даних просто за допомогою аргументу sqlplus, не змінюючи tnsname? Щось на зразок

sqlplus user/pass@remote_SID@hostname.network ;( I know, this one is not valid)

1
ще коротше - sqlplus userid / password @ database

@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

Для цього ви можете використовувати просте підключення :

sqlplus usr/pass@hostname.network/remote_service_name

Щоб увімкнути просте підключення на вашій машині, потрібно додати його до NAMES.DIRECTORY_PATH in sqlnet.ora, наприклад:

NAMES.DIRECTORY_PATH=(EZCONNECT)

Якщо ваш слухач не використовує порт за замовчуванням ...@hostname.network:port/....

Насправді, здається, вам потрібно вказати назву послуги, а не SID; вони можуть бути однаковими, але якщо ні, то вам не потрібно буде отримувати це від сервера.


1
Якщо ім'я служби збігається з ім'ям хоста, вам навіть не потрібно вказувати ім'я служби під час підключення. (Практично ніхто цього не робить, але приємно це знати.)
durette

Мертве посилання .......
Харві

1
@Harvey - оновлено, дякую.
Алекс Пул

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

2
Це набагато, набагато краща відповідь
Ендрю Санди

Цей підхід працює з системою, в якій не встановлена ​​інфраструктура Oracle, крім клієнта sqlplus. Просто скопіюйте файл tnsnames.ora з сервера db та виконайте процес Філа.
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каталог), але вони додають або змінюють записи файлів конфігурації на системному рівні. Якщо запис існує у файлі конфігурації на рівні користувача, тоді використовується цей, якщо він не існує у файлі конфігурації рівня користувача, тоді використовується запис конфігураційного файлу на системному рівні.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.