メイン

2003年03月13日

MS-SQLではまった

MS-SQLを3台で即時更新型のレプリケーションを設定してあります。
以前、訳あってほんとはダメなんですがレプリケーションを設定したまま強引にマスターテーブルの構造を変更しておきました。
そのマスターはデータ追加がないマスターだったので問題にならなかったのですが、久々データ追加動作に入り、つじつまがあわない事がサーバーにバレてしまいました。レプリケーションが停止状態です。
どうやら、レプリケーションを作りなおさなければいけないらしい・・・・
サブスクリプションを削除、次に、パブリケーションを削除。
それから改めてパブリケーションを作成。即時更新タイプのサブスクリプションを作成。
ここではまりました。
即時更新では相互更新のつじつま合わせにタイムスタンプを置いてそれで管理するかどうかの選択オプションがあり、選択を勘違いしてセットしてしまいました。
それでそのタイムスタンプの列を作る動作に3~4時間くらいかかったでしょうか?待ちました。
そうそう、データは3G程度です。
一通りのレプリケーションの設定をし、スナップショットでレプリカ作成の完了を待つこと・・・2時間くらいかな。
さてデータの更新テスト・・・・これはOK
そして、データ投入テスト・・・・・エラーだ????
なんで?
そう、そのタイムスタンプ列はNullではいけないのでした。
私の作ったC++のアプリケーションはそんなタイムスタンプまで対応していません。もうもう4年前のアプリだから直すのやだなぁ~
ということでまたレプリケーションを全部解除しました。
そしてタイムスタンプ列を取り外し。これも一つ一つのテーブルに対しての処理なので、全部で30個くらいあるテーブルでは外す処理のあと、完了までの待ち時間がそれぞれ数十分くらいずつかかり、全部で何時間かを要しました。
改めて、パブリケーション、サブスクリプションを作成して、スナップショットが完了するのを待ちました。
今度は正常に行きました。
うっかりしたミスでほとんど、一日つぶされました。
でも復帰できて良かった。データ投入部分が動作しなくなったので一瞬、全滅かと思った。