Nutanix Database Service(NDB)では、1台の DB サーバ VM に複数の DB をクローンできます。今回は CDB の Oracle Database を、既存クローン DB をホストしている DB サーバ VM に追加クローンしてみました。
ちなみに、複数の CDB クローンを用意するなら、クローン DB ごとに DB サーバ VM を分割したほうが扱いやすそうです。
構成のイメージです。
1. 今回の環境
すでに、下記の投稿で CDB のクローン(DB と DB サーバ VM)を作成してあります。
この DB サーバ VM に、追加で CDB をクローンしてみます。
2. データベース パラメータ プロファイルの用意
DB サーバ VM に複数の DB をクローンすると、ビルトインのデータベース パラメータ プロファイルでは、クローン処理開始前にメモリ不足と判断されてしまします。
そこで、メモリ割り当ての少ないプロファイルを作成しておきます。
「プロファイル」→「データベースのパラメータ」画面で「作成」ボタンのクリックします。
データベース エンジンの種類として「ORACLE」を選択して「次へ」をクリックします。
パラメータを指定して「作成」をクリックします。
- 名前: db-param-profile-oracle-02
- Total Memory (MB): 512
プロファイルが作成されました。
ちなみに今回はプロファイルを admin ユーザで利用するので、「公開済み」は False のままです。
3. DB のクローン(SID のみ変更)
3-1. DB のクローン
ソース DB のタイムマシンで「アクション」→「シングル インスタンス データベース クローンの作成」をクリックします。
クローン元にするスナップショットがある日付をカレンダーでクリックして、スナップショットを選択して「次へ」をクリックします。
「データベース サーバー VM」で「認証済みサーバーの使用」を選択して、DB サーバーを選択して「次へ」をクリックします。
データベースのパラメータを入力して、「クローン」をクリックします。
- 名前: デフォルトのまま
- SID: orandb3(クローン元の「orandb2」とは重複しない SID を指定)
- SYS と SYSTEM のパスワード: nutanix/4u
- データベース パラメータのプロファイル: db-param-profile-oracle-02
少し待って、「オペレーション」画面でクローン処理の完了を確認します。
3-2. クローン DB の確認
DB サーバ VM を確認すると、2つめのクローン DB が作成されています。
クローンした DB は Oracle SID が変更されていますが、PDB の名前はクローン元のまま「PDB1」になっています。
DB サーバ VM に SSH 接続してみると、実際に 2つの DB インスタンス(orandb2 と orandb3)が起動されています。
[root@lab-linux-02 ~]# ssh oracle@192.168.11.141 Last login: Wed Dec 14 13:48:07 2022 from 192.168.20.19 [oracle@ndb-oracle-02-c ~]$ ps -ef | grep smon oracle 10937 1 0 12月14 ? 00:00:04 ora_smon_orandb2 oracle 321375 1 0 09:00 ? 00:00:00 ora_smon_orandb3 oracle 325961 325927 0 09:15 pts/0 00:00:00 grep --color=auto smon
リスナーのステータスは下記のようになりました。pdb1 というサービスに、orandb2 と orandb3 のインスタンスが両方登録されてしまっています。
[oracle@ndb-oracle-02-c ~]$ lsnrctl status LSNRCTL for Linux: Version 19.0.0.0.0 - Production on 18-DEC-2022 09:16:28 Copyright (c) 1991, 2019, Oracle. All rights reserved. Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.11.141)(PORT=1521))) STATUS of the LISTENER ------------------------ Alias LISTENER Version TNSLSNR for Linux: Version 19.0.0.0.0 - Production Start Date 18-DEC-2022 08:55:34 Uptime 0 days 0 hr. 20 min. 54 sec Trace Level off Security ON: Local OS Authentication SNMP OFF Listener Parameter File /u02/app/oracle/product/19.0.0/dbhome_1/network/admin/listener.ora Listener Log File /u02/app/oracle/diag/tnslsnr/ndb-oracle-02-c/listener/alert/log.xml Listening Endpoints Summary... (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.11.141)(PORT=1521))) (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1521))) Services Summary... Service "86b637b62fdf7a65e053f706e80a27ca" has 2 instance(s). Instance "orandb2", status READY, has 1 handler(s) for this service... Instance "orandb3", status READY, has 1 handler(s) for this service... Service "efc93d6bc93f53cee053720ba8c05fa1" has 2 instance(s). Instance "orandb2", status READY, has 1 handler(s) for this service... Instance "orandb3", status READY, has 1 handler(s) for this service... Service "orandb2" has 1 instance(s). Instance "orandb2", status READY, has 1 handler(s) for this service... Service "orandb3" has 1 instance(s). Instance "orandb3", status READY, has 1 handler(s) for this service... Service "pdb1" has 2 instance(s). Instance "orandb2", status READY, has 1 handler(s) for this service... Instance "orandb3", status READY, has 1 handler(s) for this service... The command completed successfully
ためしに、下記のように PDB「pdb1」にデフォルトで作成される「PDB1」サービスに接続してみます。
sqlplus -s 'system/"nutanix/4u"'@192.168.11.141/ORANDB3_PDB1 << 'EOF' select instance_name from v$instance; show con_name exit EOF
実際に接続してみると、交互に別の DB に接続されてしまいます。
[oracle@ndb-oracle-02-c ~]$ sqlplus -s 'system/"nutanix/4u"'@192.168.11.141/pdb1 << 'EOF' > select instance_name from v$instance; > exit > EOF INSTANCE_NAME ---------------- orandb2 [oracle@ndb-oracle-02-c ~]$ sqlplus -s 'system/"nutanix/4u"'@192.168.11.141/pdb1 << 'EOF' > select instance_name from v$instance; > exit > EOF INSTANCE_NAME ---------------- orandb3 [oracle@ndb-oracle-02-c ~]$ sqlplus -s 'system/"nutanix/4u"'@192.168.11.141/pdb1 << 'EOF' > select instance_name from v$instance; > exit > EOF INSTANCE_NAME ---------------- orandb2
3-3. 追加 CDB / PDB むけサービスの作成
クローン DB の PDB それぞれに接続するには、サービスを追加作成したり、クライアント側で tnsnames.ora ファイルを編集したりすることになります。
今回は、DBMS_SERVICE パッケージでサービスを追加してみます。
クローン DB「orandb3」の PDB「pdb1」に接続します。
[oracle@ndb-oracle-02-c ~]$ export ORACLE_SID=orandb3 [oracle@ndb-oracle-02-c ~]$ sqlplus / as sysdba SQL> alter session set container=pdb1; Session altered. SQL> show con_name CON_NAME ------------------------------ PDB1
PDB むけのサービスを追加作成して起動します。
SQL> exec DBMS_SERVICE.CREATE_SERVICE(SERVICE_NAME=>'ORANDB3_PDB1',NETWORK_NAME=>'ORANDB3_PDB1'); PL/SQL procedure successfully completed. SQL> exec DBMS_SERVICE.START_SERVICE(SERVICE_NAME=>'ORANDB3_PDB1'); PL/SQL procedure successfully completed. SQL> alter system register; System altered. SQL> exit
これで Oracle リスナーに、orandb3 CDB の pdb1 に接続できるサービス「ORANDB3_PDB1」が追加されました。今回は見つけやすくサービス名を大文字にしてあります。
[oracle@ndb-oracle-02-c ~]$ lsnrctl status LSNRCTL for Linux: Version 19.0.0.0.0 - Production on 18-DEC-2022 09:51:23 Copyright (c) 1991, 2019, Oracle. All rights reserved. Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.11.141)(PORT=1521))) STATUS of the LISTENER ------------------------ Alias LISTENER Version TNSLSNR for Linux: Version 19.0.0.0.0 - Production Start Date 18-DEC-2022 08:55:34 Uptime 0 days 0 hr. 55 min. 48 sec Trace Level off Security ON: Local OS Authentication SNMP OFF Listener Parameter File /u02/app/oracle/product/19.0.0/dbhome_1/network/admin/listener.ora Listener Log File /u02/app/oracle/diag/tnslsnr/ndb-oracle-02-c/listener/alert/log.xml Listening Endpoints Summary... (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.11.141)(PORT=1521))) (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1521))) Services Summary... Service "86b637b62fdf7a65e053f706e80a27ca" has 2 instance(s). Instance "orandb2", status READY, has 1 handler(s) for this service... Instance "orandb3", status READY, has 1 handler(s) for this service... Service "ORANDB3_PDB1" has 1 instance(s). Instance "orandb3", status READY, has 1 handler(s) for this service... Service "efc93d6bc93f53cee053720ba8c05fa1" has 2 instance(s). Instance "orandb2", status READY, has 1 handler(s) for this service... Instance "orandb3", status READY, has 1 handler(s) for this service... Service "orandb2" has 1 instance(s). Instance "orandb2", status READY, has 1 handler(s) for this service... Service "orandb3" has 1 instance(s). Instance "orandb3", status READY, has 1 handler(s) for this service... Service "pdb1" has 2 instance(s). Instance "orandb2", status READY, has 1 handler(s) for this service... Instance "orandb3", status READY, has 1 handler(s) for this service... The command completed successfully
接続してみると、orandb3 だけに接続できるようになりました。
[root@lab-linux-02 ~]# sqlplus -s 'system/"nutanix/4u"'@192.168.11.141/ORANDB3_PDB1 << 'EOF' > select instance_name from v$instance; > exit > EOF INSTANCE_NAME ---------------- orandb3 [root@lab-linux-02 ~]# sqlplus -s 'system/"nutanix/4u"'@192.168.11.141/ORANDB3_PDB1 << 'EOF' > select instance_name from v$instance; > exit > EOF INSTANCE_NAME ---------------- orandb3 [root@lab-linux-02 ~]#
4. DB のクローン(SID とリスナー ポートを変更)
4-1. DB のクローン
さらに、リスナーのポート番号を変更したクローン DB を作成してみます。
- 名前: デフォルトのまま
- SID: orandb4(既存の DB インスタンスとは重複しない SID を指定)
- SYS と SYSTEM のパスワード: nutanix/4u
- データベース パラメータのプロファイル: db-param-profile-oracle-02
- リスナー ポート: 1524
4-2. クローン DB の確認
これで、DB サーバ VM に、3つめのクローン DB が作成されました。
追加のポート(1524)を指定したリスナーは、下記のように listener.ora ファイルに追記されます。
[oracle@ndb-oracle-02-c ~]$ echo $ORACLE_HOME /u02/app/oracle/product/19.0.0/dbhome_1 [oracle@ndb-oracle-02-c ~]$ cat $ORACLE_HOME/network/admin/listener.ora LISTENER = (DESCRIPTION_LIST = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.11.141)(PORT = 1521)) (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521)) ) ) LISTENER_1524 = (DESCRIPTION_LIST = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.11.141)(PORT = 1524)) (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1524)) ) )
しかし追加のポートを指定したリスナーは、クローン処理後には起動されないようです。
[oracle@ndb-oracle-02-c ~]$ lsnrctl status LISTENER_1524 LSNRCTL for Linux: Version 19.0.0.0.0 - Production on 18-DEC-2022 14:18:24 Copyright (c) 1991, 2019, Oracle. All rights reserved. Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.11.141)(PORT=1524))) TNS-12541: TNS:no listener TNS-12560: TNS:protocol adapter error TNS-00511: No listener Linux Error: 111: Connection refused Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1524))) TNS-12541: TNS:no listener TNS-12560: TNS:protocol adapter error TNS-00511: No listener Linux Error: 2: No such file or directory
4-3. 追加された Oracle リスナーの起動
追加されたリスナー「LISTENER_1524」を起動しておきます。
[oracle@ndb-oracle-02-c ~]$ lsnrctl start LISTENER_1524
これで、orandb4 DB インスタンスの PDB に接続できるようになりました。
[oracle@ndb-oracle-02-c ~]$ sqlplus 'SYSTEM/"nutanix/4u"'@192.168.11.141:1524/pdb1 SQL*Plus: Release 19.0.0.0.0 - Production on Sun Dec 18 14:19:25 2022 Version 19.3.0.0.0 Copyright (c) 1982, 2019, Oracle. All rights reserved. Last Successful login time: Thu Dec 15 2022 15:30:42 +00:00 Connected to: Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production Version 19.3.0.0.0 SQL> select instance_name from v$instance; INSTANCE_NAME ---------------- orandb4 SQL> show con_name CON_NAME ------------------------------ PDB1
Oracle の CDB をクローンする場合、NDB では PDB の対応がまだ十分ではなそうなので「新しいサーバーの作成」を選択して DB サーバ VM を作成つつクローンするとよさそうです。
以上。