Oracle

ORA-12514: TNS:listener 目前不知道 linux 上的連接描述符中請求的服務

  • March 25, 2022

我已經在 Rhel 7 上配置了 oracle 12c。當我嘗試使用以下命令連接數據庫時,它可以毫無問題地連接:

sqlplus system/Forest123@orcl

當我嘗試將連接字元串放入時遇到問題,hostname如下port所示:

sqlplus system/Forest123@localhost:1521/orcl

發生的錯誤是

ORA-12514: TNS:listener 目前不知道連接描述符中請求的服務

我已經解決了之前提出的問題,但沒有一個能幫助我解決這個問題。

以下是我的tnsnames.ora,sqlnet.oralistener.ora文件。

tnsnames.ora

ORCL =
 (DESCRIPTION =
   (ADDRESS = (PROTOCOL = TCP)(HOST = oracle_12C.localdomain)(PORT = 1521))
   (CONNECT_DATA =
     (SERVER = DEDICATED)
     (SERVICE_NAME = orcl.localdomain)
   )
 )

監聽器.ora

LISTENER =
 (DESCRIPTION_LIST =
   (DESCRIPTION =
     (ADDRESS = (PROTOCOL = TCP)(HOST = oracle_12C.localdomain)(PORT = 1521))
     (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
   )
 )

sqlnet.ora

NAMES.DIRECTORY_PATH= (TNSNAMES, EZCONNECT)

主機文件

127.0.0.1 localhost
127.0.0.1 localhost.localdomain
127.0.0.1 localhost4
127.0.0.1 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
::127.0.0.1 localhost.localdomain localhost
172.31.15.86 oracle_12C.localdomain oracle_12C

由於您收到以下錯誤消息,這意味著hostname不正確和/或您正在使用的域。

如何知道一切是否正常?您需要執行hostname命令,假設輸出為oracle_12C,並執行cat /etc/resolve.con假設域名mydomain.com,然後您需要編輯/etc/hosts如下

127.0.0.1 localhost
127.0.0.1 localhost.localdomain
127.0.0.1 localhost4
127.0.0.1 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
::127.0.0.1 localhost.localdomain localhost
172.31.15.86 oracle_12C.mydomin.com oracle_12C

請注意,如果您使用域,/etc/hosts/則應如下所示

127.0.0.1 localhost
127.0.0.1 localhost.localdomain
127.0.0.1 localhost4
127.0.0.1 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
::127.0.0.1 localhost.localdomain localhost
172.31.15.86 oracle_12C

現在讓我們移動到tnsnames.ora,在此文件中,您需要搜尋您的數據庫部分(在您的問題 orcl 中)將其替換如下(注意您需要在進行任何更改之前從該文件中獲取備份):

ORCL =
 (DESCRIPTION =
   (ADDRESS = (PROTOCOL = TCP)(HOST = <hostname as /etc/hosts>)(PORT = 1521))
   (CONNECT_DATA =
     (SERVER = DEDICATED)
     (SERVICE_NAME = orcl)
   )
     )

如果您有圓頂,請注意主機HOST = oracle_12C.mydomain.com,否則它應該是HOST = oracle_12C

現在保存文件並關閉它。

之後,讓我們移至listener.ora,從中獲取備份並進行如下編輯:

LISTENER =
 (DESCRIPTION_LIST =
   (DESCRIPTION =
     (ADDRESS = (PROTOCOL = TCP)(HOST = <hostname as /etc/hosts>)(PORT = 1521))
     (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
   )
 )

現在通過執行重新啟動您的偵聽器lsnrctl stoplsnrctl start然後嘗試使用以下命令連接到數據庫

export ORACLE_SID=orcl
sqlplus system/Forest123

下面的過程解決了我的問題。

  1. 使用sqlplus / as sysdba命令連接到伺服器
  2. 使用SQL> show parameter local_listener命令檢查本地偵聽器是否存在。對我來說 local_listener 值為空
  3. 使用 SQL 動態設置監聽器> alter system set local_listener=’(ADDRESS=(PROTOCOL=TCP)(HOST=LOCALHOST)(PORT=1521))’ scope=both; 命令
  4. 然後使用 alter 命令進行註冊SQL> alter system register;
  5. 現在檢查是否添加了偵聽器SQL> show parameter local_listener。現在使用 Value = (ADDRESS=(PROTOCOL=TCP)(HOST=LOCALHOST)(PORT=1521))成功添加監聽器
  6. 添加本地偵聽器後,我能夠成功連接。

引用自:https://dba.stackexchange.com/questions/153335