5
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Oracle19cをRPMでインストール後にPDBに接続するために必要な設定

Last updated at Posted at 2021-03-29

Oracle18cくらいからRPMベースのインストール方法が提供されて、すごい入れやすくなった。手順的には、OSインストール後とかEC2起動後のまっさらの状態から、プリインストールRPM(OSの設定が自動的に入ってインストール要件パッケージが自動インストールされる)をインストールして、RPMでOracleをインストールしたら、標準出力に出力されるメッセージに従ってconfigureコマンドを実行すれば、CDBと基本的なPDBが作成された状態でできあがる。OS設定もDB作成も面倒なので、この方法素晴らしいと思う(エディションとか選べないので検証用途で)。で、この方法で作成したPDBに接続しようとしたら、全然接続できないorz
CDBに接続してPDB起動して、PDBにalter pluggable sessionでセッション切り替えてつなぐことはできるんだけど、ターミナルからリスナー経由で直接接続したりとか、TNSNAMES接続が全然つながらない。つながらないときのエラーはこれ。

[oracle@host ~]$ sqlplus system/password@orclpdb1

SQL*Plus: Release 19.0.0.0.0 - Production on Mon Mar 29 10:21:02 2021
Version 19.3.0.0.0

Copyright (c) 1982, 2019, Oracle.  All rights reserved.

ERROR:
ORA-01034: ORACLE not available
ORA-27101: shared memory realm does not exist
Linux-x86_64 Error: 2: No such file or directory
Additional information: 4376
Additional information: 1626951335
Process ID: 0
Session ID: 0 Serial number: 0

つないだときに、ORA-01034とORA-27101のエラーでつながらないときは、listener.ora/tnsnames.oraが間違ってる(sid指定ミスとか、ORACLE_HOME指定ミス)ケースがある。けど、PDBはそもそも最初からリスナーに動的にサービス登録される仕様で、特に何も設定しなくていいはず。lsnrctl startしたあと、CDBにつないでalter system register;とか打ってもリスナーには何も登録されない。lsnrctl statusしたときの出力はこれ。

[oracle@host ~]$ lsnrctl status

LSNRCTL for Linux: Version 19.0.0.0.0 - Production on 29-MAR-2021 09:55:35

Copyright (c) 1991, 2019, Oracle.  All rights reserved.

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=host)(PORT=1521)))
STATUS of the LISTENER
------------------------
Alias                     LISTENER
Version                   TNSLSNR for Linux: Version 19.0.0.0.0 - Production
Start Date                29-MAR-2021 09:55:03
Uptime                    0 days 0 hr. 0 min. 32 sec
Trace Level               off
Security                  ON: Local OS Authentication
SNMP                      OFF
Listener Parameter File   /opt/oracle/product/19c/dbhome_1/network/admin/listener.ora
Listener Log File         /opt/oracle/diag/tnslsnr/host/listener/alert/log.xml
Listening Endpoints Summary...
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=host)(PORT=1521)))
  (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1521)))
The listener supports no services
The command completed successfully

The listener supports no servicesのとおり、サービス登録がない。
Oracleのリファレンス見てもconfigureしたあとのことは書いてないし、ネット上で手順を乗せてるサイトも、configureしてCDB/PDBができたらsqlplus / as sysdbaでつながるよってところで終わってて、PDBに接続する部分の記載が一切見当たらない。
ためしにlistener.oraにSID_LIST_LISTENER=書いて静的登録してみてもつながらない。

え~サービス登録本当に手動でするのー??(インストール簡略化のためのRPMなのに??)と思いながら、血迷ってサービス確認したりサービス登録してたりサービス起動してみたり。。(v$service
exec dbms_service.create_service('orclpdb1','orclpdb1'); exec dbms_service.start_service('orclpdb1');)
でも、サービスは元々作成されて起動されてるからそこじゃない感。

他に、サービス登録に関係あるものを調べてたら、LOCAL_LISTENERパラメータも関係してることを見つける。試しにshow parameterしてみると

NAME                                 TYPE        VALUE
local_listener                       string      LISTENER_ORCLCDB

ふーん、valueがLISTENER_ORCLCDB。うーん、これってなんかもっと長ったらしかったような。。?
設定例みると

(ADDRESS=(PROTOCOL=TCP)(HOST=host)(PORT=1521))

たしかにこんな感じだった。全然違うやん
試しに設定してみる。一旦scope=memoryで

SQL> alter system set LOCAL_LISTENER="(ADDRESS=(PROTOCOL=TCP)(HOST=host)(PORT=1521))" scope=memory;

でsqlplus抜けてlsnrctl statusしてみると

[oracle@host ~]$ lsnrctl status

LSNRCTL for Linux: Version 19.0.0.0.0 - Production on 29-MAR-2021 10:23:07

Copyright (c) 1991, 2019, Oracle.  All rights reserved.

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=host)(PORT=1521)))
STATUS of the LISTENER
------------------------
Alias                     LISTENER
Version                   TNSLSNR for Linux: Version 19.0.0.0.0 - Production
Start Date                29-MAR-2021 10:20:25
Uptime                    0 days 0 hr. 2 min. 41 sec
Trace Level               off
Security                  ON: Local OS Authentication
SNMP                      OFF
Listener Parameter File   /opt/oracle/product/19c/dbhome_1/network/admin/listener.ora
Listener Log File         /opt/oracle/diag/tnslsnr/host/listener/alert/log.xml
Listening Endpoints Summary...
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=host)(PORT=1521)))
  (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1521)))
Services Summary...
Service "ORCLCDBXDB" has 1 instance(s).
  Instance "ORCLCDB", status READY, has 1 handler(s) for this service...
Service "bdb6f093eb0f29c3e053d20b020af2f8" has 1 instance(s).
  Instance "ORCLCDB", status READY, has 1 handler(s) for this service...
Service "bde012dcb45c5fafe0531606020ae253" has 1 instance(s).
  Instance "ORCLCDB", status READY, has 1 handler(s) for this service...
Service "orclcdb" has 2 instance(s).
  Instance "ORCLCDB", status READY, has 1 handler(s) for this service...
  Instance "orclcdb", status UNKNOWN, has 1 handler(s) for this service...
Service "orclpdb1" has 1 instance(s).
  Instance "ORCLCDB", status READY, has 1 handler(s) for this service...

一瞬で復旧したやんけ。。
RPMインストールで工数浮いたけど、ここのトラシューで工数飛んだ。。

5
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?