Oracle 19c|使用 DBUA 升级数据库到 19c 的完整核对清单
作者 | DatabaseHobbyist
来源 | 数据库江湖(ID: DatabaseHobbyist)转载请联系授权
最近有项目需要对数据库进行 19c 升级,MOS 上查看到如下文章,内容很不错,故翻译分享出来,供大家参考。Oracle 19c - 使用 DBUA 升级数据库到 Oracle Database 19c (19.x) 的完整核对清单 (Doc ID 2577574.1)
文档内容
用途
适用范围
详细信息
Database Upgrade Assistant (DBUA)
关于只读 Oracle Homes
升级路径/19c 兼容性矩阵
需要及推荐在源库上完成的
推荐/需要在目标库上完成的
在 Windows 上需要对 Oracle Home 做的准备及前提条件
升级前步骤
检查源库中失效的组件及对象
收集优化器统计信息来减少数据库停机时间
确认升级前物化视图刷新都已经完成
检查 TIMESTAMP WITH TIMEZONE 类型的数据类型
确保没有数据文件需要介质恢复(media recovery)或处于备份的状态
升级前清空回收站
使用了 Oracle Label Security 和 Oracle Database Vault 的数据库
备份 Oracle EM DB Control 配置及数据 (对于低于 12.1 版本的数据库)
单实例数据库:
Oracle Real Application Clusters (Oracle RAC) 数据库:
使用 emremove.sql 删除 DB control (对于低于 12.1 版本的数据库)
不再支持 OLAP Catalog (OLAP AMD) (对于低于 12.1 版本的数据)
复制 Transparent Encryption Oracle 钱包
检查用户使用了大小写敏感的密码的版本
关于密码大小写敏感
使用了 Oracle Warehouse Builder (OWB) 组件的数据库的升级前要求
启动 DBUA
DBUA ( 步骤1 )
DBUA ( 步骤 2 )
DBUA ( 步骤3)
DBUA ( 步骤4 )
DBUA ( 步骤5)
DBUA ( 步骤7)
DBUA ( 步骤8)
DBUA ( 步骤9)
升级后步骤
Known Issues
适用于:
Oracle Database Cloud Schema Service - 版本 N/A 和更高版本
Oracle Database Exadata Cloud Machine - 版本 N/A 和更高版本
Oracle Cloud Infrastructure - Database Service - 版本 N/A 和更高版本
Oracle Database Backup Service - 版本 N/A 和更高版本
Oracle Database Cloud Exadata Service - 版本 N/A 和更高版本
本文档所含信息适用于所有平台
用途
本文旨在提供使用 DBUA 把数据库升级到 19c 的指南。
适用范围
DBA, Support
详细信息
Database Upgrade Assistant (DBUA)
Database Upgrade Assistant (DBUA) 交互式的引导我们完成升级数据库的步骤。DBUA适用于CDB和非CDB数据库系统。是推荐的升级数据库主要版本或者补丁集的方式。
您可以使用DBUA升级多租户架构容器数据库(CDB),可插拔数据库(PDB)和非CDB数据库。
过程是相同的,但您必须做出的选择和DBUA的行为是不同的,具体取决于升级类型。
它会自动执行为了升级数据库所需的所有步骤。
在 Oracle RAC 环境下, DBUA 升级集群中的所有节点上的数据库以及配置文件。
DBUA 需要在新安装的数据库 19c 软件的 ORACLE_HOME 下运行。在 Windows 环境下,需要使用 administrator 用户或者软件的属主用户来执行 DBUA。
在真正开始升级前,DBUA 会执行 Pre-Upgrade Tool 来做先决条件检查。
但是,为了减少停机时间,Oracle建议您在升级计划中运行 Pre-Upgrade Tool,以便分析数据库的先决条件检查,并在计划的升级日期之前采取主动措施。
当解决了所有预升级推荐/错误/警告后开始升级,DBUA 会显示升级源库各个组件的进展。
就像之前版本的DBUA,19c 的 DBUA 限制了对隐藏参数的设置。因为除了为了升级而由 Oracle 技术支持推荐的隐含参数外,Oracle 不推荐使用其它的隐藏参数。
要检查数据库中已设置的隐藏参数,可以使用 AS SYSDBA 权限执行下面的命令:
SELECT name,description from SYS.V$PARAMETER WHERE name LIKE '\_%' ESCAPE '\';
DBUA 会在数据库真正升级之前检查一些项目;这些检查也可以手工去做来减少升级的停机时间。
DBUA 提供下面的一些选项:
- 升级 timezone。19c 默认的 timezone 版本是 32。
- 在升级前收集数据字典的统计信息。
- 把用户表空间设置为只读。
- 在升级前做 RMAN 备份。
- 为 Database Flashback 创建一个 Restore Point
- 可以恢复数据库备份来回退升级。
- 可以在升级前或升级后执行自定义的脚本。
- 显示 alert log 和 DBUA log的路径。
- 可以把已存在的 listener 升级到最新的 19c Home 下或者在 19c 目标库 HOME 下创建一个新的 listener。
关于只读 Oracle Homes
从Oracle Database 18c开始,您可以以只读模式配置 Oracle Homes。
在只读 Oracle Homes 中,所有配置数据和日志文件都位于只读 Oracle Homes 之外。此功能允许您将只读 Oracle Homes 简单的部署到多个服务器上。
升级路径/19c 兼容性矩阵
可以直接升级到 19c 的版本源数据库 | 目标数据库 |
11.2.0.4 及更高版本 | 19.x |
12.1.0.2 | 19.x |
12.2.0.1 | 19.x |
18.1 | 19.x |
以下的数据库版本需要间接升级:
源数据库 | 升级路径 | 目标数据库 | ||
11.2.0.1/11.2.0.2/11.2.0.3 | --> | 11.2.0.4 | --> | 19.x |
11.1.0.6/11.1.0.7 | --> | 11.2.0.4 | --> | 19.x |
10.2.0.2, 10.2.0.3, 10.2.0.4, 10.2.0.5 | --> | 11.2.0.4/12.1.0.2 | --> | 19.x |
10.1.0.5 | --> | 11.2.0.4/12.1.0.2 | --> | 19.x |
9.2.0.8 或之前版本 | --> | 11.2.0.4 | --> | 19.x |
12.1.0.1 | --> | 12.1.0.2/12.2.0.1 | --> | 19.x |
需要及推荐在源库上完成的
- 在升级前确保所有 oracle 提供的组件和对象都是有效的。
- 在开始升级或者降级前,Oracle 推荐您先升级源数据库和目标数据库到最新的 Oracle bundle patch 或者 patch set update (BP 或者 PSU)。
- 确保在 sys 和 system schema 下没有重复存在的对象。对于 1) 和 2),参照:
Doc Id 556610.1 - Script to Collect DB Upgrade/Migrate Diagnostic Information (dbupgdiag.sql)
- dbupgdiag.sql 是可以在升级前或者升级后对数据库的状态进行诊断并提供用户友好的输出结果的一些 SQL 语句;它会创建一个名为 db_upg_diag_<sid>_<timestamp>.log 的输出文件。
- 如果安装了APEX,则建议先升级源数据库中的APEX组件,然后再升级DB
- 源库的 timezone 版本应当小于或等于目标数据库 timezone 版本。
- 确保升级前拥有一个可用的源数据库的备份。
- 禁用所有自定义的 before/after DDL 类型的触发器,完成升级后再启用它们。
- 在升级前检查数据库的升级/降级兼容性矩阵。
- 推荐在升级前启用 archive log 模式,这样 DBUA 在升级过程中可以创建/更新 archive log。
- 如果使用 DBUA 升级的是 RAC 数据库,那么必须保持 CLUSTER_DATABASE 设置成 true。
- 在升级前确保运行了 pre-upgrade 工具。检查并且实施 preupgrade log 给出的建议。
- 在升级前原数据库上的物化视图应该被停掉
Doc ID 1406586.1 - How to Handle Materialized Views When You Upgrade or Clone a Database
- 禁止掉客户的计划作业以及 cron job。
- 升级数据库到19.1的 COMPATIBLE 参数最小的值是"11.2.0",确认数据库 COMPATIBLE 参数已被设置为 11.2.0 或者更高
推荐/需要在目标库上完成的
- 先检查您的硬件平台/操作系统是否兼容 19c 版本。
- 下载安装 19c 软件到一个新的 ORACLE_HOME 并确认没有编译错误。
- 如果有最新的 RU 的话,下载并安装它们。
- 确保设置 ORACLE_HOME, PATH, LD_LIBRARY_PATH, LIBPATH 等指向到 19c 目标库 HOME。
- 查看文章 "Patches to apply before upgrading Oracle GI and DB to 19c (Doc ID 2539751.1)" 中给出的补丁建议
在 Windows 上需要对 Oracle Home 做的准备及前提条件
在 Microsoft Windows 平台上升级数据库之前,必须满足以下这些前提条件。基于安全的考虑,为不同的 Oracle Home 配置的不同的 Microsoft Windows 用户,不允许共享同一个 Oracle Base。
- 数据库升级对于源数据库和目标数据库的 ORACLE_HOME 使用相同的 Windows 用户是支持的。
- 数据库升级对于源数据库使用 Windows 自带账户是支持的。Oracle Database 12c 之前的版本 (release 11.2 或者之前的版本) 在 Windows 上只支持使用 Windows 自带的用户来作为 Oracle Home 用户。
- Oracle home 用户可能无法访问在它自己的 Oracle Base 和 Oracle home 之外的文件。如果出现这样的情况,那么在升级时选择不同的 Oracle Base,可能会出现 Oracle 数据库服务无法访问旧 Oracle Base 的情况。使用 DBUA 升级,需要确保 Oracle Home 用户可以访问它自己的 Oracle Base 和 Oracle Home 之外的文件。
升级前步骤
$Earlier_release_Oracle_home/jdk/bin/java -jar $New_release_Oracle_home/rdbms/admin/preupgrade.jar [FILE|TERMINAL] [TEXT|XML] [DIR output_dir]
FILE|TERMINAL - 使用 FILE 选项把脚本输出定向到一个文件。使用 TERMINAL 选项把脚本输出打印到屏幕上。如果没有指定,那么默认是 FILE 选项。
DIR - Log 会创建在指定的目录里。如果不指定那么会创建 log 到默认的路径:如果定义了 ORACLE_BASE 环境变量,那么日志创建在
$ORACLE_BASE/cfgtoollogs/<dbname>/preupgrade/
否则会创建在
$ORACLE_HOME/cfgtoollogs/db_name/preupgrade/。
比如
源Oracle Home : /refresh/home/oracle/ora_base/product/18.1
目标Oracle Home : /refresh/home/oracle/ora_base/product/19.0.0.0
$ export ORACLE_SID=orcl
$ export ORACLE_BASE=/refresh/home/oracle/ora_base
$ export ORACLE_HOME=/refresh/home/oracle/ora_base/product/18.1
$ $ORACLE_HOME/jdk/bin/java -jar /refresh/home/oracle/ora_base/product/19.0.0.0/rdbms/admin/preupgrade.jar TERMINAL TEXT FILE
==================
PREUPGRADE SUMMARY
==================
/refresh/home/oracle/ora_base/product/18.1/cfgtoollogs/pdl/preupgrade/preupgrade.log
/refresh/home/oracle/ora_base/product/18.1/cfgtoollogs/pdl/preupgrade/preupgrade_fixups.sql
/refresh/home/oracle/ora_base/product/18.1/cfgtoollogs/pdl/preupgrade/postupgrade_fixups.sql
执行 fixup 脚本:
升级前:
登录数据库并执行 preupgrade fixups
@/refresh/home/oracle/ora_base/product/18.1/cfgtoollogs/pdl/preupgrade/preupgrade_fixups.sql
升级后:
执行 postupgrade fixups
@/refresh/home/oracle/ora_base/product/18.1/cfgtoollogs/pdl/preupgrade/postupgrade_fixups.sql
Preupgrade complete: 2019-05-22T05:14:05
检查 preupgrade.log 并且实施推荐
最新的19c对应的 preupgrade 工具可以参照如下文档获取 :
How to Download and Run Oracle's Database Pre-Upgrade Utility (Doc ID 884522.1)
检查源库中失效的组件及对象
set pagesize500
set linesize 100
select substr(comp_name,1,40) comp_name, status, substr(version,1,10) version from dba_registry order by comp_name;
select substr(object_name,1,40) object_name,substr(owner,1,15) owner,object_type from dba_objects where status='INVALID' order by owner,object_type;
select owner,object_type,count(*) from dba_objects where status='INVALID' group by owner,object_type order by owner,object_type ;
或者
SET SERVEROUTPUT ON;
EXECUTE DBMS_PREUP.INVALID_OBJECTS;
如果发现了任何无效组件或者对象,则执行下面的操作以使数据库中的无效对象变为有效:
执行 utlrp.sql 以编译数据库中的无效对象。您可以多次执行utlrp.sql脚本以编译无效对象。
$ sqlplus "/ as sysdba"
SQL> @$ORACLE_HOME/rdbms/admin/utlrp.sql
收集优化器统计信息来减少数据库停机时间
Oracle 强烈推荐升级前收集统计信息。Oracle 推荐使用 DBMS_STATS.GATHER_DICTIONARY_STATS 来收集统计信息,比如,执行下面的 SQL:
SQL> EXEC DBMS_STATS.GATHER_DICTIONARY_STATS;
确认升级前物化视图刷新都已经完成
用下面的语句检查当前是否有物化视图正在刷新。在升级数据库前,我们需要确认所有的物化视图都已经完成了刷新。
SQL> SELECT o.name FROM sys.obj$ o, sys.user$ u, sys.sum$ s WHERE o.type# = 42 AND bitand(s.mflags, 8) =8;
How to Handle Materialized Views When You Upgrade or Clone a Database (Doc ID 1406586.1)
检查 TIMESTAMP WITH TIMEZONE 类型的数据类型
Oracle Database 19c 自带的 time zone 文件版本是 32
情况1 源数据库的 Timezone 版本等于或者小于 32。
如果源数据库的 Timezone 版本小于 32,那么不需要打 DST 补丁到源数据库 Home 或者目标 19c home。
情况2 源数据库的 Timezone 版本高于 32。
如果源数据库的 Timezone 版本高于 32,升级前必须打补丁把目标 19c $ORACLE_HOME 升级到源库的 Timezone 版本一致。
确保没有数据文件需要介质恢复(media recovery)或处于备份的状态
执行下面的语句检查备份的状态:
SQL> SELECT * FROM v$backup WHERE status != 'NOT ACTIVE';
确保没有文件需要介质恢复:
SQL> SELECT * FROM v$recover_file;
升级前清空回收站
SQL> PURGE DBA_RECYCLEBIN;
DBUA 也可以清空回收站。
使用了 Oracle Label Security 和 Oracle Database Vault 的数据库
Audit Table 升级前准备
如果要升级使用了 Oracle Label Security (OLS) 和 Oracle Database Vault 的低于 12.1 版本的数据库,必须运行 OLS preprocess 脚本, olspreupgrade.sql,来处理 aud$ 表的内容。它会把 AUD$ 从 SYSTEM 用户迁移到 SYS 用户下。
如果要升级的数据库低于12.1,并且使用了 Oracle Label Security (OLS) 和 Oracle Database Vault,那么在升级前运行 olspreupgrade.sql 是必须的。一旦数据库升级到了12.1,那么就不需要执行OLS preprocessing 步骤了。
升级前在 11.2 数据库上执行 OLS preprocess 脚本:
如果在要升级的早期版本中安装了Oracle Label Security,则将DV_PATCH_ADMIN角色授予SYS。
1. 从 19c 的 $ORACLE_HOME/rdbms/admin 下拷贝如下脚本到 11.2 源库的 $ORACLE_HOME/rdbms/admin 下。
ORACLE_HOME/rdbms/admin/olspreupgrade.sql
ORACLE_HOME/rdbms/admin/emremove.sql
ORACLE_HOME/rdbms/olap/catnoamd.sql
2. 使用 DVOWNER 用户通过 SQL*Plus 连接至源数据库。
3. 执行下面的 SQL:
SQL> GRANT DV_PATCH_ADMIN to SYS;
4. 执行下面的 SQL:
CONNECT SYS AS SYSDBA
5. 运行 preprocess 脚本
ORACLE_HOME/rdbms/admin/olspreupgrade.sql
ORACLE_HOME/rdbms/admin/emremove.sql
ORACLE_HOME/rdbms/admin/catnoamd.sql
6. 在 OLS 预处理脚本成功运行后,使用 DVOWNER 用户通过 sqlplus 登录数据库。
7. 执行下面的 SQL:
SQL> REVOKE DV_PATCH_ADMIN from SYS;
对于使用了Database Vault的12.1数据库,赋予SYS以DV_PATCH_ADMIN的角色
如果启用了Database Vault,那么也需要做对应的检查,检查步骤需要执行下面的SQL脚本 - olspreupgrade.sql, emremove.sql, catnoamd.sql
以 DVOWNER 登陆要升级的数据库
执行下面的SQL:
SQL> GRANT DV_PATCH_ADMIN to SYS;
备份 Oracle EM DB Control 配置及数据 (对于低于 12.1 版本的数据库)
如果在升级数据库到 19c 版本后,有需要再降级,那么我们必须在升级前使用 emdwgrd 工具备份 Database Control 的文件,这样在降级后可以恢复这些文件。
备份数据的步骤:
1. 安装 19c 的数据库软件。
2. 设置 ORACLE_HOME 到旧的数据库版本。
3. 设置 ORACLE_SID 为要升级的数据库 SID。
4. 设置 PATH, LD_LIBRARY_PATH 和 SHLIB_PATH 到旧的 ORACLE_HOME 相关的目录下。
5. 切换目录到目标数据库软件。
6. 执行 emdwgrd
单实例数据库:
emdwgrd[sh|bat] -save -sid old_SID -path save_directory
Oracle Real Application Clusters (Oracle RAC) 数据库:
需要跨节点远程拷贝。定义一个环境变量 EM_REMCP 来指向远程拷贝的命令,比如: export EM_REMCP /usr/bin/scp
emdwgrd -save -cluster -sid old_SID -path save_directory
7. 提供要升级的数据库的 SYS 密码。
使用 emremove.sql 删除 DB control (对于低于 12.1 版本的数据库)
警告:
下面的步骤不能在升级 Enterprise Manager Cloud Control Repository 时操作,否则 EM Cloud Control Repository 数据库会不可用。
从 Oracle Database 12c 版本1 (12.1) 开始,作为升级的一部分,DB Control 会被删除。
停掉DB Console:
emctl stop dbconsole
执行 emremove.sql 脚本。脚本存放在目标 19.x 的 OH/rdbms/admin/。
SQL>SET ECHO ON
SQL>SET SERVEROUTPUT ON
SQL>@emremove.sql >> 脚本放在新的 19c ORACLE_HOME/rdbms/admin
在 emremove.sql 执行完毕后,必须从系统中手工删除 ORACLE_HOME/HOSTNAME_SID 和 ORACLE_HOME/oc4j/j2ee/OC4J_DBConsole_HOSTNAME_SID 目录。
不再支持 OLAP Catalog (OLAP AMD) (对于低于 12.1 版本的数据)
从 Oracle Database 12c 开始,OLAP Catalog (OLAP AMD) 不再支持,并且作为升级的一部分会从数据库中删除。为了减少停机时间,也可以在升级前手工删除它。可以执行脚本 $ORACLE_HOME/olap/admin/catnoamd.sql 来删除它。请不要在 UPGRADE 模式下执行这个脚本。
复制 Transparent Encryption Oracle 钱包
如果使用了带 Oracle 钱包的 Transparent Data Encryption (TDE),并且要使用 Database Upgrade Assistant (DBUA) 来升级数据库,那么拷贝 thesqlnet.ora 和 wallet 文件到新的 19c Oracle home。
在升级前需要手工拷贝 sqlnet.ora 和 wallet 文件。
1. 以授权用户身份登录。
2. 手工拷贝 sqlnet.ora,wallet 文件以及 ewallet.p12,到新的 Oracle home
3. 以 mount 模式打开数据库 wallet。
比如
SQL> STARTUP MOUNT;
SQL> ALTER SYSTEM SET ENCRYPTION WALLET OPEN;
检查用户使用了大小写敏感的密码的版本
以管理员账号登陆 SQL*Plus 并执行下面的语句
SELECT USERNAME,PASSWORD_VERSIONS FROM DBA_USERS;
如果存在 10g 版本的密码,建议参照 Oracle 文档来解决 10g 版本问题,否则,升级完成后用户会被锁。
关于密码大小写敏感
确保没有设置废弃的参数 SEC_CASE_SENSITIVE_LOGON 为 FALSE。
使用了 Oracle Warehouse Builder (OWB) 组件的数据库的升级前要求
必须单独安装Oracle Warehouse Builder。从Oracle Database 12c开始,Oracle Warehouse Builder(OWB)未作为Oracle数据库软件的一部分安装。可以从 Oracle Technology Network 下载。早期版本中可能存在的OWB组件未作为Oracle数据库升级过程的一部分进行升级。
启动 DBUA
DBUA ( 步骤1 )
我们需要选择要升级的数据库的 SID,在这个例子里是 test11204
DBUA ( 步骤 2 )
DBUA会执行 preupgrade 脚本(preupgrade.jar) 并且返回警告/错误。
DBUA ( 步骤3)
一旦 pre-upgrade 警告被解决,下一个屏幕会显示各种选项,比如启用并行升级,在升级后的步骤里重新编译失效对象,升级 timezone,升级前收集统计信息,在升级中把用户表空间设置为只读。当然,您也可以指定在升级前后要执行的任何SQL脚本。
DBUA ( 步骤4 )
在选择选项之后,下个屏幕会显示一些 Recovery 选项,比如在哪里创建 Guaranteed Restore Point,或者做一个 RMAN 备份或者已经在 DBUA 外创建了备份,那么"I have my own backup and restore stratege "选项可以被选中。
DBUA ( 步骤5)
在这个屏幕里,可以创建一个新的监听或者升级当前的监听到 19c
DBUA ( 步骤6)
这个屏幕来配置 EM express 或者注册这个数据库到 EM Cloud control。
DBUA ( 步骤7)
这是在真正的升级开始前显示的汇总页面,点击 Finish 来开始真正的升级。
DBUA ( 步骤8)
DBUA 开始升级 test11204 数据库,它会完成升级前步骤,升级以及升级后步骤。
DBUA 会升级数据库的组件比如 Oracle server, XML等。
DBUA ( 步骤9)
最后的屏幕会显示升级的结果。
它会显示日志的路径以及升级的各个步骤花费的时间。
升级后步骤
执行 dbupgdiag.sql 脚本来验证对象以及组件的状态 。如果存在失效对象,那么运行 utlrp.sql 来编译所有的失效对象:
sql> connect / as sysdba
sql> @?/rdbms/admin/utlrp.sql