web-dev-qa-db-ja.com

ORA-12514:TNS:リスナーは現在、Linuxの接続記述子で要求されたサービスを認識していません

Rhel 7でOracle 12cを構成しました。次のコマンドを使用してデータベースに接続しようとすると、問題なく接続されます。

sqlplus system/Forest123@orcl

以下に示すように、hostnameportを使用して接続文字列を配置しようとすると、問題が発生します。

sqlplus system/Forest123@localhost:1521/orcl

発生したエラーは

ORA-12514:TNS:リスナーは現在、接続記述子で要求されたサービスを認識していません

私は以前に尋ねられた質問を経験しましたが、どれも私がこの問題を解決するのを助けませんでした。

以下は私のtnsnames.orasqlnet.oraおよびlistener.oraファイル。

tnsnames.ora

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

listener.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)

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.localdomain Oracle_12C
2
Abhaya Ghatkar

次のエラーメッセージがあるため、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

notドメインを使用している場合、/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
2
Ahmad Abuhasna

以下のプロセスは私の問題を解決しました。

  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. ローカルリスナーを追加した後、正常に接続できます。

1
prasadg

ホストがlistener.oraおよびtnsnames.oraで0.0.0.0であることを確認してください。

また、以下に示すように、SID_nameをlistner.oraに登録する必要があります。たとえば、SID_NAMEがORCLCDBの場合、listener.oraは次のようになります。

# listener.ora Network Configuration File: /opt/Oracle/product/18c/dbhome_1/network/admin/listener.ora
# Generated by Oracle configuration tools.

LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(Host = 0.0.0.0)(PORT = 1521))
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
    )
  )

SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (GLOBAL_DBNAME = ORCLCDB)
      (Oracle_HOME = /opt/Oracle/product/18c/dbhome_1)
      (SID_NAME = ORCLCDB)
    )
  )

Tnsnames.oraファイルは次のようになります。

# tnsnames.ora Network Configuration File: /opt/Oracle/product/18c/dbhome_1/network/admin/tnsnames.ora
# Generated by Oracle configuration tools.

ORCLCDB =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(Host = 0.0.0.0)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = ORCLCDB)
    )
  )

LISTENER_ORCLCDB =
  (ADDRESS = (PROTOCOL = TCP)(Host = 0.0.0.0)(PORT = 1521))
1
Prateek Sen

以下は私のために働きました:

  • services.mscを使用してチェックされたサービス
  • サービスOracleOraDB12Home1TNSListenerおよびOracleServiceORCLを再起動しました

その後、SQL開発者を使用して接続しました。動いた!

1
user188304