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

Oracleのリプレース(12c→19cへのバージョンアップ)対応中に「Ora-12638 資格証明の取出しに失敗しました」が発生した。

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

このエラー自体は過去に経験したことがあり、原因も対策もググれば大量に出てくる。
Oracleに接続するときには通常、スキーマ名とパスワードを指定するが、Oracleをインストールしたサーバを使用する場合は

> connect / as sysdba

のように指定することで、dba権限でOracleに接続することができる。(OS認証)
OracleクライアントでORA-12638が発生した場合、このOS認証を無効にする設定をすることでエラーを回避できる。OracleクライアントのSQLNET.ORAの内容を下記のように書き換えるだけだ。

SQLNET.AUTHENTICATION_SERVICES= (NTS)

SQLNET.AUTHENTICATION_SERVICES= (NONE)

ところが、今回クライアントのSQLNET.ORAに上記設定をしても、ORA-12638が発生してしまった。

原因

実は、ある特定プログラムを動作させたときにORA-12638が発生していたのだが、Oracleサーバへの接続自体はできていて、動作途中でORA-12638が発生するという状況だった。で、どんな動作をしているときにエラーが発生したかというのを調べてみると、DBリンクを使用している処理だった。

つまり、DBリンク接続元のDB_Aと、接続先のDB_Bがあり、DB_AからDB_Bのオブジェクトを参照しようとしたとき、DB_AがDB_BにOS認証で接続しようとしている、ということのようだ。

対処法

DB_BにとってはDB_Aがクライアントなわけだから、DB_AのSQLNET.ORAで「SQLNET.AUTHENTICATION_SERVICES= (NONE)」を指定すれば良い。
しかしそうすると、DB_AではOS認証できなくなるので、本当にOS認証で接続したい場合に困ってしまう(例えば、リプレース前はRMANによるバックアップスクリプトをOS認証前提で書いていた)。
残念ながらこの解決策は見つからなかった。仕方がないので、リプレース前にOS認証で実施していた作業を、スキーマ名・パスワードを利用して接続するように変更することにした。

発生条件

正確なことはわからないが、リプレース前の構成では発生しなかったので、OSやOracleのバージョンによるものかもしれない。
ちなみに、DB_A、DB_Bとも下記の構成だった。
リプレース前:Oracle12c、Windows Server 2012
リプレース後:Oracle19c、Windows Server 2019

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA