オラクル
転載の場合は出典を明記してください! (よろしくお願いします、Diao Yan...)
Oracle TAF構成
TAFはTransparent Application FailOverの略で、一般にOPS/RAC環境に適用されます。 8i から利用できるようになったこの機能には良い目的とアイデアがありますが、現在の用途はまだ非常に限られています。この記事では TAF 関連の問題について詳しく説明します。
この記事のテスト環境はTru64 V5.1+ Oracle9.2.0.1 RACです。
1. 関連パラメータの説明
正直に言うと、多くの人は何が起こっているのか理解できません:
「ORA-12514: TNS:listener Could」接続記述子で指定された SERVICE_NAME を解決できません」と
「ORA-12154 :TNS: サービス名を解決できませんでした」
本質は同じです。この問題を解決するには、いくつかのパラメータをいじる必要があります:
initsid のいくつかのパラメータ.ora:
DB_NAME --- データベース名。データベースの構築時に指定された名前です。
GLOBAL_NAMES --- True/False、データベースのドメイン名を使用するかどうかを設定します。
DB_DOMAIN --- データベース ドメイン名。GLOBAL_NAMES=True の場合、このパラメータは必須です。
SERVICE_NAMES --- サービス名のリスト。複数のサービス名が存在する場合があります。
INSTANCE_NAME --- SERVICE_NAMES と同様、インスタンス名は 817 以降でサポートされます。つまり、817 以降では、データベース名、インスタンス名、サービス名を分離できます。 instance_name のデフォルト値はインスタンスの SID であり、これは環境変数 ORACLE_SID に対応する値です。 817 より前は、instance_name パラメーターがなかったとき、さまざまなインスタンスは SID によって区別されていました。 oracle817 以降のドキュメントの説明によると、SID は同一ホスト上の各インスタンスの共有メモリを区別するためのものであり、インスタンスの唯一の識別マークではなく、instance_name は各インスタンスを区別するためのものです。
環境変数:
ORACLE_SID --- 817より前にinstance_nameパラメータがなかった場合、異なるインスタンスはSIDによって区別されていました(詳細については、上記のinitsid.oraパラメータの説明を参照してください)。
listener.ora のいくつかのパラメータ:
GLOBAL_DBNAME --- グローバル データベース名。分散環境内のさまざまなデータベースを一意に識別します。その値は、initsid.ora の DB_NAME と DB_DOMAIN の組み合わせ、つまり GLOBAL_DBNAME=DB_NAME.DB_DOMAIN です。ここで DB_DOMAIN が設定されていない場合、DB_DOMAIN は必要ありません。このパラメータは分散環境では明示的に指定することをお勧めします。
SERVICE_NAME --- サービス名。initsid.ora の service_names リストから 1 つを選択します。
SID_NAME --- 環境変数 ORACLE_SID の値に対応します。
INSTANCE_NAME ---初期化パラメータinstance_nameに対応します。
tnsnames.ora のいくつかのパラメータ:
service_name --- サービス名。initsid.ora の service_names リストを 1 つにするだけです。
sid_name --- ORACLE_SID に対応する sid と省略することも、instance_name が instance_name と等しく、instance_name が ORACLE_SID と等しくない場合、Oracle は待機プロセスを自動的に登録します。異なるインスタンスを区別するために使用されます。
instance_name --- 817 以降、この新しいパラメータは、初期化パラメータ instance_name に対応して使用できます。
このようにパラメータは非常に複雑になりますが、実際の使用ではもちろんシンプルな方が良いです。
2. 関連するパラメーターの設定
関連するパラメーターの設定を説明するために、以下の例を示します。インスタンス名=rac1 /2
global_names=false
db_domain=""
3.listener.ora:
SID_LIST_RAC1 =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = ora92)
(ORACLE_HOME = /oracle/oracle9/app/) oracle/product /9.2.0)
(SERVICE_NAME=ora92)(SID_NAME = rac1)
)
)
SID_LIST_RAC2 =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = ora92)
(ORACLE_HOME = 9/ app /oracle /product/9.2.0)
(SERVICE_NAME=ora92)(SID_NAME = rac2)
)
)
RAC1 =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (プロトコル = TCP)) (ホスト = 10.1.3.1)(ポート = 1522))
)
)
)
RAC2 =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS_LIST =
(アドレス = (プロトコル = TCP)(ホスト = 10.1.3.2) )(PORT = 1522))
)
)
)
3. TAF 設定は、tnsnames.ora にfailover=on を追加するだけです。
1. TNS 名のメソッド: ============================================= == ===
myrac =
(説明=
(load_balance=on)
(フェイルオーバー=on)
(アドレス= (プロトコル=tcp)(ホスト=10.1.3.1)(ポート=1522))
(アドレス= (プロトコル =tcp)(ホスト=10.1.3.2)(ポート=1522))
(connect_data= (service_name=ora92)
(failover_mode=(type=select)(method=basic)(retries=20)(lay=20 ))
)
)
========================================== ===== ============================
2. インスタンスのバックアップ方法を指定します: ====== ====== ===================================
rac1 =
(説明=
(ロードバランス=オン)
(フェイルオーバー=オン)
(アドレス= (プロトコル=tcp)(ホスト=10.1.3.1)(ポート=1522))
(connect_data= (service_name=ora92)
(failover_mode=(type=select)(method=basic)
(backup=rac2)(retries=20)(lay=20))
)
)
rac2 =
(説明=
(load_balance=on)
(failover=on)
(address= (protocol=tcp)(host=10.1.3.2)(port=1522))
(connect_data= (service_name=ora92)
(failover_mode=(type) =選択)(メソッド=基本)
(バックアップ=rac1)(リトライ数=20)(遅延=20))
)
)
==================== ================================================= ====
4. TAF テスト方法
通常、現在接続されているインスタンスは切断されず、自動的にバックアップ ノードに切り替わります。逆に、自動的に元に戻ります。
もちろん、post_transaction メソッドを使用して TAF をテストすることを提案している人もいますが、実際には、これによって期待される結果が得られない場合があります。その理由は、Oracle がインスタンスに接続した後、最初にインスタンスへの接続を試行するためです。切断すると、クライアントは新しいリクエストがあるたびに自動的に最後に接続したインスタンスへの接続を試みますが、失敗した場合はバックアップ インスタンスへの接続を試みます。