web-dev-qa-db-ja.com

ORA-12505、TNS:listenerは現在、ポート番号を変更した後、SIDを認識していません

Oracletnslsnrのポート番号をデフォルトから他のポートに変更しようとしています。 tnslsnrのポート番号を1521から2000に変更した後、ORA-12505の取得を開始しましたが、TNS:listenerは現在JDBCドライバーからのSIDを認識していません。ポートが1521である限り、すべてが正常に機能します。

私のlistener.oraファイルの内容:

# Generated by Oracle configuration tools.
LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(Host = localhost.localdomain)(PORT = 2000))
  )
)

私のtnsnames.oraファイルの内容:

TESTDB =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(Host = localhost.localdomain)(PORT = 2000))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = testdb.localdomain)
    )
 )

接続しようとしているJDBCURL:jdbc:Oracle:thin:@testhost:2000:testdb

データベースのバージョンは12c、OSはCentOS5.8です。

1
user2391

TNSNAMESは「接続情報の抽象化」です。これは、ホスト名、フェイルオーバー情報、ポート番号、サービス名を非表示にする場所であり、神は何を知っていますか。

ホスト名、ポート、およびsidを使用して接続するのはなぜですか?

 jdbc:Oracle:thin:@testhost:2000:testdb

ねえ! TNSNAMESを使用していないためです!接続文字列はホスト接続です。ホスト接続はホストに直接接続され、tnsnames.oraファイルを通知しません。 (JDBCにそこを見るように指示していません...)

次に、SIDを指定してOracleデータベースに接続することはお勧めしません。むしろ、SERVICE_NAMEを指定してください。 (12cの場合、SIDを使用しないでください)

 jdbc:Oracle:thin:@testhost:2000/SERVICE_NAME  

インスタンスのservice_nameを識別するには:

$sqlplus / as sysdba
SQL>show parameter service

JdbcにTNSNAMESを利用するには、以下を参照してください ここ

リスナーはポート2000でリッスンしていますか?

#netstat -tulpn | grep :2000

インスタンスは、デフォルトのポート値1521でリスナーに登録しようとします。これは動的インスタンス登録と呼ばれます。デフォルト以外のポート値を使用すると、リスナーへの登録は失敗します。これを調整するために、initパラメーターLOCAL_LISTENERが次のように表示されます。

$sqlplus / as sysdba     
SQL>alter system set LOCAL_LISTENER='(ADDRESS =(PROTOCOL=TCP)(Host=localhost)(PORT=2000);

今それは動作します。 100%

LOCAL_LISTENERパラメーターの詳細な説明については、 ここ に移動してください

0
Bjarte Brandt