DG BROKER 之 REINSTATE DATABASE (把旧主库恢复到备用库)
DGMGRL> connect sys/oracle@dbsalve;
已连接。
DGMGRL> show configuration;
配置 - DG_BROKER_SALVE
保护模式: MaxAvailability
数据库:
DBSALVE - 主数据库
错误: ORA-16825: 检测到数据库的多个错误或警告, 包括与快速启动故障转移相关的错误或警告
DBMAST - (*) 物理备用数据库 (禁用)
ORA-16661: 需要恢复备用数据库
快速启动故障转移: ENABLED
配置状态:
ERROR
DGMGRL> show configuration verbose;
配置 - DG_BROKER_SALVE
保护模式: MaxAvailability
数据库:
DBSALVE - 主数据库
错误: ORA-16825: 检测到数据库的多个错误或警告, 包括与快速启动故障转移相关的错误或警告
DBMAST - (*) 物理备用数据库 (禁用)
ORA-16661: 需要恢复备用数据库
(*)快速启动故障转移目标
属性:
FastStartFailoverThreshold ='120'
OperationTimeout ='30'
FastStartFailoverLagLimit ='30'
CommunicationTimeout ='180'
ObserverReconnect ='0'
FastStartFailoverAutoReinstate ='TRUE'
FastStartFailoverPmyShutdown ='TRUE'
BystandersFollowRoleChange ='ALL'
ObserverOverride ='FALSE'
ExternalDestination1 =''
ExternalDestination2 =''
PrimaryLostWriteAction ='CONTINUE'
快速启动故障转移: ENABLED
阈值: 120 秒
目标: DBMAST
观察程序: DB-Salve
滞后限制: 30 秒 (未使用)
关闭主数据库: TRUE
自动恢复: TRUE
观察程序重新连接: (无)
观察程序覆盖: FALSE
配置状态:
ERROR
启动备用库
SQL> startup mount;
ORACLE 例程已经启动。
SQL> set linesize 1000
col name format a10;
col db_unique_name format a10;
col open_mode format a20;
col protection_mode format a20;
col database_role format a20;
col switchover_status format a20;
SQL> SELECTNAME,OPEN_MODE,PROTECTION_MODE,DATABASE_ROLE,SWITCHOVER_STATUS,DB_UNIQUE_NAMEFROM V$DATABASE;
NAME OPEN_MODE PROTECTION_MODE DATABASE_ROLE SWITCHOVER_STATUS DB_UNIQUE_
------------------------------ -------------------- ---------------------------------------- ----------
DBMAST MOUNTED MAXIMUMAVAILABILITY PRIMARY NOT ALLOWED DBMAST
郁闷还是主库角色
连接上备用库看看情况
DGMGRL> connect sys/oracle@DBMAST;
已连接。
DGMGRL> show configuration verbose;
配置 - DG_BROKER_SALVE
保护模式: MaxAvailability
数据库:
DBSALVE - 主数据库
DBMAST - (*) 物理备用数据库
(*)快速启动故障转移目标
属性:
FastStartFailoverThreshold ='120'
OperationTimeout ='30'
FastStartFailoverLagLimit ='30'
CommunicationTimeout ='180'
ObserverReconnect = '0'
FastStartFailoverAutoReinstate ='TRUE'
FastStartFailoverPmyShutdown ='TRUE'
BystandersFollowRoleChange ='ALL'
ObserverOverride ='FALSE'
ExternalDestination1 =''
ExternalDestination2 =''
PrimaryLostWriteAction ='CONTINUE'
快速启动故障转移: ENABLED
阈值: 120 秒
目标: DBMAST
观察程序: DB-Salve
滞后限制: 30 秒 (未使用)
关闭主数据库: TRUE
自动恢复: TRUE
观察程序重新连接: (无)
观察程序覆盖: FALSE
配置状态:
ORA-16665: 从数据库等待结果时超时
DGM-17017: 无法确定配置状态
情况依旧
看看原来主库的DG信息
[oracle@DB-MASTERtrace]pwd
/u01/app/software/oracle/diag/rdbms/dbmast/DBMAST/trace
[oracle@DB-MASTER trace]ll drcDBMAST.log
-rw-r----- 1 oracle oinstall 2.1M 4月 25 15:25 drcDBMAST.log
04/25/2016 14:33:23
>> Starting Data Guard Brokerbootstrap <<
Broker Configuration File Locations:
dg_broker_config_file1 ="/u01/app/software/oracle/product/11.2.0/db_1/dbs/dr1DBMAST.dat"
dg_broker_config_file2 ="/u01/app/software/oracle/product/11.2.0/db_1/dbs/dr2DBMAST.dat"
04/25/2016 14:33:27
DMON Registering serviceDBMAST_DGB with listener(s)
Broker Configuration: "DG_BROKER_SALVE"
Protection Mode: Maximum Availability
Fast-Start Failover (FSFO): Enabled, flags=0x40051, version=2
Primary Database: DBSALVE (0x01010000)
Standby Database: DBMAST, Enabled Physical Standby (FSFO target) (0x02010000)
04/25/2016 14:33:31
Failed to connect to remote databaseDBSALVE. Error is ORA-12541
Failed to send message to site DBSALVE.Error code is ORA-12541.
database DBMAST unable to contact primarydatabase for version check; status ORA-12541
completing bootstrap of this database
Creating process RSM0
04/25/2016 14:33:34
SQL Execution error=604, sql=[ALTERDATABASE MOUNT]. See error stack below.
ORA-00604: 递归 SQL 级别 1 出现错误
ORA-01100: 数据库已装载
Failed to mount standby database.
Apply Instance for Database DBMAST set toDBMAST
Database Resource SetState Error (16746)
SQL Execution error=604, sql=[ALTERDATABASE RECOVER MANAGED STANDBY DATABASE THROUGH ALL SWITCHOVER DISCONNECT USING CURRENT LOGFILE]. See error stack below.
ORA-00604: 递归 SQL 级别 1 出现错误
ORA-01665: 控制文件不是备用控制文件
Failed to connect to remote databaseDBSALVE. Error is ORA-12541
Failed to send message to site DBSALVE.Error code is ORA-12541.
Command EDIT DATABASE DBMAST SET PROPERTYActualApplyInstance = DBMAST completed
04/25/2016 15:18:57
Site DBSALVE returned ORA-16665.
04/25/2016 15:19:12
Site DBSALVE returned ORA-16665.
04/25/2016 15:19:27
Site DBSALVE returned ORA-16665.
04/25/2016 15:19:42
Site DBSALVE returned ORA-16665.
04/25/2016 15:19:57
Site DBSALVE returned ORA-16665.
04/25/2016 15:20:12
Site DBSALVE returned ORA-16665.
04/25/2016 15:20:27
Site DBSALVE returned ORA-16665.
04/25/2016 15:20:42
Site DBSALVE returned ORA-16665.
04/25/2016 15:20:57
Site DBSALVE returned ORA-16665.
04/25/2016 15:21:12
Site DBSALVE returned ORA-16665.
04/25/2016 15:21:27
Site DBSALVE returned ORA-16665.
04/25/2016 15:21:43
Site DBSALVE returned ORA-16665.
04/25/2016 15:22:37
数据库跟踪信息
***********************************************************************
Fatal NI connect error 12514, connectingto:
(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.0.202)(PORT=1521)))(CONNECT_DATA=(SERVICE_NAME=DBSALVE_DGB)(CID=(PROGRAM=oracle)(HOST=DB-MASTER)(USER=oracle))))
VERSION INFORMATION:
TNSfor Linux: Version 11.2.0.4.0 - Production
TCP/IPNT Protocol Adapter for Linux: Version 11.2.0.4.0 - Production
Time: 25-4月 -2016 15:18:29
Tracing not turned on.
Tnserror struct:
ns main err code: 12564
TNS-12564:TNS: 拒绝连接
ns secondary err code: 0
nt main err code: 0
nt secondary err code: 0
nt OS err code: 0
Mon Apr 25 15:22:37 2016
NSV0 started with pid=24, OS id=1956
这个监听报错是啥么鬼? 下面这句话好难懂, 是说DB-MASTER 原来的主库启动一个连接,去连接202新主库服务名是DBSALVE_DGB
(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.0.202)(PORT=1521)))(CONNECT_DATA=(SERVICE_NAME=DBSALVE_DGB)(CID=(PROGRAM=oracle)(HOST=DB-MASTER)(USER=oracle))))
而上面的 DG BROKER 跟踪信息报错是红色部分说DMON 自动注册个新服务在DB-MAST上.
那好吧我们在新主库人工注册个服务去
服务摘要..
服务 "DBSALVE" 包含 1 个实例。
实例"DBSALVE", 状态 UNKNOWN, 包含此服务的 1 个处理程序...
服务 "DBSALVE_DGB"包含 1 个实例。
实例 "DBSALVE", 状态 UNKNOWN, 包含此服务的 1 个处理程序...
服务 "DBSALVE_DGMGRL.shark.com" 包含 1 个实例。
实例"DBSALVE", 状态 UNKNOWN, 包含此服务的 1 个处理程序...
命令执行成功
DGMGRL> REINSTATE DATABASE 'DBMAST';
正在恢复数据库 "DBMAST", 请稍候...
警告: ORA-16575: 故障转移正在进行中, 因此请求已终止
恢复数据库 "DBMAST" 失败
SQL> SELECTNAME,OPEN_MODE,PROTECTION_MODE,DATABASE_ROLE,SWITCHOVER_STATUS,DB_UNIQUE_NAMEFROM V$DATABASE;
NAME OPEN_MODE PROTECTION_MODE DATABASE_ROLE SWITCHOVER_STATUS DB_UNIQUE_
---------- -------------------- ---------------------------------------- -------------------- ----------
DBMAST MOUNTED MAXIMUMAVAILABILITY PHYSICALSTANDBY RECOVERY NEEDED DBMAST
角色已经改变了,可配置信息
DGMGRL> show configuration ;
错误:
ORA-16795: 需要重新创建备用数据库
配置详细信息不能由 DGMGRL 确定
DGMGRL>
好吧,先试试下归档日志同步下
新主库
SQL> alter system set log_archive_dest_state_2=enablescope=both;
新备库
SQL> alter database recover managed standby databasedisconnect from session;
SQL> SELECTNAME,OPEN_MODE,PROTECTION_MODE,DATABASE_ROLE,SWITCHOVER_STATUS,DB_UNIQUE_NAMEFROM V$DATABASE;
NAME OPEN_MODE PROTECTION_MODE DATABASE_ROLE SWITCHOVER_STATUS DB_UNIQUE_
---------- -------------------- ---------------------------------------- -------------------- ----------
DBMAST MOUNTED MAXIMUMAVAILABILITY PHYSICAL STANDBY SWITCHOVER PENDING DBMAST
退出DGMGRL 重新进去
欢迎使用 DGMGRL, 要获取有关信息请键入"help"。
DGMGRL> connect sys/oracle@DBSALVE
已连接。
DGMGRL> show configuration;
配置 - DG_BROKER_SALVE
保护模式: MaxAvailability
数据库:
DBSALVE - 主数据库
错误: ORA-16820: 快速启动故障转移观察程序不再对此数据库进行观察
DBMAST - (*) 物理备用数据库 (禁用)
ORA-16661: 需要恢复备用数据库
快速启动故障转移: ENABLED
配置状态:
ERROR
发现新备库上目录里有FSFO.DAT文件 说明 观察程序已经运行中. 只是.. 算了 还是关闭它
DGMGRL> STOP OBSERVER
错误: ORA-16636: 快速启动故障转移目标备用数据库处于错误状态, 无法停止观察程序
失败。
OK 我们再来一次REINSTATE,关闭备库
SQL> select fs_failover_status from v$database;
FS_FAILOVER_STATUS
------------------------------------------------------------------
DISABLED
SQL> shutdown immediate;
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> startup mount;
ORACLE 例程已经启动。
Total System Global Area 446775296 bytes
Fixed Size 2254104 bytes
Variable Size 360712936 bytes
Database Buffers 79691776 bytes
Redo Buffers 4116480 bytes
数据库装载完毕。
REINSTATE
DGMGRL> show configuration;
配置 - DG_BROKER_SALVE
保护模式: MaxAvailability
数据库:
DBSALVE - 主数据库
错误: ORA-16820: 快速启动故障转移观察程序不再对此数据库进行观察
DBMAST - (*) 物理备用数据库 (禁用)
ORA-16661: 需要恢复备用数据库
快速启动故障转移: ENABLED
配置状态:
ERROR
DGMGRL> reinstate database 'DBMAST';
正在恢复数据库 "DBMAST", 请稍候...
已成功恢复数据库 "DBMAST"
喔操 居然成功了 喜悦心情….
DGMGRL> show configuration;
配置 - DG_BROKER_SALVE
保护模式: MaxAvailability
数据库:
DBSALVE - 主数据库
错误: ORA-16820: 快速启动故障转移观察程序不再对此数据库进行观察
DBMAST - (*) 物理备用数据库
快速启动故障转移: ENABLED
配置状态:
ERROR
备库看看
SQL> SELECTNAME,OPEN_MODE,PROTECTION_MODE,DATABASE_ROLE,SWITCHOVER_STATUS,DB_UNIQUE_NAMEFROM V$DATABASE;
NAME OPEN_MODE PROTECTION_MODE DATABASE_ROLE SWITCHOVER_STATUS DB_UNIQUE_
---------- -------------------- ---------------------------------------- -------------------- ----------
DBMAST READ ONLY WITH APPLY MAXIMUM AVAILABILITYPHYSICAL STANDBY NOT ALLOWED DBMAST
然后在主备上
DGMGRL> stop OBSERVER;
完成。
然后再新主库上开启 OBSERVER;
DGMGRL> show configuration;
配置 - DG_BROKER_SALVE
保护模式: MaxAvailability
数据库:
DBSALVE - 主数据库
DBMAST - (*) 物理备用数据库
快速启动故障转移: ENABLED
配置状态:
SUCCESS
这里我们还是把OBSERVER 放在备库好 最好后台运行.