リモート・ユーザ抽出時の統合データベースでの ダウン・タイムの最小化

概要:この文書では、統合データベースのバックアップ・バージョンからリモート・ユーザを抽出する方法を説明します。ここでの説明は、Adaptive Server Anywhere (SQL Anywhere ) 7.x を対象にしていますが、他のバージョンの Adaptive Server Anywhere (SQL Anywhere )にも適用できます。

以下では、統合データベースのバックアップ・バージョンからリモート・ユーザを抽出し、統合データベースをコピーするのに必要な時間までダウン・タイムを短縮する方法を説明します。

理由:
SQL Anywhere に付属のマニュアルでは、クワイエット・モードの統合データベースでリモート・データベースを抽出するように推奨しています。実際に、これは理想的な方法です。ただし、リモート・サイトの抽出のために 1、2 時間でも統合データベースをダウンさせることができない状況があります。この例として、抽出するリモート・サイト数が非常に多い組織 (統合データベースが長時間使用できなくなります) や、リモート・ユーザから絶えず更新される統合データベースでの最新データを使用してビジネス上の決定が行われるために、常時稼働させておく必要のある組織などがあります。

ここでは、subscribe by 句のある “MyPub” というパブリケーションを例にとって説明します。最初のリモート・ユーザは ‘rem1′ と ‘rem2′ で、それぞれの subscribe by の値は ‘1’ と ‘2’ です。

リモート・ユーザを抽出する際には、新しく作成したリモート・ユーザを抽出するか、既存のユーザを再抽出します。リモート・ユーザ ‘rem1′ を再抽出中で、’rem3′ という新しいユーザを作成したものとします。次のコマンドを記述した SQL スクリプトを用意します。

GRANT REMOTE TO ‘rem1′ TYPE FILE ADDRESS ‘rem1.1′;
REMOTE RESET ‘rem1′;

GRANT CONNECT to ‘rem3′;
GRANT REMOTE TO ‘rem3′ TYPE FILE ADDRESS ‘rem3′;
CREATE SUBSCRIPTION TO MyPub(‘3′) FOR ‘rem3′;
REMOTE RESET ‘rem3′;

抽出するユーザがこれよりも多い場合は、このファイルで処理するリモート・ユーザをすべて追加します。

dbremote と、統合データベースに接続している他のすべてのプロセスを停止し、統合データベースを終了します。スタンドアロン・エンジン (dbeng7) でデータベースを起動し、前述の SQL ファイルをデータベースに対して実行します。エンジンをもう一度終了し、データベース・ファイルをハードディスク上の別のディレクトリにコピーします。この処理の時間を短縮するため、マシン上の別の物理ドライブにファイルをコピーすることもできます。

ログ・ファイルは不要であるため、コピーしません。

データベースのコピーが終了したら、統合データベースを再起動し、dbremote を実行します。使用されるアドレスが ‘rem1′ から ‘rem1.1′ に変更されたため、再抽出したユーザ (rem1) 宛ての新しいメッセージはこのユーザに送信されるようになります。「古い」 rem1 データベースが「新しい」 rem1.1 データベース当てのメッセージを受信しないようにします。

次に、統合データベースを別のマシンにコピーします。この別のマシンでデータベース・エンジンを起動し、適当なときに 2 つのリモート・ユーザを再抽出します。多数のリモート・ユーザを操作する場合は、このデータベース・ファイルを複数のマシンにコピーし、別々のマシンで同時に複数の抽出を進めることができます。

次に、統合データベースを別のマシンにコピーします。この別のマシンでデータベース・エンジンを起動し、適当なときに 2 つのリモート・ユーザを再抽出します。多数のリモート・ユーザを操作する場合は、このデータベース・ファイルを複数のマシンにコピーし、別々のマシンで同時に複数の抽出を進めることができます。