针对不同的场景,采用不同的步骤。
对非master以及resource系统数据库而言,分两种情况。
1.非master以及resource系统数据库正常。
这里以迁移msdb为例,将msdb从D:SQL2K8_DATAMSSQL10_50.MSSQLSERVERMSSQLDATA迁移到D:SQL2K8_DATAMSSQL10_50.MSSQLSERVERMSSQLDATAsystem目录下。
首先我们检查当前msdb的路径
SELECT name, physical_name AS CurrentLocation, state_desc FROM sys.master_files WHERE database_id = DB_ID(N'msdb');
----------------------------------------------------------------
name CurrentLocation state_desc
MSDBData D:SQL2K8_DATAMSSQL10_50.MSSQLSERVERMSSQLDATAMSDBData.mdf ONLINE
MSDBLog D:SQL2K8_DATAMSSQL10_50.MSSQLSERVERMSSQLDATAMSDBLog.ldf ONLINE
之后修改数据库中msdb的路径,使之指向新的路径
alter database msdb modify file (name='MSDBData',filename='D:SQL2K8_DATAMSSQL10_50.MSSQLSERVERMSSQLDATAsystemMSDBData.mdf') alter database msdb modify file (name='MSDBLog',filename='D:SQL2K8_DATAMSSQL10_50.MSSQLSERVERMSSQLDATAsystemMSDBLog.ldf')
第三步:停止SQL Server服务
第四步:从物理层面将msdb对应的数据文件和日志文件拷贝到新的路径下
第五步:启动SQL Server服务
第六步:确定迁移结果
SELECT name, physical_name AS CurrentLocation, state_desc FROM sys.master_files WHERE database_id = DB_ID(N'msdb');
------------------------------------------------------------
name CurrentLocation state_desc
MSDBData D:SQL2K8_DATAMSSQL10_50.MSSQLSERVERMSSQLDATAsystemMSDBData.mdf ONLINE
MSDBLog D:SQL2K8_DATAMSSQL10_50.MSSQLSERVERMSSQLDATAsystemMSDBLog.ldf ONLINE
2.如果由于系统故障,导致需要迁移系统数据库。那么此时我们需要使用另外一种方法
此时以迁移model数据库为例
第一:如果SQL Server运行中,先将该服务关闭
第二:将SQL Server启动到master-only模式
如果是默认实例,在命令行下执行net start mssqlserver /f /T3608
如果是命名实例,在命令行下执行 net start mssql$instancename /f /T3608
第三:使用SSMS或者SQLCMD连接到SQLServer,执行下面的语句
alter database model modify file (name='modeldev',filename='D:SQL2K8_DATAMSSQL10_50.MSSQLSERVERMSSQLDATAsystemmodel.mdf') alter database model modify file (name='modellog',filename='D:SQL2K8_DATAMSSQL10_50.MSSQLSERVERMSSQLDATAsystemmodellog.ldf')
第四:退出当前SSMS或者SQLCMD命令
第五:停止当前SQL Server服务
第六:拷贝model数据库对应的数据和日志文件到新路径
第七:启动SQL Server服务
第八:检查修改
SELECT name, physical_name AS CurrentLocation, state_desc FROM sys.master_files WHERE database_id = DB_ID(N'model');
-------------------------------------------------------
name CurrentLocation state_desc
modeldev d:sql2k8_datamssql10_50.mssqlservermssqldatasystemmodel.mdf ONLINE
modellog d:sql2k8_datamssql10_50.mssqlservermssqldatasystemmodellog.ldf ONLINE
对master以及resource数据库的迁移方法如下:
迁移到d:sql2k8_datamssql10_50.mssqlservermssqldatasystem路径下
第一步:使用sqlservermanager10.msc打开SQL Server配置管理器
第二步:配置管理器的高级选项页中修改启动参数,将对应的路径修改到新路径下
-dD:SQL2K8_DATAMSSQL10_50.MSSQLSERVERMSSQLDATAsystemmaster.mdf;-eD:SQL2K8_DATAMSSQL10_50.MSSQLSERVERMSSQLLogERRORLOG;-lD:SQL2K8_DATAMSSQL10_50.MSSQLSERVERMSSQLDATAsystemmastlog.ldf
第三步:停止SQL Server服务,并将master和resource数据库的数据文件和日志文件迁移到新路径下
其中resource数据库的数据文件和日志文件位于/DATA/Binn路径下
第四步:使用/f和/T3608启动SQL Server服务到Master-Only模式
第五步:修改resource数据库的数据文件和日志文件的路径到新目录
ALTER DATABASE mssqlsystemresource MODIFY FILE (NAME=data, FILENAME= 'D:SQL2K8_DATAMSSQL10_50.MSSQLSERVERMSSQLDATAsystemmssqlsystemresource.mdf'); ALTER DATABASE mssqlsystemresource MODIFY FILE (NAME=log, FILENAME= 'D:SQL2K8_DATAMSSQL10_50.MSSQLSERVERMSSQLDATAsystemmssqlsystemresource.ldf');
第六步:正常启用SQL Server服务
第七步:检查master的文件路径
SELECT name, physical_name AS CurrentLocation, state_desc FROM sys.master_files WHERE database_id = DB_ID(N'master');
---------------------------------------------------------
name CurrentLocation state_desc
master d:sql2k8_datamssql10_50.mssqlservermssqldatasystemmaster.mdf ONLINE
mastlog d:sql2k8_datamssql10_50.mssqlservermssqldatasystemmastlog.ldf ONLINE