如何在没有 index.idx 文件的 SQL Server 2008 R2 中附加数据库

Posted

技术标签:

【中文标题】如何在没有 index.idx 文件的 SQL Server 2008 R2 中附加数据库【英文标题】:How to attach database in SQL Server 2008 R2 without index.idx file 【发布时间】:2016-06-18 11:31:55 【问题描述】:

我有一个数据库测试(test.mdftest_ldf.logtest_idx.idx)。我错误地删除了test_idx.idx 文件,由于文件超过20 GB。

我用过所有类型的恢复软件,但找不到文件。

不幸的是,数据库没有备份,现在 SQL Server 2008 R2 不允许我附加数据库。

有没有什么办法可以在没有索引文件的情况下附加数据库test.mdf文件?

尝试附加数据库时出错:

无法打开物理文件“.idx”。操作系统错误 2:“2(无法检索此错误的文本。原因:15105)”。 (Microsoft SQL Server,错误:5120)

【问题讨论】:

你在使用快照复制吗? 嗨,Alex,对不起,我不知道快照复制。我正在尝试使用 SQL Server GUI 界面附加数据库。我从未使用过快照发布,我只是尝试过,但它当然没有显示数据库,因为它没有附加...:( 我从未听说过在 SQL Server 中使用扩展名为 .idx 的文件,因此我在互联网上搜索了“idx”文件唯一出现的内容是“快照复制”。我建议您与您的 DBA 讨论此问题。 我也从未听说过 idx 文件。里面有什么?也许它只是一个带有 .idx 扩展名的 NDF 字段 也许吧。只是也许。有人创建了第二个数据文件只是为了保留索引并将扩展名更改为idx。非常疯狂的想法。如果是真的,那人就生病了。 【参考方案1】:

    创建一个具有相同文件结构的虚拟数据库(名称不重要)。即数据文件、日志文件和索引文件。

    像这样使索引文件和数据库脱机:

    alter database modify file(name = '', offline)

    alter database 设置离线

您将无法恢复脱机文件(据我所知),因此请不要将其命名为与原始文件相同的逻辑名称 - 您马上就会明白原因。

    现在用损坏的数据库中剩下的内容覆盖虚拟数据库文件(显然将副本保存在安全的地方!)

    使数据库重新联机

    alter database 设置在线

此时您的数据应该可以访问了。

    使用与原始索引和重建索引相同的逻辑名称创建新文件组/文件

祝你好运!

【讨论】:

@expertcoder1123 - 你过得怎么样?我的回答是否有助于解决问题?

以上是关于如何在没有 index.idx 文件的 SQL Server 2008 R2 中附加数据库的主要内容,如果未能解决你的问题,请参考以下文章

Nim 枚举函数,如 Python

如何在 SQL Management Studio 中显示 s-s-rS 2008 的“主”文件夹

搜索+反向搜索腌制文件,跳过值

如何批量执行sql查找替换?

如何在pl sql中跟踪异常终止

SQLCMD命令,如何将输出保存到日志文件中