###################################################
##                                               ##
##           ForestRecovery README               ##
##                                               ##
###################################################

(1)本プログラムについて

PostgresForest配下のDBに障害が発生した際の、データのリカバリを行うこと
ができます。複数のDBサーバが稼動し、複雑になりがちなPostgresForestのデ
ータ復旧を容易に実現することができます。リカバリ処理中は、APによるトラ
ンザクション処理を停止することなく、データの復旧を行うことができます。

問題なく稼動し続けるDBサーバのデータをテンプレートとし、復旧先のデータ
ベースへデータを転送・格納します。復旧中のトランザクションについても、
ロギングとそのログの適用を行い、最新かつ整合性のとれた状態でデータベー
スのリカバリを行います。


(2)関連ファイル一覧

インストールディレクトリ＝$FOREST_ROOTを基点とした以下のファイルが必要
となります。ただし、インストーラによって下記ファイルの一部は適切な箇所
にインストール済みなため、リカバリを実行する際には必ずしも必要ではあり
ません。(例：PostgreSQLのユーザ関数とそれようのライブラリなど）

    $FOREST_ROOT/
        bin/ForestRecovery.sh
        lib/RecoveryManager32.jar
        lib/forest_recovery.a
        lib/libforest_recovery.so
        lib/libforest_recovery.so.0
        lib/libforest_recovery.so.0.0
        share/forest_recovery.sql
        share/pg74.215.jdbc3.jar
        share/postgresql-8.0-313.jdbc3.jar


(3)前提条件
インスタンス障害やネットワーク障害時、PostgresForestの縮退機能後のデー
タ不整合を回復することを目的としています。したがって、HWのトラブルや、
OS、他各ソフトウェアのトラブルは事前に解決しておく必要があります。
また、PostgreSQLについては、インストール後、データベースクラスタの作成
(initdb)が完了し、適切な環境設定を行い、起動しておく必要があります。

少なくとも1台の、問題なく稼動しているデータベースサーバが必要です。
そのDBサーバへアクセスするAPは停止する必要はありません。


(4)起動方法
$FOREST_ROOT/bin/ForestRecovery.shを使用します。

基本的な起動方法は以下の通りです。
詳細設定項目は"-help"オプションにて起動し、確認してください。

    ForestRecovery.sh \
        [-phase1 | -phase2 | -start_vm | -stop_vm | -cleanup] \
        -user [str] \
        -pass [str] \
        -gsc_url [str] \
        [source server_id] \
        [dest server_id] \
        [dbname]

ユーザ:PostgresForestの環境構築を行ったデータベース特権ユーザ
パスワード:データベース特権ユーザのパスワード
GSC URL:(アクセス可能な)グローバルシステムカタログのJDBC形式URL
dbname:復旧を行うデータベース名

各サーバID: 
問題なく稼動するDBサーバのサーバIDと、復旧を行おうとするDBサーバのサー
バIDを指定します。各サーバIDはPostgresForestの環境構築ツールを使用する
ことで確認できます。



(5)実行手順
[想定環境]
DBサーバは2台構成(サーバIDはそれぞれ0、1)、
GSCはサーバID=0上にあるものとします。
サーバID=1のDBに障害が発生したとします。
障害が起こったサーバではOS、PostgreSQLの再セットアップ・起動し、
下記の手順を行っていきます。

    データベースサーバ
        host0(サーバID=0)、host1(サーバID=1)
    
    PostgreSQL設定
        リスニングポート = 5432
    
    ユーザDB名
        testDB
    
    PostgresForest設定
        インストールディレクトリ = /user/local/forest
        GSC = jdbc:postgresql:/host0:5432/gsc

[全体フロー]
1 phase1:   ログ取得の開始と、テーブルの初期コピーおよび更新ログの適用
2 stop_vm:  テーブル閉塞と仮想化モジュール処理休止
3 phase2:   更新ログの適用
4 start_vm: テーブルの開放仮想化モジュールの再活性化
5 cleanup:  ログテーブルの削除など後処理
6 動作確認


[手順]

FORET_ROOT=/usr/local/forest/

# Phase 1
    $FORET_ROOT/ForestRecovery.sh \
        -phase1 \
        -user postgres \
        -pass postgres \
        -gsc_url jdbc:postgresql://localhost:5432/gsc \
        0 \
        1 \
        testDB

# Suspend online transactions
    $FORET_ROOT/ForestRecovery.sh \
        -stop_vm \
        -user postgres \
        -pass postgres \
        -gsc_url jdbc:postgresql://localhost:5432/gsc \
        0 \
        1 \
        testDB

# Phase 2
    $FORET_ROOT/ForestRecovery.sh \
        -phase2 \
        -user postgres \
        -pass postgres \
        -gsc_url jdbc:postgresql://localhost:5432/gsc \
        0 \
        1 \
        testDB

# Activate PostgresForest
    $FORET_ROOT/ForestRecovery.sh \
        -start_vm \
        -user postgres \
        -pass postgres \
        -gsc_url jdbc:postgresql://localhost:5432/gsc \
        0 \
        1 \
        testDB

# Clean up temporary DATA used in recovery
    $FORET_ROOT/ForestRecovery.sh \
        -cleanup \
        -user postgres \
        -pass postgres \
        -gsc_url jdbc:postgresql://localhost:5432/gsc \
        0 \
        1 \
        testDB



EOF