Oracle19c

【Oracle19c】「ORA-01017」の解決方法

2022年11月20日

PDBへ接続しようとすると「ORA-01017: ユーザー名/パスワードが無効です。ログオンは拒否されました。」となりました。対処方法をおしえて下さい。

 
こんにちはユキトモです。

 
Oracle12cからマルチテナントが実装されました。

PDB用のローカルユーザーを作成して、sqlplus で接続しようとしたら
 

「ORA-01017: ユーザー名/パスワードが無効です。ログオンは拒否されました。」

 

となる場合があります。

どうすれば接続できるのか説明していきます。

 

この記事でわかること

  • 1.ORA-01017の解決手順

 

ORA-01017のエラー

PDB(プラガブル・データベース)用のスキーマで接続する場合はリスナー経由で接続します。

接続する設定をしておかないと ORA-01017 エラーになります。

 ログイン
# su - oracle
# sqlplus / as sysdba
SQL*Plus: Release 19.0.0.0.0 - Production on 日 11月 27 21:57:10 2022
Version 19.3.0.0.0
Copyright (c) 1982, 2019, Oracle.  All rights reserved.
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.3.0.0.0
に接続されました。

 

 PDBを確認
SQL> show pdbs
    CON_ID CON_NAME                       OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
         2 PDB$SEED                       READ ONLY  NO
         3 ORCLPDB1                       READ WRITE NO

 

 PDBに接続後ユーザを確認
SQL> --PDBにセッションを切り替えます
SQL> alter session set container=ORCLPDB1;
セッションが変更されました。
 
SQL> --ローカルユーザを確認します。
SQL> col username for a20
SQL> col common   for a10
SQL> select username,common from cdb_users where common= 'NO';
USERNAME             COMMON
-------------------- ----------
PDBUSER1             NO

 

 PDBに接続を試してみる
SQL> --PDBUSER1で接続を試して見ます。
SQL> conn pdbuser1/******
ERROR:
ORA-01017: ユーザー名/パスワードが無効です。ログオンは拒否されました。
警告: Oracleにはもう接続されていません。

 

PDBへ接続するための設定をしていないか
または
リスナーが起動していないのでエラーとなりました。
 

tnsnames.oraを編集

「tnsnames.ora」ファイルにPDB接続用の設定を追記します。

step
1
tnsnames.oraの確認

# 筆者の環境では

 $ORACLE_HOME
# su - oracle
$ echo $ORACLE_HOME
/opt/oracle/product/19c/dbhome_1

と設定しているのでこの環境変数を使ってtnsnames.oraのファイルを編集していきます。
 

通常、$ORACLE_HOME/network/admin」配下にtnsnames.oraファイルはあります。
 

# 「$ORACLE_HOME」の環境変数が設定されてない場合はフルパス指定して下さい。

 環境変数設定
# 環境変数設定無しの場合
cd /opt/oracle/product/19c/dbhome_1/network/admin
 
# 環境変数設定ありの場合
cd $ORACLE_HOME/network/admin

 

step
2
「tnsnames.ora」ファイルを編集


 

 tnsnames.ora編集前
vi tnsnames.ora
編集前
ORCLCDB =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = ORCLCDB)
    )
  )

 

編集後
CDBの内容をコピーしてPDB用に作成し接続識別子と「SERVICE_NAME」を変更します。

 tnsnames.ora編集前
ORCLCDB =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = ORCLCDB)
    )
  )
# CDBをコピーして下記のPDB用に編集(赤字の箇所)
ORCLPDB1 =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = ORCLPDB1)
    )
  )

以上で、「tnsnames.ora」ファイルの編集は終わりです。

PDBはリスナー経由で接続を行うのでリスナーの状態を確認します。
 

リスナーの確認

step
1
リスナーの確認

 リスナーの状態確認
[oracle@localhost ~]$ lsnrctl status
LSNRCTL for Linux: Version 19.0.0.0.0 - Production on 27-11月-2022 22:17:57
Copyright (c) 1991, 2019, Oracle.  All rights reserved.
(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=localhost)(PORT=1521)))に接続中
TNS-12541: TNS: リスナーがありません。
 TNS-12560: TNS: プロトコル・アダプタ・エラー
  TNS-00511: リスナーがありません。
   Linux Error: 111: Connection refused
(DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1521)))に接続中
TNS-12541: TNS: リスナーがありません。
 TNS-12560: TNS: プロトコル・アダプタ・エラー
  TNS-00511: リスナーがありません。
   Linux Error: 2: No such file or directory

停止しているので起動して行きます。
 

step
2
リスナー起動

 リスナーの起動
[oracle@localhost ~]$ lsnrctl start
LSNRCTL for Linux: Version 19.0.0.0.0 - Production on 27-11月-2022 22:18:15
Copyright (c) 1991, 2019, Oracle.  All rights reserved.
/opt/oracle/product/19c/dbhome_1/bin/tnslsnrを起動しています。お待ちください...
TNSLSNR for Linux: Version 19.0.0.0.0 - Production
システム・パラメータ・ファイルは/opt/oracle/product/19c/dbhome_1/network/admin/listener.oraです。
ログ・メッセージを/opt/oracle/diag/tnslsnr/localhost/listener/alert/log.xmlに書き込みました。
リスニングしています: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=localhost)(PORT=1521)))
リスニングしています: (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1521)))
(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=localhost)(PORT=1521)))に接続中
リスナーのステータス
------------------------
別名                      LISTENER
バージョン                TNSLSNR for Linux: Version 19.0.0.0.0 - Production
開始日                    27-11月-2022 22:18:16
稼働時間                  0 日 0 時間 0 分 0 秒
トレース・レベル          off
セキュリティ              ON: Local OS Authentication
SNMP                      OFF
パラメータ・ファイル      /opt/oracle/product/19c/dbhome_1/network/admin/listener.ora
ログ・ファイル            /opt/oracle/diag/tnslsnr/localhost/listener/alert/log.xml
リスニング・エンドポイントのサマリー...
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=localhost)(PORT=1521)))
  (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1521)))
リスナーはサービスをサポートしていません。
コマンドは正常に終了しました。

 
起動できました。

step
3
起動後の確認


起動後の確認をします。
 

 リスナーの起動後確認
[oracle@localhost ~]$ lsnrctl status
LSNRCTL for Linux: Version 19.0.0.0.0 - Production on 27-11月-2022 22:18:52
Copyright (c) 1991, 2019, Oracle.  All rights reserved.
(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=localhost)(PORT=1521)))に接続中
リスナーのステータス
------------------------
別名                      LISTENER
バージョン                TNSLSNR for Linux: Version 19.0.0.0.0 - Production
開始日                    27-11月-2022 22:18:16
稼働時間                  0 日 0 時間 0 分 36 秒
トレース・レベル          off
セキュリティ              ON: Local OS Authentication
SNMP                      OFF
パラメータ・ファイル      /opt/oracle/product/19c/dbhome_1/network/admin/listener.ora
ログ・ファイル            /opt/oracle/diag/tnslsnr/localhost/listener/alert/log.xml
リスニング・エンドポイントのサマリー...
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=localhost)(PORT=1521)))
  (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1521)))
リスナーはサービスをサポートしていません。
コマンドは正常に終了しました。

これで、接続する準備ができました。
 

接続確認

 

connectコマンドで接続確認してみます。

 接続確認1
[oracle@localhost admin]$ sqlplus / as sysdba
SQL*Plus: Release 19.0.0.0.0 - Production on 日 11月 27 22:30:11 2022
Version 19.3.0.0.0
Copyright (c) 1982, 2019, Oracle.  All rights reserved.
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.3.0.0.0
に接続されました。
SQL> conn pdbuser1/******@orclpdb1
接続されました。
SQL> show user
ユーザーは"PDBUSER1"です。
SQL> exit

 
sqlplus コマンドでのログインも確認しておきます。

 接続確認2
[oracle@localhost admin]$ sqlplus pdbuser1/******@orclpdb1
SQL*Plus: Release 19.0.0.0.0 - Production on 日 11月 27 22:29:28 2022
Version 19.3.0.0.0
Copyright (c) 1982, 2019, Oracle.  All rights reserved.
最終正常ログイン時間: 木 11月 24 2022 22:30:24 +09:00
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.3.0.0.0
に接続されました。
SQL> show user
ユーザーは"PDBUSER1"です。
SQL> exit

 

まとめ

 

ORA-01017の解決手順

1.tnsnames.oraファイルにPDB用の接続設定がされていること

2.リスナーが起動していること

以上で解決することが分かりました。

未経験から最短でエンジニア転職を目指す

-Oracle19c
-, , ,