尝试重新启动移动的数据库后:无法打开物理文件“D:\Data\MYDBNAME.MDF”

ado*_*ic 1 sql-server-2012

所以我们服务器上数据库的默认位置是

c:\program files\microsoft sql server\mssql11.mssqlserver\mssql\DATA
Run Code Online (Sandbox Code Playgroud)

但由于空间限制,我们改为使用

d:\data
Run Code Online (Sandbox Code Playgroud)

我现在已将默认位置更正为d:\data

但是,我无法将在错误位置创建的数据库移动c:\...\datad:\data

ALTER DATABASE MYDATABASE set offline

ALTER DATABASE MYDATABASE 
MODIFY FILE ( NAME = 'MYDATABASE', FILENAME = 'D:\Data\MYDATABASE.MDF')

ALTER DATABASE MYDATABASE 
MODIFY FILE ( NAME = 'MYDATABASE_LOG', FILENAME =  'D:\Data\MYDATABASE_LOG.LDF')

ALTER DATABASE MYDATABASE SET ONLINE
Run Code Online (Sandbox Code Playgroud)

失败并显示以下错误消息

消息 5120,级别 16,状态 101,第 1 行
无法打开物理文件“D:\Data\MYDATABASE.MDF”。操作系统错误2:“2(系统找不到指定的文件。)”。文件激活失败。物理文件名“D:\Data\MYDATABASE_log.lDF”可能不正确。

消息 5181,级别 16,状态 5,第 1 行
无法重新启动数据库“MYDATABASE”。恢复到之前的状态。

消息 5069,级别 16,状态 1,第 1 行
ALTER DATABASE 语句失败。

服务器肯定可以访问新位置,因为所有其他数据库都d:\data工作正常

AMt*_*two 5

当数据库处于脱机状态时,您需要将文件复制到新位置。当您更改文件位置时,SQL Server 不会自动执行此操作。我的首选方法是使用以下步骤:

  • 将数据库设置为脱机
  • 复制(不要移动)数据库文件
  • 复制成功完成后,ALTER DATABASE...MODIFY FILE更改文件位置的元数据
  • 设置数据库在线
  • 确认数据库重启成功
    • 如果数据库联机出现问题,文件仍位于原始位置,因此您可以回滚。
  • 删除旧文件

执行复制时,您需要确保新位置中的文件权限与旧位置中的文件权限相同。否则,你会遇到不同的问题。

如果您使用 ROBOCOPY 移动文件,则可以使用 /COPYALL 标志来确保安全性和文件信息与文件一起复制。

您还可以手动验证权限,验证文件夹权限是否继承到目录的所有内容。