SQL Server附加数据库变成只读的解决方案
本次操作的数据库是 SQL Server 2016,其他版本的类似。
SQL Server 附加数据库操作是指将现有的数据库文件(通常包括主数据文件 .mdf 和日志文件 .ldf)加载到一个 SQL Server 实例中,使该数据库可以被 SQL Server 管理和访问的过程。
一、问题描述
本次附加数据库是为了迁移数据库,将云服务器中的数据库分离之后再附加到另外一台服务器上。
使用 SQL Server Management Studio (SSMS) ,将数据库附加到服务器实例中,“数据库” -> “附加”,选择要附加的 .mdf 文件,但是数据库显示只读状态。
二、问题解决
2.1 解决方案一
将数据库再分离,然后使用 windows 内置账户登录再附加就可以了。
2.1 解决方案二
右键数据库,进入属性,选择状态页,将【数据库为只读】设为 False:
如果没有成功,报如下错误:
标题: Microsoft SQL Server Management Studio
------------------------------
数据库 "kwdb" 的 更改 失败。 (Microsoft.SqlServer.Smo)
有关帮助信息,请单击: http://go.microsoft.com/fwlink?ProdName=Microsoft+SQL+Server&ProdVer=14.0.17289.0+((SSMS_Rel_17_4).181117-0805)&EvtSrc=Microsoft.SqlServer.Management.Smo.ExceptionTemplates.FailedOperationExceptionText&EvtID=更改+Database&LinkId=20476
------------------------------
其他信息:
执行 Transact-SQL 语句或批处理时发生了异常。 (Microsoft.SqlServer.ConnectionInfo)
------------------------------
无法打开物理文件“C:\Special\DB\kwdb.mdf”。操作系统错误 5:“5(拒绝访问。)”。
无法打开物理文件“C:\Special\DB\kwdb_log.ldf”。操作系统错误 5:“5(拒绝访问。)”。
无法重新启动数据库“kwdb”。将恢复到以前的状态。
ALTER DATABASE 语句失败。
正在回滚不合法事务。估计回滚已完成: 0%。
正在回滚不合法事务。估计回滚已完成: 100%。 (Microsoft SQL Server,错误: 5120)
有关帮助信息,请单击: http://go.microsoft.com/fwlink?ProdName=Microsoft%20SQL%20Server&ProdVer=13.00.1601&EvtSrc=MSSQLServer&EvtID=5120&LinkId=20476
------------------------------
按钮:
确定
------------------------------
查看数据库文件属性:
当前登录的用户 Administrator 其实是对文件有完全控制权限,但是登录的数据库账户是 sa,所以就没有这种权限。
如果是内置账户登录再附加数据库是可以的,所以方案一是可行的。
如果仍使用 sa 登录,则需要添加一个【Network Service】账户完全控制权限,可尝试一下,如果还不行,建议采用方案一。
具体操作如下:
分离再重新附加。