Nutanix の Application Consistent Snapshots を利用して Oracle Database の復旧をしてみます。
今回の環境は下記のような感じです。
それでは自分で DB を破壊してから復旧します。
準備
Nutanix の PD スナップショットの確認
DB 破壊前に、スナップショットは作成済みです。アプリケーション整合性をとった(Application Consistent = True)スナップショットです。
対象 VM の含まれる Protection Domain(PD)のスナップショットを、CVM の CLI でも確認しておきます。
nutanix@NTNX-2a0a73b3-A-CVM:192.168.1.192:~$ ncli protection-domain list-snapshots name=pd-db02 | grep -e Id -e "Create Time" -e Application Id : 5521 Create Time : 09/30/2017 09:26:51 UTC VM Id : d03a4331-7370-4cc0-9bbb-b8c70d4e9f28 Application Consistent... : true
データファイルの破壊
データファイルを破壊します。
[root@db02 ~]# ls -l /u01/app/oracle/oradata/testdb1/users01.dbf -rw-r-----. 1 oracle oinstall 5251072 9月 30 18:26 /u01/app/oracle/oradata/testdb1/users01.dbf [root@db02 ~]# > /u01/app/oracle/oradata/testdb1/users01.dbf [root@db02 ~]# ls -l /u01/app/oracle/oradata/testdb1/users01.dbf -rw-r-----. 1 oracle oinstall 0 9月 30 18:35 /u01/app/oracle/oradata/testdb1/users01.dbf
Oracle がデータファイルにアクセスしたタイミングでエラーが発生しました。今回は(運よく?)select しただけで当たりました。
SQL> select * from tab01; select * from tab01 * 行1でエラーが発生しました。: ORA-01115: ファイル(ブロック番号)からの読取りI/Oエラーが発生しました。 ORA-01110: データファイル7: '/u01/app/oracle/oradata/testdb1/users01.dbf' ORA-27072: ファイルI/Oエラーが発生しました。 Additional information: 4 Additional information: 147
DB インスタンスは停止しておきます。
SQL> shutdown abort ORACLEインスタンスがシャットダウンされました。
スナップショットのリストア
下記の要領で、スナップショットから vDisk を取り出します。
今回の手順は、下記のようなイメージです。
スナップショットから、VM をリストア(新規作成)します。
nutanix@NTNX-2a0a73b3-A-CVM:192.168.1.192:~$ ncli protection-domain restore-snapshot name=pd-db02 snap-id=5521 vm-names=db02 vm-name-prefix=restore- Status : true
スナップショット に含まれる db02 から、restore-db02 という別の VM が作成されました。
nutanix@NTNX-2a0a73b3-A-CVM:192.168.1.192:~$ acli vm.list | grep db02 db02 d03a4331-7370-4cc0-9bbb-b8c70d4e9f28 restore-db02 14e7225d-d7c2-4894-b464-42a917132fb4
db02 と restore-db02 は、どちらも vDisk が2つです。
nutanix@NTNX-2a0a73b3-A-CVM:192.168.1.192:~$ acli vm.disk_list db02 Device bus Device index scsi 0 scsi 1 nutanix@NTNX-2a0a73b3-A-CVM:192.168.1.192:~$ acli vm.disk_list restore-db02 Device bus Device index scsi 0 scsi 1
ゲストOS では、この時点ではまだ scsi.1 の vDisk に対応する「/dev/sdb」までが認識されています。
[root@db02 ~]# lsblk -l /dev/sdb1 /dev/sdc1 lsblk: /dev/sdc1: not a block device NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sdb1 8:17 0 16G 0 part /u01
restore-db02 に scsi.1 として接続されている vDisk を複製して、db02 に vDisk を追加します。db02 には、scsi.2 が作成されました。
nutanix@NTNX-2a0a73b3-A-CVM:192.168.1.192:~$ acli vm.disk_create db02 bus=scsi clone_from_vmdisk=vm:restore-db02:scsi.1 DiskCreate: pending DiskCreate: complete nutanix@NTNX-2a0a73b3-A-CVM:192.168.1.192:~$ acli vm.disk_list db02 Device bus Device index scsi 0 scsi 1 scsi 2
ゲスト OS / Oracle 側での復旧
ファイルのリストア
ゲスト OS では、scsi.2 の vDisk が /dev/sdc として認識されるので、/mnt にマウントしました。
[root@db02 ~]# lsblk -l /dev/sdb1 /dev/sdc1 NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sdb1 8:17 0 16G 0 part /u01 sdc1 8:33 0 16G 0 part [root@db02 ~]# mount /dev/sdc1 /mnt [root@db02 ~]# lsblk -l /dev/sdb1 /dev/sdc1 NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sdb1 8:17 0 16G 0 part /u01 sdc1 8:33 0 16G 0 part /mnt
/mnt ディレクトリ配下から /u01 ディレクトリ配下に、users01.dbf ファイルをリストアします。
[root@db02 ~]# ls -l /mnt/app/oracle/oradata/testdb1/users01.dbf -rw-r-----. 1 oracle oinstall 5251072 9月 30 16:23 /mnt/app/oracle/oradata/testdb1/users01.dbf [root@db02 ~]# cp -p /mnt/app/oracle/oradata/testdb1/users01.dbf /u01/app/oracle/oradata/testdb1/users01.dbf cp: `/u01/app/oracle/oradata/testdb1/users01.dbf' を上書きしますか? yes
Oracle でのリカバリ
sqlplus で Oracle の DB インスタンスに接続した状態で、DB インスタンスを mount まで起動して、リカバリします。
SQL> startup mount ORACLEインスタンスが起動しました。 Total System Global Area 473956352 bytes Fixed Size 8794120 bytes Variable Size 297799672 bytes Database Buffers 163577856 bytes Redo Buffers 3784704 bytes データベースがマウントされました。 SQL> recover database; メディア・リカバリが完了しました。
DB をリカバリして、Open できました。
SQL> alter database open; データベースが変更されました。 SQL> select instance_name,status from v$instance; INSTANCE_NAME STATUS ---------------- ------------ testdb1 OPEN
感想
- アプリケーション整合性をとるスナップショットを利用する場合でも、実際にスナップショットを利用するケース(障害復旧など)を考慮すると Oracle のようなものでは vDisk 構成が重要だと思った。
- あまりディスク構成を意識していない VM でアプリケーション整合性がからむものについては、3rd ベンダのバックアップ ソフトウェアを利用したほうが楽なのかもしれない。
以上。