SQL*PlusでPDBに接続する際にエラーが発生する

この記事ではPDB接続時に「ORA-01017」のエラーが発生した場合の対処法を解説します。

 PDB接続時に「ORA-01017」のエラーが発生

SQL*PlusでPDBに接続しようとすると「ORA-01017」のエラーが発生し、接続できませんでした。

C:\Users\XXX>sqlplus / as sysdba
SQL*Plus: Release 21.0.0.0.0 - Production on X x月 xx xx:xx:xx xxxx
Version 21.3.0.0.0
Copyright (c) 1982, 2021, Oracle.  All rights reserved.
Oracle Database 21c Express Edition Release 21.0.0.0.0 - Production
Version 21.3.0.0.0
に接続されました。
SQL> alter session set container = xepdb1;
セッションが変更されました。
SQL> show con_name
CON_NAME
------------------------------
XEPDB1
SQL> conn test
パスワードを入力してください:
ERROR:
ORA-01017: ユーザー名/パスワードが無効です。ログオンは拒否されました。

エラー内容を確認すると、ユーザ名、パスワードが無効と記載があります。

しかしユーザ名、パスワードを確認しても間違っていませんでした。

このエラーの原因は、PDBへの接続がTNS経由の接続しか受け付けていないためです。

PDBへローカル接続で接続しようとしたために、このエラーが発生しました。

PDBのユーザーでPDBへ接続する場合はtnsnames.oraにPDBの定義を追加し、TNS接続する必要があります。


 対処法

tnsnames.oraにpdb接続用の情報を追記します。

XEPDB1 =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = XXXXXXXXXXXX)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = XEPDB1)
    )
  )


PDBへTNS接続します。

C:\Users\XXX>sqlplus /nolog
SQL*Plus: Release 21.0.0.0.0 - Production on X x月 xx xx:xx:xx xxxx
Version 21.3.0.0.0
Copyright (c) 1982, 2021, Oracle.  All rights reserved.
Oracle Database 21c Express Edition Release 21.0.0.0.0 - Production
Version 21.3.0.0.0
に接続されました。
SQL> conn test@xepdb1
パスワードを入力してください:
接続されました。
SQL> show user
ユーザーは"TEST"です。
SQL> show con_name
CON_NAME
------------------------------
XEPDB1

もちろん「sqlplus test@xepdb1」のように直接接続しても問題ありません。