使用适用于 Amazon RDS 的 Oracle 副本
要在 Oracle 数据库实例之间配置复制,您可以创建副本数据库。
Oracle 副本概述
Oracle 副本数据库可以是装载模式,也可以是只读模式。只读模式下的 Oracle 副本称为只读副本。装载模式下的 Oracle 副本称为装载副本。
只读和装载副本
创建或修改 Oracle 副本时,可以将其置于以下任一模式:
-
只读模式。这是默认模式。Active Data Guard 会将源数据库中的更改传输并应用到所有只读副本数据库。
您可以从一个源数据库实例创建最多 5 个只读副本。有关适用于所有数据库引擎的只读副本的一般信息,请参阅使用只读副本。有关 Oracle Data Guard 的信息,请参阅 Oracle 文档中的 Oracle Data Guard 概念和管理
。 -
装载模式。在这种情况下,复制使用 Oracle Data Guard,但副本数据库不接受用户连接。装载副本的主要用途是跨区域灾难恢复。
装载的副本无法为只读工作负载提供服务。不论存档日志的保留策略为何,装载副本都会在应用存档重做日志文件后删除这些文件。
您可以为同一源数据库实例同时创建装载和只读数据库副本。您可以将只读副本更改为装载模式,或将装载副本更改为只读模式。在两种情况下,Oracle 数据库都会保留存档日志保留设置。
复制过程中的中断
创建 Oracle 副本时,源数据库实例不会发生中断。Amazon RDS 会拍摄源数据库实例的快照。此快照将成为副本。Amazon RDS 为源数据库和副本设置必要的参数和权限,而不会中断服务。同样,如果删除副本,也不会发生中断。
Oracle 的副本要求
在创建 Oracle 副本之前,请检查以下要求。
Oracle 副本的版本和许可要求
在创建 Oracle 副本之前,请检查版本和许可要求:
-
如果副本处于只读模式,请确保您拥有 Active Data Guard 许可证。如果将副本置于装载模式,则不需要 Active Data Guard 许可证。只有 Oracle 数据库引擎支持装载副本。
-
Oracle 副本仅在 Oracle Enterprise Edition (EE) 引擎中可用。
-
Oracle 副本适用于 Oracle 版本 12.1.0.2.v10 和更高的 12.1 版本、所有 12.2 版本、所有 18c 版本以及所有 19c 版本。
-
Oracle 副本仅适用于 EC2-VPC 平台上的数据库实例。
-
Oracle 副本仅适用于在具有两个或更多 vCPU 的数据库实例类上运行的数据库实例。源数据库实例不能使用 db.t3.micro 实例类。
-
源数据库实例及其所有副本的 Oracle 数据库引擎版本必须相同。不管副本的维护时段是什么,Amazon RDS 在升级源数据库实例之后,都会立即升级副本。对于跨区域副本的主要版本升级,Amazon RDS 会自动执行以下操作:
-
为目标版本生成选项组。
-
将所有选项和选项设置从原始选项组复制到新选项组。
-
将升级后的跨区域副本与新选项组关联。
有关升级数据库引擎版本的更多信息,请参阅升级 Oracle 数据库引擎。
-
Oracle 副本的选项要求
在为 Oracle 创建副本之前,请检查选项组要求:
-
如果 Oracle 副本与其源数据库实例位于同一 AWS 区域,请确保它与源数据库实例属于同一选项组。对源选项组或源选项组成员资格做出的修改会传播到副本。不管副本的维护时段是什么,这些更改在应用到源数据库实例后,都会立即应用到副本。
有关选项组的更多信息,请参阅 使用选项组。
-
在您创建 Oracle 跨区域副本时,Amazon RDS 会为其创建专用选项组。
您无法从专用选项组中删除 Oracle 跨区域副本。任何其他数据库实例都无法使用 Oracle 跨区域副本的专用选项组。
您只能在专用选项组中添加或删除以下非复制选项:
-
NATIVE_NETWORK_ENCRYPTION
-
OEM
-
OEM_AGENT
-
SSL
要将其他选项添加到 Oracle 跨区域副本,请将它们添加到源数据库实例的选项组中。选项还会安装在源数据库实例的所有副本上。对于许可选项,请确保副本具有足够的许可证。
提升 Oracle 跨区域副本时,提升后的副本的行为将与其他 Oracle 数据库实例的行为相同,包括其选项的管理。您可以通过删除副本的源数据库实例来显式或隐式提升副本。
有关选项组的更多信息,请参阅 使用选项组。
-
Oracle 副本的其他要求
在创建 Oracle 副本之前,请检查以下其他要求:
-
如果某个数据库实例是一个或多个跨区域副本的源,该源数据库将会保留其存档重做日志,直到在所有跨区域副本上应用这些日志为止。存档重做日志可能会导致存储消耗增加。
-
主实例上的登录触发器必须允许访问
RDS_DATAGUARD
用户以及任何其AUTHENTICATED_ENTITY
值为RDS_DATAGUARD
或rdsdb
的用户。此外,触发器不得为RDS_DATAGUARD
用户设置当前架构。 -
为了避免阻止来自 Data Guard 代理进程的连接,请不要启用受限会话。有关受限会话的更多信息,请参阅 启用和禁用受限制的会话。
为创建 Oracle 副本做准备
在开始使用副本之前,请执行以下任务。
启用自动备份
您必须在数据库实例上启用自动备份,然后其才能充当源数据库实例。要了解如何执行此过程,请参阅启用自动备份 。
启用强制日志记录模式
建议您启用强制日志记录模式。在强制日志记录模式下,即使将 NOLOGGING
与数据定义语言 (DDL) 语句一起使用,Oracle 数据库也会写入重做记录。
启用强制日志记录模式
-
使用 SQL Developer 等客户端工具登录 Oracle 数据库。
-
通过运行以下过程启用强制日志记录模式。
exec rdsadmin.rdsadmin_util.force_logging(p_enable => true);
有关此过程的更多信息,请参阅 设置强制日志记录。
更改日志记录配置
如果您要更改日志记录配置,建议您在将数据库实例设为副本源之前完成更改。此外,我们还建议您在创建副本后不要修改日志记录配置。修改会导致联机重做日志配置与备用日志配置不同步。
使用 Amazon RDS 过程 rdsadmin.rdsadmin_util.add_logfile
和 rdsadmin.rdsadmin_util.drop_logfile
修改数据库实例的日志记录配置。有关更多信息,请参阅 添加联机重做日志 和 删除联机重做日志。
设置 MAX_STRING_SIZE 参数
创建 Oracle 副本之前,请确保源数据库实例和副本上的 MAX_STRING_SIZE
参数的设置相同。您可以通过将它们与相同的参数组关联来实现。如果您为源和副本使用不同的参数组,则可以将 MAX_STRING_SIZE
设置为相同值。有关设置该参数的更多信息,请参阅为新数据库实例启用扩展数据类型。
规划计算和存储资源
确保源数据库实例及其副本在计算和存储容量方面具有适当的大小,以适合其运行负载。如果副本达到计算、网络或存储资源容量,则副本将停止接收或应用来自其源的更改。Amazon RDS for Oracle 不会介入缓解源数据库实例与其副本之间的高副本滞后。您可以单独修改某个副本的存储和 CPU 资源,而不影响其源及其他副本。
在装载模式下创建 Oracle 副本
默认情况下,Oracle 副本是只读的。要在装载模式下创建副本,请使用控制台、AWS CLI、或 RDS API。
从源 Oracle 数据库实例创建装载副本
-
登录 AWS 管理控制台 并通过以下网址打开 Amazon RDS 控制台:https://console.amazonaws.cn/rds/
。 -
在导航窗格中,选择数据库。
-
选择要作为装载副本源的 Oracle 数据库实例。
-
对于操作,选择创建副本。
-
对于副本模式,选择装载。
-
选择要使用的设置。对于数据库实例标识符,输入该只读副本的名称。根据需要,调整其他设置。
-
对于区域,选择将启动装载副本的区域。
-
选择您的实例大小和存储类型。我们建议您为只读副本使用与源数据库实例相同的数据库实例类和存储类型。
-
对于多可用区部署,选择创建备用实例以便在另一个可用区中创建副本的备用来支持装载副本的故障转移。创建您的装载副本作为多可用区数据库实例与源数据库是否为多可用区数据库实例无关。
-
选择要使用的其他设置。
-
选择创建副本。
在数据库页面中,装载副本具有角色“副本”。
要在装载模式下创建 Oracle 副本,请在 AWS CLI 命令 create-db-instance-read-replica 中将 --replica-mode
设为 mounted
。
例
对于 Linux、macOS 或 Unix:
aws rds create-db-instance-read-replica \ --db-instance-identifier
myreadreplica
\ --source-db-instance-identifiermydbinstance
\ --replica-mode mounted
对于 Windows:
aws rds create-db-instance-read-replica ^ --db-instance-identifier
myreadreplica
^ --source-db-instance-identifiermydbinstance
^ --replica-mode mounted
要将只读副本更改为装载状态,请在 AWS CLI 命令 modify-db-instance 中将 --replica-mode
设为 mounted
。要将装载副本置于只读模式,请将 --replica-mode
设为 read-only
。
要在装载模式下创建 Oracle 副本,请在 RDS API 操作 CreateDBInstanceReadReplica 中指定 ReplicaMode=mounted
。
https://rds.amazonaws.com/ ?Action=CreateDBInstanceReadReplica &DBInstanceIdentifier=myreadreplica &SourceDBInstanceIdentifier=mydbinstance &Version=2012-01-15 &SignatureVersion=2 &SignatureMethod=HmacSHA256 &Timestamp=2012-01-20T22%3A06%3A23.624Z &AWSAccessKeyId=<AWS Access Key ID> &Signature=<Signature> &ReplicaMode=mounted
修改 Oracle 副本模式
要更改现有副本的副本模式,请使用 控制台、AWS CLI 或 RDS API。当您更改为装载模式时,副本将断开所有活动连接。当您更改为只读模式时,Amazon RDS 会初始化 Active Data Guard。
更改操作可能需要几分钟才能完成。在操作过程中,数据库实例状态会更改为正在修改。有关状态更改的更多信息,请参阅数据库实例状态。
将 Oracle 副本的副本模式从装载更改为只读
-
登录 AWS 管理控制台 并通过以下网址打开 Amazon RDS 控制台:https://console.amazonaws.cn/rds/
。 -
在导航窗格中,选择数据库。
-
选择装载副本数据库。
-
选择修改。
-
对于副本模式,选择 只读。
-
选择要使更改的其他设置:
-
选择继续。
-
对于修改计划,选择立即应用。
-
选择修改数据库实例。
要将只读副本更改为装载模式,请在 AWS CLI 命令 modify-db-instance中将 --replica-mode
设为 mounted
。要将装载副本更改为只读模式,请将 --replica-mode
设为 read-only
。
例
对于 Linux、macOS 或 Unix:
aws rds modify-db-instance \ --db-instance-identifier
myreadreplica
\ --replica-modemode
对于 Windows:
aws rds modify-db-instance ^ --db-instance-identifier
myreadreplica
^ --replica-modemode
要将只读副本更改为装载模式,请在 ModifyDBInstance 中设置 ReplicaMode=mounted
。要将装载副本更改为只读模式,请设置 ReplicaMode=read-only
。
https://rds.amazonaws.com/ ?Action=ModifyDBInstance &DBInstanceIdentifier=
myreadreplica
&SourceDBInstanceIdentifier=mysourcedb
&Version=2012-01-15 &SignatureVersion=2 &SignatureMethod=HmacSHA256 &Timestamp=2012-01-20T22%3A06%3A23.624Z &AWSAccessKeyId=<AWS Access Key ID> &Signature=<Signature> &ReplicaMode=mode
排查 Oracle 副本的问题
要监控 Amazon CloudWatch 中的复制滞后,请查看 Amazon RDS ReplicaLag
指标。有关使用复制滞后时间的信息,请参阅 监控只读复制。
如果复制滞后时间太长,则您可以查询一下视图,了解有关滞后的信息:
-
V$ARCHIVED_LOG
– 显示哪些提交已应用到只读副本。 -
V$DATAGUARD_STATS
– 显示组成replicaLag
指标的各个组成部分的详细分解。 -
V$DATAGUARD_STATUS
– 显示 Oracle 内部复制过程的日志输出。