ORA-12505
エラーメッセージ
ORA-12505: TNS: リスナーは接続記述子で指定されたSIDを現在認識していません ORA-12505: TNS: リスナーは接続記述子にあるSIDを解決できませんでした。 ORA-12505: TNS:listener does not currently know of SID given in connect descriptor ORA-12505: TNS:listener could not resolve SID given in connect descriptor
基本的なエラーの内容
接続先のリスナーにクライアントからの接続情報に含まれるSIDと結びつくインスタンスが登録されていない場合に出力されます
確認事項および対応
- クライアント側 tnsnames.oraファイルのネット・サービス名の接続情報に含まれるSIDの値を確認します。
- DBサーバ側でlsnrctlユーティリティのservicesコマンドを使用し、SIDに一致するデータベース・サービス登録されていることを確認してください。
- lsnrctl services コマンドでデータベース・サービスがクライアント側tnsnames.oraに設定したSIDと異なる場合、まずDBサーバ側listener.oraファイルのSID_NAMEを確認します。SID_NAMEが設定されている場合は、クライアント側tnsnames.ora内のSIDをSID_NAMEに変更し、再接続します。または、リスナー側SID_NAMEをクライアント側のSIDと同じ値に設定し、リスナーを再起動します(この場合、他のクライアントマシンのtnsnames.oraも変更する必要があります)。
- DBサーバ側listener.oraファイルのSID_NAMEが設定されていない場合は、データベースのSIDがリスナーに動的に登録される必要があります。登録される方法については以下の詳細を確認してください。
クライアント側のみで対応する場合にはtnsnames.ora内の 該当接続文字列の情報の内容から (SID = <sid_name>) の部分を (SERVICE_NAME = <service_name>) に変更することで対応する方法も考えられます。(この場合、同等なエラーとして ORA-12514 が発生する可能性があります)
詳細
クライアント側 tnsnames.oraファイルのネット・サービス名の接続情報でSERVICE_NAMEではなく、SIDが設定されている場合、クライアントはリスナーに登録されているインスタンス名の中からSIDと一致したデータベースに接続します。
リスナーに登録されるインスタンス名は以下のタイミングで登録されます。
- リスナー起動時に、リスナーがlistener.oraファイルを読み込んでSID_NAMEから登録する
- DBサーバ起動時にDBサーバ側がデータベースの初期化パラメータファイルのinstance_nameをデータベースサービスとしてリスナーに登録する。この時登録対象となるリスナーは初期化パラメータ LOCAL_LISTENERで設定されたものとなる。LOCAL_LISTENERが設定されていない場合はデフォルトでPort 1521のリスナーに登録を行う。
- DBサーバ起動時にリスナーが起動していない場合、ある一定の間隔でDBサーバがリスナーに登録の再試行を行う。