Oracle11gのクライアントから、12cのサーバに接続するための手順です。
1.サーバのファイアウォールで、ポート1521の受信を許可する。
確認方法は、クライアントからコマンドでtnsping [ip address]
OK と出力されること。
2.クライアントから接続試行、認証できない
接続試行したエラーメッセージORA-28040: 一致する認証プロトコルがありません
これは11gからサーバに接続できる設定になっていない。サーバの sqlnet.ora にパスワード検証機能の設定を追加する。
SQLNET.ALLOWED_LOGON_VERSION_SERVER=11
(SQLNET.ALLOWED_LOGON_VERSION は非推奨、上記の _SERVER を使用する)
(リスナーの再起動は不要)
3.クライアントから接続試行、パスワードが無効
接続試行したエラーメッセージORA-01017: ユーザー名/パスワードが無効です。ログオンは拒否されました
パスワードが正しくても、改めてパスワード・バージョンを再構成すると解消した。これは ALLOWED_LOGON_VERSION_SERVER の設定変更後に実施する。
SELECT USERNAME, PASSWORD_VERSIONS FROM DBA_USERS;
現在の PASSWORD_VERSIONS は [11G 12C] となっており、11G が含まれるので問題ないと思われたが、[11G 12C] というのは、上記の ALLOWED_LOGON_VERSION_SERVER のパラメータ値だと 12 に該当し、Oracle11gリリース2(11.2.0.3以上)に該当するので要注意。
ALTER USER user IDENTIFIED BY password;
同じパスワードで再設定すると、[10G 11G 12C] (同じくパラメータ値 11 相当)となり、11gのリモートから認証できるようになった。
SQLNET.ALLOWED_LOGON_VERSION_SERVER リファレンス
https://docs.oracle.com/cd/E96517_01/netrf/parameters-for-the-sqlnet-ora-file.html#GUID-1FA9D26C-4D97-4D1C-AB47-1EC234D924AA