データベース

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

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

皆さん、こんにちは!

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

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

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

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

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

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

このような疑問に答えます。


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

※保有資格:OracleMasterGold/JavaWebコンポーネントディベロッパ/応用情報技術者/簿記2級

 

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でプラガブル・データベースのサービス名を確認する
    >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件のハンドラがあります...
    
  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> alter session set container = ORCLPDB;
    
    セッションが変更されました。
    
  4. tnsnames.oraに追加したプラガブルデータベースのサービス名でtns経由で接続する
    サンプルスキーマHRに接続する例
    SQL> conn HR/xxxxx@orclpdb
    接続されました。
    

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

おっさんは11gから様変わりしてて、ものすごく苦労しました。

connectロールを付与したり、色々試したがダメだったけど、結局はPDB独自の設定が必要ってことでした。

 

そもそも『PDB・CDBって何?』という方は…

Oracleマルチテナントアーキテクチャーの概要を下記にまとめました。

Oracleマルチテナントとは?CDBとPDBの3つのメリット!
Oracleマルチテナントとは?CDBとPDBの3つのメリット!
こんにちは! Oracle12cから導入された「マルチテナント・アーキテクチャ」ってご存知しょうか?   『マルチテナント・アーキテクチャって何だろう.....

 

OracleのCDBで共通ユーザ作成エラーの解消方法はこちらです。

OracleのCDBで共通ユーザ作成!ORA-65096の解消法
OracleのCDBで共通ユーザ作成!ORA-65096の解消法
皆さん、こんにちは! Oracle12cよりマルチテナント構成(CDB・PDB)が導入されました。 11g以前とアーキテクチャが異なるので、 以前のようにユーザ.....


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

コメントを残す

*