読者です 読者をやめる 読者になる 読者になる

NTNX>日記

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

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

ABS Oracle

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

今回は、データ移行元の DB サーバで、移行用データの用意をします。

前提とする環境

Nutanix Acropolis Hypervisor (AHV) 上に、Oracle Linux 7.2 の VM を構築してあります。AHV は KVM ベースのハイパーバイザです。

[root@ora-sv-a ~]# dmidecode -s system-product-name
KVM
[root@ora-sv-a ~]# cat /etc/oracle-release
Oracle Linux Server release 7.2

Prism から見るとこんな感じです。

f:id:gowatana:20160904195214p:plain

すでに、シングルインスタンス構成の Oracle Database サーバを構築ずみです。

[oracle@ora-sv-a ~]$ sqlplus / as sysdba

SQL*Plus: Release 12.1.0.2.0 Production on Sun Sep 4 17:24:20 2016

Copyright (c) 1982, 2014, Oracle.  All rights reserved.


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

SQL> col host_name for a10
SQL> select host_name,instance_name,status from v$instance;

HOST_NAME  INSTANCE_NAME    STATUS
---------- ---------------- ------------
ora-sv-a   oradba           OPEN

Oracle Database のデータファイル配置先として Oracle ASM を使用しています。既存ファイルは、すべて DG_LOCAL という名前のディスクグループに配置しています。

SQL> col TABLESPACE_NAME for a10
SQL> col FILE_NAME for a50
SQL> select TABLESPACE_NAME,FILE_NAME from dba_data_files;

TABLESPACE FILE_NAME
---------- --------------------------------------------------
SYSTEM     +DG_LOCAL/ORADBA/DATAFILE/system.258.921596971
SYSAUX     +DG_LOCAL/ORADBA/DATAFILE/sysaux.257.921596925
EXAMPLE    +DG_LOCAL/ORADBA/DATAFILE/example.270.921597263
USERS      +DG_LOCAL/ORADBA/DATAFILE/users.259.921597027
UNDOTBS1   +DG_LOCAL/ORADBA/DATAFILE/undotbs1.260.921597033

Oracle ASM を使用するため、oracleasm-support の RPM をインストールしています。

[root@ora-sv-a ~]# rpm -q oracleasm-support
oracleasm-support-2.1.8-3.el7.x86_64
[root@ora-sv-a ~]# oracleasm configure
ORACLEASM_UID=oracle
ORACLEASM_GID=dba
ORACLEASM_SCANBOOT=true
ORACLEASM_SCANORDER=""
ORACLEASM_SCANEXCLUDE=""
ORACLEASM_USE_LOGICAL_BLOCK_SIZE="false"

VM には、3つの vDisk を接続しています。

[root@ora-sv-a ~]# lsscsi
[0:0:0:0]    cd/dvd  QEMU     QEMU DVD-ROM     2.1.  /dev/sr0
[2:0:0:0]    disk    NUTANIX  VDISK            0     /dev/sda
[2:0:1:0]    disk    NUTANIX  VDISK            0     /dev/sdb
[2:0:2:0]    disk    NUTANIX  VDISK            0     /dev/sdc

最初にマウントしているファイルシステムの様子です。ASM の領域はここからは見えません。

[root@ora-sv-a ~]# df -h -T -t ext4 -t xfs
ファイルシス          タイプ サイズ  使用  残り 使用% マウント位置
/dev/mapper/ol-root   xfs       14G  1.6G   13G   12% /
/dev/mapper/vg01-data ext4      20G   13G  6.4G   66% /u01
/dev/sda1             xfs      497M  147M  350M   30% /boot

ASM ディスクとして、/dev/sdc1 を使用しています。このあと、下記とは別に移行対象データを格納するためのディスクを追加します。

[root@ora-sv-a ~]# oracleasm querydisk -p /dev/sd?1
Device "/dev/sda1" is not marked as an ASM disk
Device "/dev/sdc1" is marked an ASM disk with the label "LOCALDISK1"

Oracle はシングル構成ですが、Oracle Database インスタンス、ASM インスタンス、ASM ディスクグループなどが Oracle Clusterware にリソース登録されている「Oracle Restart」 構成になっています。oradba という DB が OPEN 状態になっています。

[oracle@ora-sv-a ~]$ crsctl stat res -t
--------------------------------------------------------------------------------
Name           Target  State        Server                   State details
--------------------------------------------------------------------------------
Local Resources
--------------------------------------------------------------------------------
ora.DG_LOCAL.dg
               ONLINE  ONLINE       ora-sv-a                 STABLE
ora.LISTENER.lsnr
               ONLINE  ONLINE       ora-sv-a                 STABLE
ora.asm
               ONLINE  ONLINE       ora-sv-a                 Started,STABLE
ora.ons
               OFFLINE OFFLINE      ora-sv-a                 STABLE
--------------------------------------------------------------------------------
Cluster Resources
--------------------------------------------------------------------------------
ora.cssd
      1        ONLINE  ONLINE       ora-sv-a                 STABLE
ora.diskmon
      1        OFFLINE OFFLINE                               STABLE
ora.evmd
      1        ONLINE  ONLINE       ora-sv-a                 STABLE
ora.oradba.db
      1        ONLINE  ONLINE       ora-sv-a                 Open,STABLE
--------------------------------------------------------------------------------
[oracle@ora-sv-a ~]$

Nutanix ABS ボリューム グループ作成~接続

ABS VG の作成

Nutanix ABS でボリュームグループ(VG) を作成します。

Prism の Storage 画面で、「+ Volume Group」をクリックします。

f:id:gowatana:20160904195503p:plain

VG の名前 (NAME) は「vg-oradb」にしています。

NAME を入力したら、「+ Add new disk」で ボリューム (vDisk) を追加します。

f:id:gowatana:20160904195820p:plain

Nutanix DSF (Distributed Storage Fabric) のコンテナに、5 GBの vDisk を追加します。

f:id:gowatana:20160904200025p:plain

同様に、2 GB の vDisk を追加します。

f:id:gowatana:20160904200152p:plain

2つの vDisk が追加された状態で、いったん「Save」します。

f:id:gowatana:20160904200305p:plain

ABS VG の VM への割り当て

作成した VG は、「Table」→「Volume Group」画面を開くと確認できます。

VM に割り当てるため、VG「gv-oradb」を選択して、「Update」をクリックします。

f:id:gowatana:20160904200654p:plain

VG 作成時と同様の画面が表示されるので、下のほうにある「Attach to a VM」をクリックします。

f:id:gowatana:20160904200930p:plain

割り当て先の VM「ora-sv-a」を選択して「Attach」します。

f:id:gowatana:20160904201031p:plain

「ora-sv-a」が割り当てられました。「Save」します。

f:id:gowatana:20160904201122p:plain

Oracle Linux 7.2 の VM では、オンラインでディスク認識します。/dev/sdd と /dev/sde が追加で認識されました。

[root@ora-sv-a ~]# lsscsi
[0:0:0:0]    cd/dvd  QEMU     QEMU DVD-ROM     2.1.  /dev/sr0
[2:0:0:0]    disk    NUTANIX  VDISK            0     /dev/sda
[2:0:1:0]    disk    NUTANIX  VDISK            0     /dev/sdb
[2:0:2:0]    disk    NUTANIX  VDISK            0     /dev/sdc
[2:0:3:0]    disk    NUTANIX  VDISK            0     /dev/sdd
[2:0:3:1]    disk    NUTANIX  VDISK            0     /dev/sde

先ほど作成したとおり、容量は 5 GB と 2 GB です。

[root@ora-sv-a ~]# lsblk /dev/sdd /dev/sde
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sdd    8:48   0   5G  0 disk
sde    8:64   0   2G  0 disk

ゲスト OS でのデバイスのセットアップ

ゲスト OS 側で、認識した VG を使用する準備をします。

vDisk#1 → ASM Disk Group

1つめの vDisk (/dev/sdd) から、ASM Disk Group「DG_ABS」を作成します。

まず、ディスク パーティション(/dev/sdd1)を作成します。

[root@ora-sv-a ~]# echo '2048,,L' | sfdisk -uS -q -f /dev/sdd

ASM Disk ラベルを作成します。これで、ASM Disk「ABSDISK1」として認識されるようになります。

[root@ora-sv-a ~]# oracleasm createdisk ABSDISK1 /dev/sdd1
Writing disk header: done
Instantiating disk: done
[root@ora-sv-a ~]# oracleasm listdisks
ABSDISK1
LOCALDISK1

ASM 管理ユーザ(今回は oracle) で、ASM Disk Group を作成します。ちなみに、通常は Nutanix 側でデータの冗長性があるので、Oracle ASM 側では冗長性をもたない「外部 (EXTERNAL)」冗長性を指定しています。

[oracle@ora-sv-a ~]$ asmca -silent -createDiskGroup -diskString '/dev/oracleasm/disks/*' -diskGroupName DG_ABS -diskList /dev/oracleasm/disks/ABSDISK1 -redundancy EXTERNAL

ディスク・グループDG_ABSは正常に作成されました。

「DG_ABS」ディスクグループが作成されました。「ora.DG_ABS.dg」リソースも登録されています。

[oracle@ora-sv-a ~]$ crsctl stat res -t
--------------------------------------------------------------------------------
Name           Target  State        Server                   State details
--------------------------------------------------------------------------------
Local Resources
--------------------------------------------------------------------------------
ora.DG_ABS.dg
               ONLINE  ONLINE       ora-sv-a                 STABLE
ora.DG_LOCAL.dg
               ONLINE  ONLINE       ora-sv-a                 STABLE
ora.LISTENER.lsnr
               ONLINE  ONLINE       ora-sv-a                 STABLE
ora.asm
               ONLINE  ONLINE       ora-sv-a                 Started,STABLE
ora.ons
               OFFLINE OFFLINE      ora-sv-a                 STABLE
--------------------------------------------------------------------------------
Cluster Resources
--------------------------------------------------------------------------------
ora.cssd
      1        ONLINE  ONLINE       ora-sv-a                 STABLE
ora.diskmon
      1        OFFLINE OFFLINE                               STABLE
ora.evmd
      1        ONLINE  ONLINE       ora-sv-a                 STABLE
ora.oradba.db
      1        ONLINE  ONLINE       ora-sv-a                 Open,STABLE
--------------------------------------------------------------------------------
[oracle@ora-sv-a ~]$

vDisk#2 → TTS Export Data 配置用の領域

移行用手順で使用する、Oracle の Transportable Tablespace (TTS) のエクスポート データを配置するファイルシステム「/u02」を用意しておきます。

ディスク パーティション(/dev/sde1)を作成します。

[root@ora-sv-a ~]# echo '2048,,L' | sfdisk -uS -q -f /dev/sde

ext4 ファイルシステム を作成します。そしてファイルシステム ラベルとして、マウント先「/u02」を付与しておきます。

[root@ora-sv-a ~]# mkfs -t ext4 /dev/sde1
[root@ora-sv-a ~]# e2label /dev/sde1 /u02

マウントポイントを作成して、マウントしておきます。

[root@ora-sv-a ~]# mkdir /u02
[root@ora-sv-a ~]# echo 'LABEL="/u02" /u02 ext4 defaults 0 0' >> /etc/fstab
[root@ora-sv-a ~]# mount /u02

マウントされました。

[root@ora-sv-a ~]# df -h -T /u02
ファイルシス   タイプ サイズ  使用  残り 使用% マウント位置
/dev/sde1      ext4     2.0G  6.0M  1.9G    1% /u02

TTS のエクスポート データの出力先にするディレクトリを作成しておきます。

[root@ora-sv-a ~]# mkdir /u02/dpdir
[root@ora-sv-a ~]# chown oracle:dba /u02/dpdir

移行対象データの作成

ここまでに準備した領域に、移行対象のデータを作成します。

Oracle Database インスタンスに接続します。

[oracle@ora-sv-a ~]$ sqlplus / as sysdba

SQL*Plus: Release 12.1.0.2.0 Production on Sun Sep 4 17:24:20 2016

Copyright (c) 1982, 2014, Oracle.  All rights reserved.


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

SQL> col host_name for a10
SQL> select host_name,instance_name,status from v$instance;

HOST_NAME  INSTANCE_NAME    STATUS
---------- ---------------- ------------
ora-sv-a   oradba           OPEN

SQL>

ASM Disk Group「DG_ABS」に、Oracle の表領域「TS_NTNX」を作成します。

SQL> create tablespace TS_NTNX datafile '+DG_ABS' size 200M;

Tablespace created.

表領域「TS_NTNX」をデフォルト表領域とするユーザ「ntnx」を作成して、そのユーザで接続します。

SQL> create user ntnx identified by ntnx1234 default tablespace ts_ntnx;

User created.

SQL> grant connect,resource,dba to ntnx;

Grant succeeded.

SQL> conn ntnx/ntnx1234
Connected.
SQL> show user
USER is "NTNX"

テーブルを作成して、何件かレコードを登録します。

SQL> create table tab01(c1 number, c2 varchar(20));

Table created.

SQL> insert into tab01 values(1,'poke');

1 row created.

SQL> insert into tab01 values(2,'go');

1 row created.

SQL> commit;

Commit complete.

SQL> select * from ntnx.tab01;

        C1 C2
---------- --------------------
         1 poke
         2 go

テーブルは、ABS ボリューム上にある TS_NTNX 表領域に作成されています。

SQL> col TABLESPACE_NAME for a10
SQL> col TABLE_NAME for a10
SQL> select TABLESPACE_NAME,TABLE_NAME from user_tables;

TABLESPACE TABLE_NAME
---------- ----------
TS_NTNX    TAB01

SQL> quit

ASM Disk Group「DG_ABS」には、「TS_NTNX」表領域だけ格納されています。この「TS_NTNX」表領域を、別の DB サーバに移行します。

SQL> select TABLESPACE_NAME,FILE_NAME from dba_data_files;

TABLESPACE FILE_NAME
---------- --------------------------------------------------
SYSTEM     +DG_LOCAL/ORADBA/DATAFILE/system.258.921596971
SYSAUX     +DG_LOCAL/ORADBA/DATAFILE/sysaux.257.921596925
UNDOTBS1   +DG_LOCAL/ORADBA/DATAFILE/undotbs1.260.921597033
USERS      +DG_LOCAL/ORADBA/DATAFILE/users.259.921597027
EXAMPLE    +DG_LOCAL/ORADBA/DATAFILE/example.270.921597263
TS_NTNX    +DG_ABS/ORADBA/DATAFILE/ts_ntnx.256.921691481

6 rows selected.

つづく。