原文链接:https://dohdatabase.com/2021/01/07/how-to-upgrade-a-single-pdb/
autoupgrade 现在支持拔插升级。你从较低版本的 cdb 中拔出 pdb,然后将其插入到较高版本的 cdb 中。插入升级后,pdb最终可以以正常的read write模式打开。
autoupgrade升级概念,支持自动升级21.1.1版本
当涉及到多租户的升级时,我非常喜欢unplug-plug的升级。 这个概念有很多好处:
- 与仅包含一个 pdb 的 cdb 相比,使用unplug-plug升级单个 pdb 的速度要快得多。当您进行unplug-plug升级时,数据库只需要升级 pdb。相比之下,cdb首先升级cdbroot,然后升级pdbseed和任何用户的pdb。
- 不必为 cdb 中的所有 pdb 安排停机时间,只有你要升级的 pdb 需要停机时间。
- 将它与可刷新的 pdb结合起来,你仍然可以拥有一个非常好的备用选项。你可以查看之前的博客文章,了解如何使用可刷新的 pdb。
自动升级和拔插升级
从版本 21开始,autoupgrade 可以执行拔插升级。较新版本的 autoupgrade 也可以升级到较旧的数据库版本,因此如果 autoupgrade 版本与您要升级到的 oracle 数据库版本不匹配,请不要担心。
为了执行拔出升级必须满足一些要求,因此我建议您查看文档。
您必须自己创建目标 cdb。autoupgrade 不会为您执行此操作,这是设计使然。首先,创建一个cdb需要很多信息,可以通过多种不同方式完成(asm?哪些组件?rac?)。您需要一个很长的配置文件来提供所有这些信息。此外,创建 cdb 需要时间,如果 autoupgrade 必须在维护窗口内执行此操作,则会大大延长。
在拔插升级过程中,autoupgrade还允许您更改pdb的名称,您可以决定是否要重用拔插的数据文件或复制数据文件。
如何升级
想象一下以下 autoupgrade 配置文件:
upg1.sid=cdb1
upg1.target_cdb=cdb2
upg1.pdbs=hr,logistics
upg1.source_home=/u01/app/oracle/product/12.2.0.1
upg1.target_home=/u01/app/oracle/product/19
upg1.target_pdb_name.hr=people
autoupgrade将从cdb1中拔下 pdb hr和logistics并将它们插入cdb2。此外,它在插入cdb2时会将hr的名称更改为people。最后,您必须指定两个 cdb 的 oracle home,以便 autoupgrade 可以正确设置环境并连接到数据库。
如果你使用lsj命令来查看进度,它实际上看起来就像只升级了一个pdb:
upg> lsj
---- ------- --------- --------- ------- -------------- -------- ------------------
|job#|db_name| stage|operation| status| start_time| updated| message|
---- ------- --------- --------- ------- -------------- -------- ------------------
| 100| cdb1|dbupgrade|executing|running|20/12/22 15:25|15:29:03|13%upgraded people|
---- ------- --------- --------- ------- -------------- -------- ------------------
total jobs 1
但是如果你查看status -job 100的细节,你会发现两个pdb是并行升级的:
upg> status -job 100
... (removed a lot of information)
details:
[upgrading] is [0%] completed for [cdb1-people]
--------- -------------
|container| percentage|
--------- -------------
| people|upgrade [13%]|
|logistics|upgrade [13%]|
--------- -------------
升级完成后,就可以使用pdb了。 我建议您检查数据库是否以read write模式打开,而不是以restricted模式。 最后,保存状态,这样pdb和cdb一起自动启动:
sql> select name, open_mode, restricted from v$pdbs where name in ('people', 'logistics');
sql> --verify open_mode=read write and restricted=no
sql> alter pluggable database people save state;
sql> alter pluggable database logistics save state;
提醒
通过拔插升级,您不能使用闪回数据库作为您的后备计划。它不能跨插件操作工作。您必须:
- 指示 autoupgrade 在插入更高版本的 cdb 之前复制未插入的数据文件。这样,你仍然拥有未插入的旧数据文件,只需在较低版本的 cdb 中重新创建 pdb。但是你要有额外的停机时间,因为您需要复制数据文件。
- 使用可刷新 pdb 在更高版本的目标 cdb 中构建 pdb 的副本。当需要升级时,请执行最后一次刷新并升级可刷新的 pdb。
以上两个选项都需要额外的磁盘空间来保存数据库的副本。
当然,你也可以使用常规备份作为后备。
如果是有以下情况:
- 你的目标 cdb 有standby database?
目前,如果目标 cdb 有standby database,请不要使用 autoupgrade 进行拔插升级。使用standby database进行插件操作是一项棘手的操作,至少在你想要重用数据文件时是这样。我们仍在试图弄清楚如何在自动升级中实现它。
话虽如此,这绝对是可行的。您可以在以下 mos 说明中了解更多信息:
- reusing the source standby database files when plugging a pdb into the primary
- database of a data guard configuration (doc id 2273829.1)
aking use deferred pdb recovery and the standbys=none feature with oracle multitenant (doc id 1916648.1)
- 您正在使用tde表空间加密?
目前,如果pdb中的任何表空间使用了tde tablespace encryption加密,不要使用autoupgrade执行unplug-plug升级。 我们正在努力使autoupgrade能够更好地与tde密钥库交互,所以请留意即将推出的版本
如果目标cdb中启用了“tde tablespace encryption”,仍然可以使用“autoupgrade”。 pdb将作为未加密的pdb插入。
结论
自版本 21 起,autoupgrade 支持进行拔插升级。它包括用于重命名 pdb 和使用拔出数据文件副本的有用功能。
延伸阅读
- understanding unplug-plug upgrades with autoupgrade – oracle database 21c upgrade guide
- about refreshable clone pdbs – oracle database 19c administrator’s guide
- upgrading in the cloud – vm db systems – 12.2.0.1 pdb to 19c – blog post
- new version of autoupgrade – blog post
- autoupgrade tool (doc id 2485457.1) – my oracle support