У мене 2 різних сервера Red Hat з Oracle 12c. На одному з них я можу увійти до sqlplus, вказавши SID і пароль ORACLE з командного рядка:
[root@server1 ~]# $ORACLE_HOME/bin/sqlplus ourdbuser@$ORACLE_SID/ourpassword
SQL*Plus: Release 12.2.0.1.0 Production on Fri Mar 23 20:16:01 2018
Copyright (c) 1982, 2016, Oracle. All rights reserved.
Last Successful login time: Fri Mar 23 2018 20:14:29 +00:00
Connected to:
Oracle Database 12c Standard Edition Release 12.2.0.1.0 - 64bit Production
З іншого боку, він не працює, коли я вказую SID і пароль ORACLE з командного рядка:
[root@server2 ~]# $ORACLE_HOME/bin/sqlplus ourdbuser@$ORACLE_SID/ourpassword
SQL*Plus: Release 12.2.0.1.0 Production on Fri Mar 23 20:16:53 2018
Copyright (c) 1982, 2016, Oracle. All rights reserved.
ERROR:
ORA-12545: Connect failed because target host or object does not exist
Але якщо я не вказую SID і пароль ORACLE з командного рядка, і введу пароль у підказку, він працює:
[root@server2 ~]# $ORACLE_HOME/bin/sqlplus ourdbuser
SQL*Plus: Release 12.2.0.1.0 Production on Fri Mar 23 20:17:17 2018
Copyright (c) 1982, 2016, Oracle. All rights reserved.
Enter password:
Last Successful login time: Fri Mar 23 2018 20:12:25 +00:00
Connected to:
Oracle Database 12c Standard Edition Release 12.2.0.1.0 - 64bit Production
Я намагався побачити, чи є різниця між server1 і server2, і я нічого не знайшов. Server1:
[root@server1 ~]# cat /etc/redhat-release
Red Hat Enterprise Linux Server release 7.3 (Maipo)
[root@server1 ~]# env | grep "ORACLE"
ORACLE_SID=ourdb
ORACLE_HOME=/opt/oracle/product/12.2.0/db
[root@server1 ~]# ls -lrt /opt/oracle/product/12.2.0/db/network/admin/tnsnames.ora
-rw-r-----. 1 oracle oinstall 416 Aug 3 2017 /opt/oracle/product/12.2.0/db/network/admin/tnsnames.ora
[root@server1 ~]# cat /opt/oracle/product/12.2.0/db/network/admin/tnsnames.ora
# tnsnames.ora Network Configuration File: /opt/oracle/product/12.2.0/db/network/admin/tnsnames.ora
# Generated by Oracle configuration tools.
LISTENER_OURDB =
(ADDRESS = (PROTOCOL = TCP)(HOST = server1)(PORT = 1521))
OURDB =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = server1)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = ourdb)
)
)
Server2:
[root@server2 ~]# cat /etc/redhat-release
Red Hat Enterprise Linux Server release 7.3 (Maipo)
[root@server2 ~]# env | grep "ORACLE"
ORACLE_SID=ourdb
ORACLE_HOME=/opt/oracle/product/12.2.0/db
[root@server2 ~]# ls -lrt /opt/oracle/product/12.2.0/db/network/admin/tnsnames.ora
-rw-r-----. 1 oracle oinstall 466 Aug 22 2017 /opt/oracle/product/12.2.0/db/network/admin/tnsnames.ora
[root@server2 ~]# cat /opt/oracle/product/12.2.0/db/network/admin/tnsnames.ora
# tnsnames.ora Network Configuration File: /opt/oracle/product/12.2.0/db/network/admin/tnsnames.ora
# Generated by Oracle configuration tools.
LISTENER_OURDB =
(ADDRESS = (PROTOCOL = TCP)(HOST = server2)(PORT = 1521))
OURDB =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = server2)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = ourdb)
)
)
Що ще потрібно перевірити?
sqlplus ourdbuser/ourpassword@OracleHostServer:1521/@ORACLE_SID
? The OracleHostServer
має бути DNS-ім'я сервера, на якому знаходиться екземпляр Oracle, або його IP-адреса, доступна з машини, яку ви запускаєте.
Connect failed because target host or object does not exist
. Коли я намагаюся покласти в хост / порт, я отримую ORA-12514: TNS:listener does not currently know of service requested in connect descriptor
. БД Oracle знаходиться на одному сервері, і я спробував використовувати localhost, його хост і його IP, і всі вони призводять до тієї самої помилки.
sqlplus ourdbuser/ourpassword@localhost:1521/$ORACLE_SID
працював, що дещо відрізняється від запропонованого. Але тоді я дізнався, що це не справжня проблема. Справжня проблема полягає в тому, що хтось змінив домен сервера після встановлення Oracle. The HOST
Значення в файлах listener.ora і tnsnames.ora мали повне доменне ім'я, і вони не відповідали тому, що hostname
команда повернулася. Після виправлення цих 2 файлів, все знову працювало.
sqlplus ourdbuser/ourpassword@ORACLE_SID
це допоможе? Згідно Використання командного рядка SQL вони дають приклад:sqlplus hr/my_hr_password@host_computer_name
тому я вважаю, що це лише питання синтаксису, але достатньо просте, щоб спробувати усунути як рішення як мінімум. Дозвольте мені знати, як це відбувається, і я буду радий додати як відповідь більш докладно, якщо це вирішить проблему, просто позначте мене назад.