Skip to content

Oracle 升级步骤

升级的基本概念

升级的定义

  • 数据库升级:将 Oracle 数据库从一个版本升级到另一个版本的过程
  • 版本升级:从较低版本升级到较高版本,如 11g 到 12c
  • 补丁集升级:在同一主版本内应用补丁集,如 12.1.0.1 到 12.1.0.2
  • RU/RUR 应用:应用 Release Update 或 Release Update Revision
  • 升级路径:从源版本到目标版本的升级路径

升级的重要性

  • 功能增强:获取新版本的新功能和增强
  • 性能优化:新版本通常包含性能优化
  • 安全补丁:修复安全漏洞
  • 支持延续:获得 Oracle 的技术支持
  • 合规要求:满足行业合规要求

升级前的准备工作

1. 升级规划

目标版本选择

  • 版本评估:评估目标版本的特性和兼容性
  • 升级路径:确认从当前版本到目标版本的升级路径
  • 补丁策略:确定目标版本的补丁级别
  • 支持状态:确认目标版本的支持状态

升级时间规划

  • 升级窗口:确定合适的升级窗口,最小化业务影响
  • 回滚时间:预留足够的回滚时间
  • 验证时间:预留足够的验证时间
  • 通知时间:提前通知相关方

2. 环境准备

硬件检查

  • 系统要求:验证硬件是否满足目标版本要求
  • 存储空间:确保有足够的存储空间
  • 内存要求:验证内存是否满足要求
  • CPU 要求:验证 CPU 是否满足要求

软件检查

  • 操作系统版本:验证操作系统版本兼容性
  • 补丁要求:应用必要的操作系统补丁
  • 依赖软件:验证依赖软件的兼容性
  • 认证状态:确认环境是否在 Oracle 认证列表中

3. 数据库准备

健康检查

  • 数据库状态:确保数据库处于健康状态
  • 数据文件:检查数据文件完整性
  • 表空间:检查表空间使用情况
  • 无效对象:检查并修复无效对象
  • 数据库链接:检查数据库链接状态

备份策略

  • 完整备份:在升级前执行完整备份
  • 备份验证:验证备份的完整性和可用性
  • 归档日志:确保所有归档日志可用
  • 控制文件:备份控制文件
  • 参数文件:备份参数文件

4. 升级工具准备

OUI/runInstaller

  • 下载安装程序:下载目标版本的安装程序
  • 验证安装程序:验证安装程序的完整性
  • 安装介质:准备安装介质,如 DVD 或下载文件

DBUA (Database Upgrade Assistant)

  • 工具位置:确认 DBUA 工具的位置
  • 工具版本:使用目标版本的 DBUA
  • 参数配置:准备 DBUA 的配置参数

手动升级脚本

  • 准备脚本:准备手动升级所需的脚本
  • 脚本验证:验证脚本的正确性
  • 执行权限:确保脚本有执行权限

5. 测试准备

测试环境

  • 环境搭建:搭建与生产环境相似的测试环境
  • 数据同步:将生产数据同步到测试环境
  • 应用部署:在测试环境部署应用

测试计划

  • 测试场景:制定详细的测试场景
  • 测试用例:准备测试用例
  • 测试工具:准备测试工具
  • 测试人员:安排测试人员

升级的执行过程

1. 预升级步骤

运行预升级脚本

  1. 执行预升级脚本

    bash
    # 运行预升级脚本
    cd $ORACLE_HOME/rdbms/admin
    sqlplus / as sysdba
    @preupgrd.sql
  2. 分析预升级报告

    bash
    # 查看预升级报告
    cat preupgrade.log
  3. 解决预升级问题

    • 按照预升级报告的建议解决问题
    • 修复无效对象
    • 调整参数设置
    • 解决空间问题

清理和优化

  1. 清理临时表空间

    sql
    -- 清理临时表空间
    ALTER TABLESPACE temp ADD TEMPFILE '新文件路径' SIZE 100M;
    ALTER TABLESPACE temp DROP TEMPFILE '旧文件路径';
  2. 收集统计信息

    sql
    -- 收集字典统计信息
    EXEC DBMS_STATS.GATHER_DICTIONARY_STATS;
    
    -- 收集固定对象统计信息
    EXEC DBMS_STATS.GATHER_FIXED_OBJECTS_STATS;
  3. 检查并修复数据字典

    sql
    -- 运行数据字典检查
    @?/rdbms/admin/utlrp.sql

2. 升级执行

使用 DBUA 升级

  1. 启动 DBUA

    bash
    # 启动 DBUA
    dbua
  2. 按照向导执行

    • 选择要升级的数据库
    • 确认升级选项
    • 配置目标版本参数
    • 开始升级过程
  3. 监控升级过程

    • 监控 DBUA 界面的进度
    • 检查升级日志
    • 处理可能出现的错误

手动升级

  1. 安装目标版本软件

    bash
    # 安装目标版本软件
    ./runInstaller
  2. 准备升级

    sql
    -- 关闭数据库
    SHUTDOWN IMMEDIATE;
    
    -- 启动到升级模式
    STARTUP UPGRADE;
  3. 执行升级脚本

    sql
    -- 执行升级脚本
    @?/rdbms/admin/catupgrd.sql
  4. 完成升级

    sql
    -- 关闭数据库
    SHUTDOWN IMMEDIATE;
    
    -- 启动数据库
    STARTUP;
    
    -- 运行编译脚本
    @?/rdbms/admin/utlrp.sql

3. 后升级步骤

编译无效对象

sql
-- 编译无效对象
@?/rdbms/admin/utlrp.sql

-- 检查无效对象
SELECT object_name, object_type FROM dba_objects WHERE status = 'INVALID';

升级时间 zone 文件

sql
-- 升级时间 zone 文件
@?/rdbms/admin/utltz_upg_sql.sq
@?/rdbms/admin/utltz_upg_sql.plb

更新网络配置

  • 监听器配置:更新 listener.ora 文件
  • 服务名配置:更新 tnsnames.ora 文件
  • 网络参数:调整网络相关参数

调整初始化参数

sql
-- 检查并调整初始化参数
SELECT name, value, isdefault FROM v$parameter;

-- 根据目标版本要求调整参数
ALTER SYSTEM SET parameter_name = value SCOPE=SPFILE;

升级后的验证

1. 数据库验证

基本状态检查

sql
-- 检查数据库版本
SELECT * FROM v$version;

-- 检查数据库状态
SELECT status FROM v$instance;

-- 检查数据文件状态
SELECT name, status FROM v$datafile;

-- 检查表空间状态
SELECT tablespace_name, status FROM dba_tablespaces;

组件验证

sql
-- 检查组件状态
SELECT comp_id, comp_name, status FROM dba_registry;

-- 检查数据库字典
SELECT count(*) FROM dba_objects;

2. 应用验证

连接测试

  • 应用连接:测试应用能否正常连接
  • 用户连接:测试用户能否正常连接
  • 工具连接:测试管理工具能否正常连接

功能测试

  • 核心功能:测试应用核心功能
  • 业务流程:测试完整业务流程
  • 报表功能:测试报表生成
  • 批处理:测试批处理作业

性能测试

  • 响应时间:测试应用响应时间
  • 吞吐量:测试系统吞吐量
  • 资源使用:监控系统资源使用
  • 对比测试:与升级前性能对比

3. 系统验证

存储检查

  • 表空间使用:检查表空间使用情况
  • 数据文件大小:检查数据文件大小
  • 备份状态:检查备份是否正常

网络检查

  • 监听器状态:检查监听器状态
  • 网络连接:检查网络连接状态
  • 延迟测试:测试网络延迟

安全检查

  • 权限状态:检查用户权限
  • 审计状态:检查审计配置
  • 密码策略:检查密码策略

升级的回滚策略

1. 回滚准备

回滚计划

  • 触发条件:定义回滚的触发条件
  • 回滚步骤:详细的回滚步骤
  • 回滚时间:预计回滚所需时间
  • 回滚团队:回滚执行团队

回滚资源

  • 备份可用性:确保备份可用
  • 回滚脚本:准备回滚脚本
  • 回滚工具:准备回滚工具
  • 回滚验证:准备回滚验证计划

2. 回滚执行

数据库回滚

  1. 停止应用:停止所有应用连接

  2. 关闭数据库

    sql
    SHUTDOWN IMMEDIATE;
  3. 恢复数据库

    • 使用升级前的备份恢复数据库
    • 应用归档日志到升级前的时间点
  4. 启动数据库

    sql
    STARTUP;

配置回滚

  • 网络配置:恢复网络配置文件
  • 参数文件:恢复参数文件
  • 环境变量:恢复环境变量设置
  • 脚本文件:恢复脚本文件

3. 回滚验证

  • 数据库状态:验证数据库状态
  • 应用功能:验证应用功能
  • 用户访问:验证用户访问
  • 系统性能:验证系统性能

升级的最佳实践

准备阶段最佳实践

  • 充分测试:在测试环境中充分测试升级过程
  • 详细规划:制定详细的升级计划
  • 备份验证:验证备份的完整性和可用性
  • 文档完善:准备详细的升级文档
  • 团队培训:对升级团队进行培训

执行阶段最佳实践

  • 严格按照计划执行:遵循预定的升级计划
  • 详细记录:记录升级过程中的每一步
  • 实时监控:实时监控升级过程
  • 及时沟通:及时与相关方沟通升级进度
  • 准备应急方案:准备升级失败的应急方案

验证阶段最佳实践

  • 全面验证:进行全面的验证
  • 逐级验证:从数据库到应用逐级验证
  • 用户参与:邀请用户参与验证
  • 持续监控:升级后持续监控系统状态
  • 性能基准:建立性能基准,用于对比

后续阶段最佳实践

  • 升级总结:总结升级经验教训
  • 文档更新:更新数据库文档
  • 知识共享:分享升级经验
  • 性能优化:根据升级后的情况进行性能优化
  • 定期检查:定期检查升级后的系统状态

常见升级场景

场景 1:从 11g 升级到 12c

  1. 升级路径:11.2.0.x 到 12.1.0.x 或 12.2.0.x
  2. 注意事项
    • 检查 12c 特定的参数
    • 注意多租户架构的影响
    • 应用必要的补丁
  3. 升级方法:推荐使用 DBUA

场景 2:从 12c 升级到 19c

  1. 升级路径:12.1.0.x 或 12.2.0.x 到 19c
  2. 注意事项
    • 检查 19c 特定的功能和参数
    • 注意废弃的特性
    • 应用最新的 RU
  3. 升级方法:使用 DBUA 或手动升级

场景 3:应用 RU/RUR

  1. 准备工作
    • 阅读补丁说明
    • 确认补丁兼容性
    • 执行预补丁脚本
  2. 应用过程
    • 停止数据库
    • 应用补丁
    • 启动数据库
    • 运行后补丁脚本
  3. 验证步骤
    • 检查补丁状态
    • 验证数据库功能
    • 监控性能

版本差异

11g vs 12c

  • 多租户架构:12c 引入了多租户架构
  • PDB/CDB:12c 支持可插拔数据库
  • 新特性:12c 引入了许多新特性,如 JSON 支持、In-Memory 选项
  • 参数变化:许多参数默认值和行为发生变化
  • 升级工具:12c 的 DBUA 增强了功能

12c vs 19c

  • 功能增强:19c 增强了许多 12c 的特性
  • 性能优化:19c 包含更多性能优化
  • 安全增强:19c 增强了安全特性
  • 云集成:19c 优化了云环境下的功能
  • 简化管理:19c 简化了数据库管理

常见问题(FAQ)

Q1: 选择 DBUA 还是手动升级?

A1: 升级方法的选择:

  • DBUA
    • 优点:自动化程度高,操作简单,减少人为错误
    • 适用场景:大多数升级场景,特别是对升级过程不熟悉的情况
  • 手动升级
    • 优点:更灵活,可控制每一步,适合复杂环境
    • 适用场景:复杂的数据库环境,需要特殊配置的情况
  • 建议:对于大多数情况,推荐使用 DBUA,特别是第一次升级时

Q2: 升级需要多长时间?

A2: 升级时间的影响因素:

  • 数据库大小:数据库越大,升级时间越长
  • 硬件性能:硬件性能越好,升级时间越短
  • 升级路径:不同的升级路径所需时间不同
  • 并行度:手动升级时可以调整并行度
  • 估计方法:在测试环境中进行计时,作为参考

Q3: 升级过程中遇到错误怎么办?

A3: 处理升级错误的方法:

  1. 查看错误日志:详细分析错误日志
  2. 搜索知识库:在 Oracle 知识库中搜索错误信息
  3. 应用补丁:如果是已知问题,应用相应的补丁
  4. 回滚操作:如果错误严重,执行回滚
  5. 寻求支持:必要时寻求 Oracle 技术支持

Q4: 升级后性能下降怎么办?

A4: 处理升级后性能下降的方法:

  1. 收集统计信息:重新收集数据库统计信息
  2. 检查参数:检查并调整初始化参数
  3. 分析执行计划:检查 SQL 执行计划的变化
  4. 优化 SQL:优化性能下降的 SQL 语句
  5. 监控资源:监控系统资源使用情况
  6. 对比测试:与升级前的性能进行对比

Q5: 如何最小化升级对业务的影响?

A5: 最小化升级影响的方法:

  1. 选择合适的升级窗口:选择业务低峰期
  2. 充分的准备:在测试环境中充分测试
  3. 快速回滚:准备快速回滚方案
  4. 分批升级:如果可能,分批升级
  5. 应用维护:提前通知应用维护窗口
  6. 监控预警:升级后加强监控

Q6: 升级后需要做哪些后续工作?

A6: 升级后的后续工作:

  1. 备份数据库:升级后立即执行完整备份
  2. 更新文档:更新数据库文档,包括版本信息
  3. 培训用户:培训用户使用新特性
  4. 性能调优:根据升级后的情况进行性能调优
  5. 监控加强:加强对升级后系统的监控
  6. 经验总结:总结升级经验,为未来升级做准备