|
3.4. 处理归档裂缝Archive Gap
Primary数据库完成了本地归档,但是在传输给Standby数据库时因为各种原因导致远程归档失败,那么这部分丢失的日志就是归档裂缝。
3.4.1. 自动处理归档裂缝
从Data Guard 10g版本开始,Primary数据库每隔1分钟会自动发起检查,如果发现裂缝会自动进行修复,不需要人工进行干预。FAL(Fetch Archive Log)机制有2部分组成,FAL server和FAL client。FAL client的作用是自动发起传输归档日志的请求,FAL server则响应请求并传输缺失的归档日志。如果Data Guard中有多个Standby数据库,FAL可以从其他的Standby数据库那获取归档日志。
FAL机制可以处理以下几种情况的日志裂缝:
a. 在创建Data Guard时,通过Primary数据库的热备份集创建Standby数据库后,FAL会自动检索Primary数据库的归档日志并恢复Standby数据库以进行同步。
b. 如果Standby数据库的归档日志在被应用之前就删除了,FAL会重新传输一份归档日志。
c. 因为磁盘错误等原因或者归档日志被其他文件覆盖导致归档日志无法被应用,FAL会重新传输一份归档日志。
配置该功能需要2个参数FAL_SERVER和FAL_CLINET,这2个参数的值都是在tnsnames.ora中预先定义的Oracle网络服务名:
FAL_SERVER:指定FAL机制获取归档日志的来源,可以包含多个值,例如FAL_SERVER= primary_db,standby3_db。
FAL_CLIENT:指定FAL机制发起请求的客户端,一般来说是Standby数据库,例如FAL_CLIENT=standby1_db。
3.4.2. 手动处理归档裂缝
以下示例是物理Standby数据库手动处理的过程:
Step 1. 查询V$ARCHIVE_GAP视图获得归档裂缝。
Standby数据库:
SQL> SELECT * FROM V$ARCHIVE_GAP;
THREAD# LOW_SEQUENCE# HIGH_SEQUENCE#
----------- -----------------------------------------------
1 7 10
从视图中看出7号到10号归档日志丢失。
Step 2. 查询V$ARCHIVED_LOG获取归档裂缝所在的归档日志文件。
Primary数据库:
SQL> SELECT NAME FROM V$ARCHIVED_LOG WHERE THREAD#=1 AND DEST_ID=1 AND SEQUENCE#BETWEEN 7 AND 10;
NAME
--------------------------------------------------------------------------------
/primary/thread1_dest/arcr_1_7.arc
/primary/thread1_dest/arcr_1_8.arc
/primary/thread1_dest/arcr_1_9.arc
Step 3. 将以上3个文件copy到Standby数据库的/standby路径下,并注册到Standby数据库中。
Standby数据库:
SQL> ALTER DATABASE REGISTER LOGFILE ‘/standby/arcr_1_7.arc’;
SQL> ALTER DATABASE REGISTER LOGFILE ‘/standby/arcr_1_8.arc’;
SQL> ALTER DATABASE REGISTER LOGFILE ‘/standby/arcr_1_9.arc’;
Step 4. 重启Log Apply服务。
如果是逻辑Standby数据库,则通过在逻辑Standby数据库上查询
DBA_LOGSTDBY_LOG视图:
SQL> SELECT THREAD#, SEQUENCE#,FILE_NAME FROM DBA_LOGSTDBY_LOG L
2> WHERE NEXT_CHANGE# NOT IN
3> (SELECT FIRST_CHANGE# FROMDBA_LOGSTDBY_LOG WHERE L.THREAD# = THREAD#)
4> ORDER BY THREAD#,SEQUENCE#;
THREAD# SEQUENCE# FILE_NAME
---------- ---------------------------------------------------------
1 6 /disk1/oracle/dbs/log-1292880008_6.arc
1 10 /disk1/oracle/dbs/log-1292880008_10.arc
将文件编号中7-9的文件从Primary数据库服务器copy到逻辑Standby数据库服务器上,并使用ALTER DATABASE REGISTER命令进行注册,注册后重启Log Apply服务。
4. 日志应用服务Log Apply Services
Standby数据库的RFS进程在接收到传来的日志之后,会写入本地的Standby Redo Log或者Archived Log中,取决于LGWR和ARCH(详见3.3.4)。在Standby Redo Log归档完成之后或者Archived Log写完之后,MRP进程(物理Standby)或者LSP进程(逻辑Standby)会将日志应用到Standby数据库。根据日志应用类型的不同,Standby分为物理Standby(Redo Apply)和逻辑Standby(SQL Apply)(详见1.2)。
4.1. Redo Apply (物理Standby)
默认情况下,在Standby Redo Log归档之后,MRP进程才会开始恢复数据库。但是在LGWR SYNC模式下可以开启实时应用,或者设置DELAY属性开启延时应用。
? 开启Redo Apply:
SQL> ALTER DATABASE RECOVER MANAGEDSTANDBY DATABASE; 开启前台Redo Apply,开启之后该命令行窗口会停留在Redo Apply阶段并且无法响应其他操作,直到其他的session终止了日志应用。
SQL> ALTER DATABASE RECOVER MANAGEDSTANDBY DATABASE {DISCONNECT | DISCONNECT FROM SESSION}; 开启后台Redo Apply,开启之后Redo Apply将在后台进行,命令行窗口可以继续操作。
? 开启Redo Apply实时应用:
SQL> ALTER DATABASE RECOVER MANAGEDSTANDBY DATABASE USING CURRENT LOGFILE;
? 设置Redo Apply延时应用:
设置LOG_ARCHIVE_DEST_n参数中的delay属性(详见3.3.11)
? 取消Redo Apply延时功能:
SQL> ALTER DATABASE RECOVER MANAGEDSTANDBY DATABASE NODELAY;
? 关闭Redo Apply:
SQL> ALTER DATABASE RECOVER MANAGEDSTANDBY DATABASE CANCEL;
SQL> ALTER DATABASE RECOVER MANAGEDSTANDBY DATABASE FINISH;
注意:cancel表示switchover, finish表示failover。
4.2. SQL Apply (逻辑Standby)
逻辑Standby是通过LSP进程,在Redo Standby Log归档之后,通过log miner技术从Redo中还原出SQL语句并应用到Standby数据库。
? 开启SQL Apply:
SQL> ALTER DATABASE START LOGICALSTANDBY APPLY;
? 开启SQL Apply实时应用:
SQL> ALTER DATABASE START LOGICAL STANDBYAPPLY IMMEDIATE;
? 开启SQL Apply延时应用:
方法同Redo Apply。
? 取消SQL Apply延时功能:
SQL> ALTER DATABASE START LOGICALSTANDBY APPLY NODELAY;
? 关闭SQL Apply:
SQL> ALTER DATABASE STOP LOGICALSTANDBY APPLY;
|
|