Oracle 19c - 手动升级 Oracle 12.x, 18c CDB 到 Oracle 19c (19.x)


Oracle 19c - 手动升级 Oracle 12.x, 18c Container database (CDB) 到 Oracle 19c (19.x) 的完整核对清单 (Doc ID 2610728.1)



文档内容

用途
适用范围
详细信息
关于手工升级
升级到数据库 19c CDB 的升级路径
Step 1: 需要及推荐在源 CDB / PDB 库上完成的
Step 2: 推荐/需要在目标库上完成的 
Step 3 升级前步骤
Step 3.1 执行 Preupgrade 脚本
Step 3.2 检查源库中失效的组件及对象
Step 3.3 备份 Oracle 数据库以进行升级。
Step 3.4 验证 SYS 和 SYSTEM 默认表空间。
Step 3.5 收集优化器统计信息以减少数据库升级停机时间
Step 3.6 确认升级前物化视图刷新都已经完成
Step 3.7 检查 TIMESTAMP WITH TIMEZONE 类型的数据类型
Step 3.8 确保没有数据文件需要介质恢复(media recovery)或处于备份的状态
Step 3.9 升级前清空回收站
Step 3.10 升级前解决 Outstanding Distributed Transactions 
Step 3.11 从 12.2 开始,升级前可以不禁用 Oracle Database Vault 功能
Step 3.12 备份文件以保留降级和恢复选项
Step 3.13 Schema-Only 的用户以及升级密码状态为 EXPIRED 的用户
Step 3.14 复制 Transparent Encryption Oracle 钱包
Step  3.15 理解密码大小写敏感
Step 3.16 Network Utility 包的依赖关系
Step 3.17 对只读表空间升级
Step 3.18 禁止掉客户的计划作业以及 cron job。
Step 3.19 不推荐使用的参数和不支持的参数
Step 4 为升级新的Oracle Home做准备
Step 5 升级步骤
Step 6 升级后步骤

适用于:

Oracle Database - Enterprise Edition - 版本 12.1.0.2 到 19.3.0.0.0 [发行版 12.1 到 18]
本文档所含信息适用于所有平台

用途

本文的目的是使用手动升级方法将12c,18c容器数据库(带有一个或多个可插拔数据库的CDB)升级到Oracle 19c版本。

适用范围

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

详细信息

关于手工升级

升级到数据库 19c CDB 的升级路径

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

源数据库 目标数据库
11.2.0.4

19c

12.1.0.2

19c

12.2.0.1 19c
18.1 19c

 

可以手工升级Oracle 12.1.0.2或者更高版本到 19c。

源数据库 目标数据库
12.1.0.2 或者更高版本 19c

 

Step 1: 需要及推荐在源 CDB / PDB 库上完成的

  • 在开始升级之前,请确保源 CDB 和所有 PDB 中 Oracle 提供的所有数据库组件/对象都是有效的。

          Doc Id 556610.1 - Script to Collect DB Upgrade/Migrate Diagnostic Information (dbupgdiag.sql)

          dbupgdiag.sql 是可以在升级前或者升级后对数据库的状态进行诊断并提供用户友好的输出结果的一些 SQL 语句。

          它会创建一个名为 db_upg_diag__.log 的输出文件。

  • 确保在 sys 和 system schema 下没有重复存在的对象。
  • 在开始升级过程之前,Oracle强烈建议应用最新的PSU或Proactive Bundle Patch / RU。参考  Refer Doc Id - 2118136.2  来下载这些补丁。
  • 确保升级前拥有一个可用的源数据库的备份。
  • 禁用所有自定义的 before/after DDL 类型的触发器,完成升级后再启用它们。
  • 在升级前检查数据库的升级/降级兼容性矩阵。
  • 如果要升级的是集群数据库,那么需要在升级前修改参数 CLUSTER_DATABASE 为 FALSE 并在升级后改回 TRUE。
  • 在升级前确保运行了 pre-upgrade 工具(preupgrade.jar)。 检查并且实施 preupgrade log 给出的建议(比如收集统计信息,清空回收站等)。
  • 在升级前原数据库上的物化视图应该被停掉

          Doc ID 1406586.1 - How to Handle Materialized Views When You Upgrade or Clone a Database

  • 禁止掉客户的计划作业以及 cron job。

 

Step 2: 推荐/需要在目标库上完成的 

  • 先检查您的硬件平台/操作系统是否兼容 19c 版本。
  • 确认新安装的 19c 软件没有编译错误。
  • 如果有最新的 RU 的话,下载并安装它们。参考下面的文档下载这些补丁:

          Doc ID 2118136.2 - Assistant: Download Reference for Oracle Database/GI Update, Revision, PSU, SPU(CPU), Bundle Patches, Patchsets and Base Releases

  • 查看下面文章给出的补丁建议:

          Doc ID 2539751.1 - Patches to apply before upgrading Oracle GI and DB to 19c

 

Step 3 升级前步骤

Step 3.1 执行 Preupgrade 脚本

$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 选项。

TEXT - 使用这个选项来指定输出文件是 Text 格式的。使用 XML 选项则输出为 XML 格式。如果不指定,默认是 Text。

DIR - Log 会创建在指定的 目录里。如果不指定那么会创建 log 到默认的路径: 如果定义了 ORACLE_BASE 环境变量,那么日志创建在 $ORACLE_BASE/cfgtoollogs//preupgrade/ 否则会创建在 $ORACLE_HOME/cfgtoollogs/db_name/preupgrade/。

执行下列步骤前请确保所有的 PDB 处于 open 的状态:

源 Oracle Home : /refresh/app/oracle/product/12.2.0.1.0

目标 Oracle Home : /refresh/app/oracle/product/19.0.0.0

 

比如,

$ export ORACLE_HOME=/refresh/app/oracle/product/12.2.0.1.0
$ export PATH=/refresh/app/oracle/product/12.2.0.1.0/bin:$PATH
$ export ORACLE_SID=cdb12201
$ /refresh/app/oracle/product/12.2.0.1.0/jdk/bin/java -jar /refresh/app/oracle/product/19.0.0.0/rdbms/admin/preupgrade.jar FILE TEXT
PREUPGRADE SUMMARY
==================
/refresh/app/oracle/cfgtoollogs/cdb12201/preupgrade/preupgrade.log
/refresh/app/oracle/cfgtoollogs/cdb12201/preupgrade/preupgrade_fixups.sql
/refresh/app/oracle/cfgtoollogs/cdb12201/preupgrade/postupgrade_fixups.sql

在整个CDB中执行 fixup 脚本:

升级前:

1. 使用如下命令执行 preupgrade fixups 
$ORACLE_HOME/perl/bin/perl -I$ORACLE_HOME/perl/lib -I$ORACLE_HOME/rdbms/admin $ORACLE_HOME/rdbms/admin/catcon.pl -l /refresh/app/oracle/cfgtoollogs/cdb12201/preupgrade/ -b preup_cdb12201 /refresh/app/oracle/cfgtoollogs/cdb12201/preupgrade/preupgrade_fixups.sql

2. 检查 /refresh/app/oracle/cfgtoollogs/cdb12201/preupgrade/ 下产生的日志

升级后:

1. 使用如下命令执行 postupgrade fixups
$ORACLE_HOME/perl/bin/perl -I$ORACLE_HOME/perl/lib -I$ORACLE_HOME/rdbms/admin $ORACLE_HOME/rdbms/admin/catcon.pl -l /refresh/app/oracle/cfgtoollogs/cdb12201/preupgrade/ -b postup_cdb12201 /refresh/app/oracle/cfgtoollogs/cdb12201/preupgrade/postupgrade_fixups.sql

2. 检查 /refresh/app/oracle/cfgtoollogs/cdb12201/preupgrade/ 下产生的日志

preupgrade.jar 会为 CDB$ROOT,PDB$SEED 和 pluggable databases创建 fixup 脚本,可以在目录 /u01/app/oracle/cfgtoollogs/cdb12102/preupgrade/*.sql 下找到这些脚本
[oracle@celvpvm14867 preupgrade]$ ls -ltr /refresh/app/oracle/cfgtoollogs/cdb12201/preupgrade/*upgrade*
-rw-rw-r-- 1 oracle oracle 7884 May 31 07:33 /refresh/app/oracle/cfgtoollogs/cdb12201/preupgrade/preupgrade_driver.sql
-rw-rw-r-- 1 oracle oracle 455876 May 31 07:33 /refresh/app/oracle/cfgtoollogs/cdb12201/preupgrade/preupgrade_package.sql
-rw-rw-r-- 1 oracle oracle 100166 May 31 07:33 /refresh/app/oracle/cfgtoollogs/cdb12201/preupgrade/preupgrade_messages.properties
-rw-rw-r-- 1 oracle oracle 9855 May 31 07:33 /refresh/app/oracle/cfgtoollogs/cdb12201/preupgrade/preupgrade_fixups_CDB_ROOT.sql
-rw-rw-r-- 1 oracle oracle 9259 May 31 07:33 /refresh/app/oracle/cfgtoollogs/cdb12201/preupgrade/postupgrade_fixups_CDB_ROOT.sql
-rw-rw-r-- 1 oracle oracle 7780 May 31 07:33 /refresh/app/oracle/cfgtoollogs/cdb12201/preupgrade/preupgrade_CDB_ROOT.log
-rw-rw-r-- 1 oracle oracle 8005 May 31 07:33 /refresh/app/oracle/cfgtoollogs/cdb12201/preupgrade/preupgrade_fixups_PDB_SEED.sql
-rw-rw-r-- 1 oracle oracle 9258 May 31 07:33 /refresh/app/oracle/cfgtoollogs/cdb12201/preupgrade/postupgrade_fixups_PDB_SEED.sql
-rw-rw-r-- 1 oracle oracle 7317 May 31 07:33 /refresh/app/oracle/cfgtoollogs/cdb12201/preupgrade/preupgrade_PDB_SEED.log
-rw-rw-r-- 1 oracle oracle 7093 May 31 07:33 /refresh/app/oracle/cfgtoollogs/cdb12201/preupgrade/preupgrade_fixups_PDB12201.sql
-rw-rw-r-- 1 oracle oracle 9258 May 31 07:33 /refresh/app/oracle/cfgtoollogs/cdb12201/preupgrade/postupgrade_fixups_PDB12201.sql
-rw-rw-r-- 1 oracle oracle 6578 May 31 07:33 /refresh/app/oracle/cfgtoollogs/cdb12201/preupgrade/preupgrade_PDB12201.log
-rw-rw-r-- 1 oracle oracle 7077 May 31 07:34 /refresh/app/oracle/cfgtoollogs/cdb12201/preupgrade/preupgrade_fixups_PDB1.sql
-rw-rw-r-- 1 oracle oracle 9242 May 31 07:34 /refresh/app/oracle/cfgtoollogs/cdb12201/preupgrade/postupgrade_fixups_PDB1.sql
-rw-rw-r-- 1 oracle oracle 6570 May 31 07:34 /refresh/app/oracle/cfgtoollogs/cdb12201/preupgrade/preupgrade_PDB1.log
-rw-rw-r-- 1 oracle oracle 7077 May 31 07:34 /refresh/app/oracle/cfgtoollogs/cdb12201/preupgrade/preupgrade_fixups_PDB2.sql
-rw-rw-r-- 1 oracle oracle 9242 May 31 07:34 /refresh/app/oracle/cfgtoollogs/cdb12201/preupgrade/postupgrade_fixups_PDB2.sql
-rw-rw-r-- 1 oracle oracle 6570 May 31 07:34 /refresh/app/oracle/cfgtoollogs/cdb12201/preupgrade/preupgrade_PDB2.log
-rw-rw-r-- 1 oracle oracle 32106 May 31 07:34 /refresh/app/oracle/cfgtoollogs/cdb12201/preupgrade/preupgrade_fixups.sql
-rw-rw-r-- 1 oracle oracle 33554 May 31 07:34 /refresh/app/oracle/cfgtoollogs/cdb12201/preupgrade/postupgrade_fixups.sql
-rw-rw-r-- 1 oracle oracle 34815 May 31 07:34 /refresh/app/oracle/cfgtoollogs/cdb12201/preupgrade/preupgrade.log

 

 

检查 preupgrade.log 文件并且实施推荐。在所有或者相关 pdb 上执行 preupgrade_fixups_.sql。

如下命令会在所有的 PDB 中执行 preupgrade_fixups.sql。

$ORACLE_HOME/perl/bin/perl $ORACLE_HOME/rdbms/admin/catcon.pl -n 2 -e -b preupgrade_fixups /refresh/app/oracle/cfgtoollogs/cdb12201/preupgradepreupgrade_fixups.sql

要在某个特定的PDB上执行 preupgrade fixups script,执行下面的命令:

 $ORACLE_HOME/perl/bin/perl catcon.pl -c 'CDB$ROOT' -n 2 -e -b /preupgrade_fixups_cdbroot /refresh/app/oracle/cfgtoollogs/cdb12201/preupgrade/preupgrade_fixups_CDB_ROOT.sql

Step 3.2 检查源库中失效的组件及对象

执行以下针对数据库和所有可插拔数据库的查询。

set pagesize 500
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 ;

如果发现了任何无效组件或者对象,则执行下面的操作以使数据库中的无效对象变为有效:

运行 $ORACLE_HOME/rdbms/admin/utlrp.sql 以编译数据库中的无效对象。 您可以多次执行utlrp.sql脚本以编译无效对象。

在源库下,对CDB以及所有的PDB执行 utlrp.sql 

cd $ORACLE_HOME/rdbms/admin/
$ORACLE_HOME/perl/bin/perl catcon.pl -n 1 -e -b utlrp -d '''.''' utlrp.sql

$ sqlplus "/ as sysdba"
SQL> @$ORACLE_HOME/rdbms/admin/utlrp.sql

 

Step 3.3 备份 Oracle 数据库以进行升级。

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

 

Step 3.4 验证 SYS 和 SYSTEM 默认表空间。

确保用户 SYS 和 SYSTEM 的默认表空间为 'SYSTEM'。

您必须在 'SYSTEM' 表空间中有足够的空间,或者将 extents 设置为 unlimited。

SQL> alter session set container=;

SQL> SELECT username, default_tablespace

FROM dba_users

WHERE username in ('SYS','SYSTEM');

如果 DEFAULT_TABLESPACE 是 SYSTEM 表空间以外的其他 tablespace,请使用以下命令将用户 SYS 和 SYSTEM 的默认表空间修改为 SYSTEM:

SQL> alter user SYS default tablespace SYSTEM;

SQL> alter user SYSTEM default tablespace SYSTEM;

 

 

Step 3.5 收集优化器统计信息以减少数据库升级停机时间

Oracle 强烈推荐升级前收集统计信息。Oracle 推荐使用 DBMS_STATS.GATHER_DICTIONARY_STATS 来收集统计信息,比如,执行下面的 SQL:  

$ORACLE_HOME/perl/bin/perl $ORACLE_HOME/rdbms/admin/catcon.pl -l /tmp -b gatherstats -- --x"exec dbms_stats.gather_dictionary_stats"

上面的命令会在所有的PDB上执行收集数据字典统计信息。

要在某个特定的PDB上收集统计信息:

 

对于 PDB pdb_1 :

$ORACLE_HOME/perl/bin/perl $ORACLE_HOME/rdbms/admin/catcon.pl -l /tmp -c 'PDB_1' -b pdb_1_gatherstats -- --x"exec dbms_stats.gather_dictionary_stats"

对于 CDB$ROOT:

$ORACLE_HOME/perl/bin/perl $ORACLE_HOME/rdbms/admin/catcon.pl -l /tmp -c 'CDB$ROOT' -b root_gatherstats -- --x"exec dbms_stats.gather_dictionary_stats"

 

 

Step 3.6 确认升级前物化视图刷新都已经完成

用下面的语句检查当前是否有物化视图正在刷新。在升级数据库前,我们需要确认所有的物化视图都已经完成了刷新。

 $ORACLE_HOME/perl/bin/perl $ORACLE_HOME/rdbms/admin/catcon.pl -l /tmp -b mview_refresh -- --x"SELECT o.name FROM sys.obj$ o, sys.user$ u, sys.sum$ s WHERE o.type# = 42 AND bitand(s.mflags, 8) =8"

上面的命令会在所有的PDB上执行语句或者使用下面的语句只针对某个 PDB 做查询:

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

Doc ID 1406586.1 - How to Handle Materialized Views When You Upgrade or Clone a Database

 

Step 3.7 检查 TIMESTAMP WITH TIMEZONE 类型的数据类型

Oracle Database 19c 自带的 time zone 文件版本是 32

Case 1 源数据库的 Timezone 版本等于或者小于 32。

如果源数据库的 Timezone 版本小于 32,那么不需要打 DST 补丁到源数据库 Home 或者目标 Home。

Case 2 源数据库的 Timezone 版本高于 32。

如果源数据库的 Timezone 版本高于 32,升级前必须打补丁把目标 19c $ORACLE_HOME 升级到源库的 Timezone 版本一致。

Step 3.8 确保没有数据文件需要介质恢复(media recovery)或处于备份的状态

 

执行下面的语句检查备份的状态:

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

确保没有文件需要介质恢复:

SQL> SELECT * FROM v$recover_file;

Step 3.9 升级前清空回收站

下面的命令可以在所有的pdb中执行清空的动作:

$ORACLE_HOME/perl/bin/perl $ORACLE_HOME/rdbms/admin/catcon.pl -l /tmp -b purge_recyclebin -- --x"PURGE DBA_RECYCLEBIN"

或者

SQL> PURGE DBA_RECYCLEBIN;

Step 3.10 升级前解决 Outstanding Distributed Transactions 

要解决 outstanding distributed transactions:

1. 执行下面的语句:

SQL> Select * from dba_2pc_pending;

2. 如果上一步中的查询返回任何行,则执行以下语句:

SQL> select local_tran_id FROM dba_2pc_pending;

SQL> execute dbms_transaction.purge_lost_db_entry('');

SQL> commit;

 

Step 3.11 从 12.2 开始,升级前可以不禁用 Oracle Database Vault 功能

如果目标Oracle数据库版本为12.2或更高版本,则可以在不禁用Oracle Database Vault的情况下进行升级。如果在源Oracle数据库发行版中启用了Oracle Database Vault,则可以在不先禁用Oracle Database Vault的情况下将Oracle数据库升级到Oracle Database 18c及更高版本。升级后,如果源Oracle数据库版本是Oracle Database 12c第1版(12.1)或更高版本,则使用与升级之前相同的设置启用Oracle Database Vault。

例如,如果源数据库是Oracle数据库版本12.1,并且在该版本中禁用了Oracle Database Vault,则在升级后它将保持禁用状态

如果源Oracle Database Database 12.1数据库在升级之前已启用Oracle Database Vault,则升级后将启用Oracle Database Vault。

如果在升级之前手动禁用Oracle Database Vault,则必须在升级后手动启用Oracle Database Vault

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

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选择的属性设置。

 

Step 3.13 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 账号。

Step 3.14 复制 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

Step  3.15 理解密码大小写敏感

从 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的密码版本)

Step 3.16 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');

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

Step 3.17 对只读表空间升级

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

Step 3.18 禁止掉客户的计划作业以及 cron job。

对于Oracle发起的 job,可以使用 DBMS_JOB, DBMS_SCHEDULER 来停掉。

对于 OS 发起的 cron jobs 需要 Unix 管理员来停掉 cron jobs。

参考:

Note 404238.1 : How to Disable an Entry from DBMS_SCHEDULER

Note 1335741.1 : How To Stop A Running Job Using DBMS_JOB

Note 67695.1 : PROCEDURE DBMS_JOB.BROKEN Specification

 

Step 3.19 不推荐使用的参数和不支持的参数

删除不支持的初始化参数并调整已弃用的初始化参数。 在新版本中,某些参数不再被支持,有些参数已经被废弃。 从启动新Oracle数据库实例的任何参数文件中删除所有不支持的参数。 不受支持的参数可能会导致新的Oracle数据库版本出错。

Pre-Upgrade Information Tool 会在“不推荐使用的参数”和“不支持的参数”部分显示任何已弃用的参数和不支持的参数。

 

Step 4 为升级新的Oracle Home做准备

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

Step 5 升级步骤

通过 SQL*Plus 中启动实例

启动 CDB 到 ugprade 模式

 

SQL> startup upgrade pfile=

启动所有 PDB 到 ugprade 模式

SQL> alter pluggable database all open upgrade;

执行下一个步骤前退出 SQL*Plus 

SQL> exit;

 

使用 Parallel Upgrade Utility (catctl.pl, 通过 shell 命令 dbupgrade) 开始升级数据库,这里 -d 指定目录的路径
 

cd $ORACLE_HOME/rdbms/admin

dbupgrade -d $ORACLE_HOME/rdbms/admin

 Seed和没有 PDB 都会生成单独的 catupgrade logs

注意: 除非升级过程中返回错误,否则catuppst.sql脚本将作为升级过程的一部分运行。 检查日志文件中的"BEGIN catuppst.sql",以验证catuppst.sql在升级过程中是否已运行。

查看upg_summary.log以确认升级是否成功,如果有必要,检查其它的logs。

Step 6 升级后步骤

对 CDB 和所有可插拔数据库运行 utlrp.sql 以编译无效对象。

cd $ORACLE_HOME/rdbms/admin/
$ORACLE_HOME/perl/bin/perl catcon.pl -n 1 -e -b utlrp -d '''.''' utlrp.sql

修改 /etc/oratab 中对应的条目来指向 Oracle 19c ORACLE_HOME。

然后执行生成的 postupgrade_fixups.sql 脚本:

$ORACLE_HOME/perl/bin/perl -I$ORACLE_HOME/perl/lib -I$ORACLE_HOME/rdbms/admin $ORACLE_HOME/rdbms/admin/catcon.pl -l /refresh/app/oracle/cfgtoollogs/cdb12201/preupgrade/ -b postup_cdb12201 /refresh/app/oracle/cfgtoollogs/cdb12201/preupgrade/postupgrade_fixups.sql

执行 Post-Upgrade Status Tool, utlusts.sql 并且检查日志。这个脚本会确认是否所有的问题都已经被解决。

SQL> @$ORACLE_HOME/rdbms/admin/utlusts.sql

对于 Oracle RAC 环境,把 CLUSTER_DATABASE 改回 TRUE,之后运行 19c home 的 srvctl 命令来升级数据库配置。比如: 

ALTER SYSTEM SET CLUSTER_DATABASE=TRUE SCOPE=SPFILE;
$ORACLE_HOME/bin/srvctl upgrade database -db name -o ORACLE_HOME

 

升级 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)版本

关于最新的 latest DST patch 请参考 Note 412160.1.

以下脚本随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
时区应用脚本。 警告:此脚本将重新启动数据库并调整时区数据。





About Me

........................................................................................................................

● 本文作者:小麦苗,部分内容整理自网络,若有侵权请联系小麦苗删除

● 本文在itpub、博客园、CSDN和个人微 信公众号( DB宝)上有同步更新

● 本文itpub地址: http://blog.itpub.net/26736162

● 本文博客园地址: http://www.cnblogs.com/lhrbest

● 本文CSDN地址: https://blog.csdn.net/lihuarongaini

● 本文pdf版、个人简介及小麦苗云盘地址: http://blog.itpub.net/26736162/viewspace-1624453/

● 数据库笔试面试题库及解答: http://blog.itpub.net/26736162/viewspace-2134706/

● DBA宝典今日头条号地址: http://www.toutiao.com/c/user/6401772890/#mid=1564638659405826

........................................................................................................................

● QQ群号: 230161599 、618766405

● 微 信群:可加我微 信,我拉大家进群,非诚勿扰

● 联系我请加QQ好友 646634621 ,注明添加缘由

● 于 2020-05-01 06:00 ~ 2020-05-30 24:00 在西安完成

● 最新修改时间:2020-05-01 06:00 ~ 2020-05-30 24:00

● 文章内容来源于小麦苗的学习笔记,部分整理自网络,若有侵权或不当之处还请谅解

● 版权所有,欢迎分享本文,转载请保留出处

........................................................................................................................

小麦苗的微店https://weidian.com/s/793741433?wfr=c&ifr=shopdetail

小麦苗出版的数据库类丛书http://blog.itpub.net/26736162/viewspace-2142121/

小麦苗OCP、OCM、高可用网络班http://blog.itpub.net/26736162/viewspace-2148098/

小麦苗腾讯课堂主页https://lhr.ke.qq.com/

........................................................................................................................

使用 微 信客户端扫描下面的二维码来关注小麦苗的微 信公众号( DB宝)及QQ群(DBA宝典)、添加小麦苗微 信, 学习最实用的数据库技术。

........................................................................................................................

欢迎与我联系

 

 



请使用浏览器的分享功能分享到微信等