Relocating a PDB

您可以将PDB移动到其他CDB或application container。

8.1 About PDB Relocation

在relocation期间,源PDB可以以 read/write 模式打开并且功能齐全。

当源PDB通过活动会话打开时,PDB relocation将执行源PDB数据文件的在线块级副本,redo和undo。 当目标PDB由于ALTER PLUGGABLE DATABASE OPEN语句而联机时,Oracle数据库将终止活动会话并关闭源PDB。

下图显示了common PDB(即不是application PDB)到新的单实例CDB的重定位。 源PDB插入CDB root,目标PDB插入CDB root。 请注意,CREATE PLUGGABLE DATABASE ... RELOCATE 语句将data blocks, undo blocks, and redo blocks复制到新位置。 需要database link。

Figure 8-1 Relocate a PDB into the Root Container

Description of Figure 8-1 follows

当目标PDB是application PDB or application root时,您可以使用以下选项:

  • 您可以将PDB作为application PDB重定位到application container中。 目标PDB可以位于相同的CDB或不同的CDB中。
  • 您可以将application PDB从一个application root重新定位到另一个。 目标PDB可以位于相同的CDB或不同的CDB中。
  • 您可以将一个空的application root目录从一个CDB重定位到另一个CDB,但该application root目录必须没有任何托管的application PDB。

下图说明了此技术如何在application container中创建新的application PDB。

Figure 8-2 Relocate a PDB into an Application Container

Description of Figure 8-2 follows

首次打开重定位的PDB时,Oracle数据库会耗尽源PDB上的活动会话,并将客户端连接重定向到重定位的PDB服务。打开重定位的PDB将启动原始源PDB的关闭。源PDB和重定位的PDB永远不会同时打开。

8.2 Purpose of PDB Relocation    PDB迁移的目的

此技术是在最少停机时间或没有停机时间的情况下移动PDB的最快方法。否则,拔出源PDB会导致PDB中断,直到将PDB插入目标CDB为止。

在数据中心之间或从内部环境到云环境之间移动PDB时,所有数据都必须物理移动。对于大型PDB,此过程可能会花费大量时间,可能会违反SLA的可用性组件。 PDB relocation可以完全消除中断。您可以重新定位PDB,而无需使应用程序脱机,更改应用程序或更改网络连接字符串。

8.3 How PDB Relocation Works   PDB重定位如何工作

该操作将与PDB关联的文件移动到新位置,将PDB添加到目标CDB,然后打开PDB。

8.3.1 Server Session Draining When Relocating or Stopping PDBs

计划维护的关键要求是耗尽或故障转移PDB会话,以使应用程序工作不会中断。

Automatic Session Failover    自动会话故障转移

在数据库通用会话耗尽(draining)中,活动会话可以在计时器(timer)下正常退出。计时器到期后,Oracle数据库将终止所有活动的会话,然后将它们重新连接到重定位的PDB。

从Oracle数据库20c开始,在计划的维护期间,数据库可能会确定会话不太可能在耗尽窗口中耗尽。在这种情况下,数据库将调用应用程序连续性并自动对会话进行故障转移。默认情况下,对于在数据库服务和PDB级别上调用的所有维护操作都启用了耗尽功能:stop service, relocate service, relocate PDB, and stop PDB。

注意:如果您的应用程序服务器用户使用了“清除池(Purge Pool)”属性,则请禁用此属性,因为它会中断尚未准备好耗尽的会话。

Rules for Session Draining   会话排空规则

数据库使用一组可扩展的规则来确定何时耗尽数据库会话,该会话将持续到满足规则为止。规则包括以下内容:

  • 标准应用程序服务器测试有效性
  • 自定义SQL测试的有效性
  • 请求边界正在使用中,没有请求处于活动状态
  • 请求边界正在使用中,当前请求已结束
  • 该会话具有一个或多个可恢复的会话状态,并且可以在故障转移时重新创建

典型的用例是在从连接池借用,将连接返回到池以及批量提交时测试连接的应用程序服务器和池化应用程序。耗尽会话时,数据库会自动拦截连接测试,关闭连接,然后返回测试的失败状态。收到失败状态后,应用程序层可以请求其他连接。这样,应用程序不会中断。

Application Continuity with FAN on Oracle RAC   在Oracle RAC上使用FAN进行应用程序连续性

为了使对客户端的影响最小化的最佳配置,请考虑使用FAN在Oracle RAC数据库上配置应用程序连续性。在Oracle Clusterware中,Fleet Patching and Provisioning功能可自动进行PDB重定位。在Oracle RAC环境中,更细粒度的重定位的一个示例是PDB实例之间的服务重定位。 Oracle RAC和Oracle Clusterware提供了一个丰富的高可用性环境,该环境进一步降低了重定位期间对连接的客户端的影响。例如,共享存储可以最大程度地减少或消除复制数据文件的必要性。缺省情况下,Oracle Cloud中启用了透明应用程序连续性(一种应用程序连续性模式)。

注意:在Oracle Clusterware环境中,在不同CDB之间重定位PDB时,必须使用SRVCTL创建非数据库服务。

8.3.2 Stages of PDB Relocation   PDB迁移的阶段

The details of PDB relocation vary depending on the listener networks.

8.3.2.1 PDB Relocation in a Common Listener Network   公共侦听器网络中的PDB重定位

当源位置和目标位置共享公共listener网络时,不需要转发客户端连接,因为SQL*Net层隐式转发客户端连接。

AVAILABILITY NORMAL

当listener网络是公用网络时,请在CREATE PLUGGABLE DATABASE ... RELOCATE中指定AVAILABILITY NORMAL子句。此选项是默认选项。以下情况是 AVAILABILITY NORMAL 的典型用例:

  • Shared listener

如果您在PDB的旧位置和新位置使用相同的侦听器,则重定位完成后,新连接将自动路由到新位置。这种情况是同一主机中CDB之间重定位的典型情况。在这种情况下,PDB将在其新位置重新注册到侦听器。不需要其他连接处理。

  • Cross-registered listeners

如果PDB使用不同的listener,并且您通过配置local_listener和remote_listener参数对其各自的listener进行交叉注册,则重定位是无缝的。 PDB服务的可用性和位置会自动向两个侦听器注册。这种情况是数据中心内主机之间重定位的典型情况,可能是出于负载平衡的目的。

在shared and cross registered listener环境中,所有数据库的服务都发布到公共listener network。因此,公共listener network会立即知道用于重定位的PDB的服务。为避免服务名称空间冲突,PDB服务定义在公共listener network中必须唯一。

Stages of Relocation in a Common Listener Network   公共侦听器网络中的重定位阶段

1. 用户发出 CREATE PLUGGABLE DATABASE ... RELOCATE AVAILABILITY NORMAL。

此步骤执行源PDB从其原始位置到其目标位置的热克隆。从 implicit begin SCN marker 开始,源PDB将data files, undo blocks, and redo blocks复制到目标PDB。

完成此步骤后,将存在此PDB的两个事务一致的副本:一个在源容器中,一个在目标容器中。在操作过程中,事务将在源PDB上不间断地继续进行。连接到源PDB的一个或多个应用程序的用户不知道正在进行重定位。

所有现有的应用程序连接以及在此步骤中创建的新连接将继续连接到源PDB。

2. 用户发出 ALTER PLUGGABLE DATABASE OPEN。

在后台执行以下操作:

  • 目标PDB隐式设置end SCN marker,并应用完成介质恢复所需的any redo or undo操作,以满足implicit end SCN marker。
  • 当目标PDB上发生media recovery时,Oracle数据库将在源PDB上启动活动会话消耗(draining)。
  • PDB服务已在listener中注册,并在目标CDB上可用。
  • 源PDB已关闭。
  • 目标PDB以 read/write 模式打开。

此步骤完成了PDB到目标CDB的重定位。操作结束时,连接指向重新定位的PDB。

在read/write模式下打开PDB后,其状态为NORMAL。如果您尝试以read-only模式打开PDB,数据库将返回错误。

8.3.2.2 PDB Relocation in Isolated Listener Networks    隔离Listener网络中的PDB重定位

当独立的listeners不使用交叉注册(cross-registration)时,目标CDB和源CDB中的listener彼此之间或各自的发布服务之间将不了解。

AVAILABILITY MAX

CREATE PLUGGABLE DATABASE ... RELOCATE 中的 AVAILABILITY MAX 子句隐式指示SQL*Net层重新配置原始listener。在数据中心之间relocating PDB时,这种情况可能很常见。此配置旨在在更新Oracle Internet Directory (OID) 或LDAP服务器或修改客户端连接时为临时配置。

如果本地listener在Oracle RAC配置中重定向到单个客户端访问名称(SCAN)侦听器,则此侦听器可能需要进一步将客户端连接请求重定向到另一个群集节点。默认情况下,Oracle Net侦听器不支持多重重定向。由于任何SCAN侦听器都可以将连接请求路由到任何节点,因此请将ALLOW_MULTIPLE_REDIRECTS_listener_name参数设置为每个SCAN侦听器的listener_name,然后在群集中的每个listener.ora文件中进行设置。例如,如果将SCAN侦听器命名为listener_scan1,listener_scan2和listener_scan3,则每个目标主机上的listener.ora文件应具有以下设置:

ALLOW_MULTIPLE_REDIRECTS_LISTENER_SCAN1=YES
ALLOW_MULTIPLE_REDIRECTS_LISTENER_SCAN2=YES
ALLOW_MULTIPLE_REDIRECTS_LISTENER_SCAN3=YES

警告:请勿为节点侦听器设置ALLOW_MULTIPLE_REDIRECTS_listener_name参数,因为它可能在某些网络配置中允许无限重定向循环。


Stages of Relocation in an Isolated Listener Network   隔离侦听器网络中的重定位阶段

1. 用户发出CREATE PLUGGABLE DATABASE ... RELOCATE AVAILABILITY MAX。

此步骤执行源PDB从其原始位置到其目标位置的热克隆。从隐式开始SCN标记开始,源PDB将data files, undo blocks, and redo blocks复制到目标PDB。

2. 用户发出ALTER PLUGGABLE DATABASE OPEN。

在后台执行以下操作:

  • 目标PDB隐式设置结束SCN标记,并应用完成介质恢复所需的any redo or undo操作,以满足隐式结束SCN标记。
  • 当目标PDB上发生media recovery时,Oracle数据库将在源PDB上启动活动会话消耗。
  • LISTENER_NETWORKS初始化参数在源PDB中使用转发地址隐式更新,并且在源CDB的侦听器PDB服务中使用转发地址进行更新。
  • 介质恢复完成时,目标PDB以read-only模式打开。
  • 在此阶段,仅允许查询目标PDB。查询的行为就像在源PDB上运行一样。但是,尝试DML的连接未完成。
  • 只读连接将立即转发到新的宿主侦听器,新的read/write连接将转发到新的宿主侦听器,它们在此旋转直到目标PDB以一致的状态打开。
  • 源PDB执行SHUTDOWN IMMEDIATE,终止持久连接。
  • 目标PDB以read/write模式打开。

此步骤完成了PDB到目标CDB的重定位。操作结束时,连接指向新近重新定位的PDB。

在read/write模式下打开PDB后,其状态为NORMAL。如果您尝试以read-only模式打开PDB,数据库将返回错误。

注意:一种称为逻辑删除PDB的工件保留在源CDB中,以保护PDB的名称空间并保留侦听器转发配置,直到更新完成。在源CDB的根目录中,逻辑删除PDB在V$CONTAINERS中可见,状态为RELOCATED。当您更改应用程序连接字符串以提供与目标PDB的直接连接时,可以从源CDB删除逻辑删除PDB。

8.4 User Interface for PDB Relocation   用于PDB重定位的用户界面

您可以使用SQL,DBCA或Fleet Patching and Provisioning在命令行上重定位PDB。

SQL Statement    SQL语句

SQL语句的形式如下:

CREATE PLUGGABLE DATABASE ... FROM src_pdb_name@link2src ... RELOCATE AVAILABILITY [MAX | NORMAL]

FROM子句标识源PDB的位置。 对于src_pdb_name,指定源PDB的名称。 对于link2src,指定一个数据库链接,该链接指示源PDB的位置。 数据库链接必须已经在目标CDB中创建,目标CDB是PDB将被重新定位到的CDB。 链接可以连接到远程CDB的root或远程PDB。

AVAILABILITY子句确定数据库如何处理客户端连接。

DBCA

您可以通过以静默方式运行DBCA来重定位PDB。 relocate PDB命令执行重定位。

Table 8-1 relocatePDB Parameters

ParameterDescription

-remotePDBName remote_pdb_name

The name of the PDB that you intend to relocate.  要重定位的PDB的名称

-remoteDBConnString remote_db_conn_string

The net service connection to the remote CDB.  与远程CDB的网络服务连接

-sysDBAUserName sysdbusername

The name of the SYS user in the local CDB.   本地CDB中SYS用户的名称

-sysDBAPassword sysdbapassowrd

The password of the SYS user in the local CDB.   本地CDB中SYS用户的密码

-remoteDBSYSDBAUserName sysdbusername

The name of the SYS user in the remote CDB.  远程CDB中SYS用户的名称

-remoteDBSYSDBAPassword sysdbapassowrd

The password of the SYS user in the remote CDB.  远程CDB中SYS用户的密码

-dbLinkUsername dblink_common_user_name

The name of the common user in the remote CDB.  远程CDB中的普通用户名

-dbLinkUserPassword dblink_common_username_pwd

The password of the common user in the remote CDB.  远程CDB中普通用户的密码

-sourceDB dbname_pdb_toberelocated

The name of the source PDB.  源PDB的名称

-pdbName pdbtoberecreated

The name of the PDB after relocation.  重定位后的PDB名称

Fleet Patching and Provisioning Control (RHPCTL)

在Oracle Grid Infrastructure中,您可以使用Fleet Patching and Provisioning自动将PDB从一个CDB迁移到另一个CDB。

8.5 Relocating a PDB Using CREATE PLUGGABLE DATABASE

CREATE PLUGGABLE DATABASE ... RELOCATE 语句将PDB移动到另一个容器。

target CDB(也称为destination CDB)是将PDB重定位到的CDB。目标PDB是要重定位的PDB。完成 CREATE PLUGGABLE DATABASE ... RELOCATE 操作后,Oracle数据库将PDB从源CDB移到目标CDB。

General Prerequisites  一般先决条件

下表描述了您必须基于不同因素指定的 CREATE PLUGGABLE DATABASE 子句。

Database Mode and State Prerequisites  数据库模式和状态先决条件

您必须满足以下先决条件:

  • 源CDB必须处于local undo模式。
  • 在源CDB中,必须在所有数据库实例中保存PDB的服务和打开状态。以管理员身份登录到CDB根目录,并发出以下语句:
ALTER PLUGGABLE DATABASE ALL SAVE STATE INSTANCES=ALL;

此步骤可确保PDB重定位操作自动启动目标CDB中的PDB服务。

  • 如果目标CDB不在ARCHIVELOG模式下,则在操作期间必须以read-only方式打开目标PDB。如果目标CDB处于ARCHIVELOG模式,则此要求不适用。

User Privilege Prerequisites       用户权限先决条件

您必须满足以下先决条件:

  • 在目标CDB中,当前用户必须在CDB root中具有CREATE PLUGGABLE DATABASE系统特权。
  • 以下先决条件适用于数据库链接:
  1. 数据库链接必须启用从目标CDB到源CDB的连接。
  2. 如果目标是标准PDB,则数据库链接必须连接到源CDB的root。如果目标PDB是application PDB,则数据库链接必须连接到其application root。
  3. 如果数据库链接用户连接到源CDB中的CDB root,则该用户必须是普通用户。如果数据库链接连接到application root,则该用户可以是CDB范围内的普通用户或应用程序普通用户。
  4. 数据库链接用户必须具有CREATE PLUGGABLE DATABASE系统特权或SYSOPER管理特权。

Platform and Character Set Prerequisites   平台和字符集先决条件

您必须满足以下先决条件:

  • 源CDB和目标CDB的平台必须满足以下要求:
  1. 它们必须具有相同的字节序。
  2. 源平台上安装的数据库选件必须与目标平台上安装的数据库选件相同或作为其子集。
  • 如果目标CDB的字符集不是AL32UTF8,则源CDB和目标CDB必须具有兼容的字符集和国家字符集。
  • 如果目标CDB的字符集是AL32UTF8,则此要求不适用。

注意:Oracle Multitenant不支持使用数据链接,扩展数据链接或CONTAINERS()子句由具有不同字符集的容器访问一个容器中的LOB。例如,如果CDB根目录和salespdb具有不同的字符集,则在CDB根目录中运行的CONTAINERS()查询不应访问存储在salespdb中的LOB。

Application Name and Version Prerequisites   应用程序名称和版本先决条件

如果要创建application PDB,则源PDB和目标application container必须具有相同的application名称和版本。

To relocate a PDB   要重定位PDB:

  1. 在SQL * Plus中,以具有CREATE PLUGGABLE DATABASE系统特权的用户身份登录到目标CDB。
  2. 确保当前容器是目标CDB或目标应用程序容器的root。
  3. 使用FROM子句运行CREATE PLUGGABLE DATABASE ... RELOCATE语句。
  4. 在FROM子句中指定源PDB,并包括RELOCATE子句。要将连接从PDB的旧位置重定向到新位置,请指定AVAILABILITY MAX子句。在需要时指定其他子句。
  5. 重定位PDB之后,它处于挂载模式,其状态为RELOCATING。您可以通过查询V $ PDBS视图中的OPEN_MODE列来查看PDB的打开模式。您可以通过查询CDB_PDBS或DBA_PDBS视图的STATUS列来查看PDB的状态。
  6. 为PDB创建一个新的默认服务。该服务与PDB具有相同的名称,可用于访问PDB。必须正确配置Oracle Net Services,客户端才能访问此服务。
  7. (可选)要确定文件复制操作的状态,请查询V $ SESSION_LONGOPS。
  8. OPNAMES列显示kpdbfCopyTaskCbk(表示数据文件副本)和kcrfremnoc(表示重做文件副本)。
  9. 在读/写模式下打开新的PDB。
  10. 完成新PDB到CDB的集成需要执行此步骤。在读/写模式下打开PDB后,其状态为NORMAL。如果尝试以只读模式打开PDB,则会返回错误。
  11. 备份PDB。
  12. 除非备份了PDB,否则无法恢复它。

注意:如果在PDB重定位期间返回了错误,则正在创建的PDB可能处于UNUSABLE状态。您可以通过查询CDB_PDBS或DBA_PDBS视图来检查PDB状态,并且可以通过检查警报日志来了解有关PDB创建错误的更多信息。只能删除不可用的PDB,并且必须先删除它才能创建与不可用的PDB同名的PDB。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值