外观
SQLServer 升级步骤
SQL Server 升级是 DBA 日常维护中风险较高的操作之一,需要严格按照预定步骤执行,以确保升级的成功和系统的稳定性。本文将详细介绍 SQL Server 升级的各个步骤、注意事项和最佳实践,兼顾 SQL Server 2012-2022 版本差异,聚焦实际生产场景。
升级前准备
在开始升级之前,必须完成充分的准备工作,这是升级成功的关键。
环境准备
确认升级路径:
- SQL Server 支持从当前版本直接升级到目标版本,或通过中间版本升级
- 版本升级路径参考:
当前版本 可直接升级到目标版本 2012 2014, 2016, 2017, 2019, 2022 2014 2016, 2017, 2019, 2022 2016 2017, 2019, 2022 2017 2019, 2022 2019 2022 - 生产建议:对于跨多个主版本的升级(如 2012→2022),建议先升级到中间版本(如 2016)进行验证
检查硬件和软件要求:
- 目标服务器需满足 SQL Server 目标版本的硬件要求
- 注意:SQL Server 2019 及以上版本对 CPU 有更高要求(至少 1.4 GHz,建议 2.0 GHz 以上)
- 操作系统兼容性:
- SQL Server 2012:最高支持 Windows Server 2016
- SQL Server 2014:最高支持 Windows Server 2019
- SQL Server 2016/2017/2019/2022:支持 Windows Server 2016/2019/2022
准备测试环境:
- 生产场景:创建与生产环境一致的测试环境,包括硬件配置、数据库结构、数据量和应用程序
- 测试内容:升级过程、应用兼容性、性能影响、回滚计划
备份策略
完整备份:
- 对所有数据库进行完整备份,包括系统数据库(master, msdb, model)和用户数据库
- 生产建议:使用压缩备份以减少备份时间和存储空间,SQL Server 2016 及以上版本默认启用压缩
- 命令示例:sql
-- SQL Server 2012-2014 BACKUP DATABASE [DatabaseName] TO DISK = 'D:\Backup\DatabaseName_Full.bak' WITH INIT, COMPRESSION; -- SQL Server 2016+(默认压缩) BACKUP DATABASE [DatabaseName] TO DISK = 'D:\Backup\DatabaseName_Full.bak' WITH INIT;
事务日志备份:
- 在升级前执行事务日志备份,确保数据的完整性
- 命令示例:sql
BACKUP LOG [DatabaseName] TO DISK = 'D:\Backup\DatabaseName_Log.trn' WITH INIT;
备份配置信息:
- 使用
sp_configure导出当前配置 - 备份 SQL Server 代理作业、维护计划、链接服务器等
- 生产工具:使用 PowerShell 脚本自动化备份所有配置
- 使用
备份操作系统和注册表:
- 使用系统备份工具(如 Windows Server Backup)备份操作系统和注册表
- 生产场景:对于关键业务系统,考虑使用第三方备份工具进行完整系统备份
应用兼容性测试
测试应用程序:
- 在测试环境中测试应用程序与目标 SQL Server 版本的兼容性
- 重点测试:连接字符串、数据访问组件、ORM 框架兼容性
检查自定义代码:
- 检查和测试自定义存储过程、函数、触发器、视图等
- 注意版本差异:
- SQL Server 2016+:支持 JSON 数据类型和函数
- SQL Server 2017+:支持图形数据处理和 Python/R 扩展
- SQL Server 2019+:支持大数据群集和智能查询处理
验证第三方应用:
- 联系第三方供应商,确认应用程序与目标 SQL Server 版本的兼容性
- 检查第三方驱动程序的版本支持
文档准备
记录当前配置:
- 记录当前 SQL Server 实例的配置信息,包括内存设置、最大并行度、TempDB 配置等
- 使用
sp_msforeachdb记录所有数据库的配置
制定升级计划:
- 详细的升级计划,包括升级步骤、时间安排、人员分工
- 生产场景:明确升级窗口、业务影响范围、沟通机制
制定回滚计划:
- 详细的回滚计划,用于升级失败时恢复系统
- 明确回滚触发条件、步骤和责任人
升级实施
根据选择的升级方式(如就地升级、并行升级、滚动升级等),执行相应的升级步骤。
预升级检查
运行 SQL Server 数据迁移助手 (DMA):
- 注意:SQL Server 升级顾问已在 SQL Server 2016 中弃用,推荐使用 DMA
- 功能:检查兼容性问题、性能建议、新功能适用性
- 生产建议:在测试环境和生产环境均运行 DMA 检查
运行数据库一致性检查:
sql-- 对所有数据库运行一致性检查 EXEC sp_MSforeachdb 'DBCC CHECKDB("?") WITH NO_INFOMSGS, ALL_ERRORMSGS;'- 注意:对于大型数据库,此操作可能耗时较长,建议在维护窗口执行
- 生产场景:记录检查结果,作为升级前的基准
检查数据库兼容性级别:
sql-- 查看所有数据库的兼容性级别 SELECT name AS '数据库名称', compatibility_level AS '兼容级别' FROM sys.databases;- 兼容级别对应关系:
SQL Server 版本 兼容级别 2012 110 2014 120 2016 130 2017 140 2019 150 2022 160
- 兼容级别对应关系:
检查 SQL Server 代理作业:
sql-- 查看 SQL Server 代理作业状态 SELECT name AS '作业名称', enabled AS '是否启用', last_run_outcome AS '上次运行结果' FROM msdb.dbo.sysjobs;- 记录关键作业的状态和运行时间
停止相关服务和应用
停止 SQL Server 代理服务:
powershellStop-Service -Name SQLSERVERAGENT -Force停止依赖于 SQL Server 的应用程序:
- 生产流程:按照预定的停机流程,通知业务部门停止相关应用
- 验证:使用
sp_whoisactive检查是否有活动连接和事务 - 命令示例:sql
-- 使用 sp_whoisactive 检查活动连接(需安装) EXEC sp_whoisactive; -- 使用系统视图检查活动连接 SELECT session_id, login_name, status, command FROM sys.dm_exec_sessions WHERE status = 'running';
停止其他相关服务:
- 如 Analysis Services、Integration Services、Reporting Services 等
- 生产场景:对于集群环境,需遵循集群服务停止流程
执行升级
运行 SQL Server 安装程序:
- 插入 SQL Server 安装媒体或挂载 ISO 文件
- 运行 Setup.exe
- 选择 "安装" -> "升级 SQL Server 实例或添加功能"
产品更新:
- 选择检查并安装产品更新
- 生产建议:安装最新的累积更新 (CU),确保修复已知问题
安装规则检查:
- 解决所有失败的规则,特别是:
- 硬件要求检查
- 操作系统兼容性检查
- 服务账户权限检查
- 解决所有失败的规则,特别是:
选择实例和功能:
- 选择要升级的 SQL Server 实例
- 确保选择了所有需要的功能
服务器配置:
- 配置服务账户和启动类型
- 生产最佳实践:使用域账户或受管服务账户
数据库引擎配置:
- 配置身份验证模式
- 添加 SQL Server 管理员
- 配置数据目录和 TempDB(生产建议:TempDB 数据文件数量与 CPU 核心数匹配)
准备安装:
- 查看安装配置规则
- 解决所有失败的规则
- 点击 "安装" 开始升级
监视升级进度:
- 监视安装程序的进度
- 记录任何错误或警告
- 生产场景:安排专人实时监控,建立问题上报机制
升级后初步验证
检查 SQL Server 服务状态:
powershellGet-Service -Name MSSQLSERVER, SQLSERVERAGENT验证 SQL Server 版本:
sqlSELECT @@VERSION AS 'SQL Server 版本';检查数据库状态:
sql-- 查看所有数据库的状态 SELECT name AS '数据库名称', state_desc AS '状态' FROM sys.databases;检查 SQL Server 代理作业:
sql-- 查看 SQL Server 代理作业状态 SELECT name AS '作业名称', enabled AS '是否启用' FROM msdb.dbo.sysjobs;
升级后配置
更新数据库兼容级别
- 根据业务需求,逐步更新数据库兼容级别
- 生产建议:先在测试环境验证,再分批在生产环境更新
- 命令示例:sql
-- 更新到 SQL Server 2019 兼容级别 ALTER DATABASE [DatabaseName] SET COMPATIBILITY_LEVEL = 150; -- 更新到 SQL Server 2022 兼容级别 ALTER DATABASE [DatabaseName] SET COMPATIBILITY_LEVEL = 160;
更新统计信息
- 升级后更新所有数据库的统计信息,确保查询优化器使用最新的统计信息
- 命令示例:sql
-- 更新所有数据库的统计信息 EXEC sp_MSforeachdb 'USE [?]; EXEC sp_updatestats;'
重建索引
- 升级后重建索引,确保索引结构与新版本兼容
- 生产建议:使用
Ola Hallengren的索引维护脚本,支持在线重建 - 命令示例:sql
-- 重建单个表的索引 ALTER INDEX ALL ON [SchemaName].[TableName] REBUILD WITH (ONLINE = ON);
更新 SQL Server 代理作业
- 检查并更新 SQL Server 代理作业,确保它们与新的 SQL Server 版本兼容
- 重点检查:作业步骤类型、命令语法、权限设置
配置新功能
根据业务需求,配置 SQL Server 目标版本的新功能:
- Query Store(SQL Server 2016+):启用查询存储,监控和优化查询性能
- Adaptive Query Processing(SQL Server 2017+):自动优化查询执行
- Intelligent Query Processing(SQL Server 2019+):利用机器学习优化查询
- Azure Arc 集成(SQL Server 2022+):将本地 SQL Server 连接到 Azure
命令示例(启用 Query Store):
sqlALTER DATABASE [DatabaseName] SET QUERY_STORE = ON;
更新客户端连接
- 更新应用程序的连接字符串,确保它们能正确连接到新的 SQL Server 版本
- 注意:SQL Server 2019+ 默认启用 TLS 1.2,确保客户端支持
- 测试应用程序连接,验证功能正常
升级后验证
功能验证
测试数据库连接:
- 使用应用程序连接数据库,验证连接正常
- 测试关键业务功能,如登录、查询、交易等
测试 SQL Server 代理作业:
- 手动运行关键作业,验证它们能正常执行
- 检查作业历史记录,确保没有错误
- 生产场景:设置作业监控,及时发现问题
测试备份和恢复功能:
sql-- 测试备份功能 BACKUP DATABASE [DatabaseName] TO DISK = 'D:\Backup\TestBackup.bak' WITH INIT; -- 测试恢复功能(在测试环境执行) RESTORE DATABASE [TestDatabase] FROM DISK = 'D:\Backup\TestBackup.bak' WITH NORECOVERY;测试复制和高可用性功能:
- 验证复制配置和状态
- 验证 Always On 可用性组或其他高可用性配置
- 生产场景:执行故障转移测试,确保高可用性功能正常
性能验证
监控系统性能:
- 使用 Performance Monitor 监控关键性能计数器:
- CPU 使用率
- 内存使用率
- 磁盘 I/O 等待时间
- 缓冲池命中率
- 等待统计信息
- 使用 Performance Monitor 监控关键性能计数器:
比较性能基线:
- 将升级后的性能与升级前的性能基线进行比较
- 识别性能变化和潜在问题
- 生产工具:使用 SQL Server Performance Dashboard 或第三方监控工具
优化查询性能:
- 使用 Query Store 分析查询性能变化
- 优化性能下降的查询,如添加适当的索引
- 利用新的性能功能进行优化
安全性验证
检查登录账号和权限:
sql-- 查看登录账号状态 SELECT name AS '登录名', is_disabled AS '是否禁用', is_locked AS '是否锁定' FROM sys.sql_logins;检查数据库角色和权限:
- 验证数据库用户和角色的权限
- 确保权限没有被意外更改
- 生产建议:使用最小权限原则,定期审查权限
检查安全配置:
- 验证 SQL Server 安全配置,如身份验证模式、加密设置等
- 确保符合安全最佳实践,如启用 TDE、SSL 加密等
回滚操作
如果升级过程中出现严重问题,需要执行回滚操作,恢复到升级前的状态。
停止升级过程
- 如果升级过程仍在进行,立即停止安装程序
- 不要强制终止升级过程,以免造成进一步的损坏
恢复系统
恢复 SQL Server 实例:
- 使用系统备份恢复 SQL Server 实例
- 或重新安装 SQL Server 原始版本
恢复数据库:
sql-- 从完整备份恢复数据库 RESTORE DATABASE [DatabaseName] FROM DISK = 'D:\Backup\DatabaseName_Full.bak' WITH REPLACE, RECOVERY; -- 如果有差异备份和事务日志备份,依次恢复 RESTORE DATABASE [DatabaseName] FROM DISK = 'D:\Backup\DatabaseName_Diff.bak' WITH NORECOVERY; RESTORE LOG [DatabaseName] FROM DISK = 'D:\Backup\DatabaseName_Log.trn' WITH RECOVERY;恢复配置信息:
- 恢复 SQL Server 配置、作业、维护计划等
- 恢复链接服务器、登录账号等
验证回滚结果
- 验证系统是否恢复到升级前的状态
- 测试应用程序连接和功能
- 检查系统性能和安全性
- 生产场景:通知业务部门恢复应用程序
升级后维护
定期监控
加强对升级后系统的监控,特别是在升级后的前几周
监控内容:
- 系统性能
- 资源使用情况
- 错误日志
- 应用程序连接和响应时间
生产工具:使用 SQL Server Management Studio (SSMS)、Azure Data Studio 或第三方监控工具
应用补丁和更新
- 及时安装 SQL Server 目标版本的最新补丁和累积更新
- 定期检查 Microsoft 更新,获取最新的安全补丁和功能更新
- 生产建议:建立补丁测试和部署流程,确保补丁的安全性和兼容性
优化和调整
- 根据升级后的性能表现,优化和调整系统配置
- 利用新的性能功能,如 Query Store、Adaptive Query Processing 等
- 定期进行索引维护和统计信息更新
文档更新
- 更新 SQL Server 文档,包括版本信息、配置信息、维护计划等
- 记录升级过程中的经验教训和最佳实践
- 生产场景:更新运维手册,确保团队成员了解最新的系统状态
不同升级方式的特殊步骤
并行升级
并行升级是指在新的硬件上安装 SQL Server 目标版本,然后将数据迁移到新实例。
- 在新硬件上安装 SQL Server 目标版本
- 配置新实例,包括网络设置、安全设置、内存配置等
- 迁移数据库,使用备份和恢复、复制、导入导出等方法
- 迁移配置信息,包括登录账号、作业、维护计划等
- 测试新实例,确保所有功能正常
- 切换应用程序连接,从旧实例切换到新实例
- 监控和优化新实例
滚动升级
滚动升级是指在集群环境中,逐个节点升级 SQL Server 实例,以保持系统的可用性。
- 暂停集群节点
- 在节点上安装 SQL Server 目标版本
- 恢复节点到集群
- 等待集群同步和验证
- 对所有节点重复上述步骤
- 升级集群实例
- 验证集群功能和可用性
从 SQL Server 实例到 Azure SQL Database
将 SQL Server 实例迁移到 Azure SQL Database 的特殊步骤包括:
- 评估数据库,使用 Data Migration Assistant (DMA) 检查迁移的可行性
- 准备 Azure 环境,包括创建资源组、逻辑服务器、数据库等
- 迁移数据,使用 Azure Database Migration Service (DMS) 或其他工具
- 测试 Azure SQL Database,确保所有功能正常
- 切换应用程序连接,从本地实例切换到 Azure SQL Database
- 监控和优化 Azure SQL Database
升级注意事项
选择合适的升级时间
- 选择业务低峰期进行升级,减少对业务的影响
- 确保有足够的时间完成升级和验证
- 生产建议:预留额外的回滚时间
备份是关键
- 在升级前进行完整备份,包括系统数据库和用户数据库
- 确保备份的可用性和可恢复性
- 生产场景:将备份复制到异地存储,确保灾难恢复能力
测试是必须的
- 在测试环境中进行充分的测试,验证升级过程和应用兼容性
- 测试回滚计划,确保升级失败时能快速恢复
- 生产建议:进行至少一次完整的模拟升级
准备充分的资源
- 确保升级所需的硬件、软件、人员等资源都已准备就绪
- 提前通知相关人员和业务部门
监控升级过程
- 密切监控升级过程,及时处理出现的问题
- 记录升级过程中的日志和错误信息
- 生产场景:建立升级微信群或会议,实时沟通进度和问题
遵循最佳实践
- 遵循 Microsoft 推荐的升级最佳实践
- 参考官方文档和社区经验
- 生产建议:邀请有经验的 DBA 参与升级过程
常见问题 (FAQ)
升级过程中遇到错误怎么办?
- 首先查看错误日志,了解错误的详细信息
- 根据错误信息查找解决方案,如 Microsoft 文档、社区论坛等
- 如果无法解决,执行回滚计划,恢复到升级前的状态
- 分析错误原因,调整升级计划后重新尝试
- 生产案例:升级过程中遇到 "等待数据库关闭超时" 错误,可手动终止所有连接后重试
升级后数据库性能下降怎么办?
- 使用 Query Store 分析查询性能变化
- 检查并更新统计信息
- 重建索引,特别是大型表的索引
- 优化性能下降的查询,如添加适当的索引
- 利用新的性能功能,如 Adaptive Query Processing
- 生产建议:如果性能下降严重,可暂时降低数据库兼容级别,逐步优化
升级后应用程序无法连接怎么办?
- 检查 SQL Server 服务是否正常运行
- 检查网络连接和防火墙配置
- 检查应用程序的连接字符串,确保它能正确连接到新的 SQL Server 版本
- 检查登录账号和权限,确保它们没有被意外更改
- 检查数据库状态,确保数据库处于在线状态
- 生产案例:升级后应用无法连接,排查发现是因为启用了 TLS 1.2 而客户端不支持,需更新客户端驱动
如何处理升级后的兼容性问题?
- 检查并更新应用程序代码,确保它与新的 SQL Server 版本兼容
- 调整数据库兼容级别,逐步迁移到更高的兼容级别
- 使用兼容性视图和函数,确保旧代码能正常运行
- 参考 Microsoft 文档,了解版本间的兼容性变化
- 生产建议:建立代码审查机制,确保新代码符合目标版本的最佳实践
升级后如何利用新功能?
- 学习 SQL Server 目标版本的新功能和改进
- 根据业务需求,逐步实施新功能
- 如 Query Store、Adaptive Query Processing、Intelligent Query Processing 等
- 参加培训或阅读相关文档,提高对新功能的理解和使用能力
- 生产案例:使用 Query Store 快速定位和修复升级后性能下降的查询
跨多个主版本升级时需要注意什么?
- 对于跨多个主版本的升级(如 2012→2022),建议先升级到中间版本
- 每个中间版本都需要进行完整的测试和验证
- 注意版本间的功能差异和兼容性问题
- 生产建议:制定详细的分阶段升级计划,确保每个阶段都有充分的测试
如何验证升级后的系统稳定性?
- 进行压力测试,模拟生产环境的负载
- 监控系统性能和资源使用情况,持续一段时间
- 测试关键业务功能,确保它们能正常运行
- 执行故障转移测试,验证高可用性功能
- 生产建议:建立稳定性验证标准,达到标准后再宣布升级完成
通过严格按照升级步骤执行,并遵循最佳实践,可以确保 SQL Server 升级的成功和系统的稳定性。在升级过程中,要密切监控升级过程,及时处理出现的问题,并做好回滚准备,以应对可能的升级失败。
升级完成后,要加强系统监控,及时应用补丁和更新,优化系统性能,确保系统的长期稳定运行。
