加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

完整SQL Server实例迁移案例

(2017-06-25 15:30:54)
标签:

sqlserver

迁移

实例迁移

login迁移

系统数据库还原

分类: sqlserver迁移
假设dba遇到以下窘境:
  • 原先服务器出现硬件故障无法启动,需要将整套SQL Server实例迁移到一台备用服务器上
  • 备用服务器和原服务器不同名,连SQL Server安装路径、文件路径都不一样
  • 手头有比较完整的备份,除用户数据库外还有master、msdb和model的完整备份
那么这就涉及到sqlserver完整实例的迁移,包含实例的login及password、各个数据库的用户、所有job、linked servers、端点等所有数据库对象。下面是完整的迁移过程:

1.确认备用服务器的SQL Server和原版本一致(select @@version返回的号码必须一模一样)--因为要恢复系统数据库,要保证恢复的mastermsdb和原库一致,否则SQL Server不能正常工作。

2.停止SQL Server服务,并以单用户模式启动

http://s13/mw690/0064Lr78zy7c9c5on5W1c&690Server实例迁移案例" TITLE="完整SQL Server实例迁移案例" />

 

3.Sqlcmd工具连接SQL Server实例

 http://s14/mw690/0064Lr78zy7c9c8j6gJcd&690Server实例迁移案例" TITLE="完整SQL Server实例迁移案例" />

 

4.还原master数据库

RESTORE DATABASE master

FROM DISK = 'C:\backup\master.bak'

with replace,

MOVE 'master' TO 'C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\DATA\master.mdf',   

MOVE 'mastlog' TO 'C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\DATA\mastlog.ldf'

 http://s3/mw690/0064Lr78zy7c9cantTA92&690Server实例迁移案例" TITLE="完整SQL Server实例迁移案例" /> 

5.由于恢复的master数据库里记载的其他数据库路径和现在的不一致,这时候重新启动SQL Server会失败,必须要用跟踪标志3608来启动

 http://s11/mw690/0064Lr78zy7c9cbTUymea&690Server实例迁移案例" TITLE="完整SQL Server实例迁移案例" /> 

6.Sqlcmd连接SQL Server

 

 http://s1/mw690/0064Lr78zy7c9ccZRte80&690Server实例迁移案例" TITLE="完整SQL Server实例迁移案例" /> 

7.在原实例上查找各系统数据库文件路径

select db_name(database_id),name,physical_name from sys.master_files

 http://s2/mw690/0064Lr78zy7c9ciAWDD41&690Server实例迁移案例" TITLE="完整SQL Server实例迁移案例" />

 

8.修改其他系统数据库的正确路径

 http://s8/mw690/0064Lr78zy7c9cjPAx1e7&690Server实例迁移案例" TITLE="完整SQL Server实例迁移案例" />


--resource数据库

ALTER DATABASE mssqlsystemresource MODIFY FILE(NAME=DATA,FILENAME='C:\Program Files\Microsoft SQL Server\MSSQL.4\MSSQL\Data\mssqlsystemresource.mdf')

GO

ALTER DATABASE mssqlsystemresource MODIFY FILE(NAME=LOG,FILENAME='C:\Program Files\Microsoft SQL Server\MSSQL.4\MSSQL\Data\mssqlsystemresource.ldf')

GO

--msdb数据库

ALTER DATABASE msdb MODIFY FILE(NAME=MSDBData,FILENAME='C:\Program Files\Microsoft SQL Server\MSSQL.4\MSSQL\Data\msdbdata.mdf')

GO

ALTER DATABASE msdb MODIFY FILE(NAME=MSDBLog,FILENAME='C:\Program Files\Microsoft SQL Server\MSSQL.4\MSSQL\Data\msdblog.ldf')

GO

 

--model数据库

ALTER DATABASE model MODIFY FILE(NAME=modeldev,FILENAME='C:\Program Files\Microsoft SQL Server\MSSQL.4\MSSQL\Data\model.mdf')

GO

ALTER DATABASE model MODIFY FILE(NAME=modellog,FILENAME='C:\Program Files\Microsoft SQL Server\MSSQL.4\MSSQL\Data\modellog.ldf')

GO

 

--tempdb数据库

ALTER DATABASE tempdb MODIFY FILE(NAME=tempdev,FILENAME='C:\Program Files\Microsoft SQL Server\MSSQL.4\MSSQL\Data\tempdb.mdf')

GO

ALTER DATABASE tempdb MODIFY FILE(NAME=templog,FILENAME='C:\Program Files\Microsoft SQL Server\MSSQL.4\MSSQL\Data\templog.ldf')

GO

 

9.停止SQL Server服务,再以正常模式启动

 

 http://s2/mw690/0064Lr78zy7c9cl7SJrb1&690Server实例迁移案例" TITLE="完整SQL Server实例迁移案例" />


--恢复model数据库

RESTORE DATABASE model FROM DISK='c:\lab\model.bak'3 WITH

 move 'modeldev' TO 'C:\Program Files\Microsoft SQL Server\MSSQL.4\MSSQL\Data\model.mdf', 

 move 'modellog' TO 'C:\Program Files\Microsoft SQL Server\MSSQL.4\MSSQL\Data\modellog.ldf' ,REPLACE

 --恢复msdb数据库

RESTORE DATABASE msdb FROM DISK='c:\lab\msdb.bak'3 WITH

move 'MSDBData' TO 'C:\Program Files\Microsoft SQL Server\MSSQL.4\MSSQL\Data\MSDBData.mdf',

move 'MSDBLog' TO 'C:\Program Files\Microsoft SQL Server\MSSQL.4\MSSQL\Data\MSDBLog.ldf' ,REPLACE

Ps:为什麽resource数据库跟tempdb数据库不用还原呢?resource:包含SQLSERVER附带的所有系统对象副本的只读数据库,resource数据库是不能备份的,而且在SSMS里是看不见的

tempdb:用于保存临时或中间结果集的工作空间。每次启动SQLSERVER实例时SQLSERVER都会根据model数据库为蓝本重新创建此数据库。

服务器实例关闭时,将永久删除tempdb数据库中的所有数据

 

 

10.修改服务器名称

 迁移到新服务上后需修改master里记录的原服务器名

use master    

       go    

       select @@servername  

       select serverproperty('servername')  

  IF serverproperty('servername')<>@@servername    

  BEGIN  

  DECLARE  @server SYSNAME  

  SET   @server=@@servername      

  EXEC  sp_dropserver @server=@server    

  SET   @server=cast(serverproperty('servername') AS SYSNAME)   

  EXEC  sp_addserver @server=@server,@local='LOCAL'     

  END  

  ELSE  

    PRINT '实例名与主机名一致,无需修改!'  

运行完上面语句,重启SQL Server服务,再运行SSELECT @@servername

 

12.恢复所有用户数据库

 第11步完成后,所有用户数据库都处于置疑状态,因为本地没有数据文件,后续就是恢复所有用户数据库即可

USE [master]

RESTORE DATABASE [test_shrink] FROM  DISK = N'C:\backup\test.bak' WITH  FILE = 1, 

MOVE N'test_shrink' TO N'C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\DATA\test_shrink.mdf', 

MOVE N'test_shrink_log' TO N'C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\DATA\test_shrink_log.ldf',  NOUNLOAD,  STATS = 5

GO

 

 

--直接对应数据库上右击还原,重定位路径即可。

13.迁移完毕检查

检查原来所有login是否能成功登陆,linked server、数据库触发器、端点及job等对象是否迁移成功。


0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有