データベースがオンラインのときにデータベースのファイルをコピーできますか?


9

SQL Server 2008 R2 SP1で運用データベースの開発用コピーをセットアップする作業をしています。ライブデータベースは、現在2人の開発者が読み取り専用クエリで軽く使用していますが、新しいデータベースでも更新が行われます。

データベースは2.1TBで、テストに必要な最新のビルドに復元して更新するのに合計3日かかったので、私の元々の計画は、新しいバックアップファイルセットを作成し、それらのファイルから復元することでした。これにより、現在のデータベースをオフラインにすることなく、同じSQLインスタンスとマシン上にデータベースの開発コピーを作成できます。

ただし、この2、3日を節約するために、物理データベースファイルをコピーして、データベースの新しいコピーを添付することをお勧めします。残念ながら、コピーしようとすると、SQL Serverがそれらのファイルにかけるロックを参照するエラーが発生します。

データベースをオフラインにすることはできませんが、ログファイルを転送するだけです(朝に入る前にこれを完了できます)。データベースをオフライン状態にせずにライブデータベースファイルをコピーする方法はありますか?それとも、家に帰るまで待つべきでしょうか?

回答:


11

2.1 TBのデータベースのバックアップ/復元に3日かかるのはなぜですか?バックアップの移動がすべてである場合、少なくともバックアップを圧縮できるため、MDF / LDFファイルのコピーは実際には遅くなると思います。復元だけの場合は、ファイルのコピーを書き込むのが復元プロセスよりも速くてはなりません。ファイルの即時初期化が有効になっていることを確認してください。または、セカンダリシステムのI / Oを高速化します。

とにかく、いいえ、データベースがオンラインのときにMDF / LDFファイルをコピーすることはできません。そのためには、オフラインにする必要があります。これは、データベースをコピーするための最も安全な方法です。デタッチ/オフライン中にファイルに何かが発生した場合、データベースのコピーはゼロになります。

バックアップ/復元をより速くする方法を検討することをお勧めします-バックアップを圧縮し、可能な限り最良の方法でファイルを転送し、利用可能な最良のI / Oサブシステムを使用して、より良いI / Oを取得し、 IFIが有効になっていることなどを確認します。

考慮すべきもう1つのオプションは、ラウンドロビンのログ配布です。本番環境が完全に復旧しており、定期的にログバックアップを行っている場合、開発者が別のデータベースで作業している間に1つのデータベースにログ配布を実行し、安定したポイントに達したら、回復して復元することができます。開発者を切り替えて、最近の変更を一緒に受け取らせます。次に、作業を停止したコピーのログ配布を再初期化します。これにより、次の「安定した」カットオーバーで待機することなく、準備が整います。


バックアップには不明な時間がかかります(元のバックアップを作成しませんでした)。復元には10時間かかります。その後、更新を実行して開発ビルドに反映させるには、さらに8時間かかります。ですから、24時間話しているとしたら、18時間しかかかりません。約8時間といえば、基本的には3日間です(ファイルをコピーするために時間を追加します)。バックアップ/復元プロセス自体を調整する方法は絶対にあります。それが、私が望んでいる方法であることがわかったので、これからやります。
Sean Long

0

いいえ、ファイルをコピーするにはオフラインにする必要があります。データベースを小さなファイル/ファイルグループに分割している場合、一度実行した後、バックアップの復元を高速化するのに役立ちます(どのデータが変更され、どのデータが開発コピーに必要かによって異なります)。


0

私は他の答えを見てきましたが、それらは完全に理にかなっています。ただし、質問に答えるだけで、DBをオフラインにすることなくデータベースファイルを確実にコピーできます。このためには、SMOプログラミングを使用する必要があります。これをチェックしてください:http : //technet.microsoft.com/en-us/library/ms162175(v=sql.100).aspx

提供されているリンクは一般的なSMOプログラミングオブジェクトへのリンクであり、この質問に対する具体的な回答ではないことに注意してください。私はまだそうしていませんが、すぐに試してみて、私が知っていることを(覚えていれば)みんなに知らせます。


-1

データベースがオンラインのときにデータベースのファイルをコピーできますか?

はい。

データベースを読み取り専用に設定するだけです。

  1. 実行:

    USE [master]
    GO
    ALTER DATABASE [Database] SET READ_ONLY WITH NO_WAIT
    GO
  2. データベースファイル(MDF、LDFなど)を新しい宛先にコピーします。

  3. コピーが完了したら、デタッチして新しい場所に再アタッチできます。読み取り専用オプションをリセットし、これらのファイルを操作するときに同じユーザーアカウントを使用していることを確認してください。また、移動後に古いファイルを削除することもできます。

別の方法

ファイルが正常にコピーされた後(上記のステップ2):

データベースを次のように設定できます。Single_Userモード:

  1. 実行:

    USE [master]
    GO
    ALTER DATABASE [Database] SET  Single_USER WITH NO_WAIT
    GO
  2. D:\ 新しい場所であること

    ALTER DATABASE Database MODIFY FILE
    (NAME = DATABASE, FILENAME = 'D:\DATABASE.mdf')
    GO
    ALTER DATABASE OHDSI MODIFY FILE
    (NAME = DATABASE_LOG, FILENAME = 'D:\DATABASE_LOG.ldf')
    GO
  3. 新しい場所(D:\)のデータファイルに、SQL Serverを実行しているサービスアカウントへの完全なアクセス権があることを確認します。

  4. SQLサービスを再起動します。

  5. 実行:

    USE [master]
    GO
    ALTER DATABASE [Database] SET  Multi_USER WITH NO_WAIT
    GO

できた!


最初に、通常の使用でデータベースへの書き込みが必要な場合、DBを読み取り専用モードにすると、効果的な停止が発生することに注意してください。次に、SQL Serverでは、ファイルが読み取られている場合でも、使用できるようにロックされたままになると予想します。個人的な経験やMSのドキュメントで別のことを言っている場合は、それを回答に編集してください。3番目に、ファイルの場所を変更するために私が一般的に見たアドバイスは、シングルユーザーモードだけでなく、DBをオフラインにすることです。繰り返しますが、個人的な経験や、MSのドキュメントで別の方法を提案している場合は、回答に編集してください。ありがとう!
RDFozz 2017

そのとおりです!読み取り専用では、ユーザーは書き込みできませんが、読み取りは可能です。2番目のポイントでは、はい、データベースをオフラインにすることができますが、問題はオンライン中です。上記のプロセスは、最小限のダウンタイムで機能します。ありがとう。
RAVicioso

@RAVicioso読み取り専用のデータベースも停止です。新しいデータを書き込むことができない場合(つまり注文を取る場合)、システムは実質的にダウンしています。これは悪い考えのようです、非?
エリックダーリン

@sp_BlitzErik-解決策は機能しますが、このタイプのメンテナンス中は書き込みできません。あなたの例では、「注文を取る」ではありません。
RAVicioso 2017
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.