web-dev-qa-db-ja.com

SQL Serverデータベースがハードドライブをいっぱいにし、スペースを解放することはできません

SQL Server 2008の1Tbハードドライブにデータベースがあり、ドライブがいっぱいになりました。空き容量は4Kbのみです。 MDFファイルは323Gb、LDFは653Gbです。このDBが置かれているハードディスクには、MDFとLDF以外のファイルがないため、ドライブのスペースを解放することは不可能です。メインハードディスクは小さいですが、役立つ場合に備えて、MDFをそのドライブに転送するのに十分なスペースがあります。このサーバーは顧客の海外にあります。現在、サーバーにディスク領域を追加することはできません。また、DBが障害モード(ディスク領域がないため)であり、ほとんどのコマンドに応答しないため、レコードを削除することもできません。 Dbは現在フルリカバリモードになっているため、LDFファイルは非常に大きくなります。このDBは実際にはフルリカバリである必要はないため、今後はシンプルモードに切り替えてスペースを大幅に節約する予定です。 LDFファイルを失うことも気にしませんが、すべてのデータが必要です。この問題を解決する方法を探すのに多くの時間を費やしましたが、最初に見つけたものはすべて、ディスクを解放することです。ペースを調整するか、ディスク容量を追加します。現時点ではどちらもオプションではありません。私は立ち往生しており、どんな助けでも大歓迎です。

DBをオンラインモードに切り替えようとすると、次のログが表示されます。

メッセージ945、レベル14、状態2、行3データベース「DBNAME」は、ファイルにアクセスできないか、メモリまたはディスク容量が不足しているため、開くことができません。詳細については、SQLServerのエラーログを参照してください。メッセージ> 5069、レベル16、状態1、行3のALTERDATABASEステートメントが失敗しました。メッセージ1101、レベル17、状態12、3行目ファイルグループ「DEFAULT」のディスク>スペースが不足しているため、データベース「DBNAME」に新しいページを割り当てることができませんでした。 >オブジェクトをファイルグループにドロップするか、ファイルグループにファイルを追加するか、ファイルグループ内の既存のファイルに対して自動拡張をオンに設定して、必要なスペースを作成します。

次の解決策を見つけましたが、そのドライブにディスクスペースがないために機能しません。また、DBが障害状態にあるため、ほとんどのコマンドを実行できません。 --DBCC SHRINKFILE-'use DBNAME 'の実行が失敗したため、実行できません-DBをデタッチしてから、MDF/LDFファイルの場所を変更します。これは、DBがオフラインモードであるため、デタッチを実行できないため失敗します。 。

私は他に何を試すべきか途方に暮れています。

ありがとう。

1
Jon

これは、バックアップを行っていないためです。データベースのバックアップを実行すると、ログファイル(.LDF)がクリアされます。実際のバックアップを実行してログを縮小するか、 単純なリカバリモードでデータベースファイルを縮小する を使用してSQL Serverをthinkingにだまして適切なバックアップを実行しましたが、実行できるのはスペースを解放することだけです。トランザクションログを再生してロールバックすることができなくなります。これを行う前に、その影響を理解してください。

もちろん、extremeディスク容量の問題があるため、これは失敗する可能性があるため、最初にドライブを拡張する必要がある場合があります(これは簡単ではないかもしれません)。これらのコマンドはどれでも機能します。

2
MDMarra

ディスクボリュームがNTFS4Kアロケーションユニットを使用している場合は、インスタンスを停止し、データベースファイルを圧縮して(最初に最小のものを実行)、インスタンスを再起動してデータベースをオンラインにすることができる場合があります。

別のオプションは、iSCSIを使用してサーバーにスペースを追加してから、既存のボリュームの下にボリュームをマウントすることです。これはロングショットですが、調べる価値があります。

0
Craig