web-dev-qa-db-ja.com

非DBAからの質問:SQL Serverインスタンスをバックアップ/復元を介して別のサーバーに簡単にコピー/移動する方法

新しいサーバーができたので、既存のSQL Server 2008インスタンスを古いdbボックスからコピーする必要があります。

私は通常、.mdfとログファイルをコピーしてそれらを添付することでこれを行いますが、データベースを24時間年中無休で使用しているため、データベースをオフラインにできないため、データベースをバックアップし、新しいデータベースに復元しました。機械。しかし、私はいくつかの問題を抱えており、そのうちの1つは 孤立したユーザー に関連しています。だから私が探しているのは、最小限の大騒ぎ/他人/頭痛ですべてを横切るフェイルセーフプロセスです。私は.Net開発者であり、かなりの量のSQLを身につけていますが、SQL Serverの内部の動作はほとんど謎であり、MSのドキュメントをトロールするのは苦痛です。

助けてください。

11
5arx

データベースをオフラインにできない場合は、バックアップ/復元を行う必要があります。私は以下を提案します:

  1. MDFおよびLDFファイルの古いボックスと同じファイル構造を使用して、新しいボックスにSQL 2008をインストールします。
  2. 古いボックスのすべてのデータベースのバックアップを取ります。
  3. SQLをシングルユーザーモードで起動して、マスターを古いボックスから新しいボックスに復元します。 マスターメソッドの復元
  4. 将来の差分またはTログバックアップを適用できるようにするために、NORECOVERYオプションを使用して各データベースを古いボックスから新しいボックスに復元します。
  5. Msdbを古いボックスから新しいボックスに復元します。

新しいボックスを構築して古いボックスとまったく同じように構成すると、手間が最小限に抑えられます。

データベースのサイズがわからないので、この方法には時間がかかる場合があります。最も簡単な方法は、古いボックスをシャットダウンしてMDFおよびLDFファイルをコピーし、(マスターを復元した後)SQLを再起動してデータベースをオンラインにするだけです。しかし、データベースをオフラインにすることは許可されていないため、これはオプションではありません。

10
SQLRockstar

24時間年中無休の運用について言及しているので、これを行う最善の方法は、新しいシステムで データベースミラー を作成することです。その後、アプリケーションの状態に応じて、最小値-おそらくゼロで切り替えることができます。構造化-クライアント側リダイレクトを使用したダウンタイム。基本的な手順は次のとおりです。

  1. プライマリデータベースが 完全復旧モード で実行されていることを確認します。
  2. プライマリをバックアップし、ミラーに復元しますWITH NORECOVERY
  3. 両方のサーバーに「エンドポイント」を作成し、接続(ファイアウォールルールなど)を確認し、ポートとIPアドレスを正しく設定します。例:

    CREATE ENDPOINT endpoint1
    STATE=STARTED AS TCP(LISTENER_PORT = 5222, LISTENER_IP = 192.168.1.5) 
    FOR DATA_MIRRORING(ROLE = PARTNER, AUTHENTICATION = WINDOWS NEGOTIATE, ENCRYPTION = REQUIRED ALGORITHM RC4)
    
  4. ミラーでミラーリングを設定し、プライマリをポイントします。

    ALTER DATABASE GaiusMirrorDB SET PARTNER = 'TCP://192.168.1.5:5222'
    go
    EXEC sys.sp_dbmmonitoraddmonitoring
    go
    
  5. プライマリでは、ミラーを指します(データベース名とIPアドレスが異なるだけです)。

  6. 次に、時間が来たら、プライマリをミラーに切り替えます。

    ALTER DATABASE GaiusDB SET PARTNER FAILOVER
    GO
    

注:これら2つのサーバーは同じネットワーク上にあると想定しているため、同期モードで操作しても問題ありません。これがWAN=リンク上にある場合は、非同期モードを使用します。

8
Gaius