Rhel 7でOracle 12cを構成しました。次のコマンドを使用してデータベースに接続しようとすると、問題なく接続されます。
sqlplus system/Forest123@orcl
以下に示すように、hostname
とport
を使用して接続文字列を配置しようとすると、問題が発生します。
sqlplus system/Forest123@localhost:1521/orcl
発生したエラーは
ORA-12514:TNS:リスナーは現在、接続記述子で要求されたサービスを認識していません
私は以前に尋ねられた質問を経験しましたが、どれも私がこの問題を解決するのを助けませんでした。
以下は私のtnsnames.ora
、sqlnet.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
次のエラーメッセージがあるため、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 stop
とlsnrctl start
を実行してリスナーを再起動し、次のコマンドを使用してデータベースに接続してみます
export Oracle_SID=orcl
sqlplus system/Forest123
以下のプロセスは私の問題を解決しました。
sqlplus/as sysdbaコマンドを使用してサーバーに接続します
SQL> show parameter local_listenerコマンドを使用して、ローカルリスナーが存在するかどうかを確認します。私にとってlocal_listenerの値は空です
SQL> alter system set local_listener = '(ADDRESS =(PROTOCOL = TCP)(Host = LOCALHOST)(PORT = 1521))' scope = both;コマンドを使用して、リスナーを動的に設定します
次に、alterコマンドを使用して登録しますSQL> alter system register;
次に、リスナーが追加されているかどうかを確認しますSQL> show parameter local_listener。これで、リスナーはValue = (ADDRESS =(PROTOCOL = TCP)(Host = LOCALHOST)(PORT = 1521))で正常に追加されます
ローカルリスナーを追加した後、正常に接続できます。
ホストが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))
以下は私のために働きました:
services.msc
を使用してチェックされたサービスOracleOraDB12Home1TNSListener
およびOracleServiceORCL
を再起動しましたその後、SQL開発者を使用して接続しました。動いた!