SQL Server 2008 R2 里迁移系统数据库的方法
针对不同的场景,采用不同的步骤。
对非master以及resource系统数据库而言,分两种情况。
1.非master以及resource系统数据库正常。
这里以迁移msdb为例,将msdb从D:\SQL2K8_DATA\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\迁移到D:\SQL2K8_DATA\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\system\目录下。
首先我们检查当前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_DATA\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\MSDBData.mdf ONLINE
MSDBLog D:\SQL2K8_DATA\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\MSDBLog.ldf ONLINE
之后修改数据库中msdb的路径,使之指向新的路径
alter database msdb modify file (name='MSDBData',filename='D:\SQL2K8_DATA\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\system\MSDBData.mdf') alter database msdb modify file (name='MSDBLog',filename='D:\SQL2K8_DATA\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\system\MSDBLog.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_DATA\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\system\MSDBData.mdf ONLINE
MSDBLog D:\SQL2K8_DATA\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\system\MSDBLog.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_DATA\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\system\model.mdf') alter database model modify file (name='modellog',filename='D:\SQL2K8_DATA\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\system\modellog.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_data\mssql10_50.mssqlserver\mssql\data\system\model.mdf ONLINE
modellog d:\sql2k8_data\mssql10_50.mssqlserver\mssql\data\system\modellog.ldf ONLINE
对master以及resource数据库的迁移方法如下:
迁移到d:\sql2k8_data\mssql10_50.mssqlserver\mssql\data\system\路径下
第一步:使用sqlservermanager10.msc打开SQL Server配置管理器
第二步:配置管理器的高级选项页中修改启动参数,将对应的路径修改到新路径下
-dD:\SQL2K8_DATA\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\system\master.mdf;-eD:\SQL2K8_DATA\MSSQL10_50.MSSQLSERVER\MSSQL\Log\ERRORLOG;-lD:\SQL2K8_DATA\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\system\mastlog.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_DATA\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\system\mssqlsystemresource.mdf'); ALTER DATABASE mssqlsystemresource MODIFY FILE (NAME=log, FILENAME= 'D:\SQL2K8_DATA\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\system\mssqlsystemresource.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_data\mssql10_50.mssqlserver\mssql\data\system\master.mdf ONLINE
mastlog d:\sql2k8_data\mssql10_50.mssqlserver\mssql\data\system\mastlog.ldf ONLINE