【问题标题】:How to find out SQL Server *.ndf file contents如何找出 SQL Server *.ndf 文件内容
【发布时间】:2012-11-20 01:51:12
【问题描述】:

我需要从生产数据库中删除一些旧文件,这些文件是分区表的一部分。因此,步骤如下 - 我删除了理论上通过分区函数保留在那里的数据(所有数据来自 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 文件的内容,或者为什么文件不会删除?请)

附:可能是 sql server 2012 的 bug - 我可以删除 sql server 2005 上的文件,但我不能在 2012 上删除。

【问题讨论】:

  • 我放弃了,用 EMPTYFILE 选项做了收缩文件,它帮助了 'DBCC SHRINKFILE('tbProperty2007', EMPTYFILE)' 然后我就可以删除文件了。

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


【解决方案1】:

使用这样的查询:

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;

【讨论】:

  • 非常感谢 - 这些查询确实是我一直在寻找的。不幸的是,它没有帮助 - 两个脚本结果都没有提到 fgProperty2007,但我仍然无法删除它 - 文件和文件组出现相同的错误(
  • 如果文件组处于“使用中”,则文件也在使用中,因此两者出现相同错误是正常的。
  • 是的,我同意 - 必须先删除文件。但是有空文件不能删除是不正常的。
  • 我的查询加入了sys.tables,所以它只会显示用户表。您可以尝试加入 sys.objects 并检查此 FG 中是否没有某些内部表吗?可以是队列、更改跟踪表或类似的。另外,我假设您具有查看数据库中 all 对象所需的权限(即不是 FG 中的用户表,由于权限低,您无法查看)。跨度>
  • 我拥有管理员权限,我看到了所有的表格 - 这不是问题。我刚刚放弃并使用了带有 emptyfile 选项的 shrinkfile - 它有帮助,我很高兴。我将您的评论标记为答案,因为我的问题是关于这些问题的,您真的帮助我解决了我的偏执,谢谢。
猜你喜欢
  • 1970-01-01
  • 2015-06-15
  • 1970-01-01
  • 2012-07-18
  • 2011-10-31
  • 2018-03-06
  • 2021-03-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多