文档内容
适用于: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 来做先决条件检查。 当解决了所有预升级推荐/错误/警告后开始升级,DBUA 会显示升级源库各个组件的进展。 就像之前版本的DBUA,19c 的 DBUA 限制了对隐藏参数的设置。因为除了为了升级而由 Oracle 技术支持推荐的隐含参数外,Oracle 不推荐使用其它的隐藏参数。 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 的版本
以下的数据库版本需要间接升级:
需要及推荐在源库上完成的
- 在升级前确保所有 oracle 提供的组件和对象都是有效的。 - 在开始升级或者降级前,Oracle 推荐您先升级源数据库和目标数据库到最新的 Oracle bundle patch 或者 patch set update (BP 或者 PSU)。 - 确保在 sys 和 system schema 下没有重复存在的对象。对于 1) 和 2),参照: - 如果安装了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]
比如, 源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 $ $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 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_HOME/rdbms/admin/olspreupgrade.sql
ORACLE_HOME/rdbms/admin/emremove.sql ORACLE_HOME/rdbms/olap/catnoamd.sql
SQL> GRANT DV_PATCH_ADMIN to SYS;
CONNECT SYS AS SYSDBA
ORACLE_HOME/rdbms/admin/olspreupgrade.sql
ORACLE_HOME/rdbms/admin/emremove.sql ORACLE_HOME/rdbms/admin/catnoamd.sql
SQL> REVOKE DV_PATCH_ADMIN from SYS;
对于使用了Database Vault的12.1数据库,赋予SYS以DV_PATCH_ADMIN的角色 SQL> GRANT DV_PATCH_ADMIN to SYS;
备份 Oracle EM DB Control 配置及数据 (对于低于 12.1 版本的数据库)如果在升级数据库到 19c 版本后,有需要再降级,那么我们必须在升级前使用 emdwgrd 工具备份 Database Control 的文件,这样在降级后可以恢复这些文件。 备份数据的步骤: 1. 安装 19c 的数据库软件。
单实例数据库:emdwgrd[sh|bat] -save -sid old_SID -path save_directory
Oracle Real Application Clusters (Oracle RAC) 数据库:
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 在 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 文件。 比如
SQL> STARTUP MOUNT; SQL> ALTER SYSTEM SET ENCRYPTION WALLET OPEN;
检查用户使用了大小写敏感的密码的版本以管理员账号登陆 SQL*Plus 并执行下面的语句 如果存在 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数据库升级过程的一部分进行升级。
启动 DBUADBUA ( 步骤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 |