Oracle VMに Oracle DB 12.1 を構築する (3)

Oracle VM VirtualBox を用いて Oracle Database 12c Release 1 環境を構築する (1)はこちら。
Oracle VM VirtualBox を用いて Oracle Database 12c Release 1 環境を構築する (2)はこちら。

【環境】

ホストOS:Windows 7 Professional
ゲストOS:Oracle Linux Release 6 Update 4 for x86_64 (64 bit)

【参考資料】

■『SI on VirtualBox 構築ガイド /
Oracle VM VirtualBoxを用いたOracle Database 12c Release1 環境の構築』
http://www.oracle.com/technetwork/jp/database/enterprise-edition/documentation/sionvbox-db12101onol6u4-2080482-ja.pdf

■上記手順に加えてこちらのブログも参照。

taityo-diary.hatenablog.jptaityo-diary.hatenablog.jp

【現状】

目的1の「VirtualBox にOracle Database 12c Release1 環境の構築を構築する」を作業中。
構築ガイドの90Pまで進んでいる。
DBのインストールは完了したがリスナーの確認とPDB接続ができていない。

【今日やること】

1・リスナーにDBを正しく認識させる
2・PDBとCDBを正しく起動させる

---以下作業つづき---

前回の記事の終わりでDBの起動とリスナーの接続を完了できた。
今回は構築ガイド91PのCDB接続を行う。

1・準備

まず、前回の作業終了時にマシンをshutdownしており、一緒に
DBも停止してしまっているので、DBの起動を行う。
# これって自動化できそうだけど、環境変数に設定を追加すればよいのだろうか

$ sqlplus / as sysdba
SQL> STARTUP

続いてリスナーの起動と接続確認を行う。
# これも自動化できそうだけど、環境変数に設定を追加すればよいのだろうか

起動

$ lsnrctl start

接続確認
# リスナー起動から少し時間を置く必要あり。起動できていないとエラーが帰ってくる。

$ /u01/app/oracle/product/12.1.0/dbhome_1/bin/lsnrctl status

以下レスポンスが返ってきたので無事準備は完了。

LSNRCTL for Linux: Version 12.1.0.2.0 - Production on 07-11月-2017 13:46:09
Copyright (c) 1991, 2014, Oracle.  All rights reserved.
(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=node3.oracle12c.jp)(PORT=1521)))に接続中
リスナーのステータス
------------------------
別名                      LISTENER
バージョン                TNSLSNR for Linux: Version 12.1.0.2.0 - Production
開始日                    07-11月-2017 13:46:05
稼働時間                  0 日 0 時間 0 分 4 秒
トレース・レベル          off
セキュリティ              ON: Local OS Authentication
SNMP                      OFF
パラメータ・ファイル      /u01/app/oracle/product/12.1.0/dbhome_1/network/admin/listener.ora
ログ・ファイル            /u01/app/oracle/diag/tnslsnr/node3/listener/alert/log.xml
リスニング・エンドポイントのサマリー...
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=node3.oracle12c.jp)(PORT=1521)))
(DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1521)))
リスナーはサービスをサポートしていません。
コマンドは正常に終了しました。
[oracle@node3 ~]$ /u01/app/oracle/product/12.1.0/dbhome_1/bin/lsnrctl status
LSNRCTL for Linux: Version 12.1.0.2.0 - Production on 07-11月-2017 13:47:03
Copyright (c) 1991, 2014, Oracle.  All rights reserved.
(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=node3.oracle12c.jp)(PORT=1521)))に接続中
リスナーのステータス
------------------------
別名                      LISTENER
バージョン                TNSLSNR for Linux: Version 12.1.0.2.0 - Production
開始日                    07-11月-2017 13:46:05
稼働時間                  0 日 0 時間 0 分 58 秒
トレース・レベル          off
セキュリティ              ON: Local OS Authentication
SNMP                      OFF
パラメータ・ファイル      /u01/app/oracle/product/12.1.0/dbhome_1/network/admin/listener.ora
ログ・ファイル            /u01/app/oracle/diag/tnslsnr/node3/listener/alert/log.xml
リスニング・エンドポイントのサマリー...
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=node3.oracle12c.jp)(PORT=1521)))
(DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1521)))
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcps)(HOST=node3.oracle12c.jp)(PORT=5500))(Security=(my_wallet_directory=/u01/app/oracle/admin/cdb/xdb_wallet))(Presentation=HTTP)(Session=RAW))
サービスのサマリー...
サービス"cdb"には、1件のインスタンスがあります。
インスタンス"cdb"、状態READYには、このサービスに対する1件のハンドラがあります...
サービス"cdbXDB"には、1件のインスタンスがあります。
インスタンス"cdb"、状態READYには、このサービスに対する1件のハンドラがあります...
サービス"pdb1"には、1件のインスタンスがあります。
インスタンス"cdb"、状態READYには、このサービスに対する1件のハンドラがあります...
サービス"pdb2"には、1件のインスタンスがあります。
インスタンス"cdb"、状態READYには、このサービスに対する1件のハンドラがあります...
コマンドは正常に終了しました。
2・cdb接続(ここから91Pの作業)

まずsystemユーザでcdbへの接続を行う。

$ /u01/app/oracle/product/12.1.0/dbhome_1/bin/sqlplus system/*************@node3.oracle12c.jp:1521/cdb

この時点で正しくDB起動とリスナー接続ができていないと以下エラーが出るので注意が必要。
以下のエラーが出た場合は上にある手順で解消できるはず。

SQL*Plus: Release 12.1.0.2.0 Production on 火 11月 7 13:45:25 2017
Copyright (c) 1982, 2014, Oracle.  All rights reserved.
ERROR:
ORA-12541: TNS: リスナーがありません
ユーザー名を入力してください:
パスワードを入力してください:
ERROR:
ORA-01005: パスワードにNULLが入力されました。ログオンは拒否されました。
ユーザー名を入力してください:
ERROR:
ORA-01017: ユーザー名/パスワードが無効です。ログオンは拒否されました。
SP2-0157: 3回試行しましたがOracleに接続できませんでした。SQL*Plusを終了します。

正しいレスポンスは以下。
SQLが起動される。

SQL*Plus: Release 12.1.0.2.0 Production on 火 11月 7 13:54:25 2017
Copyright (c) 1982, 2014, Oracle.  All rights reserved.
Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 64bit Production
With the Partitioning, OLAP, Advanced Analytics and Real Application Testing options
に接続されました。
SQL>

続いてSQLでpdbの状態を確認。

SQL> show pdbs

レスポンスは以下。

SP2-0382: SHOW PDBSコマンドは使用できません。

なんろう。エラーがでた。

調べるとSYSDBA権限がないと失敗するらしい。

以下を実行してみる。

SQL> connect system as sysdba

パスワードを入力すると正しく接続ができた。
レスポンスは以下。

パスワードを入力してください:
接続されました。
SQL>

もう一度show pdbsを実行すると以下のように期待したレスポンスが返ってきた。

SQL> show pdbs
CON_ID CON_NAME			  OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
2 PDB$SEED			  READ ONLY  NO
3 PDB1 			  MOUNTED
4 PDB2 			  MOUNTED
SQL>

これでCDB、PDBへの接続の確認は完了した。
ガイドではPDB1とPDB2のOPEN MODEがREAD WRITEとなっているが
私の環境ではOPEN MODEがMOUNTEDとなっている。
この違いはなんだろうか。。

参考にしたこちらのブログでは私と同様の状態の画面コピーが張ってあるので、
とりあえずこれで良しとして先に進んでみる。

3・Oracle Enterprise Manager Database Expressへの接続

ガイドに沿ってホストOSのIEから以下のEM ExpressのURLにアクセスする。

https://192.168.56.101:5500/em

すると以下のタイムアウトのエラー。
これは私のPC環境が遅いのか?

このサイトにアクセスできません
192.168.56.101 からの応答時間が長すぎます。
次をお試しください:
接続を確認する
プロキシとファイアウォールを確認する
Windows ネットワーク診断ツールを実行する
ERR_CONNECTION_TIMED_OUT

EMは今は必要としていない(DBの構築とDG構築が目的)ので、次に進むことにする。

4・Appendix 1. CDBとPDBの基本操作(ここから93Pの作業)

DBとリスナーが起動した状態で以下のSQLを実行して、ステータスがOPENであることを確認する。

SQL> SELECT STATUS FROM V$INSTANCE;
STATUS
------------------------------------
OPEN

続いて以下コマンドでPDBを新規作成する。

SQL> show pdbs
CON_ID CON_NAME			  OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
2 PDB$SEED			  READ ONLY  NO
3 PDB1 			  MOUNTED
4 PDB2 			  MOUNTED
SQL> CREATE PLUGGABLE DATABASE pdb3 ADMIN USER admin IDENTIFIED BY Shio2534
2
SQL> CREATE PLUGGABLE DATABASE pdb3 ADMIN USER admin IDENTIFIED BY Shio2534;
プラガブル・データベースが作成されました。
SQL>

一度セミコロン(;)を付け忘れてへんなレスポンスがあったものの、
無事PDBの新規作成ができた。
「プラガブル・データベースが作成されました。」のレスポンスが帰ってくるまで
1分近く待った気がするので、待っている間は変にいじらないほうがいいかも。

次に作成したPDB3をOPENする。

まずは現状のOPEN MODEを確認する。

SQL> show pdbs
CON_ID CON_NAME			  OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
2 PDB$SEED			  READ ONLY  NO
3 PDB1 			  MOUNTED
4 PDB2 			  MOUNTED
5 PDB3 			  MOUNTED
SQL>

PDB3はMOUTEDになっている。
これを以下SQLでOPENする。

SQL> ALTER PLUGGABLE DATABASE pdb3 OPEN;
プラガブル・データベースが変更されました。
SQL>

もう一度show pdbsを実行するとpdb3がopenされていることがわかる。
# pdb1,pdb2も同様のやり方でopenできる

SQL> show pdbs
CON_ID CON_NAME			  OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
2 PDB$SEED			  READ ONLY  NO
3 PDB1 			  MOUNTED
4 PDB2 			  MOUNTED
5 PDB3 			  READ WRITE NO
SQL>

続いてルート(CDB$ROOT)からPDBへ接続を切り替える。

まず現状のCONTAINER NAMEを確認する

SQL> show con_name
CON_NAME
------------------------------
CDB$ROOT

CDB$ROOTに接続していることが確認できたので、以下SQLを実行してpdb3に接続を切り替える。

SQL> ALTER SESSION SET CONTAINER = pdb3;
セッションが変更されました。

再度show con_nameを実行して以下のように接続先がpdb3に変わっていればOK。

SQL> show con_name
CON_NAME
------------------------------
PDB3

最後にPDB用のサービスを作成する。
以下を全て実行する。
# どういう命令なのか不明なコマンドもあるが、現時点では構築ガイドのとおりに進める

SQL> SELECT NAME, NETWORK_NAME, PDB, CON_ID FROM V$SERVICES;
NAME
--------------------------------------------------------------------------------
NETWORK_NAME
--------------------------------------------------------------------------------
PDB
--------------------------------------------------------------------------------
CON_ID
----------
pdb3
pdb3
PDB3
5
SQL> exec DBMS_SERVICE.CREATE_SERVICE('srvl','srvl');
PL/SQLプロシージャが正常に完了しました。
SQL> exec DBMS_SERVICE.START_SERVICE('srvl');
PL/SQLプロシージャが正常に完了しました。
SQL> SELECT NAME, NETWORK_NAME, PDB, CON_ID FROM V$SERVICES;
NAME
--------------------------------------------------------------------------------
NETWORK_NAME
--------------------------------------------------------------------------------
PDB
--------------------------------------------------------------------------------
CON_ID
----------
srvl
srvl
PDB3
5
NAME
--------------------------------------------------------------------------------
NETWORK_NAME
--------------------------------------------------------------------------------
PDB
--------------------------------------------------------------------------------
CON_ID
----------
pdb3
pdb3
PDB3
5

以上で96PのPDB「用のサービスを作成」は完了した。
最後に接続を確認する。

SQL> connect system/************@node3.oracle12c.jp:1521/srvl

上記コマンドに対して

接続されました。

とレスポンスが返ってくればOK。
userとcon_nameも確認する。

SQL> show user
ユーザーは"SYSTEM"です。
SQL> show con_name
CON_NAME
------------------------------
PDB3

構築ガイドにあるとおりSYSTEM,PDB3と返ってきたのでOK。

 

これでVirtualBox にOracle Database 12c Release1 環境の構築ができた。
今後はData Guardの構築に入る。

One Reply to “Oracle VMに Oracle DB 12.1 を構築する (3)”

  1. 推測になりますが、ホストOSのIEから EM Express にアクセスできないのはネットワークの問題のように見えます。
    ゲストOSのiptablesにブロックされているとか、ホストとゲストでネットワークのセグメントが違うとか。
    もし、EM以外でもホストからゲストへネットワーク通信ができないときは思い出していただけると幸いです。
    #すでに調査済みだったらごめんなさい。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です