web-dev-qa-db-ja.com

ファイルがない空のエラーではないため、ファイルグループを削除できません

'MYFILEGROUP'を削除しようとすると、ファイルグループが空ではないため削除できないというエラーが表示されます。私はすでにすべてのテーブル、インデックスを削除し、グループに関連付けられているすべてのファイルを削除しました。以下のスクリプトを実行したことを確認します。

sp_helpfilegroup

'MYFILEGROUP'のファイルカウントに0を返します。

select o.name, s.groupname
from sysobjects o
join sysindexes i on o.id = i.id
join sysfilegroups s on i.groupid = s.groupid
where groupname = 'MYFILEGROUP'

行を返しません.。

もう少し情報があります。走ると

dbcc checkfilegroup('MYFILEGROUP')

結果には、次のような警告とともにすべての主キーが一覧表示されます。

Cannot process rowset ID 72057597605511168 of object "TableName" (ID 2071414),
index "PK_TableName" (ID 1), because it resides on filegroup "PRIMARY" (ID 1),
which was not checked.

これは予想される動作ですか、それともシステムテーブルに問題があることを示していますか?それが問題である場合、どうすれば修正できますか?データベースからすべての外部キー、インデックス、および制約を削除し、テーブルのみを残しました。空の「MYFILEGROUP」を削除しようとすると、まだエラーが発生します。

2
Mindy

mYFILEGROUPにパーティションオブジェクトがある可能性はありますか?この場合、 互換性ビュー 使用しても結果は返されません(SQL Server 2000にはパーティションオブジェクトがありませんでした!)。チェックするオブジェクトをスキップすることについて得たメッセージは、checkdbがパーティション化されたテーブル/インデックスをチェックするときの2008年の予想される動作です。これを参照してください ブログ投稿 。このクエリで何か得られますか?

select * from sys.partitions p
inner join sys.allocation_units a on a.container_id = p.hobt_id
inner join sys.filegroups f on f.data_space_id = a.data_space_id
where f.name='myfilegroup'
4
Nick Kavadias

これは、ファイルグループを使用していたテーブルの統計がそのファイルグループに定義されている場合に発生する可能性があります。このクエリを実行してXをファイルグループIDに置き換えると、そのファイルグループにぶら下がっている統計があるかどうかがわかります。

select object_name(id) AS TableName, * from dbo.sysindexes where groupid = X

テーブル名がわかったら、DROP STATISTICSを実行できます。その後、ファイルグループを削除できるようになります。

0
Brian Knight

私の心の奥にある何かが、ファイルを削除してからファイルグループを削除するまでの間にバックアップを実行する必要があることを教えてくれます。また、以前にこれを行ったとき、sys.database_filesとsys.master_filesの間に不一致が見られました(つまり、ビューの1つにファイルがあり、もう1つにはファイルがありませんでした)が、少なくともそれはあなたにそれを伝えますサーバーは、ある程度の容量でファイルを認識しています。いずれにせよ、バックアップを取るか、定期的にスケジュールされたバックアップを作成してから、ファイルグループを再度削除してみてください。

0
Ben Thul