文概述了使用 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 软件
您可以在此处(OL7、OL8)更详细地了解安装过程,但对于本示例,我们将保持简短。以下命令将执行 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 APEX,validate 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




