web-dev-qa-db-ja.com

bakファイルをより小さいmdfおよびldfデータベースファイルに復元する

私はレガシーデータベースを持っていますが、悪夢のようなデザインの欠如はここでは扱いませんが、サーバー上のファイルは(比較的)巨大です。私が持っています:

MyDatabase.mdf:24.8GB
MyDatabase.ldf:114.6GB

このデータベースは毎晩.bakファイルにバックアップされ、レポートサーバーに送られ、そこで復元されます。 .bakファイルは、わずか1.8 GBと非常に小さくなります。

ただし、レポートサーバーで復元しようとすると、スペース不足のため失敗します。サーバーには約100GBの空き容量があり、元のサーバーでファイルが消費した139.​​4GB全体を消費しようとしています。圧縮に関する私の知識がひどく間違っているのでない限り、1.8 GBのファイルが実際に7400%拡大していないことは、かなり自信があります。

私の質問:SQL Serverに、そのスペースを事前に予約せずにこのバックアップファイルを復元するように指示する方法はありますか?ログは気にしません。そこにデータが必要です。開発とスキーマの観点からデータベースを理解していますが、私は決してDBAの一種ではありません。

これはSQL Server 2008 R2にあります。助けや提案をありがとう。

11
eouw0o83hf

バックアップには2つの情報が含まれます。

バックアップ内の実際のデータは1.8 GBです。ただし、メタデータは、元の本番サーバーと同じようにファイルのレイアウトを記述します。圧縮のように見えますが、実際の圧縮ではありません。単なるメタデータ対コンテンツです。問題は、RESTORE中にレポートマシンがメタデータに記述されているレイアウトを作成するため、114.6GB + 24.8GBになることです。さて、本当の質問です。元のDBファイルレイアウトを再作成せずに復元できますか?いいえ。ただし、問題に対する別の解決策があります。元のDBを元に戻します。 トランザクションログの縮小 は、ログが主な問題であるため、実行する必要がある手順を説明しています。次に、バックアップ/復元の代わりに log shipping を展開します。

11
Remus Rusanu

SQL Server 2012では、データベースのmdfファイルのみを使用して、SQL Serverに添付できます。 http://msdn.Microsoft.com/en-us/library/ms174385.aspx 。 SQL Serverは、サイズを指定できる新しいldfファイルを作成します。次に:

  • 単純な復旧モデル を使用して、ログファイルが大きくならないようにするか、または
  • 完全復旧モデルを使用して、定期的なトランザクションログのバックアップを作成します。これにより、ログファイルが大きくなるのを防ぐこともできます。
0