下記エラーで困ってこられた方。
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