如何找出SQL Server * .ndf文件的内容

时间:2012-11-19 07:14:59

标签: sql-server tsql sql-server-2012

我需要从生产数据库中删除一些旧文件,这些文件是分区表的一部分。因此,步骤如下:我删除了理论上通过分区功能保存的数据(2007年的所有数据)。

然后我合并了那一年的分区功能:

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

然后,我想删除文件和文件组:

ALTER DATABASE mydatabase REMOVE FILE tbProperty2007
ALTER DATABASE mydatabase REMOVE FILEGROUP fgProperty2007
  • 全部都是书。

我收到了错误:

  

无法删除文件'tbProperty2007',因为它不是空的   无法删除文件组“fgProperty2007”,因为它不为空。

我之前(2005年,2006年)已完成此过程,文件不会删除(另一个表)的原因是索引 - 它保存在其中一个文件中(我意外地在分区中创建了索引)的表)。在我在另一个文件组中重新创建索引后 - 我可以毫无困难地删除文件和文件组。

无论如何,这次我在另一个文件组中重新创建了索引,但仍然 - 我无法删除文件和文件组。

那么,任何人都可以告诉我如何查看* .ndf文件的内容,或者文件为什么不删除?请)

P.S。可能是sql server 2012的一个错误 - 我能够删除sql server 2005上的文件,但我无法在2012年完成。

1 个答案:

答案 0 :(得分: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;

这将显示哪些索引托管在data space上。您可以在文件组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;