sqlserver 迁移检查清单
本清单旨在帮助DBA在迁移 SQL Server 的时候,不要遗漏一些环节,以免造成数据不一致,保证迁移过程的平稳顺利。
前期准备
- 第1步,评估兼容性,包括新OS是否支持新版本的SQL、新版SQL所弃用的功能及特性等
- 第2步,梳理是否有特殊的配置,比如 发布订阅、镜像、日志传送、bcp或dts同步、Linked Server(涉及驱动)、ssis任务、Analysis或Reporting服务等
- 第3步,新环境的确认,包括OS版本、SQL版本、补丁版本、排序规则等
- 第4步,准备回滚计划及测试方案
- 第5步,务必通知所有涉及和影响的负责人,并发送升级、迁移的步骤
- 第6步,检查执行失败的job,确认是否可以禁用
- 第7步,确认防火墙规则与老实例一致
维护窗口期
- 第1步,[运维] 停掉站点及任务
- 第2步,[老主库] 备份之前禁用agent服务、账号,避免继续连接数据库(排除:sa)
--.批量禁用账号(排除sa)
SELECT name,type_desc,'ALTER LOGIN ['+name+'] DISABLE' FROM sys.sql_logins WHERE name not like '#%' and is_disabled = 0 and name <> 'sa'
- 第3步,[老主库] 杀掉所有用户连接(排除:sa),确保无数据变更
--.杀掉不需要的连接
select 'kill ' + cast(s.spid as nvarchar(100)) as kill_spid, s.spid, s.kpid, s.hostprocess,
s.status as s_status , es.status as es_status, s.blocked, s.open_tran, es.transaction_isolation_level as L,
s.waittype, s.waitresource, s.waittime,
db_name(s.dbid) as dbname, s.loginame, s.hostname, s.program_name,
s.login_time as s_login_time, es.login_time as es_login_time, s.last_batch,
es.last_request_start_time, es.last_request_end_time, s.cmd, es.row_count, qt.text,
es.memory_usage, es.cpu_time, s.cpu, es.reads, es.writes, es.logical_reads, s.physical_io, s.lastwaittype
from sys.sysprocesses as s
cross apply sys.dm_exec_sql_text(sql_handle) as qt
right outer join sys.dm_exec_sessions es on s.spid=es.session_id
where spid>50
--and loginame='user_test'
order by s.login_time desc
- 第4步,[老主库] 对所有数据库执行一次完整备份
USE master;
--exec master..xp_cmdshell 'net use \\10.252.254.105\d$ "BDwizx43yQkz" /user:10.252.254.105\administrator'
SELECT 'BACKUP DATABASE ['+name+'] TO DISK = ''\\10.252.254.105\d$\dba_admin\'+name+'.'+convert(char(8),getdate(),112)+'bak'' WITH COMPRESSION, STATS=5;'
FROM sys.databases WHERE database_id > 4 ORDER BY name
- 第5步,[新主库] 拷贝备份文件到新机器
- 第6步,[新主库] 禁用agent服务
- 第7步,[新主库] 恢复所有的数据库
- 第8步,[新主库] 抽样校验,方法包括:比对行数、核心表抽样比对内容
- 第9步,[新主库] 启用agent服务、账号
--.批量启用账号
SELECT name,type_desc,'ALTER LOGIN ['+name+'] ENABLE' FROM sys.sql_logins WHERE name not like '#%' and is_disabled = 1
- 第10步,[运维] 刷DNS或修改字符串,启用站点及任务
- 第11步,[新主库] 确认有新连接
- 第12步,[新主库] 调整参数,比如:最大服务器内存等
- 第13步,[新主库] 重新配置发布订阅、日志传送、bcp或dts同步任务等(若有)
后期工作
- 第1步,[新主库] 如果窗口期内错过了某些job的执行,则根据情况补偿任务(重新执行或其他)
- 第2步,[老主库] 确认数据库无新的连接,关闭sqlserver服务
- 第3步,[新主库] 持续关注错误日志
注意事项
- 若login及job较多、或不知道linked server密码的场景,则建议采用 系统数据库 + 用户数据库迁移的方案
- 若有数据库配置了 Log Shipping,则建议 完整备份 + 差异备份 的方式补齐数据,切不可做日志备份(会破坏日志传送任务)
- 若从较低版本迁移到 SQL Server 2014 (12.x) 或更高版本,并将数据库兼容性级别升级到最新可用级别时,可能会遇到性能下降的问题,将数据库兼容性级别更改为源版本即可