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的路径
1
2
3 |
SELECT name , physical_name AS
CurrentLocation, state_desc FROM sys.master_files WHERE database_id = DB_ID(N ‘msdb‘ );<br> ---------------------------------------------------------------- |
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的路径,使之指向新的路径
1
2
3
4 |
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服务
第六步:确定迁移结果
1
2
3 |
SELECT name , physical_name AS
CurrentLocation, state_desc FROM sys.master_files WHERE database_id = DB_ID(N ‘msdb‘ );<br> ------------------------------------------------------------ |
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,执行下面的语句
1
2
3
4 |
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服务
第八:检查修改
1
2
3 |
SELECT name , physical_name AS
CurrentLocation, state_desc FROM sys.master_files WHERE database_id = DB_ID(N ‘model‘ );<br> ------------------------------------------------------- |
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数据库的数据文件和日志文件的路径到新目录
1
2
3
4 |
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的文件路径
1
2
3 |
SELECT name , physical_name AS
CurrentLocation, state_desc FROM sys.master_files WHERE database_id = DB_ID(N ‘master‘ );<br> --------------------------------------------------------- |
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