管理物理和快照备数据库(Physical and Snapshot Standby Databases)

OracleDataGuard提供了物理备数据库功能,允许在只读模式下打开以分担查询负载。实时查询特性确保备数据库与主数据库同步,允许安全查询。文章详细介绍了如何管理物理备数据库,包括开启、监控、调整以及处理各种数据库更改和恢复操作。此外,还讨论了实时查询的限制、自动块介质恢复和手动恢复损坏数据块的方法。内容涵盖了从主数据库到备数据库的数据文件管理、redo日志文件组的增删、NOLOGGING操作的影响以及如何处理丢失写错误。

1.打开物理备数据库

物理备数据库可以打开做只读访问,用于从主数据库卸载查询负载。

如果已经购买Oracle Active Data Guard选项的授权,当数据库打开时Redo Apply可以是激活的,因此允许查询返回与从主数据库返回的完全相同的结果。这个功能也称为实时查询特性。


1.1. 实时查询

数据库初始化参数COMPATIBLE必须设置成11.0或更高来使用Oracle Active Data Guard选项的实时查询特性。

如果挂载的数据库实例上Redo Apply是活动的,物理备数据库实例不能被打开。使用以下SQL语句停止Redo Apply,以只读方式打开备数据库实例,然后重启Redo Apply:
SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;
SQL> ALTER DATABASE OPEN;
SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT;

注:如果在一个打开的实例上Redo Apply是活动的,其他备数据库实例不用停止Redo Apply就可以被打开。

如果物理备数据库的其他实例在打开状态,挂载的物理备数据库实例上的Redo Apply不可以启动。实例必须打开后再启动Redo Apply。

以下示例显示V$DATABASE.OPEN_MODE列在物理数据库以实时查询模式打开时的变化。

SQL> select open_mode from v$database;
OPEN_MODE
--------------------
MOUNTED

SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;
Database altered.

SQL> ALTER DATABASE OPEN;
Database altered.

SQL> SELECT open_mode FROM V$DATABASE;
OPEN_MODE
--------------------
READ ONLY

SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT;
Database altered.

SQL> select open_mode from v$database;
OPEN_MODE
--------------------
READ ONLY WITH APPLY

1.1.1. 监控实时查询环境中的延迟应用

如果使用实时查询来从主数据库卸载查询到物理备数据库,可以监控应用延迟来确保它在可以接受的范围内。

当前的应用延迟是在上次应用的更改在备数据库上可见和相同的更改在主数据库上可见之间过去的时间的差异。

查询视图V$DATAGUARD_STATS获得应用延迟。
SQL> SELECT name, value, datum_time, time_computed FROM V$DATAGUARD_STATS WHERE name like ‘apply lag’;

NAME            VALUE            DATUM_TIME          TIME_COMPUTED
--------- ------------- -------------------   -------------------
apply lag  +00 00:00:00  05/27/2009 08:54:16  05/27/2009 08:54:17

apply lag度量值是使用从主数据库定期接收的数据计算的。DATUM_TIME列包含备数据库上次接收数据的时间戳。TIME_COMPUTED列包含计算apply lag度量时的时间戳。这些列的值的差异应该少于30秒,如果差异大于30秒,apply lag度量值可能会不准确。

查询视图V$STANDBY_EVENT_HISTOGRAM获取显示从备实例上次启动以来的apply lag的历史值直方图。

SQL> SELECT * FROM V$STANDBY_EVENT_HISTOGRAM WHERE NAME = ‘apply lag’
AND COUNT > 0;

NAME 			TIME UNIT 		COUNT 		LAST_TIME_UPDATED
--------- --------- -------- ----------- ------------------------
apply lag 		0 seconds 		79681 		06/18/2009 10:05:00
apply lag 		1 seconds 		1006 		06/18/2009 10:03:56
apply lag 		2 seconds 		96 			06/18/2009 09:51:06
apply lag 		3 seconds 		4 			06/18/2009 04:12:32
apply lag 		4 seconds 		1 			06/17/2009 11:43:51
apply lag 		5 seconds 		1 			06/17/2009 11:43:52

注:COUNT值是应用延迟落在这个时间范围内的次数,物理备数据库每秒采集一次数据,增加直方图中对应的时间范围的COUNT值。

为了评估一段时间的apply lag,可以在时间段的开始对视图V$STANDBY_EVENT_HISTOGRAM做个快照,然后在时间段的末尾再对视图做个快照进行对比。


1.1.2. 在实时查询环境中配置apply lag tolerance

会话参数STANDBY_MAX_DATA_DELAY可以用来为非管理用户向处于实时查询模式的物理备数据库发出的查询指定会话特定的应用延迟容忍值(以秒为单位)。

这个特性允许查询安全地从主数据库卸载到物理备数据库,因为它可以检测到备数据库是否变成不可接受的已过时的。

STANDBY_MAX_DATA_DELAY值 说明
NONE 缺省值,不管备数据库的应用延迟多少,总是执行向物理备数据库发出的查询。
非零值 只有应用延迟少于或等于STANDBY_MAX_DATA_DELAY值时,才执行向物理备数据库发出的查询。
0 向物理备数据库发出的查询保证会返回与在主数据库上发出的查询完全相同的结果,除非物理备数据库落后于主数据库,这时会返回ORA-3172错误。

使用ALTER SESSION语句设置STANDBY_MAX_DATA_DELAY值:
SQL> ALTER SESSION SET STANDBY_MAX_DATA_DELAY=2


1.1.3. 在实时查询环境中强制Redo Apply同步

为了确保所有从主数据库接收的redo数据已经应用到物理备数据库,可以使用以下SQL语句:
SQL> ALTER SESSION SYNC WITH PRIMARY;

语句会阻塞直到在命令发出时备数据库接收到的所有redo数据已经应用到物理备数据库。如果备数据库的redo传输状态不是SYNCHRONIZED或Redo Apply不是活动的,将会立即返回错误ORA-3173,不会进行同步。

在某些特定的情况下为了确保执行Redo Apply同步,使用函数SYS_CONTEXT(‘USERENV’,‘DATABASE_ROLE’)创建备数据库专用的触发器(在主数据库上启用但只有运行在备数据库上才会采取某些行动)。例如,在某个特定用户登录连接时才执行ALTER SESSION SYNC WITH PRIMARY语句:
CREATE TRIGGER adg_logon_sync_trigger
AFTER LOGON ON user.schema
begin
if (SYS_CONTEXT(‘USERENV’, ‘DATABASE_ROLE’) IN (‘PHYSICAL STANDBY’)) then
execute immediate ‘alter session sync with primary’;
end if;
end;


1.1.4. 实时查询限制

以下是实时查询模式的相关限制:
1)以上描述的应用延迟控制和Redo Apply同步机制要求客户端连接和发出查询的物理备数据库在实时查询模式
2)如果应用延迟控制参数STANDBY_MAX_DATA_DELAY设置为0或使用了SQL语句ALTER SESSION SYNC WITH PRIMARY,还有下面的限制:
a. 备数据库必须通过SYNC传输接收redo数据
b. 备数据库的redo传输状态必须是SYNCHRONIZED和主数据库必须运行在最大保护模式或最大可用模式
c. 实时Apply必须启用
3)Oracle Active Data Guard在Oracle RAC环境中通过使用缓存融合(cache fusion)来获得实时查询的高性能。这允许Oracle Data Guard apply instance和查询在缓存上工作,而不被磁盘I/O限制减慢速度。


1.1.5. 自动块介质恢复

如果数据库被访问时遇到了损坏的数据块,它们可以自动被没有损坏的数据块拷贝替换。自动块介质恢复要求符合以下条件:
1)物理备数据库必须运行在实时查询模式(需要购买Oracle Active Data Guard授权)
2)物理备数据库必须运行实时Apply

取决于是在主数据库还是备数据库上遇到损坏块,自动块介质恢复运行在两个方向上。

主数据库的损坏块
如果在主数据库上遇到了损坏数据块,主数据库会在备数据库上自动搜索这些数据块未损坏的拷贝,如果找到了,将它们传输回主数据库。
主数据库只需要设置了LOG_ARC

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值