您好,欢迎访问数据库运维|优化|安装|迁移|服务官网!
13261661949
sqlserver数据库迁移到另一台机-数据资讯-数据库运维|优化|安装|迁移|服务_uDBok.com

新闻动态

联系我们

sqlserver数据库迁移到另一台机-数据资讯-数据库运维|优化|安装|迁移|服务_uDBok.com

地址:北京市昌平区高新经济开发区
手机:13261661949

咨询热线13261661949

sqlserver数据库迁移到另一台机

发布时间:2026-09-02 09:52:00人气:1091

干这行久了,你会发现数据库迁移这事儿,就跟搬家一样。平时觉得家里东西不多,真到搬的时候,光是从床底下扫出来的灰尘和旧袜子,就够你收拾半天的。sqlserver数据库迁移到另一台机,听着是个技术活,干起来其实是个细致活。你问十个DBA,九个会告诉你“不难”,但你再追问一句“出过事没”,十个里有九个会沉默一下,然后给你讲一个凌晨三点回滚的惊悚故事。

sqlserver数据库迁移到另一台机

我见过最典型的翻车现场,是有人直接拿备份文件往新机器上一怼,附加完数据库,应用连上来报错,一看,登录名没了。对,那堆存在master库里的SQL登录账号,就像你手机通讯录里存的那些“张经理”“李老师”,手机换了,通讯录没同步,全成了陌生号码。你光把数据文件搬过去没用,那些登录名、作业、链接服务器、甚至包括数据库的邮件配置,全都住在系统数据库里。所以第一步,你得先想清楚,你要搬的是“数据”,还是“整个环境”。

如果只是数据,那简单,备份还原,或者生成脚本导数据,都行。但如果你要的是“无缝切换”,让应用连上来跟没换机器一样,那你就得把整个实例级别的配置都搬过去。这时候,我建议你老老实实打开SSMS,右键源服务器,任务,生成脚本,选“编写整个数据库及所有对象的脚本”,注意,高级选项里有个“为包含的数据编写脚本”或者“类型为架构和数据”,你选上。这招虽然土,但稳,尤其适合那些数据库不大,几百MB到几个G的库,生成一个脚本文件,拿到新机器上跑一遍,数据、表结构、存储过程、视图、触发器,全齐活。

但脚本有个毛病,慢。几十个G的库,你用脚本导,跑一晚上可能都跑不完。这时候就得祭出备份还原这个大杀器。你得先确认一下新机器上sqlserver的版本,别整出个2012的备份往2008上还原的闹剧,那报错能把你绕晕。版本对上了,把源库设置为简单恢复模式,做个完整备份,拷贝到新机器,然后还原。这里有个坑,很多人还原完了,发现新库是只读的,或者一直“正在还原”状态,那是因为你没用WITH RECOVERY选项。别怕,那句“RESTORE DATABASE 库名 FROM DISK='路径' WITH RECOVERY”你抄下来,关键时候能救命。

还有,别忘了文件路径的问题。源机器上数据文件在D盘,新机器上只有C盘,还原的时候你得用WITH MOVE选项把逻辑文件名映射到新路径。这个我吃过亏,有次图省事没指定MOVE,结果还原失败,报了个“文件'xxx'无法覆盖”的错误,查了半天才发现是路径不对。你要是也遇到了,别慌,先查一下源库的逻辑文件名,然后重新还原,加上MOVE参数,指定新路径就行。这个过程就像你搬家时,得告诉搬家公司,这个衣柜放卧室,那个书架放书房,不然人家给你堆客厅了。

数据过去了,你以为完事了?天真。你还要处理登录名映射。新机器上建的库,里面的用户SID和源库对不上,应用连上来会提示“用户'xxx'登录失败”。解决办法有两个,一个是把源库里的用户和登录名脚本化,在新机器上重新创建,然后执行存储过程spchangeuserslogin来修复映射关系;另一个更省事,直接用系统函数把登录名的SID查出来,然后在新机器上创建登录名时,用SID参数指定一样的值。我推荐后一种,因为spchangeuserslogin在SQL Server 2008之后就标记为不推荐了,虽然还能用,但总感觉像穿着拖鞋去跑马拉松,别扭。

别忘了作业。那些定时备份、定时清理的SQL代理作业,你要是不搬,新机器上等于裸奔。你可以在源服务器上右键作业,编写脚本,生成创建语句,然后到新机器上执行。但这里有个细节,作业里如果用了代理账户,比如某个账号去执行SSIS包,你得在新机器上先把那个代理账户建好,不然作业会跑不起来。还有,那些计划,比如“每天凌晨两点”,你复制过去之后,计划会保留,但你得检查一下时区,如果源服务器跟新服务器不在一个时区,那你的备份时间就全乱了。

还有个容易忽略的,链接服务器。有些系统会跨库查询,比如从A库连B库,如果你只搬了A库没搬B库,或者链接服务器的配置没同步,应用一跑就报“链接服务器'XXX'的OLE DB访问接口返回了消息”。这个怎么搬?简单,在源服务器上执行sp_helpserver,把链接服务器的连接字符串、登录名、密码记下来,到新服务器上重新创建一遍。密码是加密的,你没法直接复制,只能重新输入一遍,但至少配置项你能对着抄。

测试。搬完数据,改完连接,你得让业务人员跑一遍完整流程,别只查一条记录就说“没问题”。我遇过最坑的一次,数据搬完了,报表能出数,但某个存储过程里用了临时表,性能在新机器上差得离谱,原来源机器是16核,新机器是4核,同样的查询,执行计划全变了。这种问题,你不跑压测根本发现不了。所以,别省那半天时间,让测试团队好好折腾一下,哪怕故意造点高并发,也比上线那天出事故强。

sqlserver数据库迁移到另一台机,说白了,就是把你的家当一件件打包,再在新房子里摆好。数据文件是家具,登录名是门锁钥匙,作业是闹钟,链接服务器是电话簿。你漏了哪一样,生活都会别扭。但只要你把这七件事——脚本或备份、版本匹配、路径映射、登录名SID、作业代理、链接服务器、全面测试——一件件过一遍,这事儿就没那么可怕。下次再有人问你“迁移难不难”,你可以拍着胸脯说“不难,就是费点心思”。然后回头默默把这个清单存进收藏夹。

推荐资讯

13261661949