web-dev-qa-db-ja.com

ファイルグループからファイルを削除するのが難しい

未使用のファイルグループからデータベースからすべてのファイルを削除しようとしています。合計1.5TBの合計2つのファイルがあります。これらのファイルには約400MBが残っていることがわかりますが、それが何であるか、またはそれを削除する方法はわかりません。

select * from sys.allocation_units a --where data_space_id = 6
inner join sys.partitions b on a.container_id = b.hobt_id --type = 1
where data_space_id = 6

-次の結果セットを提供します

SELECT * INTO #tmp_GridResults_1
FROM (
SELECT N'72057781944647680' AS [allocation_unit_id], N'1' AS [type], N'IN_ROW_DATA' AS [type_desc], N'72057777021059072' AS [container_id], N'6' AS [data_space_id], N'0' AS [total_pages], N'0' AS [used_pages], N'0' AS [data_pages], N'72057777021059072' AS [partition_id], N'741132535' AS [object_id], N'9' AS [index_id], N'1' AS [partition_number], N'72057777021059072' AS [hobt_id], N'0' AS [rows], N'0' AS [filestream_filegroup_id], N'0' AS [data_compression], N'NONE' AS [data_compression_desc] ) t;
SELECT [allocation_unit_id], [type], [type_desc], [container_id], [data_space_id], [total_pages], [used_pages], [data_pages], [partition_id], [object_id], [index_id], [partition_number], [hobt_id], [rows], [filestream_filegroup_id], [data_compression], [data_compression_desc]
FROM #tmp_GridResults_1

DROP TABLE #tmp_GridResults_1
GO

バツ

select * from sys.allocation_units a --where data_space_id = 6
inner join sys.partitions b on a.container_id = b.hobt_id --type = 1
inner join sys.objects c on c.object_id = b.object_id
where data_space_id = 6

-何も返しません

したがって、データベースにオブジェクトがあり、sys.objectsにレコードがない400mbを占める行がないようです。

小さなファイルをファイルグループに追加し、削除するファイルに対してemptyfile操作を実行してからdbcc縮小空ファイルを実行しようとしましたが、「縮小中に割り当て解除されたため、ページを移動できませんでした」というページが表示されます。アロケーションユニットに含まれているがsys.objectsには含まれていないオブジェクト

物理ファイルを開いたり作成したりしようとしているときに、DBCC checkdbが失敗し、「CREATE FILEでオペレーティングシステムエラー665(ファイルシステムの制限により完了できませんでした)」が発生します。

進行方法に関するアイデアはありますが、これらのファイルを削除するか、少なくともファイルをはるかに小さいサイズに縮小したいと思います

5
James Lester

SQLがデータベースで使用されているスペースに関する誤ったデータを報告している可能性があるため、データベースに対してDBCC UPDATEUSAGEを実行してみてください。

参照: https://docs.Microsoft.com/en-us/sql/t-sql/database-console-commands/dbcc-updateusage-transact-sql?view=sql-server-2017

これによりスペース使用量のメタデータが変更された場合は、EMPTYFILEを再試行して、成功した場合はファイルを削除できます。

1
HandyD