Standby Express Pre/Post機能の便利な使い方 ~ファイル同期~

2016.06.30

こんにちは。YDCの やす です。
今回の内容は「Standby Express Pre/Post機能の便利な使い方 ~ファイル同期~」です。
Standby Express 5 で新たに追加されたPre/Postコマンド機能の活用方法をご紹介します。

Standby Express はデータベースの障害復旧時の RTO(復旧に要する時間) と RPO(復旧で戻される時点) の短縮を低コストで実現することができる災害対策およびバックアップのためのソフトウェア製品です。

Pre/Postコマンドにrsyncコマンドを組み込むことによって、ファイルを転送することができます。
データベースの同期とファイルの同期のタイミングを一致させることができるのでとても便利です。
rsyncコマンドはディレクトリやファイルを高速に転送するLinuxコマンドです。

環境
ホスト名 OS Oracle 転送元・転送先ディレクトリ 説明
db01 Oracle Linux Server release 6.1 11.2.0.4 /home/oracle/rsyncFiles 本番機
db02 Oracle Linux Server release 6.1 11.2.0.4 /home/oracle/rsyncFiles スタンバイ機

Pre/Postコマンドの事前設定

rsyncコマンドでファイル同期を行う場合、毎回パスワードの入力を求められるため、事前に
パスワードなしでログインできるよう設定する必要があります。
今回はSSH公開鍵認証を使用する方法でパスワードなしのログインの設定をします。

1. スタンバイ機で公開鍵の生成をします。

[oracle@db02 ~]$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/oracle/.ssh/id_rsa): ★入力しません
Enter passphrase (empty for no passphrase):           ★入力しません
Enter same passphrase again:                  ★入力しません
Your identification has been saved in /home/oracle/.ssh/id_rsa.
Your public key has been saved in /home/oracle/.ssh/id_rsa.pub.
The key fingerprint is:
XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX oracle@db02
The key's randomart image is:
+--[ RSA 2048]----+
| ... |
| . . . |
| .. o . |
| o..o +. |
| o.++...S.. |
| o. o .o |
| . = . . |
| o .. |
| .. |
+-----------------+

※/home/oracle/.ssh/ にid_rsa(秘密鍵)とid_rsa.pub(公開鍵)の2つのファイルが生成されます。

2. 本番機へ公開鍵(id_rsa.pub)を転送します。

[oracle@db02 ~]$ scp /home/oracle/.ssh/id_rsa.pub db01:/tmp
oracle@db01's password:★db01のパスワードを入力します。
id_rsa.pub


3. 上記2.で転送した公開鍵を本番機の/home/oracle/.ssh/authorized_keysファイルへ追記します。
※/home/oracle/.ssh/authorized_keysが存在しない場合、新規でファイルを作成します。

[oracle@db01 ~]$ cat /tmp/id_rsa.pub >> /home/oracle/.ssh/authorized_keys
[oracle@db01 ~]$ ll /home/oracle/.ssh
合計 8
-rw-r--r--. 1 oracle oinstall 786 12月 20 03:20 2013 authorized_keys
-rw-r--r--. 1 oracle oinstall 401 12月 12 10:25 2013 known_hosts


ここまでがパスワードなしでログインできるようにするための設定になります。
スタンバイ機から本番機にパスワード入力なしでSSH接続できるか確認してみましょう。

[oracle@db02 ~]$ ssh db01
Last login: Fri Dec 20 03:20:09 2013 from db02★ログインできればOK
[oracle@db01 ~]$

4. ファイル同期のスクリプトを作成します。

※rsync.shというファイルを作成し、下記の内容を記載します。

#!/bin/bash

rsync -auvz oracle@db01:/home/oracle/rsyncFiles/ /home/oracle/rsyncFiles

スクリプトに記載したrsyncコマンドについて簡単に説明します。

■書式
rsync [オプション] 転送元 転送先
■オプション
-a:転送元のディレクトリを再帰的にオーナー、グループ、権限、タイムスタンプをそのまま転送
-u:転送元と転送先を比較して、追加・更新されたファイル、ディレクトリのみを転送
-v:転送しているファイル名やバイト数などの情報を表示
-z:圧縮して転送する

つまり作成したrsync.shを実行すると
本番機の/home/oracle/rsyncFilesディレクトリに追加・更新されたファイルのみを
スタンバイ機の/home/oracle/rsyncFilesディレクトリへ
権限、オーナー、グループ、タイムスタンプの情報を変更しないで転送することができます。
また転送中はファイルを圧縮し、転送中の結果を標準出力します。

5. Standby Expressの設定画面から作成したスクリプトをPostコマンドに設定します。

※同期のPostコマンドにチェックし、Standbyグループで実行するスクリプトを設定します。

sbex_3_1.jpg

※Postコマンドを設定します。ここではrsync.shというファイルを設定します。

sbex_3_2.jpg

設定は以上になります。それでは実際にファイル同期できるのか確認してみましょう!

ファイル同期の検証

1. 本番機の転送元ディレクトリにファイルを追加します。

本番機

[oracle@db01 rsyncFiles]$ pwd
/home/oracle/rsyncFiles
[oracle@db01 rsyncFiles]$ echo "test" >> test.txt
[oracle@db01 rsyncFiles]$ ll
合計 4
-rw-r--r--. 1 oracle oinstall 5 12月 20 04:53 2013 test.txt
[oracle@db01 rsyncFiles]$ cat test.txt
test

2. スタンバイ機の転送先ディレクトリを確認します。

スタンバイ機

[oracle@db02 rsyncFiles]$ pwd
/home/oracle/rsyncFiles
[oracle@db02 rsyncFiles]$ ll
合計 0

3. 同期してみます

本番機

[oracle@db01 rsyncFiles]$ /u01/app/oracle/standby_express/admin/orcl/bin/REQUEST_sync
INFO [2013/12/20 04:58:19](main)INFO-00012: メッセージのエンキューを要求しています。 (Sync)
INFO [2013/12/20 04:58:20](main)INFO-00043: 処理が正常に終了しました。
INFO [2013/12/20 04:58:21](Synchronize)INFO-00007: データベースの同期処理を開始します。
INFO [2013/12/20 04:58:21](StandbyDB)INFO-00010: db02ノードのスタンバイ・データベースでOPEN_MODEをチェックしています。
INFO [2013/12/20 04:58:22](StandbyDB)INFO-00109: db02ノードのスタンバイ・データベースから、転送済みSCNを取得しています。
INFO [2013/12/20 04:58:22](StandbyDB)INFO-00039: db02ノードのスタンバイ・データベースから、適用済みSCNを取得しています。
INFO [2013/12/20 04:58:22](Synchronize)INFO-00037: db01ノードのプライマリ・データベースから、FORCE LOGGINGモードを取得しています。
INFO [2013/12/20 04:58:23](Synchronize)INFO-00009: db01ノードのプライマリ・データベースでForce Loggingモードをチェックしています。
INFO [2013/12/20 04:58:23](Synchronize)INFO-00035: 一時表領域を作成するためのDDLをdb01ノードのプライマリ・データベースから取得しています。
INFO [2013/12/20 04:58:23](Synchronize)INFO-00017: 一時表領域を作成するためのSQLスクリプトファイルを作成しています。
INFO [2013/12/20 04:58:23](Synchronize)INFO-00029: db01ノードのプライマリ・データベースで、REDOログのアーカイブを実行しています。
INFO [2013/12/20 04:58:25](Synchronize)INFO-00041: データファイルを作成するためのDDLをdb01ノードのプライマリ・データベースから取得しています。
INFO [2013/12/20 04:58:26](Synchronize)INFO-00106: データファイルを作成するためのSQLスクリプトファイルを作成しています。
INFO [2013/12/20 04:58:26](Datafile)INFO-00016: 一時表領域を作成するためのSQLスクリプトファイルをdb02ノードへコピーしています。
INFO [2013/12/20 04:58:26](Datafile)INFO-00001: db02ノードへ/u01/app/oracle/standby_express/admin/orcl/temp/create_temp.sqlファイルのコピーが完了しました。
INFO [2013/12/20 04:58:26](Datafile)INFO-00107: データファイルを作成するためのSQLスクリプトファイルをdb02ノードへコピーしています。
INFO [2013/12/20 04:58:26](Datafile)INFO-00001: db02ノードへ/u01/app/oracle/standby_express/admin/orcl/temp/create_data.sqlファイルのコピーが完了しました。
INFO [2013/12/20 04:58:26](Synchronize)INFO-00033: db01ノードのプライマリ・データベースから、適用に必要なアーカイブログファイルのリストを取得しています。
INFO [2013/12/20 04:58:26](Archivelog)INFO-00013: db02ノードへアーカイブログをコピーしています。
INFO [2013/12/20 04:58:26](Archivelog)INFO-00001: db02ノードへ/u02/app/oradata/1_58_834551503.dbfファイルのコピーが完了しました。
INFO [2013/12/20 04:58:26](Archivelog)INFO-00108: db02ノードのスタンバイ・データベースでアーカイブログをカタログしています。
INFO [2013/12/20 04:58:27](Archivelog)INFO-00003: db02ノードのスタンバイ・データベースにアーカイブログを適用しています。
INFO [2013/12/20 04:58:28](StandbyDB)INFO-00039: db02ノードのスタンバイ・データベースから、適用済みSCNを取得しています。
INFO [2013/12/20 04:58:28](Archivelog)INFO-00020: db02ノードの不要なアーカイブログファイルを削除しています。
INFO [2013/12/20 04:58:29](Synchronize)INFO-00105: db02ノードのスタンバイ・データベースでデータファイルのステータスをチェックしています。
INFO [2013/12/20 04:58:29](Synchronize)INFO-00116: db02グループの同期ポストコマンドを開始します。
INFO [2013/12/20 04:58:30](PrePost)receiving incremental file list
INFO [2013/12/20 04:58:30](PrePost)./
INFO [2013/12/20 04:58:30](PrePost)test.txt
INFO [2013/12/20 04:58:30](PrePost)sent 33 bytes received 115 bytes 296.00 bytes/sec
INFO [2013/12/20 04:58:30](PrePost)total size is 5 speedup is 0.03★転送情報が表示されます
INFO [2013/12/20 04:58:30](Synchronize)INFO-00140: db02グループの同期ポストコマンドが正常終了しました。
INFO [2013/12/20 04:58:30](Archivelog)INFO-00040: db01ノードのプライマリ・データベースから、1.0日前のSCNを取得しています。
INFO [2013/12/20 04:58:30](Archivelog)INFO-00020: db01ノードの不要なアーカイブログファイルを削除しています。
INFO [2013/12/20 04:58:31](Dequeue)INFO-00057: メッセージのデキューを開始します。
------------------------------------------------------------------------------
| |
| Standby Express Processing Information |
| [Request] |
| TIME : 2013/12/20 04:58:20 |
| REQUEST : Sync |
| TARGET : ALL |
| [Result] |
| TIME : 2013/12/20 04:58:31 |
| RESULT : Normal Termination |
| [Node Status] |
| db02(db02) |
| RESULT END_TIME TRANS_SCN_TIME APPLY_SCN_TIME |
| ------ ------------------- ------------------- ------------------- |
| OK 2013/12/20 04:58:30 2013/12/20 04:58:25 2013/12/20 04:58:25 |
| |
------------------------------------------------------------------------------

4. スタンバイ機の転送先ディレクトリを確認します。

スタンバイ機

[oracle@db02 rsyncFiles]$ pwd
/home/oracle/rsyncFiles
[oracle@db02 rsyncFiles]$ ll
合計 4
-rw-r--r--. 1 oracle oinstall 5 12月 20 04:53 2013 test.txt★権限、オーナ、グループ、タイムスタンプはそのまま
[oracle@db02 rsyncFiles]$ cat test.txt
test★同期されている

5. 本番機の転送元ディレクトリにファイルを更新してみます。

本番機

[oracle@db01 rsyncFiles]$ echo "test2" >> test.txt
[oracle@db01 rsyncFiles]$ ll
合計 4
-rw-r--r--. 1 oracle oinstall 11 12月 20 05:01 2013 test.txt
[oracle@db01 rsyncFiles]$ cat test.txt
test
test2

6. もう一度同期してみます。

本番機

[oracle@db01 rsyncFiles]$ /u01/app/oracle/standby_express/admin/orcl/bin/REQUEST_sync
INFO [2013/12/20 05:02:43](main)INFO-00012: メッセージのエンキューを要求しています。 (Sync)
INFO [2013/12/20 05:02:44](main)INFO-00043: 処理が正常に終了しました。
INFO [2013/12/20 05:02:45](Synchronize)INFO-00007: データベースの同期処理を開始します。
INFO [2013/12/20 05:02:45](StandbyDB)INFO-00010: db02ノードのスタンバイ・データベースでOPEN_MODEをチェックしています。
INFO [2013/12/20 05:02:46](StandbyDB)INFO-00109: db02ノードのスタンバイ・データベースから、転送済みSCNを取得しています。
INFO [2013/12/20 05:02:46](StandbyDB)INFO-00039: db02ノードのスタンバイ・データベースから、適用済みSCNを取得しています。
INFO [2013/12/20 05:02:46](Synchronize)INFO-00037: db01ノードのプライマリ・データベースから、FORCE LOGGINGモードを取得しています。
INFO [2013/12/20 05:02:46](Synchronize)INFO-00009: db01ノードのプライマリ・データベースでForce Loggingモードをチェックしています。
INFO [2013/12/20 05:02:46](Synchronize)INFO-00035: 一時表領域を作成するためのDDLをdb01ノードのプライマリ・データベースから取得しています。
INFO [2013/12/20 05:02:47](Synchronize)INFO-00017: 一時表領域を作成するためのSQLスクリプトファイルを作成しています。
INFO [2013/12/20 05:02:47](Synchronize)INFO-00029: db01ノードのプライマリ・データベースで、REDOログのアーカイブを実行しています。
INFO [2013/12/20 05:02:49](Synchronize)INFO-00041: データファイルを作成するためのDDLをdb01ノードのプライマリ・データベースから取得しています。
INFO [2013/12/20 05:02:50](Synchronize)INFO-00106: データファイルを作成するためのSQLスクリプトファイルを作成しています。
INFO [2013/12/20 05:02:50](Datafile)INFO-00016: 一時表領域を作成するためのSQLスクリプトファイルをdb02ノードへコピーしています。
INFO [2013/12/20 05:02:50](Datafile)INFO-00001: db02ノードへ/u01/app/oracle/standby_express/admin/orcl/temp/create_temp.sqlファイルのコピーが完了しました。
INFO [2013/12/20 05:02:50](Datafile)INFO-00107: データファイルを作成するためのSQLスクリプトファイルをdb02ノードへコピーしています。
INFO [2013/12/20 05:02:50](Datafile)INFO-00001: db02ノードへ/u01/app/oracle/standby_express/admin/orcl/temp/create_data.sqlファイルのコピーが完了しました。
INFO [2013/12/20 05:02:50](Synchronize)INFO-00033: db01ノードのプライマリ・データベースから、適用に必要なアーカイブログファイルのリストを取得しています。
INFO [2013/12/20 05:02:50](Archivelog)INFO-00013: db02ノードへアーカイブログをコピーしています。
INFO [2013/12/20 05:02:50](Archivelog)INFO-00001: db02ノードへ/u02/app/oradata/1_60_834551503.dbfファイルのコピーが完了しました。
INFO [2013/12/20 05:02:50](Archivelog)INFO-00108: db02ノードのスタンバイ・データベースでアーカイブログをカタログしています。
INFO [2013/12/20 05:02:51](Archivelog)INFO-00003: db02ノードのスタンバイ・データベースにアーカイブログを適用しています。
INFO [2013/12/20 05:02:52](StandbyDB)INFO-00039: db02ノードのスタンバイ・データベースから、適用済みSCNを取得しています。
INFO [2013/12/20 05:02:52](Archivelog)INFO-00020: db02ノードの不要なアーカイブログファイルを削除しています。
INFO [2013/12/20 05:02:53](Synchronize)INFO-00105: db02ノードのスタンバイ・データベースでデータファイルのステータスをチェックしています。
INFO [2013/12/20 05:02:53](Synchronize)INFO-00116: db02グループの同期ポストコマンドを開始します。
INFO [2013/12/20 05:02:54](PrePost)receiving incremental file list
INFO [2013/12/20 05:02:54](PrePost)test.txt
INFO [2013/12/20 05:02:54](PrePost)sent 36 bytes received 121 bytes 314.00 bytes/sec
INFO [2013/12/20 05:02:54](PrePost)total size is 11 speedup is 0.07
★転送情報が表示されます
INFO [2013/12/20 05:02:54](Synchronize)INFO-00140: db02グループの同期ポストコマンドが正常終了しました。
INFO [2013/12/20 05:02:54](Archivelog)INFO-00040: db01ノードのプライマリ・データベースから、1.0日前のSCNを取得しています。
INFO [2013/12/20 05:02:54](Archivelog)INFO-00020: db01ノードの不要なアーカイブログファイルを削除しています。
INFO [2013/12/20 05:02:55](Dequeue)INFO-00057: メッセージのデキューを開始します。
------------------------------------------------------------------------------
| |
| Standby Express Processing Information |
| [Request] |
| TIME : 2013/12/20 05:02:44 |
| REQUEST : Sync |
| TARGET : ALL |
| [Result] |
| TIME : 2013/12/20 05:02:55 |
| RESULT : Normal Termination |
| [Node Status] |
| db02(db02) |
| RESULT END_TIME TRANS_SCN_TIME APPLY_SCN_TIME |
| ------ ------------------- ------------------- ------------------- |
| OK 2013/12/20 05:02:54 2013/12/20 05:02:49 2013/12/20 05:02:49 |
| |
------------------------------------------------------------------------------

7. スタンバイ機の転送先ディレクトリを確認します。

スタンバイ機

[oracle@db02 rsyncFiles]$ pwd
/home/oracle/rsyncFiles
[oracle@db02 rsyncFiles]$ ll
合計 4
-rw-r--r--. 1 oracle oinstall 11 12月 20 05:01 2013 test.txt★権限、オーナ、グループ、タイムスタンプはそのまま
[oracle@db02 rsyncFiles]$ cat test.txt
test
test2★
同期されている

本番機のファイル追加、更新がスタンバイ機に同期されることを確認することができました。
rsyncコマンドのオプション組み合わせによってより詳細な要件に対応することも可能です。
とても簡単なのでぜひ活用してみてください。

Standby Expressに関するお問合わせ

  • TEL 042-333-6217
  • FAX 042-352-6101
  • LINE
  • Mail