NTNX>日記

個人的な趣味による Nutanix Community Edition 日記。Japanese のみですみません。

Nutanix CE の ABS Volume を Oracle で相互利用してみる。Part.3

Nutanix CE の Acropolis Block Services(ABS)ボリュームのデータを、2台の Oracle Database サーバ間で移行をしてみようと思います。

前回はこちら。

今回は、Nutanix の VG クローンと、Oracle の Transportable Tablespace (TTS) を利用してデータ移行してみます。

f:id:gowatana:20160904230248p:plain

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」します。

f:id:gowatana:20160905012222p:plain

「vg-oradb-clone」という名前を入力して、「Save」します。

f:id:gowatana:20160905012336p:plain

VG がクローンされました。

f:id:gowatana:20160905012457p:plain

移行先 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」をクリックします。

f:id:gowatana:20160905012713p:plain

接続先サーバで確認した iSCSI Initiator の IQN を入力し、「+ Add」 で登録したうえで「Save」します。

f:id:gowatana:20160905012833p:plain

VG に、IQN が登録されました。

f:id:gowatana:20160905013024p:plain

移行先 Linux での VG 接続

iSCSI での接続は、 Nutanix クラスタの EXTERNAL DATA SERVICES IP ADDRESS を指定します。今回は「192.168.1.194」としています。

f:id:gowatana:20160905013135p:plain

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

 

以上。