sql-server bakを復元し、同時にログを圧縮することは可能ですか?


26

問題調査のために開発者オフィスに転送したクライアントからのbakファイルがあります。現在、バックアップは25GBで、復元されたデータベースはほぼ同じサイズですが、復元するには100GBが必要です。これは、データベースが75GBのトランザクションログサイズを持つように設定されているためだと思います。データベースを復元した後、ログファイルを圧縮できますが、復元でこれを行う方法はありますか?


3
復元が完了するまでデータベースを変更することはできません。
ショーンメルトン

3
私は同じ状況にあり、答えを楽しみにしています。ただコメントするために、製品があります:red-gateのSQL仮想復元。私はこれを使用したことはありませんが、サイトによると、「マウントされたデータベースには、バックアップファイルにほぼゼロの追加ストレージが必要です」。
スタンレージョンズ

回答:


16

復元プロセスの一部としてバックアップを縮小する方法はありません。復元されたデータベースは、ソース文字列とまったく同じように見える必要がありますが、ドライブ文字とフォルダを変更できることだけが異なります。


34

あり-常に行いません。これは、イン・ライブ環境スペースが限られている場所が圧縮フォルダにログファイルを復元することによって、使用することができますハック。既存のフォルダーを圧縮して復元することでこれを試行すると、エラーが発生するため、シンボリックリンクでチートする必要があります。

  1. 圧縮フォルダーを作成する D:\LogCompressed\
  2. 圧縮フォルダーへのシンボリックリンクを作成する mklink /D /J D:\Log\ D:\LogCompressed\

  3. を指すldfファイルでデータベースを復元します D:\Log\

  4. ログファイルを適切なサイズに縮小する

  5. データベースをデタッチし、ログファイルを非圧縮フォルダーに移動し、アタッチします

それは汚い、不正行為です、ライブでそれをしないでください、しかしそれは動作します。32MBのログファイルを使用して新しく作成されたデータベースのクイックテストでは、圧縮時のディスク上の330kbを占有し、フォルダを解凍するとディスクサイズが32MBに戻ったことが示されます。


2
@Mark:このハックは機能しますが、完璧ではありません。ログファイルが実際のサイズよりもはるかに少ないスペースを使用している場合でも、ディスクにデータベースの実際のサイズと同じくらいの空きスペースがない限り、データベースを復元することはできません。サイズを大きくすると、復元中にログファイルの実際のサイズが実際のサイズからゆっくりと低下します。ただし、依然として非常に優れたハックです。ありがとう。
chenwq

9

バックアップが25 GBで、復元されたデータベースが100 GBである理由は、トランザクションログのためではないと思います。私の推測では、データベースファイルには100 GBのスペースが割り当てられており、データベースには25 GBの実際のデータがあります。

割り当てられたデータベースファイルスペース使用されたデータスペースには違いがあります。この場合、前者は100 GBで、後者は25 GBです。


1
クライアントは、トランザクションログに75GBを割り当てます。復元後、現在ログの割り当てを1GBに変更しています。可能であれば、ドライブの空き容量が100GB未満のサーバーにこのデータベースを復元したいと思います。別のサーバーに復元する必要なく、切り捨て、バックアップ、および復元を再度行います。
アダムバトラー

@Adam Butler、最初のサーバーに一時的に復元してファイルサイズを縮小し、コピーのバックアップを作成して宛先サーバーに復元することは可能ですか?
DForck42
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.