Skip to content

SQLServer 升级步骤

SQL Server 升级是 DBA 日常维护中风险较高的操作之一,需要严格按照预定步骤执行,以确保升级的成功和系统的稳定性。本文将详细介绍 SQL Server 升级的各个步骤、注意事项和最佳实践,兼顾 SQL Server 2012-2022 版本差异,聚焦实际生产场景。

升级前准备

在开始升级之前,必须完成充分的准备工作,这是升级成功的关键。

环境准备

  • 确认升级路径

    • SQL Server 支持从当前版本直接升级到目标版本,或通过中间版本升级
    • 版本升级路径参考:
      当前版本可直接升级到目标版本
      20122014, 2016, 2017, 2019, 2022
      20142016, 2017, 2019, 2022
      20162017, 2019, 2022
      20172019, 2022
      20192022
    • 生产建议:对于跨多个主版本的升级(如 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 记录所有数据库的配置
  • 制定升级计划

    • 详细的升级计划,包括升级步骤、时间安排、人员分工
    • 生产场景:明确升级窗口、业务影响范围、沟通机制
  • 制定回滚计划

    • 详细的回滚计划,用于升级失败时恢复系统
    • 明确回滚触发条件、步骤和责任人

升级实施

根据选择的升级方式(如就地升级、并行升级、滚动升级等),执行相应的升级步骤。

预升级检查

  1. 运行 SQL Server 数据迁移助手 (DMA)

    • 注意:SQL Server 升级顾问已在 SQL Server 2016 中弃用,推荐使用 DMA
    • 功能:检查兼容性问题、性能建议、新功能适用性
    • 生产建议:在测试环境和生产环境均运行 DMA 检查
  2. 运行数据库一致性检查

    sql
    -- 对所有数据库运行一致性检查
    EXEC sp_MSforeachdb 'DBCC CHECKDB("?") WITH NO_INFOMSGS, ALL_ERRORMSGS;'
    • 注意:对于大型数据库,此操作可能耗时较长,建议在维护窗口执行
    • 生产场景:记录检查结果,作为升级前的基准
  3. 检查数据库兼容性级别

    sql
    -- 查看所有数据库的兼容性级别
    SELECT name AS '数据库名称', compatibility_level AS '兼容级别' 
    FROM sys.databases;
    • 兼容级别对应关系:
      SQL Server 版本兼容级别
      2012110
      2014120
      2016130
      2017140
      2019150
      2022160
  4. 检查 SQL Server 代理作业

    sql
    -- 查看 SQL Server 代理作业状态
    SELECT name AS '作业名称', enabled AS '是否启用', last_run_outcome AS '上次运行结果' 
    FROM msdb.dbo.sysjobs;
    • 记录关键作业的状态和运行时间

停止相关服务和应用

  1. 停止 SQL Server 代理服务

    powershell
    Stop-Service -Name SQLSERVERAGENT -Force
  2. 停止依赖于 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';
  3. 停止其他相关服务

    • 如 Analysis Services、Integration Services、Reporting Services 等
    • 生产场景:对于集群环境,需遵循集群服务停止流程

执行升级

  1. 运行 SQL Server 安装程序

    • 插入 SQL Server 安装媒体或挂载 ISO 文件
    • 运行 Setup.exe
    • 选择 "安装" -> "升级 SQL Server 实例或添加功能"
  2. 产品更新

    • 选择检查并安装产品更新
    • 生产建议:安装最新的累积更新 (CU),确保修复已知问题
  3. 安装规则检查

    • 解决所有失败的规则,特别是:
      • 硬件要求检查
      • 操作系统兼容性检查
      • 服务账户权限检查
  4. 选择实例和功能

    • 选择要升级的 SQL Server 实例
    • 确保选择了所有需要的功能
  5. 服务器配置

    • 配置服务账户和启动类型
    • 生产最佳实践:使用域账户或受管服务账户
  6. 数据库引擎配置

    • 配置身份验证模式
    • 添加 SQL Server 管理员
    • 配置数据目录和 TempDB(生产建议:TempDB 数据文件数量与 CPU 核心数匹配)
  7. 准备安装

    • 查看安装配置规则
    • 解决所有失败的规则
    • 点击 "安装" 开始升级
  8. 监视升级进度

    • 监视安装程序的进度
    • 记录任何错误或警告
    • 生产场景:安排专人实时监控,建立问题上报机制

升级后初步验证

  1. 检查 SQL Server 服务状态

    powershell
    Get-Service -Name MSSQLSERVER, SQLSERVERAGENT
  2. 验证 SQL Server 版本

    sql
    SELECT @@VERSION AS 'SQL Server 版本';
  3. 检查数据库状态

    sql
    -- 查看所有数据库的状态
    SELECT name AS '数据库名称', state_desc AS '状态' 
    FROM sys.databases;
  4. 检查 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):

    sql
    ALTER DATABASE [DatabaseName] SET QUERY_STORE = ON;

更新客户端连接

  • 更新应用程序的连接字符串,确保它们能正确连接到新的 SQL Server 版本
  • 注意:SQL Server 2019+ 默认启用 TLS 1.2,确保客户端支持
  • 测试应用程序连接,验证功能正常

升级后验证

功能验证

  1. 测试数据库连接

    • 使用应用程序连接数据库,验证连接正常
    • 测试关键业务功能,如登录、查询、交易等
  2. 测试 SQL Server 代理作业

    • 手动运行关键作业,验证它们能正常执行
    • 检查作业历史记录,确保没有错误
    • 生产场景:设置作业监控,及时发现问题
  3. 测试备份和恢复功能

    sql
    -- 测试备份功能
    BACKUP DATABASE [DatabaseName] TO DISK = 'D:\Backup\TestBackup.bak' WITH INIT;
    
    -- 测试恢复功能(在测试环境执行)
    RESTORE DATABASE [TestDatabase] FROM DISK = 'D:\Backup\TestBackup.bak' WITH NORECOVERY;
  4. 测试复制和高可用性功能

    • 验证复制配置和状态
    • 验证 Always On 可用性组或其他高可用性配置
    • 生产场景:执行故障转移测试,确保高可用性功能正常

性能验证

  1. 监控系统性能

    • 使用 Performance Monitor 监控关键性能计数器:
      • CPU 使用率
      • 内存使用率
      • 磁盘 I/O 等待时间
      • 缓冲池命中率
      • 等待统计信息
  2. 比较性能基线

    • 将升级后的性能与升级前的性能基线进行比较
    • 识别性能变化和潜在问题
    • 生产工具:使用 SQL Server Performance Dashboard 或第三方监控工具
  3. 优化查询性能

    • 使用 Query Store 分析查询性能变化
    • 优化性能下降的查询,如添加适当的索引
    • 利用新的性能功能进行优化

安全性验证

  1. 检查登录账号和权限

    sql
    -- 查看登录账号状态
    SELECT name AS '登录名', is_disabled AS '是否禁用', is_locked AS '是否锁定' 
    FROM sys.sql_logins;
  2. 检查数据库角色和权限

    • 验证数据库用户和角色的权限
    • 确保权限没有被意外更改
    • 生产建议:使用最小权限原则,定期审查权限
  3. 检查安全配置

    • 验证 SQL Server 安全配置,如身份验证模式、加密设置等
    • 确保符合安全最佳实践,如启用 TDE、SSL 加密等

回滚操作

如果升级过程中出现严重问题,需要执行回滚操作,恢复到升级前的状态。

停止升级过程

  • 如果升级过程仍在进行,立即停止安装程序
  • 不要强制终止升级过程,以免造成进一步的损坏

恢复系统

  1. 恢复 SQL Server 实例

    • 使用系统备份恢复 SQL Server 实例
    • 或重新安装 SQL Server 原始版本
  2. 恢复数据库

    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;
  3. 恢复配置信息

    • 恢复 SQL Server 配置、作业、维护计划等
    • 恢复链接服务器、登录账号等

验证回滚结果

  • 验证系统是否恢复到升级前的状态
  • 测试应用程序连接和功能
  • 检查系统性能和安全性
  • 生产场景:通知业务部门恢复应用程序

升级后维护

定期监控

  • 加强对升级后系统的监控,特别是在升级后的前几周

  • 监控内容:

    • 系统性能
    • 资源使用情况
    • 错误日志
    • 应用程序连接和响应时间
  • 生产工具:使用 SQL Server Management Studio (SSMS)、Azure Data Studio 或第三方监控工具

应用补丁和更新

  • 及时安装 SQL Server 目标版本的最新补丁和累积更新
  • 定期检查 Microsoft 更新,获取最新的安全补丁和功能更新
  • 生产建议:建立补丁测试和部署流程,确保补丁的安全性和兼容性

优化和调整

  • 根据升级后的性能表现,优化和调整系统配置
  • 利用新的性能功能,如 Query Store、Adaptive Query Processing 等
  • 定期进行索引维护和统计信息更新

文档更新

  • 更新 SQL Server 文档,包括版本信息、配置信息、维护计划等
  • 记录升级过程中的经验教训和最佳实践
  • 生产场景:更新运维手册,确保团队成员了解最新的系统状态

不同升级方式的特殊步骤

并行升级

并行升级是指在新的硬件上安装 SQL Server 目标版本,然后将数据迁移到新实例。

  1. 在新硬件上安装 SQL Server 目标版本
  2. 配置新实例,包括网络设置、安全设置、内存配置等
  3. 迁移数据库,使用备份和恢复、复制、导入导出等方法
  4. 迁移配置信息,包括登录账号、作业、维护计划等
  5. 测试新实例,确保所有功能正常
  6. 切换应用程序连接,从旧实例切换到新实例
  7. 监控和优化新实例

滚动升级

滚动升级是指在集群环境中,逐个节点升级 SQL Server 实例,以保持系统的可用性。

  1. 暂停集群节点
  2. 在节点上安装 SQL Server 目标版本
  3. 恢复节点到集群
  4. 等待集群同步和验证
  5. 对所有节点重复上述步骤
  6. 升级集群实例
  7. 验证集群功能和可用性

从 SQL Server 实例到 Azure SQL Database

将 SQL Server 实例迁移到 Azure SQL Database 的特殊步骤包括:

  1. 评估数据库,使用 Data Migration Assistant (DMA) 检查迁移的可行性
  2. 准备 Azure 环境,包括创建资源组、逻辑服务器、数据库等
  3. 迁移数据,使用 Azure Database Migration Service (DMS) 或其他工具
  4. 测试 Azure SQL Database,确保所有功能正常
  5. 切换应用程序连接,从本地实例切换到 Azure SQL Database
  6. 监控和优化 Azure SQL Database

升级注意事项

  1. 选择合适的升级时间

    • 选择业务低峰期进行升级,减少对业务的影响
    • 确保有足够的时间完成升级和验证
    • 生产建议:预留额外的回滚时间
  2. 备份是关键

    • 在升级前进行完整备份,包括系统数据库和用户数据库
    • 确保备份的可用性和可恢复性
    • 生产场景:将备份复制到异地存储,确保灾难恢复能力
  3. 测试是必须的

    • 在测试环境中进行充分的测试,验证升级过程和应用兼容性
    • 测试回滚计划,确保升级失败时能快速恢复
    • 生产建议:进行至少一次完整的模拟升级
  4. 准备充分的资源

    • 确保升级所需的硬件、软件、人员等资源都已准备就绪
    • 提前通知相关人员和业务部门
  5. 监控升级过程

    • 密切监控升级过程,及时处理出现的问题
    • 记录升级过程中的日志和错误信息
    • 生产场景:建立升级微信群或会议,实时沟通进度和问题
  6. 遵循最佳实践

    • 遵循 Microsoft 推荐的升级最佳实践
    • 参考官方文档和社区经验
    • 生产建议:邀请有经验的 DBA 参与升级过程

常见问题 (FAQ)

  1. 升级过程中遇到错误怎么办?

    • 首先查看错误日志,了解错误的详细信息
    • 根据错误信息查找解决方案,如 Microsoft 文档、社区论坛等
    • 如果无法解决,执行回滚计划,恢复到升级前的状态
    • 分析错误原因,调整升级计划后重新尝试
    • 生产案例:升级过程中遇到 "等待数据库关闭超时" 错误,可手动终止所有连接后重试
  2. 升级后数据库性能下降怎么办?

    • 使用 Query Store 分析查询性能变化
    • 检查并更新统计信息
    • 重建索引,特别是大型表的索引
    • 优化性能下降的查询,如添加适当的索引
    • 利用新的性能功能,如 Adaptive Query Processing
    • 生产建议:如果性能下降严重,可暂时降低数据库兼容级别,逐步优化
  3. 升级后应用程序无法连接怎么办?

    • 检查 SQL Server 服务是否正常运行
    • 检查网络连接和防火墙配置
    • 检查应用程序的连接字符串,确保它能正确连接到新的 SQL Server 版本
    • 检查登录账号和权限,确保它们没有被意外更改
    • 检查数据库状态,确保数据库处于在线状态
    • 生产案例:升级后应用无法连接,排查发现是因为启用了 TLS 1.2 而客户端不支持,需更新客户端驱动
  4. 如何处理升级后的兼容性问题?

    • 检查并更新应用程序代码,确保它与新的 SQL Server 版本兼容
    • 调整数据库兼容级别,逐步迁移到更高的兼容级别
    • 使用兼容性视图和函数,确保旧代码能正常运行
    • 参考 Microsoft 文档,了解版本间的兼容性变化
    • 生产建议:建立代码审查机制,确保新代码符合目标版本的最佳实践
  5. 升级后如何利用新功能?

    • 学习 SQL Server 目标版本的新功能和改进
    • 根据业务需求,逐步实施新功能
    • 如 Query Store、Adaptive Query Processing、Intelligent Query Processing 等
    • 参加培训或阅读相关文档,提高对新功能的理解和使用能力
    • 生产案例:使用 Query Store 快速定位和修复升级后性能下降的查询
  6. 跨多个主版本升级时需要注意什么?

    • 对于跨多个主版本的升级(如 2012→2022),建议先升级到中间版本
    • 每个中间版本都需要进行完整的测试和验证
    • 注意版本间的功能差异和兼容性问题
    • 生产建议:制定详细的分阶段升级计划,确保每个阶段都有充分的测试
  7. 如何验证升级后的系统稳定性?

    • 进行压力测试,模拟生产环境的负载
    • 监控系统性能和资源使用情况,持续一段时间
    • 测试关键业务功能,确保它们能正常运行
    • 执行故障转移测试,验证高可用性功能
    • 生产建议:建立稳定性验证标准,达到标准后再宣布升级完成

通过严格按照升级步骤执行,并遵循最佳实践,可以确保 SQL Server 升级的成功和系统的稳定性。在升级过程中,要密切监控升级过程,及时处理出现的问题,并做好回滚准备,以应对可能的升级失败。

升级完成后,要加强系统监控,及时应用补丁和更新,优化系统性能,确保系统的长期稳定运行。