データベース

OracleのPDB接続エラー!サービス名とtnsnamesを確認

  • このエントリーをはてなブックマークに追加
  • LINEで送る

皆さん、こんにちは!

Oracle12cよりマルチテナント構成(CDB・PDB)が導入されました。

11g以前のようにDB接続しようすると…

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

が発生するケースがあります。

『ORA-01017のエラーは解消できるんかな…』

『 どうやってPDBに接続するんだろう な…』

こんな疑問に答えます。

SE歴25年のオッサンが解説するぞい!
SEおっさん
SEおっさん



スポンサーリンク

OracleのPDB接続エラー:ORA-01017の解消方法

プラガブル・データベース(PDB)は、TNS経由の接続しか受け付けません。

更に、TNS経由でもコンテナ・データベース(CDB)の接続文字列では「ORA-01017」エラーになります。

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

なんだかトラップみたいやね
たろちゃん
たろちゃん


SEおっさん
SEおっさん
せやなぁ。
実はおっさんもコレにはヤラれたわ。
プラガブルデータベース(PDB)のサービス名で定義されたTNS接続文字列で接続しなきゃあきまへん


スポンサーリンク

OracleのPDB接続手順:PDBサービス名の確認とtnsnames定義

OracleのPDB接続手順です。

SEおっさん
SEおっさん
PDBサービス名の確認し、
tnsnames定義するのがミソじゃ


  1. lsnrctl statusでプラガブル・データベースのサービス名を確認する

    OS上でコマンド実行(OS…LinuxやWindows)

    lsnrctl status
    …
    (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=XXXXX)(PORT=1521)))に接続中
    バージョン                TNSLSNR for 64-bit Windows: Version 12.2.0.1.0 - Production
    リスニング・エンドポイントのサマリー...
      (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=XXXXX)(PORT=1521)))
    サービスのサマリー...
    サービスorclには、1件のインスタンスがあります。←「これはCDB!!」
      インスタンスorcl、状態READYには、このサービスに対する1件のハンドラがあります...
    サービスorclpdbには、1件のインスタンスがあります。←「これはPDB!!」
      インスタンスorclpdb、状態READYには、このサービスに対する1件のハンドラがあります...
    

    実行結果より、CDBのサービスがorclで、PDBのサービスがorclpdbと推測する

  2. tnsnames.oraでプラガブル・データベースのサービス名で定義された接続文字列を定義
    CDBの定義をパクッてPDBのサービス名と接続文字列のみ変更したらOK

    ↓tnsnames.oraの格納先の例
     C:appxxxxxproduct12.2.0dbhome_1networkadmintnsnames.ora
    ORCL =
      (DESCRIPTION =
        (ADDRESS = (PROTOCOL = TCP)(HOST = XXXXX)(PORT = 1521))
        (CONNECT_DATA =
          (SERVER = DEDICATED)
          (SERVICE_NAME = orcl)
        )
      )
    
    ORCLPDB =
      (DESCRIPTION =
        (ADDRESS = (PROTOCOL = TCP)(HOST = XXXXX)(PORT = 1521))
        (CONNECT_DATA =
          (SERVER = DEDICATED)
          (SERVICE_NAME = ORCLPDB)
        )
      )
    
  3. 接続先をPDBへ変更

    SQL*Plusでコマンド実行

    alter session set container = ORCLPDB;
    セッションが変更されました。
  4. tnsnames.oraに追加したプラガブルデータベースのサービス名でtns経由で接続する
    サンプルスキーマHRに接続する例

    SQL*Plusでコマンド実行

    conn HR/xxxxx@orclpdb
    接続されました。

以上の作業で、ユーザログイン(conn接続)が可能となります。

おっさんは11gから様変わりしてて、ものすごく苦労しました。
connectロールを付与したり、色々試したがダメだったけど、結局はPDB独自の設定が必要ってことでした。

~『PDB・CDBって何?』という方はこちら~
Oracleマルチテナントアーキテクチャーの概要をまとめました。
Oracleマルチテナントとは?CDBとPDBの3つのメリット!

~CDBで共通ユーザ作成時のエラー解消方法はこちら~
OracleのCDBで共通ユーザ作成!ORA-65096の解消法

SEおっさん
SEおっさん
ここまで読んでくれてありがとう!

「記事を読んでもわからないトコがある」「内容が変だよ」
という時は、お気軽にコメントください♪

「もっとSEおっさんに詳しく聞きたい。何かお願いしたい!」
という時は、ココナラまで。メッセージもお気軽に♪

LINEでのお問合わせも受付中!
LINE公式アカウント

メッセージをお待ちしています!

取得資格
  • 応用情報技術者
  • Oracle Master Gold
  • Java SE Gold
  • Java EE Webコンポーネントディベロッパ
  • Python エンジニア認定データ分析
  • 簿記2級


スポンサーリンク
  • このエントリーをはてなブックマークに追加
  • LINEで送る

コメントを残す

*