ORACLE DataGuard Logical Standby 详解之:(四)逻辑Standby数据库的自定义配置

本节内容

1 取消自动删除归档文件
逻辑Standby应用完归档后会自动删除该归档文件,这一极具体贴意味的特性,是由逻辑Standby中的一项参数控制的,如果希望禁用自动删除的功能,可以执行下列语句:
SQL> EXEC DBMS_LOGSTDBY.APPLY_SET(‘LOG_AUTO_DELETE’, ‘FALSE’);
PL/SQL procedure successfully completed.

在某些情况下确实需要禁用归档文件的自动删除功能,如逻辑Standby需要执行Flashback Database操作,如果你想恢复到之前的某个时间点,然后再接着应用,就必须要有该时间点后对应的归档,假如LOG_AUTO_DELETE为TRUE的话,应用过的归档已经被删除,想回都回不去。

提 示: 如何知道当前逻辑Standby的参数设置呢?Oracle专门提供了一个数据字典DBA_LOGSTDBY_PARAMETERS,用于查询逻辑Standby当前的参数,例如:
SQL> SELECT * FROM DBA_LOGSTDBY_PARAMETERS;

NAME VALUE
FIRST_SCN 580428
PREP_DICT_RECEIVED
PRIMARY 3409053734
LMNR_SID 1
GUARD_STANDBY READY
LOG_AUTO_DELETE FALSE
APPLY_SCN 581410

需要注意的是,如果禁止了Standby归档文件的自动删除功能,一定要有相应的其他解决方案,不能说取消了自动删除功能,之后逻辑Standby数据库接收到的Standby归档文件就不再管它,这肯定会产生问题,最起码要考虑到逻辑Standby数据库的存储空间是有限的。

逻辑Standby数据库接收到的归档文件并不会显示在V$ARCHIVED_LOG视图中,因此以为通过RMAN中的配置自动删除这些文件的希望也是会落空的。对于这类文件的删除,正确的删除方法通常会按照如下步骤操作:
首先执行DBMS_LOGSTDBY.PURGE_SESSION,该过程会检查当前所有接收到的归档日志文件,对于那些已经应用过,不再需要的文件进行标记,例如:
SQL> EXECUTE DBMS_LOGSTDBY.PURGE_SESSION;
PL/SQL procedure successfully completed.

然后,查询数据字典DBA_LOGMNR_PURGED_LOG,所有被DBMS_LOGSTDBY. PURGE_SESSION标记不再需要的日志都会记录在这里,例如:
SQL>SELECT * FROM DBA_LOGMNR_PURGED_LOG;
FILE_NAME
/U01/STD/ARC00109_0680477835.001
该字典只有一列,即归档文件的实际路径。最后根据显示的路径找到这些文件,然后在操作系统中删除即可。

2 启动实时应用
在默认情况下,逻辑Standby会等待单个归档文件全部接收之后再启动REDO应用,如果Standby数据库配置了Standby Redologs,就可以打开实时应用(Real-Time Apply),这样逻辑Standby端就不再需要等待接收完归档文件,只要有REDO数据写入本地的Standby Redologs,即可通过相应的进程实时写向逻辑Standby数据库。
启动逻辑Standby数据库的实时应用非常简单,只需要在逻辑Standby启动SQL应用时加上IMMEDIATE子句即可,例如:
SQL> ALTER DATABASE START LOGICAL STANDBY APPLY IMMEDIATE;
Database altered.

3 定义DBA_LOGSTDBY_EVENTS记录的事件
要查看逻辑Standby执行REDO应用时的操作信息,一般有两种方式:
一种是查看Oracle数据库的警告日志文件Alert(当然该文件不仅仅包括REDO应用的信息),
另一种是直接查询数据字典DBA_LOGSTDBY_EVENTS。

如果只是想查看日志应用信息的话,数据字典DBA_LOGSTDBY_EVENTS实用性更高,毕竟术业有专攻嘛。不过默认情况下该字典中只保留最近的100条消息(可以通过V$LOGSTDBY_STATS视图查看保留的记录数),这个数量过于偏小,如果要修改该字典中记录的事件数量,也是通过DBMS_LOGSTDBY.APPLY_SET过程完成。例如,设置该字典保留最近999条事件,执行语句如下:
JSSLDG> EXEC DBMS_LOGSTDBY.APPLY_SET(‘MAX_EVENTS_RECORDED’,’999′);
PL/SQL procedure successfully completed.

注 意: 执行DBMS_LOGSTDBY.APPLY_SET过程时,REDO应用必须处于停止状态。
SQL> alter database stop logical standby apply;
SQL> ALTER DATABASE START LOGICAL STANDBY APPLY IMMEDIATE;

另外,还可以通过DBMS_LOGSTDBY.APPLY_SET过程设置是否记录DDL应用的事件,例如:
SQL> EXEC DBMS_LOGSTDBY.APPLY_SET(‘RECORD_APPLIED_DDL’,’TRUE’);
PL/SQL procedure successfully completed.

注:该过程同样要停REDO.

然后启动REDO应用,查看当前的最大保存记录数及是否记录DDL应用的事件:
SQL>ALTER DATABASE START LOGICAL STANDBY APPLY IMMEDIATE;
Database altered.
SQL> select * from v$logstdby_stats where name in (‘maximum events recorded’,’record applied DDL’);

NAME VALUE
maximum events recorded 999
record applied DDL N


数据运维技术 » ORACLE DataGuard Logical Standby 详解之:(四)逻辑Standby数据库的自定义配置