昨天我写了关于在 Linux 上安装 Oracle Database 21c 的文章。但现在是使用 AutoUpgrade 升级到 Oracle Database 21c 的时候了。

自动升级
您可能已经从我们和其他同事那里听说过,但我们不能经常重复:只有一种推荐的工具可以升级您的数据库——这就是 AutoUpgrade。
在我的 21c 家中,我首先检查已部署的 AutoUpgrade 版本:
[CDB3] oracle@hol:/u01/app/oracle/product/21/rdbms/admin $ java -jar autoupgrade.jar -version build.hash 57ab246 build.version 21.1.3 build.date 2021/04/21 13:32:13 build.max_target_version 21 build.supported_target_versions 12.2,18,19,21 build.type production
现在请与MOS 上可用的最新版本进行比较Note: 2485457.1 – AutoUpgrade Tool。
我写这篇博文时的最新版本是 2021 年 7 月 21 日 - 比 2021 年 4 月 21 日的上述版本更新。因此,我将其交换。幸运的是,这非常简单:下载并覆盖 21c Oracle Home 中的现有版本:
$ cp /media/sf_TEMP/autoupgradeJUL21.jar $ORACLE_HOME/rdbms/admin/autoupgrade.jar [CDB3] oracle@hol:/u01/app/oracle/product/21/rdbms/admin $ java -jar autoupgrade.jar -version build.hash 680914c build.version 21.2.210721 build.date 2021/07/21 11:14:54 build.max_target_version 21 build.supported_target_versions 12.2,18,19,21 build.type production
这看起来不错。
大变化——你需要一个 CDB
过去,您只需将数据库从一个版本升级到另一个版本。但现在事情发生了变化。使用仅限 CDB 的架构,您一开始无法再升级。在 Oracle 19c 之前,我们一直推荐以下方法:
- 在 Oracle 19c 之前将非 CDB 升级和迁移到多租户
- 使用 AutoUpgrade 将非 CDB 升级到 Oracle 19c
- 使用 AutoUpgrade 插件并将升级的非 CDB 转换为预先创建的 CDB
这是更安全的方法,因为第一步有经过验证的回退选项,升级:保证还原点(自动升级中的标准)和使用降级脚本进行降级。
但是当您迁移到 Oracle 21c 时,这种方法不再起作用,因为在 21c 中您不能再拥有非 CDB。现在这是自用于非 CDB 的 Oracle 21c 以来的方式:
- 自 Oracle 21c 起将非 CDB 升级和迁移到多租户
- 使用 AutoUpgrade 将非 CDB 插入预先创建的 CDB
- 使用 AutoUpgrade 升级和转换插入的非 CDB
当然,很明显你需要一个适当的 fallback。但我稍后会在另一篇博文中回到这一点。
所以首先,我们需要一个 CDB。
是的,让我重复一遍。您首先需要创建一个 CDB。
并且请不要使用种子数据库——使用模板并创建适合您需求的 CDB。事先检查非 CDB 中的 DBA_REGISTRY,并使用您真正需要的组件创建 CDB。
这是在 DBCA 中进入“ Options ”选项的路径:

选择“高级配置”:

然后——这很重要——选择“自定义数据库”:

否则你不会看到这个屏幕:

我以这种方式将我的 CDB 创建为CDB3:

同样,我认为声明 AutoUpgrade 不会创建此 CDB 很重要。您需要创建它。一旦 CDB 启动并运行,我就可以开始升级到 Oracle 21c。

让我们升级——分析永远是第一位!
在这种情况下,如果出现故障,我将无法恢复到 GRP,我宁愿创建非 CDB 的副本,而不是将其直接提升到 CDB3。
这是我用于 AutoUpgrade 的配置文件:
global.autoupg_log_dir=/home/oracle/logs
upg1.source_home=/u01/app/oracle/product/12.2.0.1
upg1.target_home=/u01/app/oracle/product/21
upg1.sid=DB12
upg1.target_cdb=CDB3
upg1.target_pdb_copy_option=file_name_convert=('/u02/oradata/DB12', '/u02/oradata/CDB3/db12')
upg1.log_dir=/home/oracle/logs
upg1.restoration=no
upg1.catctl_options=-t
起初,我开始分析运行。
$ java -jar $ORACLE_HOME/rdbms/admin/autoupgrade.jar -config DB12.cfg -mode analyze AutoUpgrade 21.2.210721 launched with default options Processing config file ... +--------------------------------+ | Starting AutoUpgrade execution | +--------------------------------+ 1 databases will be analyzed Type 'help' to list console commands +--------------------------------+ | Starting AutoUpgrade execution | +--------------------------------+ 1 databases will be analyzed Type 'help' to list console commands upg> Job 100 completed ------------------- Final Summary -------------------- Number of databases [ 1 ] Jobs finished [1] Jobs failed [0] Jobs pending [0] Please check the summary report at: /home/oracle/logs/cfgtoollogs/upgrade/auto/status/status.html /home/oracle/logs/cfgtoollogs/upgrade/auto/status/status.log
这看起来不错。
让我检查status.html报告。

没有错误,没有预检警告——这看起来不错。
让我们用 -mode deploy 升级
由于分析运行顺利,部署应该不会造成麻烦。
但事实上确实如此。
如果您的数据库有 ORDIM (Oracle Multimedia) 但没有 SDO (Spatial Data Option),升级将会失败,因为 LCTR (Locator),它在 Oracle 19c 之前不是一个独立的组件。请在我的下一篇博文中阅读更多内容,包括解决方法:
我现在将使用解决方法并从那里取得进展。
$ java -jar /u01/app/oracle/product/21/rdbms/admin/autoupgrade.jar -config DB12.cfg -mode deploy AutoUpgrade 21.2.210721 launched with default options Processing config file ... +--------------------------------+ | Starting AutoUpgrade execution | +--------------------------------+ 1 databases will be processed Type 'help' to list console commands upg> lsj +----+-------+---------+---------+-------+--------------+--------+----------------+ |Job#|DB_NAME| STAGE|OPERATION| STATUS| START_TIME| UPDATED| MESSAGE| +----+-------+---------+---------+-------+--------------+--------+----------------+ | 100| DB12|DBUPGRADE|EXECUTING|RUNNING|21/08/24 17:47|17:54:43|10%Upgraded DB12| +----+-------+---------+---------+-------+--------------+--------+----------------+ Total jobs 1 upg> lsj +----+-------+-------------+---------+-------+--------------+--------+------------------+ |Job#|DB_NAME| STAGE|OPERATION| STATUS| START_TIME| UPDATED| MESSAGE| +----+-------+-------------+---------+-------+--------------+--------+------------------+ | 100| DB12|NONCDBTOPDBXY|EXECUTING|RUNNING|21/08/24 17:47|18:06:55|noncdb_to_pdb - 0%| +----+-------+-------------+---------+-------+--------------+--------+------------------+ Total jobs 1 upg> lsj +----+-------+-------------+---------+-------+--------------+--------+-------------------+ |Job#|DB_NAME| STAGE|OPERATION| STATUS| START_TIME| UPDATED| MESSAGE| +----+-------+-------------+---------+-------+--------------+--------+-------------------+ | 100| DB12|NONCDBTOPDBXY|EXECUTING|RUNNING|21/08/24 17:47|18:08:25|noncdb_to_pdb - 64%| +----+-------+-------------+---------+-------+--------------+--------+-------------------+ Total jobs 1 upg> Job 100 completed ------------------- Final Summary -------------------- Number of databases [ 1 ] Jobs finished [1] Jobs failed [0] Jobs pending [0] Please check the summary report at: /home/oracle/logs/cfgtoollogs/upgrade/auto/status/status.html /home/oracle/logs/cfgtoollogs/upgrade/auto/status/status.log [CDB3] oracle@hol:~/scripts
最后,我们走了。
$ s
SQL*Plus: Release 21.0.0.0.0 - Production on Tue Aug 24 18:15:57 2021
Version 21.3.0.0.0
Copyright (c) 1982, 2021, Oracle. All rights reserved.
Connected to:
Oracle Database 21c Enterprise Edition Release 21.0.0.0.0 - Production
Version 21.3.0.0.0
SQL> show pdbs
CON_ID CON_NAME OPEN MODE RESTRICTED
---------- ------------------------------ ---------- ----------
2 PDB$SEED READ ONLY NO
3 DB12 READ WRITE NO概括
让我为您快速总结一下最重要的主题。
- 您升级到的首选版本仍然是 Oracle Database 19c
- Oracle Database 21c 是一个创新版本,具有一些不错的特性,但支持时间很短
- Oracle 21c 仅支持 CDB。如果您打算迁移到 Oracle 21c 并且您的数据库是非 CDB,则首先需要在 21c 中创建一个 CDB
- 在升级到21C唯一推荐的方式是自动升级-连姆厅同意
- 如果您的源数据库中有ORDIM 而没有 SDO,那么您必须遵循这篇博文以避免出现可怕的陷阱
因此,请将此博客文章视为一个很好的练习和分步说明。但是您将升级到的版本很可能是 Oracle Database 19c,因为这是长期支持版本。




