web-dev-qa-db-ja.com

SQL Server運用データベースのコピーをテスト環境にスクリプト化する

私たちはプロジェクトに継続的な統合を導入しており、テストデータベースインスタンスを最新の本番データで自動更新することを決定しました。

私は現在、生産の中断や速度低下を回避するための最善の方法を探しています。

まず、sqlcmdユーティリティを使用して、コマンドラインからバックアップ/復元コマンドを使用することについて...

ただし、.bakファイルのみが生成されるため、このファイルはまだ.mdf/.ldfファイルと「リンク」されているため、問題があるようです。したがって、テスト環境で復元すると、これらの.mdf/.ldfファイルが見つかりません。

次に、ネットワーク共有上の.mdf/.ldfファイルの場所を指定するために、restoreコマンドで「WITH MOVE」オプションを指定しましたが、運用サーバーがこれらのファイルをロックし、テストサーバーからの読み取り。

では、基本的に、データベースを単一のファイルにダンプしてテスト環境に簡単にロードする簡単な(そして効率的な)方法を知っていますか?
もちろん、本番環境を中断することなく。

編集:

本番とテストの両方のSQL Serverバージョンは12.0.2000です。

しかし、私は最初に本番環境からローカル開発のSQL Server Express(v12.0.2000)へのロードをテストしています

5
Koresh

しかし、このファイルは.mdf/.ldfファイルとまだ「リンク」されていますが、.bakファイルのみを生成するため、問題があるようです。したがって、テスト環境で復元すると、これらの.mdf/.ldfファイルが見つかりません。次に、ネットワーク共有を介して.mdf/.ldfファイルの場所を指定するために、restoreコマンドで「WITH MOVE」オプションを指定しましたが、本番サーバーはこれらのファイルをロックしており、テストサーバー。

このステートメント全体は、実際には意味がありません。バックアップファイルは、mdf/ldfファイルに「リンク」されていません。復元時にデータベースを再作成するために、そのデータベースのファイルが含まれています。別のサーバーにそれらを復元する場合は、WITH MOVEを追加し、そのサーバー上のmdf/ldfファイルを保存する場所を指定します。それらは、バックアップが取られた元の場所にリンクしません。

バックアップの使用は、開発環境を更新する最も一般的な方法です。通常は、本番環境でバックアップがどのように行われるか(たとえば、full/diff/logまたはjust full/diff)に基づいて、データを(必要に応じて)開発中の状態に保つことができます。

4
user507

データベースを単一のファイルにダンプしてテスト環境に簡単にロードする簡単で効率的な方法を知っていますか?

PRODサーバーでバックアップし、テストサーバーでRESTOREします。最も効率的で信頼できる。

したがって、テスト環境で復元すると、これらの.mdf/.ldfファイルが見つかりません。次に、ネットワーク共有を介して.mdf/.ldfファイルの場所を指定するために、restoreコマンドで「WITH MOVE」オプションを指定しましたが、本番サーバーはこれらのファイルをロックしており、テストサーバー。

違います。 SQLサーバーはバックアップファイルをロックしません。データベースが既にオンになっているため、テストサーバーではWITH MOVEおよびREPLACEを使用する必要がありますテストサーバーとPRODバックアップの新しいコピーで上書きします。

SQLCMD/ PowerShell を使用してプロセス全体を自動化し、SQLエージェントジョブを定期的なスケジュールに使用して、TESTサーバーを更新できます。

ローカル開発sqlexpress

SQL Server Expressエディションにはさまざまな制限があります

3
Kin Shah