【问题标题】:Remove (merge) SQL Servers' database secondary data file删除(合并)SQL Server 的数据库辅助数据文件
【发布时间】:2010-02-02 11:51:52
【问题描述】:

我有一个数据库备份,SQL Server Management Studio 表示其中包含三个文件:一个.mdf 文件、一个.ndf 文件和一个.ldf 文件。这个辅助数据文件(.ndf 一个)是没有明显原因创建的,所以我想完全删除它(当然不会丢失数据),最好是在从备份恢复数据库期间。

这真的可行吗?

【问题讨论】:

  • NDF 的目的是分发文件 IO。如果您的实时服务器具有 NDF,请不要修改架构。为什么 NDF 会打扰你?
  • @Hassan 它只是为了克服 NTFS 卷碎片而创建的,它的存在没有其他原因。虽然我同意 NDF 是好的,但粗心创建的 NDF 是邪恶的。

标签: sql-server-2008 database-restore data-files


【解决方案1】:

好的,找到了解决办法。

首先备份数据库。

执行这个:

USE database_name;

然后执行此操作,并将logical_ndf_file_name 替换为您的 NDF 文件的逻辑名称(您可以通过 Database->Properties_Files 轻松找到):

DBCC SHRINKFILE('logical_ndf_file_name', EMPTYFILE);
ALTER DATABASE database_name REMOVE FILE logical_ndf_file_name;

【讨论】:

  • 您的文件中有数据吗?如果是的话,需要多长时间,数据库是否存在?
  • @Hassan NDF 约为 8 Gb,而 MDF 约为 60 Gb。总共花了大约20分钟。不确定您所说的“生活”是什么意思。我没有让它离线,但也没有针对它运行任何查询。
  • 有趣的信息。我所说的 Live 是指生产用途或面向客户。
  • @Hassan 我怀疑它是否可用于生产。
  • 这里需要澄清一下,上面代码行中的'ndf_file_name'指的是逻辑文件名,而不是物理文件名。这对我来说不是很清楚。
【解决方案2】:

在生产加载成功期间,我先运行了空,然后运行了 ndf drop。我认为在与空相同的事务中运行 drop ndf 很重要,以确保数据库不会尝试写入您要删除的文件,但是在清空之后,数据库将文件标记为不可用,这可以通过尝试另一个来证明很快就空了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-10
    • 2013-09-19
    • 2011-03-10
    • 1970-01-01
    相关资源
    最近更新 更多