web-dev-qa-db-ja.com

SQL Server 2008データベースをマシンAからBにダウンタイムなしで移動する

少し問題が発生しました。ボックスAにSQL Serverデータベースがあり、約60GBのデータがあります。これを新しいマシンに移動する必要がありますが、ダウンタイムはまったくありません。毎秒、dbに新しいデータがあるため、真夜中のランダムな時間にそれを行うことはできません。

これを達成する方法はありますか?私は自分のやりたいことがほとんどできるので、どんな提案も役に立ちます。

6
Yannis

データベースミラーリング(SQL Server 2005以降)では、わずか20秒のダウンタイムが許容されます。これはおそらく、マシンAからマシンBにデータベースを移動する最も速い方法です。

日中はダウンタイムなしでミラーリングを設定し、選択した時間にカットオーバーを行うことができます。クライアントがカットオーバー時に実行しているすべての操作を再試行するようにプログラムされている限り、(クライアントを正しく実行すれば)データが失われることはありません。

12
Max Vernon

できません、すみません。新しい着信接続のすべての試行を別のサーバーBにリダイレクトし、時刻t0でA(複製またはミラー化)とまったく同じ場合でも、Aで実行中のトランザクションはコミットされるまでBに存在しません。事後時間、t1。あなたは常にダウンタイム期間を持っているつもりです、秒または時間であることができますが、常に存在します。

次の投稿と情報を参照してください:

https://serverfault.com/questions/125750/move-sql-server-database-with-zero-downtime

http://blogs.msdn.com/b/sqlgardner/archive/2011/09/16/minimizing-db-migration-downtime-using-log-shipping.aspx

お役に立てれば。

3
Ansenagy

データベース構造がそれを可能にする場合、ピアツーピアレプリケーション(PTP)を見ることができます。これを使用して、基本的に2ノードのアクティブ/アクティブクラスターを構築できます。 PTPレプリケーションが完了すると、データベースの2つのライブコピーが作成され、どちらも新しいデータを受け入れて他方を更新できます。これにより、データベースをオフラインにすることなく、アプリケーションを切り替えることができます。

これのトリッキーな部分は、PTPレプリケーションを構築するのに十分な時間、2つのデータベースを同期させることです。特に新しい行については、主キーの周りにいくつかの注意点があります。これには、GUIDであるかIDが2以上増加するか、またはアプリケーションに固有の一意のキーを構築するかに関係なく、各テーブルが一意のキーを生成する必要があります。これは理論的にはダウンタイムなしのカットオーバーを可能にするかもしれませんが、トリッキーになります。

他の人が投稿したように、ミラーリングは比較的迅速かつ簡単にカットオーバーする方法です。ただし、少なくとも数秒のダウンタイムが必要です。すべてが適切にスクリプト化されていれば、このダウンタイムを最小限に抑えることができます。

3
Ian Chamberland

入力されているデータの種類を知らずに、私は言うでしょう:

Box A -- Copy Structure and Routines -- > Box B
Box B: Use as Active Database
Box A --> Export Data 
Box B <-- Import Data (while still maintaining active database role)

計画の最大のレンチは、インポート中の外部キー制約です。

0
Varubi