こんにちは。エンジニアの宮崎です。
Oracle Database 12cでは、従来のバージョンでは使用可能だった
Enterprise Manager Database Controlを使用することができなくなりました。
その代わりとして、Oracle Database Expressというものが用意されています。
どういうものかというと、大雑把な説明として、
「DB管理機能を取り除いてDB監視機能だけになったEM Grid Control」
といえばイメージしやすいでしょうか。
今回はOracle Database Express(以下、ODE)で遭遇したトラブルについて紹介します。
Oracle Database Expressに接続できない!?
トラブルの内容は、ODEに接続できないということで相談を受けました。
話を伺うと、DBCAを使用してDBを作成されており、
スクリーンキャプチャが残っているということで確認してみました。
すると、インストール時に指定できる「Database Expressを構成する」というチェックボックスにチェックが入っていませんでした。もしここでチェックが入っていれば、DB構築と同時にDatabase Expressを自動で構成してくれます。
単なる設定漏れなので、手動で設定をしてあげればすぐに終わるなと考え、
マニュアルに記載されている内容に従い、ローカルリスナーの設定、ポートの設定、
dispatchersパラメータの設定を行いました。
だが、予想に反し、接続できない!
ローカルリスナーを設定後、再起動を行い、
リスナーは5500番ポートをリスニングしている。
DBMS_XDB_CONFIG.GETHTTPSPORT()の値が5500になっている。
そして他のプロセスが同ポートを使用していない。
dispatchersパラメータにSIDはしっかり書かれている。
でも、接続できない・・・
基本に立ち返り、ファイアウォール設定やネットワーク設定の再確認を行う。
だがおかしいところは見当たらない。
そこでふとDBパラメータの値を眺めてみる。
すると、shared_serversパラメータの値が0になっている。
ん?デフォルトだと確か1だったよな。
接続にディスパッチャを使用するということは、
この値が少なくとも1以上ないと問題があるのではないだろうか・・・
そこで、おもむろにalter system set 文でshared_serversパラメータの値を
デフォルトの1に戻し、データベースを再起動する。
データベース起動を確認後、
https://hostname:5500/em/
にアクセスすると、無事に接続できるように。
Oracle Database Express構成方法のまとめ
そんなこんなで、Oracle Database Express構成方法のまとめ。
[table id=34 /]
a. shared_serversパラメータの設定
ALTER SYSTEM SETコマンドで、このパラメータの値を1以上の値に設定します(デフォルトの値は1)。
「専用サーバ接続にするし、この値は0でいっか」と考えて、
この値を0にすると、ODEに接続できなくなります。
この件はマニュアルには記載されていないと思います。
b. ポートの設定
SQL*Plus上で以下のコマンドを実行します。SQL> SELECT DBMS_XDB_CONFIG.GETHTTPSPORT() FROM DUAL;
DBMS_XDB_CONFIG.GETHTTPSPORT()
------------------------------
ODEを構成しなかった場合は何も表示されないため、
使用するhttpsポートを指定してあげます(デフォルトの値は5500)
SQL> EXEC DBMS_XDB_CONFIG.SETHTTPSPORT(5500);
DBMS_XDB_CONFIG.GETHTTPSPORT()
------------------------------
5500
ちなみに、https接続だけじゃなく、http接続も可能で、
SQL> EXEC DBMS_XDB_CONFIG.SETHTTPPORT(8080)
で設定できます。
加えて、別のDBに別のODEを構成する場合、
既存のODEと同じポート番号は使用できないため、
DBCA実行前に、oracleユーザで以下のように環境変数を設定します。
$ export DBEXPRESS_HTTPS_PORT=5501
c. dispatchersパラメータの設定
dispachesパラメータの設定を行います。これはOEM構成をしたかどうかに関わらず、
初期化パラメータを触っていなければ最初から設定されています。
ORACLE_SIDがORCL12Cという環境の場合、以下のように設定されます。
SQL> SHOW PARAMETERS dispatchers
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
dispatchers string (PROTOCOL=TCP) (SERVICE=ORCL12CXDB)
もし設定されていない場合は、
ALTER SYSTEM SETコマンドで設定する必要があります。
d. local_listenerパラメータの設定
local_listenerパラメータの設定を行います。これも初期化パラメータを触っていなければ、最初から設定されています。
設定を行う場合、値を直接書き込んでも、
tnsnames.oraを使用しても、どちらでも構いません。
e. リスナーの再起動
最後にリスナーの再起動が必要です。リスナー再起動後、ポート5500をリッスンするようになります。
$ lsnrctl status
(中略)
リスニング・エンドポイントのサマリー...
(DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1521)))
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=hostname)(PORT=1521)))
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcps)(HOST=hostname)(PORT=5500))(Security=(my_wallet_directory=/opt/app/oracle/product/12.1.0/dbhome_1/admin/ORCL12C0/xdb_wallet))(Presentation=HTTP)(Session=RAW))
この件もマニュアルには明確に記載されていないと思います。
今回のように、現場ではマニュアルの通りに設定してもうまく動かないといったトラブルに多々遭遇します。一度経験すれば次からは躓きませんが、初めて遭遇した方にとっては有効な情報だと思いますので、今後もこうした情報があれば発信していきます。
以上です。