web-dev-qa-db-ja.com

sql-server bakの復元とログの圧縮を同時に行うことはできますか?

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

26
Adam Butler

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

16
mrdenny

do-not-ever-do-this-in-a-live-environmentハックがあり、ログファイルを圧縮フォルダーに復元することで、スペースが限られている場所で使用できます。既存のフォルダーを圧縮して復元するとエラーが発生するため、シンボリックリンクを使用してチートする必要があります。

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

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

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

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

それは汚いです、それは浮気です生で絶対にしないでください、しかしそれは働きます。 32MBのログファイルを使用して新しく作成されたデータベースの簡単なテストでは、圧縮時にディスク上で330kbを占めていることがわかり、フォルダーを解凍すると、ディスク上のサイズが32MBに戻ります。

34

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

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

9
Thomas Stringer