2

本番DBからいくつかの古いファイルを削除する必要があります。これらのファイルはパーティションテーブルの一部です。したがって、手順は次のとおりです。理論的にはパーティション関数によってそこに保持されているデータ(2007年のすべてのデータ)を削除しました。

次に、その年のパーティション関数をマージします。

ALTER PARTITION FUNCTION pfPeriod() MERGE RANGE (2007);

次に、ファイルとファイルグループを削除したいと思いました。

ALTER DATABASE mydatabase REMOVE FILE tbProperty2007
ALTER DATABASE mydatabase REMOVE FILEGROUP fgProperty2007
  • すべて本によって。

エラーが発生しました:

ファイル'tbProperty2007'は空ではないため、削除できません。
ファイルグループ'fgProperty2007'は空ではないため、削除できません。

私は以前に(2005、2006の場合)この手順を実行しましたが、ファイルが(別のテーブルの場合)削除されない理由はインデックスでした-ファイルの1つに保持されていました(誤ってテーブルのパーティションにインデックスを作成しました) )。別のファイルグループにインデックスを再作成した後、問題なくファイルとファイルグループを削除できました。

とにかく、今回は別のファイルグループにインデックスを再作成しましたが、それでもファイルとファイルグループを削除できません。

では、*。ndfファイルの内容をどのように確認できるのか、またはファイルが削除されないのはなぜか、誰かに教えてもらえますか?お願いします )

PS SQL Server2012のバグである可能性があります-SQLServer2005でファイルを削除できましたが、2012では削除できません。

4

1 に答える 1

5

次のようなクエリを使用します。

select t.name as table_name,
    i.name as index_name,
    ds.name as data_space_name,
    ds.type_desc,
    ps.name as partition_scheme_name
from sys.tables t
join sys.indexes i on t.object_id = i.object_id
join sys.data_spaces ds on i.data_space_id = ds.data_space_id
left join sys.partition_schemes ps on ps.data_space_id = ds.data_space_id;

これにより、どのインデックスがどのデータスペースでホストされているかがわかります。ファイルグループにパーティション化されていないインデックスまたはテーブルがあるかどうかを確認できますfgProperty2007

次のようなクエリを使用して、パーティショニングスキームでファイルグループがまだ使用されているかどうかを確認することもできます。

select ps.name as partition_scheme_name,
    dds.destination_id as parition_number,
    d.name as filegroup_name
from sys.partition_schemes ps
join sys.destination_data_spaces dds
    on ps.data_space_id = dds.partition_scheme_id
join sys.data_spaces d
    on d.data_space_id = dds.data_space_id;
于 2012-11-19T07:41:14.233 に答える