ORA-12638 | 江木町の牛舎

江木町の牛舎

~ 田舎者プログラマの日常 ~

下記エラーで困ってこられた方。

ORA-12638: 資格証明の取出しに失敗しました。

sqlnet.oraをNONEに変更しろ、という回答にうんざりしていたら、下記対応で回避できるかもしれません。

鬱の原因の一つが解決しますように。

さて、私の環境は以下の通りでした。

Windows7
Oracle10g
Visualstudio2008
VB.NET

上記環境でOracleに接続した際、1回目はうまくいくのに、2回目の接続でORA-12638が発生してしまいました。

結局、プログラムを1回だけ接続するように分離して回避しましたが、あまりにも不便なので絶対に回避策があると思って調べていました。

しかし、どこを探しても

 sqlnet.oraのAUTHENTICATION_SERVICESをNTSからNONEに直せ

という無駄な回答ばかり。

趣味でやっているわけではなく、仕事で客先の環境で動作させなければならないため、環境を変えろ、というのは意味のない回答です。

そこで、見方を変えてsqlnet.oraの場所を指定できないものかと調べ始めました。

そこで行き着いたのがここです。

http://docs.oracle.com/cd/E16338_01/network.112/b56287/tnsnames.htm

オフィシャルなのでそれなりに安心できる内容です。

上記までで対応方法がわかった方もおられるかと思われますが、要は動作させるプログラム専用のsqlnet.oraを作成すればよいのです。

私の環境では上記サイトで記述しているNTS_ADMINを定義しなくても、実行ファイルと同じディレクトリに独自のsqlnet.oraを置くだけで認識してくれました。

そういう記述は無い様に思われるので、心配な方はやはりNTS_ADMINを定義すると安心できるかと思います。

プログラム内で有効になる環境変数の定義には

Environment.SetEnvironmentVariable

を使用しました。

オフィシャル仕様
https://msdn.microsoft.com/ja-jp/library/z46c489x(v=vs.110).aspx

sqlnet.oraにAUTHENTICATION_SERVICES=(NONE)だけ記述して任意の場所に置き、NTS_ADMIN環境変数でその場所を定義するだけなので、かなり汎用性があるかと思います。

是非お試しください。


ORA-12638
sqlnet.ora
NTS_ADMIN
AUTHENTICATION_SERVICES
NTS
NONE