Oracleデータベースを11gから12cに移行しました。 Java 1.5で実行され、ojdbc14.jarを使用するレガシーアプリケーションがあります。
私たちのアプリケーションは、次のようなデータベースへの接続エラーを作成できません。
Java.sql.SQLException: ORA-28040: No matching authentication protocol
ORA-28040:一致する認証プロトコルの例外がありません と答えて、ojdbc14.jarをojdbc6.jarにアップグレードしようとしました。
私は今、次のような別のエラーメッセージがあります:
error: OracleCallableStatement is not public in Oracle.jdbc.driver; cannot be accessed from outside package
import Oracle.jdbc.driver.OracleCallableStatement;
^
error: OracleTypes is not public in Oracle.jdbc.driver; cannot be accessed from outside package
cstmt.registerOutParameter(3,Oracle.jdbc.driver.OracleTypes.CURSOR);
^
Antビルドファイル:
<javac srcdir="${src}" destdir="${classes}" source="1.5" target="1.5">
<classpath refid="cpath" />
</javac>
アプリケーションを機能させるために正確に何をすべきかわからない。
最近、2つの異なるアプリケーションで同じエラーが発生しました。
あなたが参照したのと同じ投稿 -で言及されている2番目の解決策は私たちにとってうまくいきました。
回避策:Oracle/network/admin /sqlnet.oraファイルでSQLNET.ALLOWED_LOGON_VERSION = 8を設定します。
DBAと協力して、データベースサーバーのsqlnet.oraに上記のオプションを設定しました。これで問題は解決しました。私はそれが誰かを助けることを願っています。
私は同じエラーに直面しました。
Ojdbc14.jarを削除せずに解決しました。
ステップ1 : set SQLNET.ALLOWED_LOGON_VERSION=8
ステップ2:変更
Connection conn = (Connection) DriverManager.getConnection("jdbc:Oracle:thin:@server:port:sid", "username", "passwrd");
に
Java.sql.Connection conn = DriverManager.getConnection("jdbc:Oracle:thin:@@server:port:sid", "username", "passwrd");
それはうまくいくでしょう!
Oracle 11
からOracle 12.
に移行した後、私の場合、libディレクトリにはOJDBC14.jar
とOJDBC8.jar
の両方がありました。 古いOJDBC14.jarを削除した後、それは私のために働きました。
アプリケーションをojdbc6に移行する場合、考えられる理由の1つは、古いクラス(古いojdbcバージョンと互換性がある)がクラスを取得していない可能性があることですOracleTypes。最も簡単な方法は、エラーが発生しているクラスからimportステートメントをimport Oracle.jdbc.driver.OracleTypes;からimportOracle.jdbc.OracleTypes;に変更することです。
主な問題は、10gのJDBCシンクライアントがSHA-1認証プロトコルを使用していることです。このプロトコルは12cでは許可されていないため、エラーが発生します。
Oracleでsqlnet.ora
ファイルが見つからなかったため、次のコマンドでファイルを作成する必要がありました。
vi $Oracle_HOME/network/admin/sqlnet.ora
そして、私は以下を追加しました:
SQLNET.ALLOWED_LOGON_VERSION=10
SQLNET.ALLOWED_LOGON_VERSION_CLIENT=10
SQLNET.ALLOWED_LOGON_VERSION_SERVER=10
SQLNET.ALLOWED_LOGON_VERSION=8
SQLNET.ALLOWED_LOGON_VERSION_CLIENT=8
SQLNET.ALLOWED_LOGON_VERSION_SERVER=8
SQLNET.AUTHENTICATION_SERVICES = (NONE)
そのため、リスナーを停止して開始する必要がありました。
lsnrctl stop
lsnrctl start
最後に、データベースを再起動します。
これは回避策にすぎません
すべての接続について、Sqldeveloper(ver。1.5.5)でORA-28040を入手していました。 SQLNET.ALLOWED_LOGON_VERSION = 8を設定しましたが、エラーは解消されませんでした。次に、「ツール」->「設定」->「データベース」->「詳細パラメータ」で「OCI /シックドライバを使用」を有効にしました。それがトリックでした。
Oracle 12cに移行した後、DBへの接続に問題がありました。エラーは次のとおりです。Java.sql.SQLException:ORA-28040:一致する認証プロトコルがありません。このパラメータSQLNET.ALLOWED_LOGON_VERSION = 8を設定した後、解決されました。
どうもありがとうございました
11gから12cに移行したときにこのエラーが発生しました。「サーバー名」を送信することで、正しい応答を得ることができます(これは、cmdで確認する必要がある最初のステップです)。この後、データベースサーバーが64ビット要求のみを処理できるようになっていることがわかります(私の場合、WinSQLを使用していて、常に32ビットをチェックします)。したがって、これを修正するには、管理者に32ビット要求のサーバーを作成するように依頼するか、SQL開発者に移動してください。