たとえば、SQL Serverデータベースのデータファイルが初期サイズ100 GBで作成されているとしますが、そこには10 GBのデータしか含まれていません。その場合、データベースバックアップのサイズはわずか10 GBになります。
このバックアップを別のサーバー(または同じサーバー上の別のデータベース)に復元したいのですが、元のバックアップ(100 GB)と同じディスク領域を使用したくありません。これはデフォルトで行われます。
バックアップを作成する前に元のデータベースを圧縮することはできません(これは本番データベースであり、必要事前に割り当てられたスペースが必要です)。私could復元が完了した後、復元されたデータベースを縮小しますが、実際にそれを望んでいますnot実行中に100 GBを消費します。さらに、この特定のシナリオでは、ディスクに十分な空き容量がないため、復元はどこにも行われません。
データベースを復元する方法はありますかそして、データベースに含まれている実際のデータと同じだけのスペースを占めるようにします?
いいえ、申し訳ありません-方法はありません。 Restoreは、バックアップ時のファイルを復元します。シンキングは、その後またはバックアップを取る前に行う必要があります。
ディスク容量が不足している場合は、.bakファイルをネットワーク共有に配置して、そこから復元できます。実行中のSQLサーバーがドメインアカウントで動作し、共有にファイルを読み取るための十分な権限を与える場合に機能するはずです。
以前にナットバスケットを使用していたもう1つのオプション(ただし、実行中のSQL Server 2008 R2の場合にのみ役立ちます)は、SQL Serverがトレースフラグを使用せずに直接共有にデータベースファイルを作成できることです。個人的な経験から、それは機能します!したがって、共有へのWITH MOVEを使用した復元を実行できます。
一般的に、いいえ。役立つかもしれない、または役に立たないかもしれないいくつかのランダムなアイデア:
最後に、本番データベースの「エルボールーム」も好きですが、合計100 GBから90 GBを解放すると少し極端になります。次の手順は、必要なものを提供する可能性があり、生産に影響を与えるべきではありません。
DBCC SHRINKFILE ('myfile.MDF', TRUNCATEONLY)
を実行して、ファイルの終わりにある空き領域を一時的に解放します(TRUNCATEONLYはIO集約的ではなく、インデックスを断片化しません)。DBCC SHRINKFILE
ログのバックアップをとった直後の、アクティビティが少ない時間帯に本番ログファイルで。ALTER DATABASE MODIFY FILE
プロダクションデータファイルを元のサイズに再成長させます。これらの手順を使用しても、本番環境への影響はありません。唯一のリスクは、データの一部がたまたま100GBのデータファイルの最後にある場合です。この場合、ステップ(1)でスペースがほとんど解放されません。