sql-server - 如何查找 SQL Server *.ndf 文件内容

标签 sql-server t-sql sql-server-2012

我需要从生产数据库中删除一些旧文件,这些文件是分区表的一部分。因此,步骤如下 - 我删除了理论上通过分区函数保留在那里的数据(所有数据来自 2007 年)。

然后我合并当年的分区函数:

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

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

ALTER DATABASE mydatabase REMOVE FILE tbProperty2007
ALTER DATABASE mydatabase REMOVE FILEGROUP fgProperty2007
  • 一切都按书本进行。

我收到错误:

The file 'tbProperty2007' cannot be removed because it is not empty.
The filegroup 'fgProperty2007' cannot be removed because it is not empty.

我以前(2005年、2006年)完成过这个过程,文件无法删除(对于另一个表)的原因是索引 - 它保存在其中一个文件中(我不小心在分区中创建了索引)表)。在另一个文件组中重新创建索引后 - 我可以毫无问题地删除文件和文件组。

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

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

附注可能是 sql server 2012 的一个错误 - 我能够在 sql server 2005 上删除文件,但在 2012 上却不能这样做。

最佳答案

使用如下查询:

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;

关于sql-server - 如何查找 SQL Server *.ndf 文件内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13449207/

相关文章:

sql-server - 如何在没有CLR的情况下调试SQL Server 2008中的存储过程?

sql - 在 SQL Server 中创建索引时收到警告消息

sql - 删除自连接中的重复关系

sql - CHOOSE() 未按预期工作

sql - 从Powershell脚本调用Stored Proc时,保留 “restore pending”状态的较大数据库(10GB +)

mysql - 如何使用 SSIS 将行从 MySQL 插入/更新到 SQL Server

c# - Entity Framework 如何为主键值生成 GUID?

mysql - SQL组查询从两个表中获取数据

sql - 为什么我无法使用 OBJECT_ID() 函数找到外键?

mysql - 电子商务数据库查询将行显示为列