Oracle 19c - 手动升级到 Non-CDB Oracle Database 19c 的完整核对清单 (Doc ID 2577572.1)

Posted 久违的太阳

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Oracle 19c - 手动升级到 Non-CDB Oracle Database 19c 的完整核对清单 (Doc ID 2577572.1)相关的知识,希望对你有一定的参考价值。

Oracle 19c - 手动升级到 Non-CDB Oracle Database 19c 的完整核对清单 (Doc ID 2577572.1)正在上传…重新上传取消To Bottom


文档内容

用途
适用范围
详细信息
关于新的 Autoupgrade utility
步骤 1: 升级到数据库 19c 的升级路径
能够直接升级到 Oracle 19c 的数据库最小版本
以下的数据库版本需要间接升级
19c版本的变化
步骤2: 推荐/需要在源库上完成的
步骤 3: 推荐/需要在目标库上完成的
步骤 4: 升级前检查
清理数据库
检查所有的物化视图
Schema-Only 的用户以及升级密码状态为 EXPIRED 的用户
复制 Transparent Encryption Oracle 钱包
理解密码大小写敏感
检查 密码大小写不敏感 的账号
对只读表空间升级
为升级新的Oracle Home做准备
在Windows平台为升级新的Oracle Home做准备
使用了 Oracle Label Security 和 Oracle Database Vault 的数据库
使用 emremove.sql 手工删除 DB control
确保升级前所有的文件都没有处于备份模式
清空回收站
性能方面
检查时区设置
关于升级 Oracle OLAP Data Security Policies
Block Change Tracking
PUBLIC Synonym AREA
步骤 5: Preupgrade 步骤
Preupgrade fixup 脚本
Network Utility 包的依赖关系
检查 Time zone 文件版本
备份数据库
备份文件以保留降级和恢复选项
步骤 6: 升级数据库到 19c
关闭数据库
检查升级状态
编译失效对象
步骤7: 升级后步骤
在 Linux 和 Unix 上设置环境变量
更新 oratab 文件
Post-upgrade fixup 脚本
使用 ORAPWD 创建或者迁移您的密码文件
在升级数据库后升级 Recovery Catalog
在升级数据库后升级 Time Zone文件版本
升级那些使用 DBMS_STATS 创建的统计信息表(Statistics Tables)
参考

适用于:

Oracle Database - Enterprise Edition - 版本 19.1.0.0.0 和更高版本
本文档所含信息适用于所有平台

用途

本文档可用作手工将 Oracle 11gR2 (11.2) 或者 Oracle 12c Release 1 (12.1) 或者 Oracle 12c Release 2 (12.2) 版本数据库升级至 Oracle 19c 版本数据库的指南与核对表。

适用范围

数据库管理人员, 技术支持

详细信息

关于新的 Autoupgrade utility

Oracle 强烈建议使用 AutoUpgrade 工具来执行其他方法的数据库升级。
更多有关如何使用本工具的资料请参考 Note 2485457.1 and Oracle documentation

获取最新版本的 AutoUpgrade 工具,请参考 Note 2485457.1

Reference : AutoUprade Blog

 

步骤 1: 升级到数据库 19c 的升级路径

能够直接升级到 Oracle 19c 的数据库最小版本

升级矩阵
源数据库目标数据库
11.2.0.419c
12.1.0.219c
12.2.0.119c
18.119c

以下的数据库版本需要间接升级

间接升级矩阵
源数据库升级路径目标数据库
12.1.0.1   -->12.1.0.2/12.2.0.1-->19c
11.2.0.1/11.2.0.2/11.2.0.3-->11.2.0.4-->19c
11.1.0.6/11.1.0.7-->11.2.0.4-->19c
10.2.0.2, 10.2.0.3, 10.2.0.4, 10.2.0.5-->11.2.0.4/12.1.0.2-->19c
10.1.0.5-->11.2.0.4/12.1.0.2-->19c
9.2.0.8 或更低版本-->11.2.0.4-->19c

对于任何多步骤的升级,因为必须要升级两次,所以需要运行 preupgrade 脚本两次:首先,对于中间升级版本运行脚本一次,之后,对于最终升级到的版本运行脚本一次。比如,如果要升级的数据库是Oracle Database 10g,那么按照下面的步骤

  • 按照 Oracle Database Upgrade Guide 12c Release 1 (12.1) 的步骤升级 10.2.0.5 到 12.1.0.2,包括为 12.1.0.2 运行 pre-upgrade 脚本。
  • 直接升级 Oracle Database 12c release 1 (12.1.0.2) 到 Oracle Database 19c。按照Oracle Database Upgrade Guide的说明以及本文档,包括为 19c 运行 preupgrade 脚本。

如果您打算使用Data Pump export/import来升级,那么这个限制就不存在了。

比如:

  • 如果您要升级的数据库当前是 11.2.0.2 或者 11.1.0.7,那么您必须先要升级到 Oracle Database 11g release 2 (11.2.0.4)。
  • 如果您要升级的数据库当前是 10.2.0.2, 10.2.0.3, 10.2.0.4,10.2.0.5 或者 10.1.0.5,那么您先要升级到版本 11.2. 或者 12.1
  • 如果您要升级的数据库当前是 9.2.0.8, 那么您必须先要升级到一个中间版本:
  • 从 9.2.0.8 升级到 11.2.0.4,之后再从11.2升级到19c。

19c版本的变化

对 DBMS_JOB 的支持

Oracle继续支持DBMS_JOB包。但是,您必须赋予提交 DBMS_JOB jobs 的用户以 CREATE JOB 的权限。

Oracle Scheduler 替代了 DBMS_JOB package。尽管仍然支持 DBMS_JOB 以实现向后兼容,但 Oracle 强烈建议您从 DBMS_JOB 切换到 Oracle Scheduler。

  • 在DBMS_JOB中的每个作业的 19c 升级期间,将使用DBMS_SCHEDULER创建相应的条目
  • 旧的DBMS_JOB接口仍然有效。 但是使用它将总是在 scheduler 中创建相应的条目
  • preupgrade.jar 中的升级前检查会检查是否存在不一致或其它问题。

不再支持 Oracle Multimedia

Oracle Database 19c 中不再支持 Oracle Multimedia 功能,此功能已从 19c 中被移除。

作为图像处理和转换的替代方案,Oracle建议您将多媒体内容存储在 SecureFiles LOB 中,并且使用第三方产品,比如 Piction。 ORDIM 组件仍然可以在 registry 看到,并处于 VALID 状态。Oracle Multimedia 的对象和 packages 也仍然保留在数据库中。但是,这些对象和 packages 已不再起作用;如果尝试使用它们,则会引发异常。 Oracle Locator 不受 Oracle 多媒体支持的影响。

不再支持 Oracle Streams

从 Oracle Database 19c(19.1)开始,不再支持 Oracle Streams 功能。 Oracle GoldenGate 是 Oracle 数据库的复制解决方案。

请注意,Oracle Database Advanced Queuing 并未被弃用,Oracle Database 19c 完全支持 Oracle Database Advanced Queuing。 Oracle Streams 不支持 Oracle Database 12c (12.1) 及以后版本新加入的功能,比如 multitenant architecture, LONG VARCHAR, 以及其它功能。 Oracle Streams复制功能已被GoldenGate取代。

如果使用了 Oracle Streams,则 Preupgrade check “STREAMS_SETUP” 将发出警告。  要删除 Oracle Streams,则请参阅对应版本的 Oracle documentation,Oracle Streams Concepts and Administration Guide 中的 "Removing an Oracle Streams Configuration" 部分。

步骤2: 推荐/需要在源库上完成的

  • 对源库做备份,冷备份或热备份都可以。
  • 禁用所有自定义的 before/after DDL 类型的触发器,完成升级后再启用它们。
  • 在 11g 数据库上定义的 Data security roles 不能自动转换成 ORAS。 所以在升级前,需要删除所有在 11g 数据库上定义的 data security roles。升级后可以使用 Analytic Workspace Manager 19c 重新定义 data security roles。
  • 如果从 11g 升级到 19c 之前未删除 data security roles,那么所有的 data security policies 以及 data security role 都会在 19c 上失效。
  • 检查目标数据库的 time zone 文件版本是否低于源库的 time zone 文件版本,如果是的话,需要升级目标数据库的 time zone 文件版本。 数据库 DST 补丁可以参考  Note 412160.1
  • 如果源库上已经安装了 APEX 组件,那么 升级数据库前需要先在源库上升级 APEX 组件。参考 Note 1088970.1
  • 源库中没有失效的对象/组件
  • 升级前执行 Preupgrade 脚本并检查 preupgrade 日志。
  • 执行dbupgdiag.sql (可以从Note 556610.1 下载这个脚本) 确认是否有 SYS/SYSTEM 用户下的失效对象或者失效组件。 如果存在的话, 那么需要在升级前解决这些问题。 可以多次执行 utlrp.sql 来解决问题。如果在这样做之后仍然存在失效对象,那么开一个 SR 来解决这个问题。

步骤 3: 推荐/需要在目标库上完成的

  • 需要先检查您的硬件平台/操作系统是否兼容 19c.  点击  here 来确定兼容性。
  • 安装数据库软件 19c, 并确保没有安装方面的问题。
  • 如果有的话,下载并应用最新的 RU 
  • 从源库的 ORACLE_HOME/dbs 下拷贝 spfile 或者 pfile 到目标库
    • 从参数文件中删除所有废弃的参数
    • 注意升级 19c 的 COMPATIBLE 参数的最小值为“11.2.0”, 确保您的 COMPATIBLE 参数设置为11.2.0或更高
  • 查看文章 "Patches to apply before upgrading Oracle GI and DB to 19c (Doc ID 2539751.1)"  中给出的补丁建议
  • 在目标库上应用 Patch 29213893 来避免已知问题。参考 Database Upgrade to 12.2, 18c, 19c fails with ORA-01422, ORA-06512 for SYS.DBMS_STATS (Doc ID 2525596.1)

步骤 4: 升级前检查

推荐在开始升级DB前先仔细完整的参考文档 Preparing to upgrade Oracle Database 

清理数据库

清空回收站
检查 SYS 及 SYSTEM 用户的失效对象
检查 SYS 及 SYSTEM 用户下的重复对象
检查失效的、必需的、废弃的组件

注意: preupgrade.jar 也会提醒这些问题。

检查所有的物化视图

检查所有的物化视图的状态,刷新所有没有刷新的物化视图。
检查物化视图日志的大小,如果物化视图日志的行数非零,那么刷新物化视图。
检查 direct loader 日志以及 PMOP 日志(分区维护操作日志),如果 direct loader log 或者 PMOP 日志非空,那么刷新日志显示的物化视图。升级数据库前,必须确保所有的物化视图都已经刷新完毕。

执行下面的 SQL 查询:

SQL> SELECT o.name FROM sys.obj$ o, sys.user$ u, sys.sum$ s WHERE o.type# = 42 AND bitand(s.mflags, 8) =8; 

注意:preupgrade.jar 也会提醒这些问题,请您注意检查 preupgrade 日志。

Schema-Only 的用户以及升级密码状态为 EXPIRED 的用户

在开始升级之前,请确定是否要对密码处于EXPIRED状态且其帐户处于LOCKED状态的默认Oracle数据库帐户使用密码身份验证。

在升级到 Oracle Database 19c 之后,默认的 Oracle 账号(没有设置密码并且处于 EXPIRED 和 LOCKED 状态)会被置为  NO AUTHENTICATION 状态。

由于此新功能,这些默认账号会变为 schema-only 帐户,并无法使用密码验证。此功能的好处是管理员不再需要定期修改这些Oracle默认账号的密码。

此功能还可以降低未授权者使用默认密码侵入这些帐户的安全风险。



如果要在升级期间阻止将这些Oracle帐户设置为仅 schema-only 帐户,则必须在开始升级之前为该帐户设置有效的强密码,或者在升级后为这些帐户设置有效的强密码, 或者在升级前解锁帐户。

升级后,管理员还可以为仅 schema-only 启用密码身份验证。 但是,为了更好的安全性,Oracle建议您将这些帐户保留为 schema-only 账号。

复制 Transparent Encryption Oracle 钱包

如果使用了带 Oracle 钱包的 Transparent Data Encryption (TDE),那么拷贝 thesqlnet.ora 和 wallet 文件到新的Oracle home。在升级前需要手工拷贝 sqlnet.ora 和 wallet 文件。

  1. 以授权用户身份登录。
  2. 手工拷贝 sqlnet.ora,wallet 文件以及 ewallet.p12,到新的 Oracle home。

打开数据库 wallet。

例如:

      SQL> STARTUP MOUNT;
      SQL> ALTER SYSTEM SET ENCRYPTION WALLET OPEN 

理解密码大小写敏感

从 Oracle Database 12c release 2 (12.2) 开始,默认的基于密码验证的协议排除了大小写不敏感的 10g 版本的密码。默认的SQLNET.ORA文件中参数SQLNET.ALLOWED_LOGON_VERSION_SERVER被设置成了 12 (排他模式)。

为了安全起见,Oracle建议使用大小写敏感的密码验证。这是默认的设置。但是在升级数据库的时候可以短暂的关闭大小写敏感的密码验证。在升级后,可以再决定是否启用大小写敏感的密码验证。

在升级前,Oracle建议您检查是否新的密码验证会影响您的应用。可以做下面的检查:

  • 检查是否有用户使用了 10g 大小写不敏感的密码验证方式。
  • 检查是否使用了尚未安装 CPUOct2012 补丁的11.2.0.3或者更早版本的客户端,或者应用了这个补丁但尚未启用大小写敏感的密码版本。
  • 确认您并未设置SEC_CASE_SENSITIVE_LOGON成FALSE。设置SEC_CASE_SENSITIVE_LOGON为FALSE就无法启用大小写敏感的密码版本了(11G和12C的密码版本)

更多信息请参考 19c Oracle database documentation

检查 密码大小写不敏感 的账号

确定要升级的Oracle数据库是否存在使用了不区分大小写密码版本的帐户。

从 Oracle Database 12c release 2 (12.2) 开始,默认的基于密码验证的协议排除了大小写不敏感的 10g 版本的密码。

如果未将 SQLNET.ALLOWED_LOGON_VERSION_SERVER 设置为允许不区分密码大小写版本的协议,并且您不希望将使用不区分大小写的密码版本进行身份验证的用户帐户锁定在数据库之外,那么您必须识别受影响的帐户,并确保他们使用区分大小写的密码版本。

更多信息请参考 19c Oracle database documentation

对只读表空间升级

以 -T 参数使用 Parallel Upgrade Utility 可以在升级时把用户表空间置为只读。 因为数据库可以读取之前版本创建的数据文件 header, 所以在升级时我们不需要做额外的操作。当升级完成后,表空间被置为读写时,文件 header 会自动被更新。如果升级失败,无法把表空间重新 online,那么检查升级日志。日志中包含把表空间重新 online 的语句。可以在数据库中或者每个pdb里手工执行来 online 表空间。

在升级日志文件中找到表空间相关的命令

如果升级失败可以检查升级的日志  (Oracle_base/cfgtoologs/dbua), 并且手工执行日志中的命令来 online 表空间。可以检查如下日志:

    Non-CDB 升级: catupgrd0.log
    PDB 数据库: catupgrdpdbname0.log, 这里 pdbname 是要升级的 pdb 的名字。

在每个日志文件的开始部分,可以找到把表空间置为只读的命令:
 

SQL> ALTER TABLESPACE <Tablespace Name> READ ONLY;
Tablespace altered.

而在每个日志文件的结尾部分,可以找到把表空间置为读写的SQL命令:

SQL> ALTER TABLESPACE <Tablespace Name> READ WRITE;
Tablespace altered.

为升级新的Oracle Home做准备

  • 从要升级的数据库 Home 拷贝配置文件到新的版本的Oracle Home中。
  • 如果您有一个 password 文件,那么把它从旧的 Oracle home 拷贝到新的 Oracle home。推荐重建 password 文件以利用 orapwd 的新功能,如果有的话。
  • 从参数文件中删除所有废弃的参数。在新的版本的数据库里有一些参数已经被废弃。从要启动新版本的数据库的参数文件中删除所有被废弃的参数,否则会在启动时产生错误。同时,修改那些在新版本里格式已经被改变的参数。
  • 如果要升级的是集群数据库,那么需要在升级前修改参数 CLUSTER_DATABASE 为 FALSE。

在Windows平台为升级新的Oracle Home做准备

在 Microsoft Windows 平台升级数据库前需要先确保系统已经满足升级条件。

出于安全考虑,不同的 Windows 账户配置为 Oracle home 不允许共享同一个 Oracle Base。

  • 当源库和目标库的 Oracle home 使用同一个 Windows 账户作为 oracle home 用户,数据库升级是支持的。
  • 数据库升级对于源数据库使用 Windows 自带账户是支持的。Oracle Database 12c 之前的版本 (release 11.2 或者之前的版本) 在 Windows 上只支持使用 Windows 自带的用户来作为 Oracle Home 用户。
  • Oracle home 用户可能没有权限访问自己的 Oracle Base 和 Oracle home 之外的文件。因此,如果您的升级使用不同的 Oracle Base,Oracle 数据库服务可能没有权限访问旧的 Oracle Base 下的文件。 使用DBUA进行数据库升级需要确保Oracle主用户可以访问其自己的Oracle Base及其自己的Oracle主目录之外的文件。
  • 在手工升级或者在需要访问旧的Oracle Base之外的文件(比如,wallets, 配置文件及其它文件)之前,需要确保 Oracle Home 用户可以访问这些文件;或者拷贝这些文件到新的 Oracle Base。

使用了 Oracle Label Security 和 Oracle Database Vault 的数据库

Audit Table升级及归档的要求

如果要升级的源库版本低于12.1并且安装了 Oracle Label Security和Oracle Database Vault,那么必须运行 OLS preprocess olspreupgrade.sql 脚本。

如果要升级使用了 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 步骤了。

olspreupgrade.sql 脚本会在 SYS 用户下创建临时的表PREUPG_AUD$,并把 SYSTEM.AUD$ 的记录移到 SYS.PREUPG_AUD$。安全起见,Oracle推荐您在运行 olspreupgrade.sql 前归档您的审计记录。



升级前在 11.2 数据库上执行 OLS preprocess 脚本:

如果要升级的数据库安装有 Oracle Label Security,那么赋予SYS以DV_PATCH_ADMIN的角色

升级前在 11.2 数据库上执行 OLS preprocess 脚本:

1.    从 19c 的 Oracle Home 下拷贝以下脚本到源库的 Oracle Home(11.2) 下。

        ORACLE_HOME/rdbms/admin/olspreupgrade.sql
        ORACLE_HOME/rdbms/admin/emremove.sql
        ORACLE_HOME/olap/admin/catnoamd.sql


2.    启动 SQL*Plus 并以 DVOWNER 登录到要升级的数据库。

3.    执行下面的SQL:

    SQL> GRANT DV_PATCH_ADMIN to SYS;


4.    使用 SYS as SYSDBA 登陆数据库:

    CONNECT SYS AS SYSDBA


5.    执行 Data Vault preprocess 脚本:

    ORACLE_HOME/rdbms/admin/olspreupgrade.sql
    ORACLE_HOME/rdbms/admin/emremove.sql
    ORACLE_HOME/olap/admin/catnoamd.sql



6.    执行完毕后,以 DVOWNER 登陆数据库

7.    执行下面的SQL:

    SQL> REVOKE DV_PATCH_ADMIN from SYS;

对于Database Vault,赋予SYS以DV_PATCH_ADMIN的角色

如果启用了Database Vault,那么也需要做对应的检查,检查步骤需要执行下面的SQL脚本 - olspreupgrade.sql, emremove.sql, catnoamd.sql

以 DVOWNER 登陆要升级的数据库

执行下面的SQL:

    SQL> GRANT DV_PATCH_ADMIN to SYS;

使用 emremove.sql 手工删除 DB control

关闭 DB control

emctl stop dbconsole

  
使用 sysdba 登陆

SQL>SET ECHO ON
SQL>SET SERVEROUTPUT ON
SQL>@emremove.sql >> Script located in new 12c ORACLE_HOME/rdbms/admin

 从系统中手工删除ORACLE_HOME/HOSTNAME_SID/ 和 ORACLE_HOME/oc4j/j2ee/OC4J_DBConsole_HOSTNAME_SID 目录
如果是 windows 系统则删除 DB Console 的系统服务 OracleDBConsoleSID

确保升级前所有的文件都没有处于备份模式

执行下面的语句:

SQL> SELECT * FROM v$backup WHERE status != 'NOT ACTIVE'; 

清空回收站

要清空回收站,执行下面的语句:

SQL> PURGE DBA_RECYCLEBIN

注意: 升级前务必清空回收站来避免 ORA-00600 错误并且减少升级时间。

性能方面

保存性能相关指标
检查网络性能
收集优化器统计信息

收集统计信息可以减少停机时间,Oracle建议使用  DBMS_STATS.GATHER_DICTIONARY_STATS 来收集这些统计信息,比如:

SQL> EXEC DBMS_STATS.GATHER_DICTIONARY_STATS;

检查时区设置

源库的 time zone 文件版本应该小于或者等于目标库的 time zone 文件版本。如果源库的 time zone 文件版本更高,那么需要升级目标库的 time zone 文件版本来对应源库的 time zone 文件。

关于升级 Oracle OLAP Data Security Policies

在 11g 数据库上定义的 Data security roles 不能自动转换成 ORAS。所以在升级前,需要删除所有在 11g 数据库上定义的 data security roles。升级后可以使用新版本的 Analytic Workspace Manager 重新定义 data security roles。

如果从 11g 升级到 12c 之前未删除 data security roles,那么所有的 data security policies 以及 data security role 都会在新版本上失效。

Block Change Tracking

如果启用了 "Block Change Tracking" 功能,那么需要在升级前禁用它。下面是具体的命令

ALTER DATABASE DISABLE BLOCK CHANGE TRACKING;

在升级前的源库执行上面的命令

在完成升级后再启用这个功能并在恢复增量备份前做一个0级备份。关于备份相关的信息请参照Oracle Backup and Recovery User's Guide。另外,如果使用了手工内存管理,则请 一并参考文档<Doc ID 2651237.1>

PUBLIC Synonym AREA

如果安装了 Oracle Multimedia 或者 Oracle Spatial,在安装前检查 PUBLIC synonym AREA。它应当被定义为 OGC_AREA 的同义词,否则会导致升级后一些DB组件是失效的状态

SQL> select owner, synonym_name, table_owner, table_name from dba_synonyms where synonym_name = 'AREA';

OWNER         SYNONYM_NAME TABLE_OWNER TABLE_NAME
------------ -------------------- --------------- --------------------
PUBLIC         AREA                    MDSYS            OGC_AREA

步骤 5: Preupgrade 步骤

在源库执行 Preupgrade 脚本

$Earlier_release_Oracle_home/jdk/bin/java -jar $New_release_Oracle_home/rdbms/admin/preupgrade.jar FILE TEXT DIR output_dir

FILE - 使用这个参数把输出写入输出文件
TEXT - 使用这个参数指定日志格式为 TEXT 模式(如果不指定的话则为 XML 格式)
DIR - 日志会创建在<output_dir>指定的这个目录中

注意: 您可以从此文档中下载最新的 preupgrade 脚本 - How to Download and Run Oracle's Database Pre-Upgrade Utility (Doc ID 884522.1)

Pre-Upgrade 工具 (preupgrade.jar) 会创建以下的文件:

    日志文件 preupgrade.log.
    preupgrade_fixups_pdbname.sql (使用 PDBs 的情况下,这里 pdbname 就是 PDB 的名字) 或者 preupgrade_fixups.sql 脚本 (Non-CDB databases).
    postupgrade_fixups_pdbname.sql (使用 PDBs 的情况下,这里 pdbname 就是 PDB 的名字) 或者 postupgrade_fixups.sql 脚本 (Non-CDB databases)。升级完成后执行这个脚本。

推荐执行 pre-upgrade fixup 脚本

Preupgrade fixup 脚本

在升级开始前,在SQL*Plus中手工执行 preupgrade fixups (preupgrade_fixups.sql) 脚本来解决 preupgrade tool 发现的问题。

Network Utility 包的依赖关系

执行 preupgrade 脚本后,检查 preupgrade 日志

WARNING: --> Database contains schemas with objects dependent on network packages.
.... Refer to the Database Upgrade Guide for instructions to configure Network ACLs.
.... USER WKSYS has dependent objects.
.... USER SYSMAN has dependent objects.
.... USER FLOWS_010600 has dependent objects.

执行下面的语句

SQL> SELECT * FROM DBA_DEPENDENCIES WHERE referenced_name IN ('UTL_TCP','UTL_SMTP','UTL_MAIL','UTL_HTTP','UTL_INADDR','DBMS_LDAP') AND owner NOT IN ('SYS','PUBLIC','ORDPLUGINS');

在升级测试中,确保使用新的访问控制。在升级后确保这些包是可用的,在升级后,根据源库的使用情况赋予正确的权限。

检查 Time zone 文件版本

检查目标数据库的 time zone 文件版本是否低于源库的 time zone 文件版本,如果是的话,需要升级目标数据库的 time zone 文件版本。  数据库 DST 补丁可以从  Note 412160.1 下载。

备份数据库

建议在运行 Pre-Upgrade Information Tool 之后备份数据库。创建 guaranteed flashback restore point。  测试备份,确保出现问题后有回退方案。

    rman "target / nocatalog"

    RUN
   
        ALLOCATE CHANNEL chan_name TYPE DISK;
        BACKUP DATABASE FORMAT 'some_backup_directory%U' TAG before_upgrade;
        BACKUP CURRENT CONTROLFILE FORMAT 'controlfile location and name';
   

备份文件以保留降级和恢复选项

Oracle Data Guard Broker配置文件和降级

升级到Oracle Database 19c及更高版本后,要保留降级到早期版本的功能,必须备份Data Guard broker 配置文件。

在Oracle Database 19c之前的版本中,Oracle Data Guard broker 的属性在Oracle Data Guard broker 配置文件中维护,并且可以使用DGMGRL 命令进行修改。 但是,从Oracle Database 19c开始,这些数据库设置不再存储在 broker 配置文件中。 作为此更改的结果,尽管您可以继续使用DGMGRL修改这些属性,但您修改的值不再存储在Oracle Data Guard broker 配置文件中。 相反,DGMGRL命令直接修改这些Oracle Data Guard Broker 属性映射到的Oracle数据库初始化参数。

由于对属性设置的管理方式进行了此更改,因此,如果使用Oracle Data Guard broker,则Oracle建议您在开始升级之前将早期版本的Oracle Data Guard broker 配置文件导出到安全的备份位置。 如果在升级之前未备份Oracle Data Guard broker配置文件,则在升级之后,您无法降级到早期版本并保留先前为Oracle Data Guard选择的属性设置。

导出 Broker 配置

使用 EXPORT CONFIGURATION 命令把 broker 配置信息的元数据导出到一个文本文件中。

Oracle 进程必须可以访问存储 broker 配置文件的目录。

连接到 primary 数据库。

DGMGRL> CONNECT sysdg@North_Sales.example.com;
Password: password
Connected to "North_Sales"
Connected as SYSDG.
Export the broker configuration.

以下命令导出 broker  配置并将其存储在 trace 目录中名为myconfig.txt的文件中。

DGMGRL> EXPORT CONFIGURATION TO 'myconfig.txt';
Succeeded.

 注意:这仅适用于19c或者更高版本的数据库

步骤 6: 升级数据库到 19c

关闭数据库

SQL> SHUTDOWN IMMEDIATE

Windows平台的步骤 :

如果操作系统是Windows,那么完成下面的步骤:

a. 停掉要升级的数据库 OracleServiceSID Oracle service,这里的SID是实例名。比如,如果SID是ORCL,那么执行下面的命令:

C:\\> NET STOP OracleServiceORCL

b. 使用ORADIM来删除 Oracle service。请参考平台相关的文档来获取ORADIM命令的格式。比如,如果您的SID是ORCL,那么执行下面的命令

C:\\> ORADIM -DELETE -SID ORCL

c. 使用新ORACLE软件的ORADIM来创建 service。
比如:

C:\\> ORADIM -NEW -SID SID -SYSPWD PASSWORD -MAXUSERS USERS  -STARTMODE AUTO -PFILE ORACLE_HOME\\DATABASE\\INITSID.ORA

对于 Unix/Linux

设置环境变量指向目标 ORACLE_HOME

export ORACLE_HOME=<path to Oracle 19c>
export PATH=$ORACLE_HOME/bin:$PATH
export ORACLE_BASE=<path to Oracle_Base set during installation>

从旧的Oracle home下拷贝 SPFILE.ORA 或者 INIT.ORA到目标Oracle home

使用目标 ORACLE_HOME(设置 ORACLE_HOME 为目标 ORACLE_HOME)启动数据库到 upgrade 模式

CONNECT / AS SYSDBA
SQL> startup upgrade;
SQL> exit

在 Linux/Unix 上

cd $ORACLE_HOME/bin
./dbupgrade 

在 Windows 上

cd %ORACLE_HOME%\\bin
dbupgrade

执行 Post-Upgrade Status 工具, utlusts.sql 并且检查升级的日志。在新的版本下执行 Post-Upgrade Status 工具。

$ sqlplus "/as sysdba"
SQL> STARTUP
SQL> @?ORACLE_HOME/rdbms/admin/utlusts.sql

注意: 之前版本的 utluNNNs.sql 在 19c 上被替换为 utlusts.sql

注意: 如果执行 utlusts.sql 时碰到错误 "ORA-06502: PL/SQL: numeric or value error: character string buffer too small" ,那么执行


$ sqlplus "/as sysdba"
SQL> STARTUP
SQL> @?ORACLE_HOME/rdbms/admin/utlusts.sql TEXT

如果使用了Oracle Clusterware,设置了 CLUSTER_DATABASE=TRUE 那么你必须升级数据库对应的 Oracle Clusterware keys。在19c上运行 srvctl 来做这件事,比如:

ORACLE_HOME/bin/srvctl upgrade database -db name -o ORACLE_HOME

检查升级状态

执行 dbupgdiag.sql 并检查日志。可以从 Note 556610.1 下载这个脚本。

编译失效对象

执行 utlrp.sql (多次) 来使它们生效,直到失效对象的个数不再改变。

$ sqlplus "/ AS SYSDBA"
SQL> @Oracle_home/rdbms/admin/utlrp.sql

步骤7: 升级后步骤

在 Linux 和 Unix 上设置环境变量

确保下面的环境变量指向了新的 ORACLE_HOME 对应的目录:

ORACLE_HOME
PATH

更新 oratab 文件

修改 /etc/oratab 文件对应的条目指向新的 ORACLE_HOME 目录

Post-upgrade fixup 脚本

执行 pre-upgrade 产生的 post-upgrade fixup 脚本

SQL> @postupgrade_fixups.sql

使用 ORAPWD 创建或者迁移您的密码文件

如果REMOTE_LOGIN_PASSWORDFILE初始化参数设置为EXCLUSIVE,则使用ORAPWD创建或迁移密码文件。 Oracle Database 12c及更高版本为ORAPWD提供了一个新选项,用于从现有数据库迁移密码文件。

对于Oracle Database 12c第2版(12.2)及更高版本,如果REMOTE_LOGIN_PASSWORDFILE设置为SHARED,则会收到升级前检查验证警告。 您可以选择以下选项之一来解决此问题:

    通过设置REMOTE_LOGIN_PASSWORDFILE = NONE完全禁用基于密码文件的身份验证

    通过设置REMOTE_LOGIN_PASSWORD = EXCLUSIVE限制基于密码文件的身份验证

在升级数据库后升级 Recovery Catalog

如果使用的recovery catalog版本低于rman客户端的版本,我们必须升级它。可以通过命令 UPGRADE CATALOG 来升级 Recovery catalog。

关于具体的步骤信息,请参照Oracle文档中的 Upgrading the Recovery Catalog。

在升级数据库后升级 Time Zone文件版本

如果 Pre-Upgrade Information Tool 要求我们在升级数据库后升级 time zone 文件,那么使用 DBMS_DST PL/SQL package 来升级 RDBMS DST(timezone)版本

以下脚本随Oracle Database 18c及以上版本一起提供

    $ORACLE_HOME/rdbms/admin/utltz_countstats.sql
    脚本使用统计信息提供在数据库中TIMESTAMP WITH TIME ZONE数据的数量。 无需重启。
    
    $ORACLE_HOME/rdbms/admin/utltz_countstar.sql
    脚本使用COUNT(*)查询每个具有TSTZ列的表来计算数据库中的TIMESTAMP WITH TIME ZONE数据的数量。 使用DBMS_DST包或utlz_upg_check.sql和utlz_upg_apply.sql脚本时,此脚本非常有用。
    
    $ORACLE_HOME/rdbms/admin/utltz_upg_check.sql
    时区升级检查脚本
    
    ?/rdbms/admin/utltz_upg_apply.sql
    时区应用脚本。 警告:此脚本将重新启动数据库并调整时区数据。

升级那些使用 DBMS_STATS 创建的统计信息表(Statistics Tables)

如果我们使用 DBMS_STATS.CREATE_STAT_TABLE 手工创建了一些统计信息表(statistics tables),那么执行下面的命令来升级这些表(如果没有创建过统计信息表,那这一步骤可以忽略)。例如:

EXECUTE DBMS_STATS.UPGRADE_STAT_TABLE('SYS', 'dictstattab');

对每个统计信息表都要执行一遍上面的命令。

以上是关于Oracle 19c - 手动升级到 Non-CDB Oracle Database 19c 的完整核对清单 (Doc ID 2577572.1)的主要内容,如果未能解决你的问题,请参考以下文章

从 oracle 12c 升级到 oracle 19c 导致查询性能下降

Oracle 19c RAC 升级RU 从19.3 升级到19.6 操作手册(使用nonrolling 方式)

Oracle数据库18c升级到19c

Oracle 11g RAC 原地升级到 19c

ORACLE 单机 11GR2升级到19C NON-CDB(DBUA方式)

Oracle update to 19c using DBUA