Чому я не можу підключитися до sqlplus, коли вказую SID і пароль ORACLE з командного рядка?


1

У мене 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@ORACLE_SID це допоможе? Згідно Використання командного рядка SQL вони дають приклад: sqlplus hr/my_hr_password@host_computer_name тому я вважаю, що це лише питання синтаксису, але достатньо просте, щоб спробувати усунути як рішення як мінімум. Дозвольте мені знати, як це відбувається, і я буду радий додати як відповідь більш докладно, якщо це вирішить проблему, просто позначте мене назад.
Pimp Juice IT

Це все одно Підключення не вдалося, оскільки цільовий хост або об'єкт не існує "Помилка або щось інше? Чи спробували ви також ввести номер порту і ім'я хоста тощо в цьому форматі sqlplus ourdbuser/ourpassword@OracleHostServer:1521/@ORACLE_SID? The OracleHostServer має бути DNS-ім'я сервера, на якому знаходиться екземпляр Oracle, або його IP-адреса, доступна з машини, яку ви запускаєте.
Pimp Juice IT

Коли я спробую команду у вашому першому коментарі, я отримую те ж саме 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, і всі вони призводять до тієї самої помилки.
pacoverflow

Прочитайте деякі з цих відповідей, щоб дізнатися, чи допомагає це: stackoverflow.com/questions/10786782/…
Pimp Juice IT

1
Виходить, що sqlplus ourdbuser/ourpassword@localhost:1521/$ORACLE_SID працював, що дещо відрізняється від запропонованого. Але тоді я дізнався, що це не справжня проблема. Справжня проблема полягає в тому, що хтось змінив домен сервера після встановлення Oracle. The HOST Значення в файлах listener.ora і tnsnames.ora мали повне доменне ім'я, і ​​вони не відповідали тому, що hostname команда повернулася. Після виправлення цих 2 файлів, все знову працювало.
pacoverflow

Відповіді:


1

Я взяв пропозицію Pimp Juice IT використовувати іншу команду sqlplus ( sqlplus ourdbuser/ourpassword@localhost:1521/$ORACLE_SID ), і це спрацювало.

Проте це було лише тимчасовим шляхом для справжньої причини проблеми, яка була виявлена ​​після перезавантаження сервера і запуску слухача Oracle. Справжня проблема полягала в тому, що домен сервера був змінений після встановлення Oracle.

The hostname команда показала новий домен сервера:

server1.zzz.bbb.ccc.com

Але файл $ ORACLE_HOME / network / admin / listener.ora містив старий домен:

LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = server1.aaa.bbb.ccc.com)(PORT = 1521))
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
    )
  )

Файл $ ORACLE_HOME / network / admin / tnsnames.ora також зробив:

LISTENER_OURSID =
  (ADDRESS = (PROTOCOL = TCP)(HOST = server1.aaa.bbb.ccc.com)(PORT = 1521))

OURSID =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = server1.aaa.bbb.ccc.com)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = oursid)
    )
  )

Після зміни домену в цих 2 файлах, слухач Oracle зміг запустити і оригінал sqlplus ourdbuser@$ORACLE_SID/ourpassword команда працювала.

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