场景描述:IP为192.168.133.120 备库同步异常,需进行恢复,主库IP:192.168.133.121;
系统均为windows 2008 sp2;数据库版本均为11.2.0.4.
备库执行:
在系统service服务手动开启实例后,按如下操作:
SQL> select open_mode from v$database;
OPEN_MODE
---------------
MOUNTED
SQL> alter database open;
alter database open
第 1 行出现错误:
ORA-10458: standby database requires recovery
ORA-01196: file 1 is inconsistent due to a failed media recovery session
ORA-01110: data file 1: 'D:\APP\ORADATA\orcl\SYSTEM01.DBF'
SQL> alter database recover managed standby database using current logfile disconnect from session;
数据库已更改.
SQL> select sequence#,to_char(first_time,'yyyy-mm-dd hh24:mi:ss'),to_char(next_time,'yyyy-mm-dd hh24:mi:ss'),applied from v$archived_log where first_time >sysdate-1;
未选定行
SQL> select process,client_process,status,sequence#,block# from v$managed_standby;
PROCESS CLIENT_PROCESS STATUS SEQUENCE# BLOCK#
------------------ ---------------- ------------------------ ---------- ----------
ARCH ARCH CONNECTED 0 0
ARCH ARCH CONNECTED 0 0
ARCH ARCH CONNECTED 0 0
ARCH ARCH CONNECTED 0 0
MRP0 N/A WAIT_FOR_GAP 27975 0
备库告警日志:
FAL[client]: Failed to request gap sequence
GAP - thread 1 sequence 27975-28074
DBID 1145688027 branch 766571044
FAL[client]: All defined FAL servers have been attempted.
------------------------------------------------------------
Check that the CONTROL_FILE_RECORD_KEEP_TIME initialization
parameter is defined to a value that's sufficiently large
enough to maintain adequate log switch information to resolve
archivelog gaps.
说明:此时确定备库能mount无法open,日志未实时应用.
此处采用重新复制数据库解决,
验证监听和tns配置:
主库执行:
C:\Users\Administrator>set ORACLE_HOME=D:\app\Administrator\product\11.2.0\dbhome_1
C:\Users\Administrator>set ORACLE_SID=orcl
C:\Users\Administrator>set path=D:\app\Administrator\product\11.2.0\dbhome_1\bin;%path%
C:\Users\Administrator>ping 192.168.133.120
C:\Users\Administrator>tnsping orcldg
C:\Users\Administrator>sqlplus sys/oracle@192.168.133.121:1521/orcl as sysdba
C:\Users\Administrator>sqlplus sys/oracle@192.168.133.120:1521/orcldg as sysdba
备库执行:
SQL> shutdown immediate
SQL> startup nomount
SQL> exit
C:\Users\Administrator>ping 132.147.160.3
C:\Users\Administrator>tnsping s2000
C:\Users\Administrator>sqlplus sys/oracle@132.147.15.201:1521/orcldg as sysdba
C:\Users\Administrator>sqlplus sys/oracle@132.147.160.3:1521/orcl as sysdba
C:\Users\Administrator>rman target sys/oracle@orcl auxiliary sys/oracle@orcldg
恢复管理器: Release 11.2.0.4.0 - Production on 星期一 2月 28 18:22:09 2022
Copyright (c) 1982, 2011, Oracle and/or its affiliates. All rights reserved.
已连接到目标数据库: orcl (DBID=1145688027)
已连接到辅助数据库: orcl (未装载)
RMAN> duplicate target database for standby from active database;
启动 Duplicate Db 于 28-2月 -22
使用目标数据库控制文件替代恢复目录
分配的通道: ORA_AUX_DISK_1
通道 ORA_AUX_DISK_1: SID=958 设备类型=DISK
......
正在执行内存脚本
数据文件 1 已转换成数据文件副本
输入数据文件副本 RECID=9 STAMP=1097865665 文件名=D:\APP\ORADATA\orcl\SYSTEM01.DBF
数据文件 2 已转换成数据文件副本
输入数据文件副本 RECID=10 STAMP=1097865666 文件名=D:\APP\ORADATA\orcl\UNDOTBS01.DBF
数据文件 3 已转换成数据文件副本
输入数据文件副本 RECID=11 STAMP=1097865666 文件名=D:\APP\ORADATA\orcl\DRSYS01.DBF
数据文件 4 已转换成数据文件副本
输入数据文件副本 RECID=12 STAMP=1097865666 文件名=D:\APP\ORADATA\orcl\EXAMPLE01.DBF
数据文件 5 已转换成数据文件副本
输入数据文件副本 RECID=13 STAMP=1097865666 文件名=D:\APP\ORADATA\orcl\INDX01.DBF
数据文件 6 已转换成数据文件副本
输入数据文件副本 RECID=14 STAMP=1097865666 文件名=D:\APP\ORADATA\orcl\ODM01.DBF
数据文件 7 已转换成数据文件副本
输入数据文件副本 RECID=15 STAMP=1097865666 文件名=D:\APP\ORADATA\orcl\TOOLS01.DBF
数据文件 8 已转换成数据文件副本
输入数据文件副本 RECID=16 STAMP=1097865666 文件名=D:\APP\ORADATA\orcl\USERS01.DBF
数据文件 9 已转换成数据文件副本
输入数据文件副本 RECID=17 STAMP=1097865666 文件名=D:\APP\ORADATA\orcl\XDB01.DBF
数据文件 10 已转换成数据文件副本
输入数据文件副本 RECID=18 STAMP=1097865666 文件名=D:\APP\ORADATA\orcl\TSPorcl.DBF
数据文件 11 已转换成数据文件副本
输入数据文件副本 RECID=19 STAMP=1097865666 文件名=D:\APP\ORADATA\orcl\WF.DBF
数据文件 12 已转换成数据文件副本
输入数据文件副本 RECID=20 STAMP=1097865666 文件名=D:\APP\ORADATA\orcl\SYSAUX01.DBF
完成 Duplicate Db 于 28-2月 -22
SQL> alter database open;
SQL> select open_mode,name,database_role from v$database
OPEN_MODE NAME DATABASE_ROLE
---------------------------------------- ------------------ --------------------------------
READ ONLY WITH APPLY orcl PHYSICAL STANDBY
SQL> select sequence#,to_char(first_time,'yyyy-mm-dd hh24:mi:ss'),to_char(next_time,'yyyy-mm-dd hh24:mi:ss'),applied from v$archived_log where first_time >sysdate-1;
SEQUENCE# TO_CHAR(FIRST_TIME,'YYYY-MM-DDHH24:MI: TO_CHAR(NEXT_TIME,'YYYY-MM-DDHH24:MI:S APPLIED
---------- -------------------------------------- -------------------------------------- ------------------
31509 2022-02-28 18:22:50 2022-02-28 18:40:57 YES
31508 2022-02-28 18:01:32 2022-02-28 18:22:50 YES
31510 2022-02-28 18:40:57 2022-02-28 18:41:32 IN-MEMORY
SQL> select process,status from v$managed_standby;
PROCESS STATUS
------------------ ------------------------
ARCH CONNECTED
ARCH CONNECTED
ARCH CLOSING
ARCH CLOSING
RFS IDLE
RFS IDLE
RFS IDLE
RFS IDLE
MRP0 APPLYING_LOG
已选择9行.
参数说明:
RFS(remote file server):运行在备库上的进程,用于在备库上进行主库的日志恢复。默认,这个进程用于接收从主库传送过来的归档日志。
当物理备库启用了 Redo Apply时,备库可以通过实时应用这个特性,直接使用这个进程从 standby redo log 中直接应用 redo 日志。
MRP:当物理备库启用了实时应用的时候,会创建这个进程,用于日志的实时应用。
下面是截取备库 alert 日志中的一段信息
2348 Starting background process MRP0
2349 Wed Nov 11 11:24:25 2015
2350 MRP0 started with pid=7, OS id=8220
2351 Wed Nov 11 11:24:26 2015
2352 MRP0: Background Managed Standby Recovery process started (newdb)
当数据库主备角色切换时,备库会杀掉这个进程,下面是 alert 日志中的一段
4777 MRP0: Background Media Recovery process shutdown (newdb)
4778 Wed Nov 11 11:22:51 2015
4779 Role Change: Canceled MRP
4780 Killing 2 processes (PIDS:27972,20487) (all RFS) in order to disallow current and future RFS connections. Requested by OS process 27978
4781 Stopping Emon pool
4782 All dispatchers and shared servers shutdown
4783 CLOSE: killing server sessions.
备注:
WAIT_FOR_LOG - 进程正在等待归档的重做日志完成
WAIT_FOR_GAP - 进程正在等待解决存档差距
APPLYING_LOG - 进程正在将归档的重做日志主动应用于备用数据库