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

[译文] 将非 CDB 升级到 Oracle Database 21c(自动升级)

原创 Tim Hall 2021-08-25
1093

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

目录导读

假设

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

19c, 18c, 12.2

Oracle 21c 不支持非 CDB 架构,因此在将非 CDB 数据库升级到 21c 时,我们有两种选择。

  • 将现有的非 CDB 数据库转换为当前版本数据库中的 PDB,然后进行多租户升级。
  • 将非 CDB 转换为新版本数据库中的 PDB。新的 PDB 将在打开后进行升级。

在此示例中,我们将使用 AutoUpgrade 从 19c 非 CDB 升级到 21c。所有受支持版本的过程都非常相似。

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

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

先决条件

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

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

安装 21c 软件

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

export ORACLE_HOME=$ORACLE_BASE/product/21.0.0/dbhome_1 export PATH=$ORACLE_HOME/bin:$PATH export ORACLE_SID=cdb1 export SOFTWARE_DIR=/u01/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 主目录,但在这种情况下,我们将放弃该步骤以保持简单。

创建 21c 容器数据库

我们需要创建一个容器数据库 (CDB) 作为生成的 PDB 的目的地。下面的示例创建一个名为“cdb1”的 CDB,没有 PDB。

#dbca -silent -deleteDatabase -sourceDB cdb1 -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 0 \ -databaseType MULTIPURPOSE \ -memoryMgmtType auto_sga \ -totalMemory 1536 \ -storageType FS \ -datafileDestination "/u02/oracle/" \ -redoLogFileSize 50 \ -emConfiguration NONE \ -ignorePreReqs Prepare for db operation 10% complete Copying database files 40% complete Creating and starting Oracle instance 42% complete 46% complete 52% complete 56% complete 60% complete Completing Database Creation 66% complete 69% complete 70% complete Executing Post Configuration Actions 100% complete Database creation complete. For details check the logfiles at: /u01/app/oracle/cfgtoollogs/dbca/cdb1. Database Information: Global Database Name:cdb1 System Identifier(SID):cdb1 Look at the log file "/u01/app/oracle/cfgtoollogs/dbca/cdb1/cdb13.log" for further details. $

我们启用了快速恢复区、Oracle Managed Files (OMF) 和归档日志模式。

sqlplus / as sysdba <<EOF 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

您将需要调整实例参数以确保容器能够满足最终 PDB 的需求,但对于本示例,我们将忽略这一点。

运行自动升级分析

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 主目录。

export ORACLE_SID=mydb export ORAENV_ASK=NO . oraenv export ORAENV_ASK=YES export ORACLE_HOME=$ORACLE_BASE/product/19.0.0/dbhome_1

为非 CDB 到 PDB 的升级生成示例文件。

$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 noncdbtopdb

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

upg1.log_dir=/u01/app/oracle/cfgtoollogs/autoupgrade/mydb upg1.sid=mydb upg1.source_home=/u01/app/oracle/product/19.0.0/dbhome_1 upg1.target_cdb=cdb1 upg1.target_home=/u01/app/oracle/product/21.0.0/dbhome_1 upg1.target_pdb_name=mydb #upg1.target_pdb_copy_option=file_name_convert=('emp', 'emppdb') upg1.start_time=NOW # Optional. 10 Minutes from now upg1.upgrade_node=localhost # 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 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”文件的输出如下所示。详细信息部分提供了一个文件,其中包含升级过程中步骤的详细信息。如果您看过“preupgrade.jar”的输出,它看起来会很熟悉。如果主日志文件中有任何必需的手动操作,详细文件应提供更多信息。

========================================== Autoupgrade Summary Report ========================================== [Date] Sun Aug 22 07:41:07 UTC 2021 [Number of Jobs] 1 ========================================== [Job ID] 101 ========================================== [DB Name] mydb [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 07:40:55 [Duration] 0:00:12 [Log Directory] /u01/app/oracle/cfgtoollogs/autoupgrade/mydb/mydb/101/prechecks [Detail] /u01/app/oracle/cfgtoollogs/autoupgrade/mydb/mydb/101/prechecks/mydb_preupgrade.log Precheck passed and no manual intervention needed ------------------------------------------

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

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

运行自动升级部署

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

========================================== Autoupgrade Summary Report ========================================== [Date] Sun Aug 22 07:41:07 UTC 2021 [Number of Jobs] 1 ========================================== [Job ID] 101 ========================================== [DB Name] mydb [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 07:40:55 [Duration] 0:00:12 [Log Directory] /u01/app/oracle/cfgtoollogs/autoupgrade/mydb/mydb/101/prechecks [Detail] /u01/app/oracle/cfgtoollogs/autoupgrade/mydb/mydb/101/prechecks/mydb_preupgrade.log Precheck passed and no manual intervention needed ------------------------------------------

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

upg> lsj +----+-------+---------+---------+-------+--------------+--------+----------------+ |Job#|DB_NAME| STAGE|OPERATION| STATUS| START_TIME| UPDATED| MESSAGE| +----+-------+---------+---------+-------+--------------+--------+----------------+ | 102| mydb|DBUPGRADE|EXECUTING|RUNNING|21/08/22 07:44|07:49:08|22%Upgraded MYDB| +----+-------+---------+---------+-------+--------------+--------+----------------+ Total jobs 1 upg> status -job 102 Progress ----------------------------------- Start time: 21/08/22 07:44 Elapsed (min): 6 End time: N/A Last update: 2021-08-22T07:49:08.827 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 4 min (IN PROGRESS) Job Logs Locations ----------------------------------- Logs Base: /u01/app/oracle/cfgtoollogs/autoupgrade/mydb/mydb Job logs: /u01/app/oracle/cfgtoollogs/autoupgrade/mydb/mydb/102 Stage logs: /u01/app/oracle/cfgtoollogs/autoupgrade/mydb/mydb/102/dbupgrade TimeZone: /u01/app/oracle/cfgtoollogs/autoupgrade/mydb/mydb/temp Additional information ----------------------------------- Details: [Upgrading] is [22%] completed for [mydb-mydb] +---------+-------------+ |CONTAINER| PERCENTAGE| +---------+-------------+ | MYDB|UPGRADE [22%]| +---------+-------------+ Error Details: None upg>

以下是升级过程中的一些示例输出。

upg> lsj +----+-------+---------+---------+-------+--------------+--------+----------------------------+ |Job#|DB_NAME| STAGE|OPERATION| STATUS| START_TIME| UPDATED| MESSAGE| +----+-------+---------+---------+-------+--------------+--------+----------------------------+ | 102| mydb|PREFIXUPS|EXECUTING|RUNNING|21/08/22 07:44|07:44:28|Loading database information| +----+-------+---------+---------+-------+--------------+--------+----------------------------+ Total jobs 1 upg> lsj +----+-------+-----+---------+-------+--------------+--------+------------------+ |Job#|DB_NAME|STAGE|OPERATION| STATUS| START_TIME| UPDATED| MESSAGE| +----+-------+-----+---------+-------+--------------+--------+------------------+ | 102| mydb|DRAIN|EXECUTING|RUNNING|21/08/22 07:44|07:45:31|Executing describe| +----+-------+-----+---------+-------+--------------+--------+------------------+ Total jobs 1 upg> lsj +----+-------+---------+---------+-------+--------------+--------+-------+ |Job#|DB_NAME| STAGE|OPERATION| STATUS| START_TIME| UPDATED|MESSAGE| +----+-------+---------+---------+-------+--------------+--------+-------+ | 102| mydb|DBUPGRADE|EXECUTING|RUNNING|21/08/22 07:44|07:46:03|Running| +----+-------+---------+---------+-------+--------------+--------+-------+ Total jobs 1 upg> lsj +----+-------+---------+---------+-------+--------------+--------+----------------+ |Job#|DB_NAME| STAGE|OPERATION| STATUS| START_TIME| UPDATED| MESSAGE| +----+-------+---------+---------+-------+--------------+--------+----------------+ | 102| mydb|DBUPGRADE|EXECUTING|RUNNING|21/08/22 07:44|07:55:09|52%Upgraded MYDB| +----+-------+---------+---------+-------+--------------+--------+----------------+ Total jobs 1 upg> lsj +----+-------+-------------+---------+-------+--------------+--------+-------------------+ |Job#|DB_NAME| STAGE|OPERATION| STATUS| START_TIME| UPDATED| MESSAGE| +----+-------+-------------+---------+-------+--------------+--------+-------------------+ | 102| mydb|NONCDBTOPDBXY|EXECUTING|RUNNING|21/08/22 07:44|08:02:46|noncdb_to_pdb - 64%| +----+-------+-------------+---------+-------+--------------+--------+-------------------+ Total jobs 1 upg> lsj +----+-------+----------+---------+-------+--------------+--------+-------------+ |Job#|DB_NAME| STAGE|OPERATION| STATUS| START_TIME| UPDATED| MESSAGE| +----+-------+----------+---------+-------+--------------+--------+-------------+ | 102| mydb|POSTFIXUPS|EXECUTING|RUNNING|21/08/22 07:44|08:09:53|Remaining 2/4| +----+-------+----------+---------+-------+--------------+--------+-------------+ Total jobs 1 upg>

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

upg> Job 102 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 08:11:31 UTC 2021 [Number of Jobs] 1 ========================================== [Job ID] 102 ========================================== [DB Name] mydb [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 07:44:09 [Duration] 0:00:01 [Detail] Please drop the following GRPs after Autoupgrade completes: AUTOUPGRADE_9212_MYDB1912000 ------------------------------------------ [Stage Name] PREUPGRADE [Status] SUCCESS [Start Time] 2021-08-22 07:44:11 [Duration] 0:00:00 [Log Directory] /u01/app/oracle/cfgtoollogs/autoupgrade/mydb/mydb/102/preupgrade ------------------------------------------ [Stage Name] PRECHECKS [Status] SUCCESS [Start Time] 2021-08-22 07:44:11 [Duration] 0:00:16 [Log Directory] /u01/app/oracle/cfgtoollogs/autoupgrade/mydb/mydb/102/prechecks [Detail] /u01/app/oracle/cfgtoollogs/autoupgrade/mydb/mydb/102/prechecks/mydb_preupgrade.log Precheck passed and no manual intervention needed ------------------------------------------ [Stage Name] PREFIXUPS [Status] SUCCESS [Start Time] 2021-08-22 07:44:27 [Duration] 0:00:15 [Log Directory] /u01/app/oracle/cfgtoollogs/autoupgrade/mydb/mydb/102/prefixups ------------------------------------------ [Stage Name] DRAIN [Status] SUCCESS [Start Time] 2021-08-22 07:44:42 [Duration] 0:01:19 [Log Directory] /u01/app/oracle/cfgtoollogs/autoupgrade/mydb/mydb/102/drain ------------------------------------------ [Stage Name] DBUPGRADE [Status] SUCCESS [Start Time] 2021-08-22 07:46:02 [Duration] 0:15:14 [Log Directory] /u01/app/oracle/cfgtoollogs/autoupgrade/mydb/mydb/102/dbupgrade ------------------------------------------ [Stage Name] NONCDBTOPDBXY [Status] SUCCESS [Start Time] 2021-08-22 08:01:16 [Duration] 0:08:25 ------------------------------------------ [Stage Name] POSTCHECKS [Status] SUCCESS [Start Time] 2021-08-22 08:09:42 [Duration] 0:00:09 [Log Directory] /u01/app/oracle/cfgtoollogs/autoupgrade/mydb/mydb/102/postchecks [Detail] /u01/app/oracle/cfgtoollogs/autoupgrade/mydb/mydb/102/postchecks/mydb_postupgrade.log ------------------------------------------ [Stage Name] POSTFIXUPS [Status] SUCCESS [Start Time] 2021-08-22 08:09:51 [Duration] 0:01:40 [Log Directory] /u01/app/oracle/cfgtoollogs/autoupgrade/mydb/mydb/102/postfixups ------------------------------------------ [Stage Name] POSTUPGRADE [Status] SUCCESS [Start Time] 2021-08-22 08:11:31 [Duration] 0:00:00 [Log Directory] /u01/app/oracle/cfgtoollogs/autoupgrade/mydb/mydb/102/postupgrade ------------------------------------------ [Stage Name] SYSUPDATES [Status] SUCCESS [Start Time] 2021-08-22 08:11:31 [Duration] 0:00:00 [Log Directory] /u01/app/oracle/cfgtoollogs/autoupgrade/mydb/mydb/102/sysupdates ------------------------------------------ Upgrade Summary: /u01/app/oracle/cfgtoollogs/autoupgrade/mydb/mydb/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 alter pluggable database mydb save state; shutdown immediate; startup; show pdbs exit; EOF

最后的步骤

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

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

附录

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

重建 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 dbca -silent -createDatabase \ -templateName General_Purpose.dbc \ -gdbname cdb1 -sid cdb1 -responseFile NO_VALUE \ -characterSet AL32UTF8 \ -sysPassword SysPassword1 \ -systemPassword SysPassword1 \ -createAsContainerDatabase true \ -numberOfPDBs 0 \ -databaseType MULTIPURPOSE \ -memoryMgmtType auto_sga \ -totalMemory 1536 \ -storageType FS \ -datafileDestination "/u02/oradata/" \ -redoLogFileSize 50 \ -emConfiguration NONE \ -ignorePreReqs sqlplus / as sysdba <<EOF 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

重建 MYDB 非 CDB 数据库。

export ORACLE_HOME=/u01/app/oracle/product/19.0.0/dbhome_1 export PATH=$ORACLE_HOME/bin:$PATH export ORACLE_SID=mydb #dbca -silent -deleteDatabase -sourceDB mydb -sysDBAUserName sys -sysDBAPassword SysPassword1 dbca -silent -createDatabase \ -templateName General_Purpose.dbc \ -gdbname mydb -sid mydb -responseFile NO_VALUE \ -characterSet AL32UTF8 \ -sysPassword SysPassword1 \ -systemPassword SysPassword1 \ -createAsContainerDatabase false \ -databaseType MULTIPURPOSE \ -memoryMgmtType auto_sga \ -totalMemory 1536 \ -storageType FS \ -datafileDestination "/u02/oradata/" \ -redoLogFileSize 50 \ -emConfiguration NONE \ -ignorePreReqs sqlplus / as sysdba <<EOF 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
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论