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

[译文] 多租户:拔出/插入 PDB 升级到 Oracle Database 21c(自动升级)

原创 Tim Hall 2021-08-25
653

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

目录导读

假设

本文重点介绍使用 unplug/plugin 升级可插拔数据库。如果你想直接升级一个CDB和所有PDB,你需要按照这篇文章。

本文假设您的源数据库是支持直接升级到 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 主目录,但在这种情况下,我们将放弃该步骤以保持简单。

创建 21c 容器数据库

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

#dbca -silent -deleteDatabase -sourceDB cdb2 -sysDBAUserName sys -sysDBAPassword SysPassword1 dbca -silent -createDatabase \ -templateName General_Purpose.dbc \ -gdbname cdb2 -sid cdb2 -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/cdb2. Database Information: Global Database Name:cdb2 System Identifier(SID):cdb2 Look at the log file "/u01/app/oracle/cfgtoollogs/dbca/cdb2/cdb2.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=cdb1 export ORAENV_ASK=NO . oraenv export ORAENV_ASK=YES export ORACLE_HOME=$ORACLE_BASE/product/19.0.0/dbhome_1

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

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

编辑生成的“/tmp/config.txt”文件,设置所需升级的详细信息。在这种情况下,我们使用了以下参数。我们只升级了一个 PDB,但如果我们有多个 PDB,我们可以使用逗号分隔的 PDB 列表。

upg1.log_dir=/u01/app/oracle/cfgtoollogs/autoupgrade/pdb1 upg1.sid=cdb1 upg1.source_home=/u01/app/oracle/product/19.0.0/dbhome_1 upg1.target_cdb=cdb2 upg1.target_home=/u01/app/oracle/product/21.0.0/dbhome_1 upg1.pdbs=pdb1 # Comma delimited list of pdb names that will be upgraded and moved to the target CDB #upg1.target_pdb_name.mypdb1=altpdb1 # Optional. Name of the PDB to be created on the target CDB #upg1.target_pdb_copy_option.mypdb1=file_name_convert=('mypdb1', 'altpdb1') # Optional. file_name_convert option used when creating the PDB on the target CDB #upg1.target_pdb_name.mypdb2=altpdb2 upg1.start_time=NOW # Optional. [NOW | +XhYm (X hours, Y minutes after launch) | dd/mm/yyyy hh:mm:ss] 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 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 14:49:01 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 14:48:44 [Duration] 0:00:16 [Log Directory] /u01/app/oracle/cfgtoollogs/autoupgrade/pdb1/cdb1/100/prechecks [Detail] /u01/app/oracle/cfgtoollogs/autoupgrade/pdb1/cdb1/100/prechecks/cdb1_preupgrade.log Precheck passed and no manual intervention needed ------------------------------------------

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

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

运行自动升级部署

我们现在准备使用以下命令运行数据库升级。升级需要一会,因此您将停留在“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| +----+-------+---------+---------+-------+--------------+--------+----------------+ | 101| cdb1|DBUPGRADE|EXECUTING|RUNNING|21/08/22 14:51|14:56:28|22%Upgraded PDB1| +----+-------+---------+---------+-------+--------------+--------+----------------+ Total jobs 1 upg> status -job 101 Progress ----------------------------------- Start time: 21/08/22 14:51 Elapsed (min): 5 End time: N/A Last update: 2021-08-22T14:56:28.019 Stage: DBUPGRADE Operation: EXECUTING Status: RUNNING Pending stages: 7 Stage summary: SETUP <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/pdb1/cdb1 Job logs: /u01/app/oracle/cfgtoollogs/autoupgrade/pdb1/cdb1/101 Stage logs: /u01/app/oracle/cfgtoollogs/autoupgrade/pdb1/cdb1/101/dbupgrade TimeZone: /u01/app/oracle/cfgtoollogs/autoupgrade/pdb1/cdb1/temp Additional information ----------------------------------- Details: [Upgrading] is [22%] completed for [cdb1-pdb1] +---------+-------------+ |CONTAINER| PERCENTAGE| +---------+-------------+ | PDB1|UPGRADE [22%]| +---------+-------------+ Error Details: None upg>

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

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 15:15:50 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] PREUPGRADE [Status] SUCCESS [Start Time] 2021-08-22 14:51:03 [Duration] 0:00:00 [Log Directory] /u01/app/oracle/cfgtoollogs/autoupgrade/pdb1/cdb1/101/preupgrade ------------------------------------------ [Stage Name] PRECHECKS [Status] SUCCESS [Start Time] 2021-08-22 14:51:03 [Duration] 0:00:20 [Log Directory] /u01/app/oracle/cfgtoollogs/autoupgrade/pdb1/cdb1/101/prechecks [Detail] /u01/app/oracle/cfgtoollogs/autoupgrade/pdb1/cdb1/101/prechecks/cdb1_preupgrade.log Precheck passed and no manual intervention needed ------------------------------------------ [Stage Name] PREFIXUPS [Status] SUCCESS [Start Time] 2021-08-22 14:51:24 [Duration] 0:01:43 [Log Directory] /u01/app/oracle/cfgtoollogs/autoupgrade/pdb1/cdb1/101/prefixups ------------------------------------------ [Stage Name] DRAIN [Status] SUCCESS [Start Time] 2021-08-22 14:53:08 [Duration] 0:00:12 [Log Directory] /u01/app/oracle/cfgtoollogs/autoupgrade/pdb1/cdb1/101/drain ------------------------------------------ [Stage Name] DBUPGRADE [Status] SUCCESS [Start Time] 2021-08-22 14:53:20 [Duration] 0:15:56 [Log Directory] /u01/app/oracle/cfgtoollogs/autoupgrade/pdb1/cdb1/101/dbupgrade ------------------------------------------ [Stage Name] NONCDBTOPDBXY [Status] SUCCESS [Start Time] 2021-08-22 15:09:16 [Duration] 0:00:00 ------------------------------------------ [Stage Name] POSTCHECKS [Status] SUCCESS [Start Time] 2021-08-22 15:09:16 [Duration] 0:00:09 [Log Directory] /u01/app/oracle/cfgtoollogs/autoupgrade/pdb1/cdb1/101/postchecks [Detail] /u01/app/oracle/cfgtoollogs/autoupgrade/pdb1/cdb1/101/postchecks/cdb1_postupgrade.log ------------------------------------------ [Stage Name] POSTFIXUPS [Status] SUCCESS [Start Time] 2021-08-22 15:09:26 [Duration] 0:06:23 [Log Directory] /u01/app/oracle/cfgtoollogs/autoupgrade/pdb1/cdb1/101/postfixups ------------------------------------------ [Stage Name] POSTUPGRADE [Status] SUCCESS [Start Time] 2021-08-22 15:15:49 [Duration] 0:00:00 [Log Directory] /u01/app/oracle/cfgtoollogs/autoupgrade/pdb1/cdb1/101/postupgrade ------------------------------------------ [Stage Name] SYSUPDATES [Status] SUCCESS [Start Time] 2021-08-22 15:15:50 [Duration] 0:00:00 [Log Directory] /u01/app/oracle/cfgtoollogs/autoupgrade/pdb1/cdb1/101/sysupdates ------------------------------------------ Upgrade Summary: /u01/app/oracle/cfgtoollogs/autoupgrade/pdb1/cdb1/101/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=cdb2 sqlplus / as sysdba <<EOF alter pluggable database PDB1 save state; shutdown immediate; startup; show pdbs exit; EOF

最后的步骤

如果您已完成 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

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

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

附录

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

在没有 PDBS 的情况下重建 21c CDB1 多租户数据库。

export ORACLE_HOME=/u01/app/oracle/product/21.0.0/dbhome_1 export PATH=$ORACLE_HOME/bin:$PATH export ORACLE_SID=cdb2 #dbca -silent -deleteDatabase -sourceDB cdb2 -sysDBAUserName sys -sysDBAPassword SysPassword1 dbca -silent -createDatabase \ -templateName General_Purpose.dbc \ -gdbname cdb2 -sid cdb2 -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

使用一个 PDB 重建 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
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论