暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

[译文] 多租户:升级到 Oracle Database 21c(自动升级)

原创 Tim Hall 2021-08-25
717

文概述了使用 AutoUpgrade 将同一服务器上的现有多租户数据库升级到 Oracle 21c。升级可能非常复杂,因此您必须始终阅读升级手册,并在考虑升级生产环境之前进行彻底的测试。

目录导读

假设

本文重点介绍升级多租户数据库。如果您的起点是非 CDB 数据库,您应该阅读以下文章。

本文假设您的源数据库是支持直接升级到 21c 的版本。

19c, 18c, 12.2

在本例中,我们正在从 19c 多租户升级到 21c。所有受支持版本的过程都非常相似。

在开始之前备份所有内容很重要!其中一些步骤具有破坏性,如果出现问题,您别无选择,只能从备份中恢复并重新开始。

请记住,本文不能替代阅读升级文档。每次升级都有可能不同,具体取决于安装的选项。

先决条件

通过运行 21c 预安装包,确保您具备所有操作系统先决条件。在 Oracle Linux 上,您可以通过安装预安装包来完成此操作。更新剩余的包也可能是有意义的。

yum install -y oracle-database-preinstall-21c yum update -y

安装 21c 软件

您可以在此处(OL7OL8)更详细地了解安装过程,但对于本示例,我们将保持简短。以下命令将执行 21c 软件的静默安装。

export ORACLE_HOME=$ORACLE_BASE/product/21.0.0/dbhome_1 export SOFTWARE_DIR=/vagrant/software export ORA_INVENTORY=/u01/app/oraInventory mkdir -p ${ORACLE_HOME} cd $ORACLE_HOME /bin/unzip -oq ${SOFTWARE_DIR}/LINUX.X64_213000_db_home.zip ./runInstaller -ignorePrereq -waitforcompletion -silent \ -responseFile ${ORACLE_HOME}/install/response/db_install.rsp \ oracle.install.option=INSTALL_DB_SWONLY \ ORACLE_HOSTNAME=${ORACLE_HOSTNAME} \ UNIX_GROUP_NAME=oinstall \ INVENTORY_LOCATION=${ORA_INVENTORY} \ SELECTED_LANGUAGES=en,en_GB \ ORACLE_HOME=${ORACLE_HOME} \ ORACLE_BASE=${ORACLE_BASE} \ oracle.install.db.InstallEdition=EE \ oracle.install.db.OSDBA_GROUP=dba \ oracle.install.db.OSBACKUPDBA_GROUP=dba \ oracle.install.db.OSDGDBA_GROUP=dba \ oracle.install.db.OSKMDBA_GROUP=dba \ oracle.install.db.OSRACDBA_GROUP=dba \ SECURITY_UPDATES_VIA_MYORACLESUPPORT=false \ DECLINE_SECURITY_UPDATES=true

出现提示时运行根脚本。

As a root user, execute the following script(s): 1. /u01/app/oracle/product/21.0.0/dbhome_1/root.sh

此时,您还应该修补新的 Oracle 主目录,但在这种情况下,我们将放弃该步骤以保持简单。

运行自动升级分析

MOS 2485457.1下载最新的“autoupgrade.jar”文件。如果您没有 MOS 访问权限,您可能会错过下一步。

cd $ORACLE_BASE/product/21.0.0/dbhome_1/rdbms/admin mv autoupgrade.jar autoupgrade.jar.`date +"%Y"-"%m"-"%d"` cp /tmp/autoupgrade.jar .

在运行“autoupgrade.jar”命令之前,请确保您使用的是原始 Oracle 主目录。

为完整的数据库升级生成示例文件。

$ORACLE_BASE/product/21.0.0/dbhome_1/jdk/bin/java \ -jar $ORACLE_BASE/product/21.0.0/dbhome_1/rdbms/admin/autoupgrade.jar \ -create_sample_file config /tmp/config.txt full

编辑生成的“/tmp/config.txt”文件,设置所需升级的详细信息。在这种情况下,我们使用了以下参数。

upg1.log_dir=/u01/app/oracle/cfgtoollogs/autoupgrade/cdb1 # Path of the log directory for the upgrade job upg1.sid=cdb1 # ORACLE_SID of the source DB/CDB upg1.source_home=/u01/app/oracle/product/19.0.0/dbhome_1 # Path of the source ORACLE_HOME upg1.target_home=/u01/app/oracle/product/21.0.0/dbhome_1 # Path of the target ORACLE_HOME upg1.start_time=NOW # Optional. [NOW | +XhYm (X hours, Y minutes after launch) | dd/mm/yyyy hh:mm:ss] upg1.upgrade_node=localhost.localdomain # Optional. To find out the name of your node, run the hostname utility. Default is 'localhost' upg1.run_utlrp=yes # Optional. Whether or not to run utlrp after upgrade upg1.timezone_upg=yes # Optional. Whether or not to run the timezone upgrade upg1.target_version=21 # Oracle version of the target ORACLE_HOME. Only required when the target Oracle database version is 12.2

在分析模式下运行升级以查看升级是否存在任何预期问题。

$ORACLE_BASE/product/21.0.0/dbhome_1/jdk/bin/java \ -jar $ORACLE_BASE/product/21.0.0/dbhome_1/rdbms/admin/autoupgrade.jar \ -config /tmp/config.txt -mode analyze AutoUpgrade tool launched with default options Processing config file ... +--------------------------------+ | 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: /u01/app/oracle/cfgtoollogs/autoupgrade/cfgtoollogs/upgrade/auto/status/status.html /u01/app/oracle/cfgtoollogs/autoupgrade/cfgtoollogs/upgrade/auto/status/status.log

输出文件列出了分析的状态,以及升级之前所需的任何手动干预。“status.log”文件的输出如下所示。详细信息部分提供了一个文件,其中包含升级过程中步骤的详细信息。如果您看过“preupgrade.jar”的输出,它看起来会很熟悉。如果主日志文件中有任何必需的手动操作,详细文件应提供更多信息。

========================================== Autoupgrade Summary Report ========================================== [Date] Sun Aug 22 11:36:28 UTC 2021 [Number of Jobs] 1 ========================================== [Job ID] 100 ========================================== [DB Name] cdb1 [Version Before Upgrade] 19.12.0.0.0 [Version After Upgrade] 21.3.0.0.0 ------------------------------------------ [Stage Name] PRECHECKS [Status] SUCCESS [Start Time] 2021-08-22 11:36:01 [Duration] 0:00:27 [Log Directory] /u01/app/oracle/cfgtoollogs/autoupgrade/cdb1/cdb1/100/prechecks [Detail] /u01/app/oracle/cfgtoollogs/autoupgrade/cdb1/cdb1/100/prechecks/cdb1_preupgrade.log Precheck passed and no manual intervention needed ------------------------------------------

日志目录包含许多文件,包括详细报告的 HTML 格式。它与日志文件的信息相同,但有些人我更喜欢阅读这种格式。

完成任何所需的手动修复后,再次运行分析,您应该会看到一个干净的分析报告。

运行 AutoUpgrade Fixups(可选)

分析阶段确定升级前所需的修正。对于同一台服务器上的升级,最好使用部署模式在单个操作中应用修复和升级数据库,因此这一步不是必需的。

这是单独运行修复程序的示例。

$ORACLE_BASE/product/21.0.0/dbhome_1/jdk/bin/java \ -jar $ORACLE_BASE/product/21.0.0/dbhome_1/rdbms/admin/autoupgrade.jar \ -config /tmp/config.txt -mode fixups AutoUpgrade tool launched with default options Processing config file ... +--------------------------------+ | Starting AutoUpgrade execution | +--------------------------------+ 1 databases will be processed Type 'help' to list console commands upg> Job 101 completed ------------------- Final Summary -------------------- Number of databases [ 1 ] Jobs finished [1] Jobs failed [0] Jobs pending [0] Please check the summary report at: /u01/app/oracle/cfgtoollogs/autoupgrade/cfgtoollogs/upgrade/auto/status/status.html /u01/app/oracle/cfgtoollogs/autoupgrade/cfgtoollogs/upgrade/auto/status/status.log

“status.log”文件的输出如下所示。

========================================== Autoupgrade Summary Report ========================================== [Date] Sun Aug 22 11:38:28 UTC 2021 [Number of Jobs] 1 ========================================== [Job ID] 101 ========================================== [DB Name] cdb1 [Version Before Upgrade] 19.12.0.0.0 [Version After Upgrade] 21.3.0.0.0 ------------------------------------------ [Stage Name] PRECHECKS [Status] SUCCESS [Start Time] 2021-08-22 11:37:31 [Duration] 0:00:29 [Log Directory] /u01/app/oracle/cfgtoollogs/autoupgrade/cdb1/cdb1/101/prechecks [Detail] /u01/app/oracle/cfgtoollogs/autoupgrade/cdb1/cdb1/101/prechecks/cdb1_preupgrade.log Precheck passed and no manual intervention needed ------------------------------------------ [Stage Name] PREFIXUPS [Status] SUCCESS [Start Time] 2021-08-22 11:38:00 [Duration] 0:00:28 [Log Directory] /u01/app/oracle/cfgtoollogs/autoupgrade/cdb1/cdb1/101/prefixups ------------------------------------------

运行自动升级部署

我们现在准备使用以下命令运行数据库升级。升级需要一些时间,因此您将停留在“upg”提示下,直到完成。

$ORACLE_BASE/product/21.0.0/dbhome_1/jdk/bin/java \ -jar $ORACLE_BASE/product/21.0.0/dbhome_1/rdbms/admin/autoupgrade.jar \ -config /tmp/config.txt -mode deploy AutoUpgrade tool launched with default options Processing config file ... +--------------------------------+ | Starting AutoUpgrade execution | +--------------------------------+ 1 databases will be processed Type 'help' to list console commands upg>

使用“help”命令查看命令行选项。我们可以使用以下命令列出当前作业并检查作业状态。

upg> lsj +----+-------+---------+---------+-------+--------------+--------+--------------------+ |Job#|DB_NAME| STAGE|OPERATION| STATUS| START_TIME| UPDATED| MESSAGE| +----+-------+---------+---------+-------+--------------+--------+--------------------+ | 102| cdb1|DBUPGRADE|EXECUTING|RUNNING|21/08/22 11:40|11:45:22|10%Upgraded CDB$ROOT| +----+-------+---------+---------+-------+--------------+--------+--------------------+ Total jobs 1 upg> status -job 102 Progress ----------------------------------- Start time: 21/08/22 11:40 Elapsed (min): 6 End time: N/A Last update: 2021-08-22T11:45:22.805 Stage: DBUPGRADE Operation: EXECUTING Status: RUNNING Pending stages: 7 Stage summary: SETUP <1 min GRP <1 min PREUPGRADE <1 min PRECHECKS <1 min PREFIXUPS <1 min DRAIN <1 min DBUPGRADE 3 min (IN PROGRESS) Job Logs Locations ----------------------------------- Logs Base: /u01/app/oracle/cfgtoollogs/autoupgrade/cdb1/cdb1 Job logs: /u01/app/oracle/cfgtoollogs/autoupgrade/cdb1/cdb1/102 Stage logs: /u01/app/oracle/cfgtoollogs/autoupgrade/cdb1/cdb1/102/dbupgrade TimeZone: /u01/app/oracle/cfgtoollogs/autoupgrade/cdb1/cdb1/temp Additional information ----------------------------------- Details: [Upgrading] is [10%] completed for [cdb1-cdb$root] +---------+---------------+ |CONTAINER| PERCENTAGE| +---------+---------------+ | CDB$ROOT| UPGRADE [10%]| | PDB$SEED|UPGRADE PENDING| | PDB1|UPGRADE PENDING| +---------+---------------+ Error Details: None upg>

作业完成后,将显示摘要消息。

upg> Job 102 completed ------------------- Final Summary -------------------- Number of databases [ 1 ] Jobs finished [1] Jobs failed [0] Jobs pending [0] ---- Drop GRP at your convenience once you consider it is no longer needed ---- Drop GRP from cdb1: drop restore point AUTOUPGRADE_9212_CDB11912000 Please check the summary report at: /u01/app/oracle/cfgtoollogs/autoupgrade/cfgtoollogs/upgrade/auto/status/status.html

“status.log”包含有关升级过程的顶级信息。

========================================== Autoupgrade Summary Report ========================================== [Date] Sun Aug 22 12:48:49 UTC 2021 [Number of Jobs] 1 ========================================== [Job ID] 102 ========================================== [DB Name] cdb1 [Version Before Upgrade] 19.12.0.0.0 [Version After Upgrade] 21.3.0.0.0 ------------------------------------------ [Stage Name] GRP [Status] SUCCESS [Start Time] 2021-08-22 11:40:35 [Duration] 0:00:00 [Detail] Please drop the following GRPs after Autoupgrade completes: AUTOUPGRADE_9212_CDB11912000 ------------------------------------------ [Stage Name] PREUPGRADE [Status] SUCCESS [Start Time] 2021-08-22 11:40:36 [Duration] 0:00:00 [Log Directory] /u01/app/oracle/cfgtoollogs/autoupgrade/cdb1/cdb1/102/preupgrade ------------------------------------------ [Stage Name] PRECHECKS [Status] SUCCESS [Start Time] 2021-08-22 11:40:36 [Duration] 0:00:31 [Log Directory] /u01/app/oracle/cfgtoollogs/autoupgrade/cdb1/cdb1/102/prechecks [Detail] /u01/app/oracle/cfgtoollogs/autoupgrade/cdb1/cdb1/102/prechecks/cdb1_preupgrade.log Precheck passed and no manual intervention needed ------------------------------------------ [Stage Name] PREFIXUPS [Status] SUCCESS [Start Time] 2021-08-22 11:41:07 [Duration] 0:00:30 [Log Directory] /u01/app/oracle/cfgtoollogs/autoupgrade/cdb1/cdb1/102/prefixups ------------------------------------------ [Stage Name] DRAIN [Status] SUCCESS [Start Time] 2021-08-22 11:41:37 [Duration] 0:00:34 [Log Directory] /u01/app/oracle/cfgtoollogs/autoupgrade/cdb1/cdb1/102/drain ------------------------------------------ [Stage Name] DBUPGRADE [Status] SUCCESS [Start Time] 2021-08-22 11:42:12 [Duration] 0:53:11 [Log Directory] /u01/app/oracle/cfgtoollogs/autoupgrade/cdb1/cdb1/102/dbupgrade ------------------------------------------ [Stage Name] POSTCHECKS [Status] SUCCESS [Start Time] 2021-08-22 12:35:24 [Duration] 0:00:12 [Log Directory] /u01/app/oracle/cfgtoollogs/autoupgrade/cdb1/cdb1/102/postchecks [Detail] /u01/app/oracle/cfgtoollogs/autoupgrade/cdb1/cdb1/102/postchecks/cdb1_postupgrade.log ------------------------------------------ [Stage Name] POSTFIXUPS [Status] SUCCESS [Start Time] 2021-08-22 12:35:36 [Duration] 0:13:03 [Log Directory] /u01/app/oracle/cfgtoollogs/autoupgrade/cdb1/cdb1/102/postfixups ------------------------------------------ [Stage Name] POSTUPGRADE [Status] SUCCESS [Start Time] 2021-08-22 12:48:39 [Duration] 0:00:09 [Log Directory] /u01/app/oracle/cfgtoollogs/autoupgrade/cdb1/cdb1/102/postupgrade ------------------------------------------ [Stage Name] SYSUPDATES [Status] SUCCESS [Start Time] 2021-08-22 12:48:49 [Duration] 0:00:00 [Log Directory] /u01/app/oracle/cfgtoollogs/autoupgrade/cdb1/cdb1/102/sysupdates ------------------------------------------ Upgrade Summary: /u01/app/oracle/cfgtoollogs/autoupgrade/cdb1/cdb1/102/dbupgrade/upg_summary.log

查看“upg_summary.log”文件,如果有任何问题,请查看相关的日志文件。在这一点上,我进行了关机和启动,以确保一切都在正确的模式下运行。

export ORACLE_HOME=$ORACLE_BASE/product/21.0.0/dbhome_1 export PATH=$ORACLE_HOME/bin:$PATH export ORACLE_SID=cdb1 sqlplus / as sysdba <<EOF shutdown immediate; startup; show pdbs exit; EOF

最后的步骤

根据需要编辑“/etc/oratab”文件和任何环境文件。

如果您使用 APEX 或 ORDS,您可能想要验证它们(validate APEXvalidate ORDS)。

附录

如果要重新运行示例,可以使用以下命令重建数据库。

删除 21c CDB1 多租户数据库。

export ORACLE_HOME=/u01/app/oracle/product/21.0.0/dbhome_1 export PATH=$ORACLE_HOME/bin:$PATH export ORACLE_SID=cdb1 dbca -silent -deleteDatabase -sourceDB cdb1 -sysDBAUserName sys -sysDBAPassword SysPassword1

重建 19c CDB1 多租户数据库。

export ORACLE_HOME=/u01/app/oracle/product/19.0.0/dbhome_1 export PATH=$ORACLE_HOME/bin:$PATH export ORACLE_SID=cdb1 #dbca -silent -deleteDatabase -sourceDB mydb -sysDBAUserName sys -sysDBAPassword SysPassword1 dbca -silent -createDatabase \ -templateName General_Purpose.dbc \ -gdbname cdb1 -sid cdb1 -responseFile NO_VALUE \ -characterSet AL32UTF8 \ -sysPassword SysPassword1 \ -systemPassword SysPassword1 \ -createAsContainerDatabase true \ -numberOfPDBs 1 \ -pdbName pdb1 \ -pdbAdminPassword SysPassword1 \ -databaseType MULTIPURPOSE \ -memoryMgmtType auto_sga \ -totalMemory 1536 \ -storageType FS \ -datafileDestination "/u02/oradata/" \ -redoLogFileSize 50 \ -emConfiguration NONE \ -ignorePreReqs sqlplus / as sysdba <<EOF alter pluggable database pdb1 save state; alter system set db_recovery_file_dest_size=40g; alter system set db_recovery_file_dest='/u01/app/oracle/fast_recovery_area'; alter system set db_create_file_dest = '/u02/oradata'; shutdown immediate; startup mount; alter database archivelog; alter database open; exit; EOF
最后修改时间:2021-08-25 17:48:16
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论