公司有一台旧的sqlserver 2008数据库安装在C盘,导致C盘空间爆满,因为C盘无法再扩容,只能考虑将master数据库迁移到G盘,因为对sqlserver不熟悉,没有按照官方文档迁移文件,导致数据库文件迁移后无法启动。
错误方法
直接在数据库修改文件路径
alter database master modify file ( name = master, filename = 'G:\Reports\DATA\master.mdf');
alter database master modify file ( name = mastlog, filename = 'G:\Reports\DATA\mastlog.ldf');
按照该语句执行完成后,数据库关闭,将master.mdf和mastlog.ldf文件拷贝到G盘目录下。
重启数据库一直报错提示报错信息
无法打开错误日志文件 ''。操作系统错误 = 3(系统找不到指定的路径。)。事件ID 17058
查找网上的解决方案,包括文件权限,文件夹权限,账号权限都无法解决报错。最后找到解决方案,是启动参数问题,必须将下列三个参数添加到启动参数中,才能正常启动。添加任何一个参数都无法启动,要三个一起
-dG:\Reports\DATA\master.mdf;
-lG:\Reports\DATA\mastlog.ldf;
-eG:\Reports\DATA\ERRORLOG
这是一个很简单的错误,因为我没有按照官方文档操作迁移master,导致数据库启动报错,找了2小时找到了答案,也算万幸。
正确方法
官方文档记录的方法
移动系统数据库 - SQL Server | Microsoft Docs
移动 master 数据库
若要移动 master
数据库,请按照下列步骤进行操作。
-
验证 SQL Server 数据库引擎 的服务帐户是否对文件的新位置具有完全权限。 有关详细信息,请参阅 配置 Windows 服务帐户和权限预览版本升级问题的解答。 如果 数据库引擎 服务帐户无法控制其新位置中的文件,则 SQL Server 实例将不会启动。
-
从“开始”菜单,找到并启动“SQL Server 配置管理器”。 有关预期位置的详细信息,请参阅 SQL Server 配置管理器。
-
在“SQL Server 服务”节点中,右键单击 SQL Server 实例(如 SQL Server (MSSQLSERVER) ),并选择“属性”。
-
在“SQL Server (instance_name) 属性”对话框中,单击“启动参数”选项卡。
-
在“现有参数”框中,选择
-d
参数。 在“指定启动参数”框中,将该参数更改为master
数据文件的新路径。 单击“更新”以保存更改。 -
在“现有参数”框中,选择
-l
参数。 在“指定启动参数”框中,将该参数更改为master
日志文件的新路径。 单击“更新”以保存更改。数据文件的参数值必须跟在
-d
参数的后面,日志文件的参数值必须跟在-l
参数的后面。 下面的示例显示用于master
数据文件默认位置的参数值。-dC:\Program Files\Microsoft SQL Server\MSSQL<version>.MSSQLSERVER\MSSQL\DATA\master.mdf
-lC:\Program Files\Microsoft SQL Server\MSSQL<version>.MSSQLSERVER\MSSQL\DATA\mastlog.ldf
如果
master
数据文件预先安排的重定位是E:\SQLData
,则参数值将做如下更改:-dE:\SQLData\master.mdf
-lE:\SQLData\mastlog.ldf
-
选择“确定”将永久保存所作更改并关闭“SQL Server (instance_name) 属性”对话框 。
-
通过右键单击实例名称并选择“停止”来停止 SQL Server 实例。
-
将 master.mdf 和 mastlog.ldf 文件复制到新位置。
-
重新启动 SQL Server实例。
-
通过运行以下查询来验证
master
数据库的文件更改。SQL复制
SELECT name, physical_name AS CurrentLocation, state_desc FROM sys.master_files WHERE database_id = DB_ID('master');
-
此时 SQL Server 应正常运行。 但是 Microsoft 建议还调整
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\instance_ID\Setup
处的注册表项,其中 instance_ID 类似于MSSQL13.MSSQLSERVER
。 在该配置单元中,将SQLDataRoot
值更改为新路径。 未能更新注册表可能会导致修补和升级失败。 -
由于在步骤 9 中复制了数据库文件,而不是移动它们,因此,现在可以从以前的位置安全删除未使用的数据库文件。