Windows 2000 でのクラスタ構築、Oracle の注意点


ドメイン・コントローラが Windows NT Server の場合には、クラスタを構築している Windows 2000 Server には、「NTP サーバ立ち上げまでの道」で記述したとおり、「タイム・サービス・リソース」を導入する必要があります。

そこで、気になったのが「タイム・サービス・リソース」の動きです。調べた限り下記の内容になっているようです。


また、「NT4.0ドメイン内のWindows2000/XPコンピュータの時刻を同期させる方法」の設定を行う必要があります。これを行わないと、イベントログに下記のようなメッセージが記録されます。(W32Times は Windows2000 のサービスとして Windows Time という名称で起動されている Windows 2000 標準の SNTP クライアントです。)

ソース    : W32Times
種類     : 警告
イベントID  : 64
説明     : ネットワークの問題が繰り返し発生しているため、タイム サービスは同期するドメイン コントローラを検出できません。ネットワーク トラフィックを減らすために、タイム サービスは再試行するまで 960 分待ちます。この間は接続が復元されても同期は実行されません。蓄積されたタイム エラーのために、特定のネットワーク操作が利用できなくなる可能性があります。タイム サービスにネットワーク接続が復元されて同期するように知らせるには、コマンド ラインで "w32tm /s" と実行してください。


Oracle 上で OS のシステム日時に変更があった場合には下記のことが発生すると考えられます。

Oracle は時間情報を更新履歴のファイルと各ファイル(制御ファイル、データファイル、REDO ログ)内に持っています。

但し、ミリ秒単位で戻すのは問題ないようです。内部は秒単位で管理しているようです。
また、時間を通常より遅く進めても構わないようです。但し、OS 時間で1秒間に SCN (System Change Number : COMMIT する都度、増加する数)が16,000以上増加させる事はできません。

私は、Windows 2000 で、時間を遅く進める方法、ツールを知りませんので、現実的には、時間を遅く進めることはできないと思います。UNIX はハードウェア・クロックとは別にシステム・クロックを持っているので可能かと思いますが。

Oracle ではインスタンス起動中での、OS のシステム日時の変更はサポートされていませんまた、インスタンス停止中であってもシステム日時を戻すことは、「OS の時間を遅らせる場合」の状況が発生する場合がある可能性があります。

システム時間を整合性を持って戻すには、「データベースを停止し、システム時刻を戻した後、データベースを停止した時点のシステム時刻になるまでデータベースを起動しない。」のが一番良いと思います。


上記のことから、

構成

時間の合わせ方

  1. Oracle のインスタンスを停止させる。(Oracle 保持しているクラスタ・グループをオフラインにする。)
  2. 「タイム・リソース・サービス」を保有しているノードの時間を合わせる。
    (手動で「net time」のコマンド等を使用して、外部の時刻源と時間を合わせる。)
  3. 別のノードの時間を「net time」のコマンドを使用して、「タイム・リソース・サービス」を保有しているノードに合わせる。
    NET TIME \\サーバ名 /set /y

    OS の時間を進める場合は問題ないと考えられるが、OS の戻す場合には Oracle のインスタンスを停止させた後、あるポイントでの時刻を記録し、その時刻を基準となる時刻が越えてから時刻合わせを行う。
  4. Oracle のインスタンスを起動する。(Oracle 保持しているクラスタ・グループをオンラインにする。)

大規模なサーバ環境下では、それなりのサーバを使用しており、それなりのハードウェア・クロックを内蔵しており、また、温度管理のされたマシンルーム等に設置されていると思われるので、システム時間が大幅にずれてくることは少ないと思います。その為、半年程度に1回程度、合わせるのが現実的かと思います。



注意 : これは、私個人の覚え書きであり、何も保証するもではありません。自己責任でお読み下さい。  
Create:2002/01/17   Last modified:2009/10/02
Copyright (c) 2002-2013 Yoshi All Rights Reserved