数据库为只读或具有只读文件,因此无法升级。使数据库或文件可写,然后重新运行恢复


8

我已经收到一个数据库文件,有关加载该文件的说明是安装SQL Server 2005,然后使用SQL Server Management Studio将其附加。

安装完所有内容后,我尝试附加MDF文件,但是它告诉我:

文件“ D:{folderName} {filename} .LDF”的目录查找失败,并出现操作系统错误21(未找到错误)

LDF文件未随数据库一起提供,因此大概应该自动生成它。

现在,D驱动器是我的CD驱动器所在的位置,因此它无法在其中找到任何内容。尝试在此创建任何东西也不会有任何运气。

  1. 为什么要尝试在特定路径下查找日志文件?为什么不在数据库文件所在的位置?

  2. 如何附加此数据库?

我意识到,当我选择要附加的数据库时,“数据库详细信息”下将出现三个条目。MDF,NDF和LDF。LDF的“当前文件路径”指向上面的D驱动器路径,因此我将其删除。

这次,当我点击“确定”时,我得到了另一个错误消息:

数据库为只读或具有只读文件,因此无法升级。
使数据库或文件可写,然后重新运行恢复。

文件激活失败。物理名称D:{文件夹} {文件} .LDF可能不正确。
新的日志文件“ ...”已创建。(Microsoft SQL Server,错误:3415)

因此,现在它在与数据库文件相同的文件夹中创建一个新的日志文件,这很好,但是似乎存在安全问题。

附加信息:

  • 这些说明要求我使用登录名“ sa”,它似乎是sysadmin帐户。我使用该登录名连接到我的SQL Server实例。

  • 我检查了它不是只读的文件属性。该目录也不是只读的。允许所有ACL。

  • 我无法附加数据库。当我尝试附加它时,它会引发一条错误消息“附加数据库失败”。

  • 关闭SSMS并以管理员身份重新打开它没有影响。

  • select SERVERPROPERTY('ProductVersion')返回9.00.4035.00。数据库中还有一个名为“ dbdata.ini”的文件,该文件的内容为“ IsSql2000 = 1”,因此大概是要在SQL Server 2000中加载的。我看看是否可以在2000年使用它。

Answers:


8

这不是访问问题。问题是您将数据库附加到的SQL Server版本比.mdf最初附加到的实例的版本高,并且该实例是只读的。SQL Server尝试将数据库升级作为附加的一部分,但不能执行,因为数据库处于只读模式。

如果数据库在READ_ONLY其中(听起来似乎是基于错误消息),则根据Technet文档,您需要所有文件(日志和数据)将其附加。如果您查看该FOR ATTACH子句下的内容,它将明确描述:

...对于只读数据库,由于无法更新主文件,因此无法重建日志。因此,当附加一个其日志不可用的只读数据库时,必须在该FOR ATTACH子句中提供一个或多个日志文件。

您需要.ldf数据库随附的内容。我将与提供数据库的任何人联系,并要求他们同时提供.mdf.ldf文件。然后,可以使用以下语法将其附加:

CREATE DATABASE [foo]
ON (FILENAME='<<path to mdf>>')
LOG ON (FILENAME='<<path to ldf>>')
FOR ATTACH;

如果READ_ONLY不附加状态,则无法将其从数据库中删除,因为状态存储在数据库的元数据中。要对其进行更改,数据库需要联机并连接。

另一种选择是要求数据库备份。如果您要执行数据库还原而不是附加操作,则可以更轻松地解决其中一些问题。


1
使用LOG ON具有匹配ldf并没有解决我的问题
梦幻

25

我刚刚找到了一个帖子,回答了这个问题:

这可能无法在所有情况下都起作用,但是我尝试安装语义搜索数据库并遇到相同的错误。

您必须以管理员身份运行SQL Server Management Studio,并且它可以工作。


9
  1. 打开我的电脑。
  2. 找到保存“ .mdf”和“ .ldf”文件的主文件夹。
  3. 右键单击该文件夹,然后单击“属性”。
  4. 在属性窗口中,单击“安全性”
  5. 点击“编辑”按钮
  6. 为列出的用户启用“读取并执行”,“读取”,“写入”,并将更改应用到以下文件夹,直到数据库文件。
  7. 尝试附加“ .mdf”文件

谢谢,我的旧窗户不见了,我认为这些文件已被该操作系统锁定。但只需要更改许可即可
saber tabatabaee yazdi

1

右键单击.mdf.ldf文件,一次单击一个,然后单击“属性”,然后在底部显示“此文件来自另一台计算机,可能已被阻止以帮助保护此计算机”,单击“取消阻止”按钮。

然后右键单击->属性,->安全选项卡->编辑按钮,然后选择“用户”并授予完全控制权限。


1

在我的情况下,解决方案是使用Windows Auth模式而不是具有sysadmin角色的sql用户登录到SSMS 。只要确保您在Windows身份验证模式下使用的用户具有适当的权限(我的情况是sysadmin),我的猜测是sql用户没有适当的权限。(当我从其他位置迁移/复制mdf和ldf时遇到此问题机)


0

在我们的情况下不是权限,它是SSMS的版本!

(是在2012年本地发生错误的,但是当我们从远程盒中使用SSMS 17+时可以使用)


-1

我也有这个问题。我通过重新启动SQL服务为我的客户提供了帮助,并且能够按照常规过程连接MDF。


-2

1)打开Sql Server配置管理器

2)选择Sql Server Services(左窗格)

3)双击您的SqlServer(右侧窗格)

4)选择登录标签

5)选择内置单选按钮,然后在组合框中更改本地系统或网络服务。

6)单击确定。

7)在SQL Server管理器中附加mdf文件。


-2

您的SQL Server服务可能正在NT Service \ MSSQLServer帐户下运行。更改它本地系统将授予它访问权限。

最好是创建一个用户,并授予该用户对文件所在文件夹的完全权限。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.