所以我们服务器上数据库的默认位置是
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:\...\data
到d:\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
工作正常
当数据库处于脱机状态时,您需要将文件复制到新位置。当您更改文件位置时,SQL Server 不会自动执行此操作。我的首选方法是使用以下步骤:
ALTER DATABASE...MODIFY FILE
更改文件位置的元数据执行复制时,您需要确保新位置中的文件权限与旧位置中的文件权限相同。否则,你会遇到不同的问题。
如果您使用 ROBOCOPY 移动文件,则可以使用 /COPYALL 标志来确保安全性和文件信息与文件一起复制。
您还可以手动验证权限,验证文件夹权限是否继承到目录的所有内容。