Nutanix CE の Acropolis Block Services(ABS)ボリュームのデータを、2台の Oracle Database サーバ間で移行をしてみようと思います。
前回はこちら。
今回は、Nutanix の VG クローンと、Oracle の Transportable Tablespace (TTS) を利用してデータ移行してみます。
Oracle の TTSについては、Oracle マニュアルの下記のあたりを参照。
1. 移行対象の表領域を Read Only に変更
今回、移行対象とするのは、TS_NTNX という表領域です。
SQL> select TABLESPACE_NAME,STATUS from dba_tablespaces 2 where TABLESPACE_NAME = 'TS_NTNX'; TABLESPACE_NAME STATUS ------------------------------ --------- TS_NTNX ONLINE
Read Only に変更します。
SQL> alter tablespace ts_ntnx read only; Tablespace altered. SQL> select TABLESPACE_NAME,STATUS from dba_tablespaces 2 where TABLESPACE_NAME = 'TS_NTNX'; TABLESPACE_NAME STATUS ------------------------------ --------- TS_NTNX READ ONLY
2. 移行元で定義情報を TTS エクスポート
TTS では、Oracle Data Pump (expdp/impdp) で定義情報をエクスポート/インポートします。定義情報のエクスポート先として、Oracle のディレクトリ オブジェクトを作成します。Linux 側での /u02/dpdir ディレクトリは、すでに作成ずみです。
SQL> ! ls -ld /u02/dpdir drwxr-xr-x 2 oracle dba 4096 9月 4 22:44 /u02/dpdir SQL> create directory dp_dir as '/u02/dpdir'; Directory created. SQL> quit
expdp コマンドでエクスポートします。
[oracle@ora-sv-a ~]$ expdp system dumpfile=exp.dmp directory=dp_dir transport_tablespaces=TS_NTNX transport_full_check=y logfile=tts_exp.log Export: Release 12.1.0.2.0 - Production on Sun Sep 4 23:30:38 2016 Copyright (c) 1982, 2014, Oracle and/or its affiliates. All rights reserved. Password: Connected to: Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 64bit Production With the Partitioning, Automatic Storage Management, OLAP, Advanced Analytics and Real Application Testing options Starting "SYSTEM"."SYS_EXPORT_TRANSPORTABLE_01": system/******** dumpfile=exp.dmp directory=dp_dir transport_tablespaces=TS_NTNX transport_full_check=y logfile=tts_exp.log Processing object type TRANSPORTABLE_EXPORT/PLUGTS_BLK Processing object type TRANSPORTABLE_EXPORT/TABLE Processing object type TRANSPORTABLE_EXPORT/TABLE_STATISTICS Processing object type TRANSPORTABLE_EXPORT/STATISTICS/MARKER Processing object type TRANSPORTABLE_EXPORT/POST_INSTANCE/PLUGTS_BLK Master table "SYSTEM"."SYS_EXPORT_TRANSPORTABLE_01" successfully loaded/unloaded ****************************************************************************** Dump file set for SYSTEM.SYS_EXPORT_TRANSPORTABLE_01 is: /u02/dpdir/exp.dmp ****************************************************************************** Datafiles required for transportable tablespace TS_NTNX: +DG_ABS/ORADBA/DATAFILE/ts_ntnx.256.921691481 Job "SYSTEM"."SYS_EXPORT_TRANSPORTABLE_01" successfully completed at Sun Sep 4 23:32:26 2016 elapsed 0 00:01:36 [oracle@ora-sv-a ~]$
エクスポートによりファイルが作成されました。
[oracle@ora-sv-a ~]$ ls -l /u02/dpdir/ 合計 144 -rw-r----- 1 oracle dba 143360 9月 4 23:32 exp.dmp -rw-r--r-- 1 oracle dba 1367 9月 4 23:32 tts_exp.log
3. Nutanix での VG のクローン ~ iSCSI接続
Prism での VG のクローン
VG に格納されいている Oracle Database の表領域はすでに Read Only に変更済みなので、静止点が確保されています。
Prism の Storage → Table → Volume Group 画面で、VG「vg-oradb」を選択して「clone」します。
「vg-oradb-clone」という名前を入力して、「Save」します。
VG がクローンされました。
移行先 Linux での iSCSI Initiator セットアップ
移行先では、ゲスト OS の iSCSI Initiator で VG を接続するしてみる想定なので、iscsi-initiator-utils をインストールしておきます。
[root@ora-sv-b ~]# yum install -y iscsi-initiator-utils
iscsid を起動しておきます。
[root@ora-sv-b ~]# systemctl enable iscsid Created symlink from /etc/systemd/system/multi-user.target.wants/iscsid.service to /usr/lib/systemd/system/iscsid.service. [root@ora-sv-b ~]# systemctl start iscsid [root@ora-sv-b ~]# systemctl is-active iscsid active
VG へのアクセス制御で必要になるため、iSCSI Initiator の IQN を確認しておきます。
[root@ora-sv-b ~]# cat /etc/iscsi/initiatorname.iscsi InitiatorName=iqn.1988-12.com.oracle:efa227f8d1e3
Prism での VG への IQN 登録
さきほど クローンした VG を選択して、「Update」をクリックします。
接続先サーバで確認した iSCSI Initiator の IQN を入力し、「+ Add」 で登録したうえで「Save」します。
VG に、IQN が登録されました。
移行先 Linux での VG 接続
iSCSI での接続は、 Nutanix クラスタの EXTERNAL DATA SERVICES IP ADDRESS を指定します。今回は「192.168.1.194」としています。
iSCSI 接続前の状態です。
[root@ora-sv-b ~]# lsscsi [1:0:0:0] disk VMware Virtual disk 1.0 /dev/sda [1:0:1:0] disk VMware Virtual disk 1.0 /dev/sdb [1:0:2:0] disk VMware Virtual disk 1.0 /dev/sdc [3:0:0:0] cd/dvd NECVMWar VMware SATA CD00 1.00 /dev/sr0
iSCSI 接続します。
[root@ora-sv-b ~]# iscsiadm -m discovery -t sendtargets -p 192.168.1.194 192.168.1.194:3260,1 iqn.2010-06.com.nutanix:vg-oradb-clone-96419fcb-d219-48bc-99ad-248f6e95d651-tgt0 192.168.1.194:3260,1 iqn.2010-06.com.nutanix:vg-oradb-clone-96419fcb-d219-48bc-99ad-248f6e95d651-tgt1 [root@ora-sv-b ~]# iscsiadm -m node -p 192.168.1.194 --login Logging in to [iface: default, target: iqn.2010-06.com.nutanix:vg-oradb-clone-96419fcb-d219-48bc-99ad-248f6e95d651-tgt0, portal: 192.168.1.194,3260] (multiple) Logging in to [iface: default, target: iqn.2010-06.com.nutanix:vg-oradb-clone-96419fcb-d219-48bc-99ad-248f6e95d651-tgt1, portal: 192.168.1.194,3260] (multiple) Login to [iface: default, target: iqn.2010-06.com.nutanix:vg-oradb-clone-96419fcb-d219-48bc-99ad-248f6e95d651-tgt0, portal: 192.168.1.194,3260] successful. Login to [iface: default, target: iqn.2010-06.com.nutanix:vg-oradb-clone-96419fcb-d219-48bc-99ad-248f6e95d651-tgt1, portal: 192.168.1.194,3260] successful.
VG に含まれる vDisk が /dev/sdd と /dev/sde として認識されました。
[root@ora-sv-b ~]# lsscsi [1:0:0:0] disk VMware Virtual disk 1.0 /dev/sda [1:0:1:0] disk VMware Virtual disk 1.0 /dev/sdb [1:0:2:0] disk VMware Virtual disk 1.0 /dev/sdc [3:0:0:0] cd/dvd NECVMWar VMware SATA CD00 1.00 /dev/sr0 [33:0:0:0] disk NUTANIX VDISK 0 /dev/sde [34:0:0:0] disk NUTANIX VDISK 0 /dev/sdd
ただし容量を見ると、/dev/sdd と /dev/sde は、移行元サーバとは逆に認識されています。
- vDisk#1(5GB) :移行元サーバでは /dev/sdd → 移行先サーバでは /dev/sde
- vDisk#2(2GB) :移行元サーバでは /dev/sde → 移行先サーバでは /dev/sdd
[root@ora-sv-b ~]# lsblk -l /dev/sdd /dev/sde NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sdd 8:48 0 2G 0 disk sdd1 8:49 0 2G 0 part sde 8:64 0 5G 0 disk sde1 8:65 0 5G 0 part
sdd、sde といった名前は永続的ではない(変更されてしまうこともありうる)ので、ファイルシステムのマウントは e2label で付与したラベル、ASM では ASM Disk ラベルをもとにデバイスを指定します。
TTS のエクスポート データを格納した領域を /u02 にマウントします。
[root@ora-sv-b ~]# mkdir /u02 [root@ora-sv-b ~]# echo 'LABEL="/u02" /u02 ext4 defaults 0 0' >> /etc/fstab [root@ora-sv-b ~]# mount /u02
LABEL=/u02 を指定したマウントで、ラベルをもとに /dev/sdd1 がマウントされました。
[root@ora-sv-b ~]# df -h -T /u02 ファイルシス タイプ サイズ 使用 残り 使用% マウント位置 /dev/sdd1 ext4 2.0G 6.2M 1.9G 1% /u02
Linux への iSCSI 接続については、下記もどうぞ。
4. ASM Disk を移行先で認識させる
iSCSI 接続で vDisk を認識しただけでは、ASM Disk ラベルは認識されません。
[root@ora-sv-b ~]# oracleasm listdisks ASMLOCAL1
そこで、oracleasm scandisks コマンドで ASM Disk をスキャンします。
[root@ora-sv-b ~]# oracleasm scandisks Reloading disk partitions: done Cleaning any stale ASM disks... Scanning system for ASM disks... Instantiating disk "ABSDISK1" [root@ora-sv-b ~]# oracleasm listdisks ABSDISK1 ASMLOCAL1
対象のディスクは移行元サーバとは異なり /dev/sde1 として認識されていますが、ABSDISK1 というラベルを指定することで ASM から正しいディスクを識別することが可能です。
[root@ora-sv-b ~]# oracleasm querydisk -p ABSDISK1 Disk "ABSDISK1" is a valid ASM disk /dev/sde1: LABEL="ABSDISK1" TYPE="oracleasm"
ASM Disk を認識しても、ASM Disk Group は認識されません。当然ながら Oracle Clusterware にも未登録です。
[oracle@ora-sv-b ~]$ crsctl stat res -t -------------------------------------------------------------------------------- Name Target State Server State details -------------------------------------------------------------------------------- Local Resources -------------------------------------------------------------------------------- ora.DG_LOCAL.dg ONLINE ONLINE ora-sv-b STABLE ora.LISTENER.lsnr ONLINE ONLINE ora-sv-b STABLE ora.asm ONLINE ONLINE ora-sv-b Started,STABLE ora.ons OFFLINE OFFLINE ora-sv-b STABLE -------------------------------------------------------------------------------- Cluster Resources -------------------------------------------------------------------------------- ora.cssd 1 ONLINE ONLINE ora-sv-b STABLE ora.diskmon 1 OFFLINE OFFLINE STABLE ora.evmd 1 ONLINE ONLINE ora-sv-b STABLE ora.oradbb.db 1 ONLINE ONLINE ora-sv-b Open,STABLE -------------------------------------------------------------------------------- [oracle@ora-sv-b ~]$
asmcmd コマンドで、ASM Disk Group を検出して、マウントします。
[oracle@ora-sv-b ~]$ export ORACLE_SID=+ASM [oracle@ora-sv-b ~]$ asmcmd ASMCMD>
lsdsk での ASM Disk 表示、lsdg での ASM Disk Gropu 表示のどちらも、そのままだと追加認識した ASM Disk は見えません。
ASMCMD> lsdsk Path /dev/oracleasm/disks/ASMLOCAL1 ASMCMD> ASMCMD> lsdg State Type Rebal Sector Block AU Total_MB Free_MB Req_mir_free_MB Usable_file_MB Offline_disks Voting_files Name MOUNTED EXTERN N 512 4096 1048576 8191 5914 0 5914 0 N DG_LOCAL/
そこで、「--discovery」オプションを付与してコマンド実行すると認識されます。
lsdsk --discovery で、/dev/oracleasm/disks/ABSDISK1 が見えます。
ASMCMD> lsdsk --discovery Path /dev/oracleasm/disks/ABSDISK1 /dev/oracleasm/disks/ASMLOCAL1
lsdg --discovery で DG_ABS が見えます。
ASMCMD> lsdg --discovery State Type Rebal Sector Block AU Total_MB Free_MB Req_mir_free_MB Usable_file_MB Offline_disks Voting_files Name DISMOUNTED N 0 0 0 0 0 0 0 0 N DG_ABS/ MOUNTED EXTERN N 512 4096 1048576 8191 5914 0 5914 0 N DG_LOCAL/
そして mount することで、ディスクグループが使用可能になります。
ASMCMD> mount DG_ABS ASMCMD> lsdg State Type Rebal Sector Block AU Total_MB Free_MB Req_mir_free_MB Usable_file_MB Offline_disks Voting_files Name MOUNTED EXTERN N 512 4096 1048576 5119 4857 0 4857 0 N DG_ABS/ MOUNTED EXTERN N 512 4096 1048576 8191 5914 0 5914 0 N DG_LOCAL/ ASMCMD> quit
Oracle Clusterware にも、DG_ABS ディスクグループの ora.DG_ABS.dg リソースが自動登録されます。
[oracle@ora-sv-b ~]$ crsctl stat res -t -------------------------------------------------------------------------------- Name Target State Server State details -------------------------------------------------------------------------------- Local Resources -------------------------------------------------------------------------------- ora.DG_ABS.dg ONLINE ONLINE ora-sv-b STABLE ora.DG_LOCAL.dg ONLINE ONLINE ora-sv-b STABLE ora.LISTENER.lsnr ONLINE ONLINE ora-sv-b STABLE ora.asm ONLINE ONLINE ora-sv-b Started,STABLE ora.ons OFFLINE OFFLINE ora-sv-b STABLE -------------------------------------------------------------------------------- Cluster Resources -------------------------------------------------------------------------------- ora.cssd 1 ONLINE ONLINE ora-sv-b STABLE ora.diskmon 1 OFFLINE OFFLINE STABLE ora.evmd 1 ONLINE ONLINE ora-sv-b STABLE ora.oradbb.db 1 ONLINE ONLINE ora-sv-b Open,STABLE -------------------------------------------------------------------------------- [oracle@ora-sv-b ~]$
5. 移行先で定義情報を TTS インポート
まず、TTS エクスポート データを格納している領域を指定して、Oracle のディレクトリオブジェクトを作成します。
Oracle Databae インスタンスに接続します。
[oracle@ora-sv-b ~]$ sqlplus / as sysdba SQL> col host_name for a10 SQL> select host_name,instance_name,status from v$instance; HOST_NAME INSTANCE_NAME STATUS ---------- ---------------- ------------ ora-sv-b oradbb OPEN
ディレクトリ オブジェクトを作成します。
SQL> ! ls -l /u02/dpdir 合計 144 -rw-r----- 1 oracle dba 143360 9月 4 23:32 exp.dmp -rw-r--r-- 1 oracle dba 1367 9月 4 23:32 tts_exp.log SQL> create directory dp_dir as '/u02/dpdir'; Directory created.
TTS のインポートで必要になるので、移行先の DB にも、移行元に作成した ntnx ユーザを作成しておきます。
SQL> create user ntnx identified by ntnx1234; User created. SQL> grant connect,resource,dba to ntnx; Grant succeeded. SQL> col username for a10 SQL> select username,default_tablespace from dba_users where username='NTNX'; USERNAME DEFAULT_TABLESPACE ---------- ------------------------------ NTNX USERS
impdp コマンドで、TTS のインポートをします。移行元の TS_NTNX 表領域のデータファイル「+DG_ABS/ORADBA/DATAFILE/ts_ntnx.256.921691481」を指定します。
[oracle@ora-sv-b ~]$ impdp system dumpfile=exp.dmp directory=dp_dir transport_datafiles='+DG_ABS/ORADBA/DATAFILE/ts_ntnx.256.921691481' logfile=tts_imp.log Import: Release 12.1.0.2.0 - Production on Mon Sep 5 00:55:52 2016 Copyright (c) 1982, 2014, Oracle and/or its affiliates. All rights reserved. Password: Connected to: Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 64bit Production With the Partitioning, Automatic Storage Management, OLAP, Advanced Analytics and Real Application Testing options Master table "SYSTEM"."SYS_IMPORT_TRANSPORTABLE_01" successfully loaded/unloaded Starting "SYSTEM"."SYS_IMPORT_TRANSPORTABLE_01": system/******** dumpfile=exp.dmp directory=dp_dir transport_datafiles=+DG_ABS/ORADBA/DATAFILE/ts_ntnx.256.921691481 logfile=tts_imp.log Processing object type TRANSPORTABLE_EXPORT/PLUGTS_BLK Processing object type TRANSPORTABLE_EXPORT/TABLE Processing object type TRANSPORTABLE_EXPORT/TABLE_STATISTICS Processing object type TRANSPORTABLE_EXPORT/STATISTICS/MARKER Processing object type TRANSPORTABLE_EXPORT/POST_INSTANCE/PLUGTS_BLK Job "SYSTEM"."SYS_IMPORT_TRANSPORTABLE_01" successfully completed at Mon Sep 5 00:56:50 2016 elapsed 0 00:00:25 [oracle@ora-sv-b ~]$
TS_NTNX 表領域が認識されました。
SQL> select TABLESPACE_NAME,FILE_NAME from dba_data_files; TABLESPACE FILE_NAME ---------- -------------------------------------------------- SYSTEM +DG_LOCAL/ORADBB/DATAFILE/system.258.921589563 SYSAUX +DG_LOCAL/ORADBB/DATAFILE/sysaux.257.921589517 UNDOTBS1 +DG_LOCAL/ORADBB/DATAFILE/undotbs1.260.921589619 USERS +DG_LOCAL/ORADBB/DATAFILE/users.259.921589617 TS_NTNX +DG_ABS/ORADBA/DATAFILE/ts_ntnx.256.921691481
6. 移行対象の表領域を Read Write に変更
表領域が Read Only のままなので、Read Write に戻します。
SQL> select TABLESPACE_NAME,STATUS from dba_tablespaces 2 where TABLESPACE_NAME = 'TS_NTNX'; TABLESPACE STATUS ---------- --------- TS_NTNX READ ONLY SQL> alter tablespace TS_NTNX read write; Tablespace altered. SQL> select TABLESPACE_NAME,STATUS from dba_tablespaces 2 where TABLESPACE_NAME = 'TS_NTNX'; TABLESPACE STATUS ---------- --------- TS_NTNX ONLINE
ntnx ユーザのデフォルト表領域も、移行元に合わせて TS_NTNX に変更しておきます。
SQL> alter user ntnx default tablespace ts_ntnx; User altered. SQL> col username for a10 SQL> select username,default_tablespace from dba_users 2 where username='NTNX'; USERNAME DEFAULT_TABLESPACE ---------- ------------------------------ NTNX TS_NTNX SQL>
データの読み書きもできました。
SQL> conn ntnx/ntnx1234 Connected. SQL> select * from ntnx.tab01; C1 C2 ---------- -------------------- 1 poke 2 go SQL> insert into tab01 values(3,'mada yatte nai'); 1 row created. SQL> commit; Commit complete. SQL> select * from ntnx.tab01 order by c1; C1 C2 ---------- -------------------- 1 poke 2 go 3 mada yatte nai SQL>
おまけ
Systemd の Unit ファイル編集しても、OS 再起動後の iscsid ~ oracleasm scandisks あたりがうまくいかなかったので、妥協策。
[root@ora-sv-b ~]# chmod +x /etc/rc.d/rc.local [root@ora-sv-b ~]# echo "sleep 5" >> /etc/rc.d/rc.local [root@ora-sv-b ~]# echo "/usr/sbin/oracleasm scandisks" >> /etc/rc.d/rc.local
以上。