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です。
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パラメーターの詳細な説明については、 ここ に移動してください