FAST-START failover 就是在当主数据库出现故障时,能快速与可靠的把standby切换成主数据库,在整个过程中不需要人来干预。fast-start failover只能通过dgmgrl与Enterprise Managerg来配置。
只有maximum availability mode or maximum performance mode才能启用fast-start failover模式。在maximum availability模式下面,在切换时可以保证无数据丢失,在maximum performance mode下面,会有数据丢失,丢失多少数据由 FastStartFailoverLagLimit这个参数来配置。
只要observer进程启动过,我们就不需要人为的
干预。当observer与指定的备数据库与主数据库失去连接的时间超过FastStartFailoverThreshold后,observer就会启动fast-start failover 到备数据库。如果配置了
FastStartFailoverPmyShutdown为true,此时原来的主数据库将会自动的shutdown。如果配置
FastStartFailoverAutoReinstate为true,当failover完成后,启动数据库时,会自动的执行
Reinstate database,把原来的主数据库变成备库,并与新主库进行同步。
,如下图: fast-start failover包含3个过程
3.1修改保护模式:
- [oracle@test admin]$ dgmgrl
- DGMGRL for Linux: Version 11.2.0.2.0 - 64bit Production
- Copyright (c) 2000, 2009, Oracle. All rights reserved.
- Welcome to DGMGRL, type "help" for information.
- DGMGRL> connect sys/oracle@htz
- Connected.
- #通过help查看命令的帮忙。
- DGMGRL> help edit
- Edits a configuration, database, or instance
- Syntax:
- EDIT CONFIGURATION SET PROTECTION MODE AS
- {MaxProtection|MaxAvailability|MaxPerformance};
- EDIT CONFIGURATION SET PROPERTY <property name> = <value>;
- EDIT DATABASE <database name> SET PROPERTY <property name> = <value>;
- EDIT DATABASE <database name> RENAME TO <new database name>;
- EDIT DATABASE <database name> SET STATE = <state>
- [WITH APPLY INSTANCE = <instance name>];
- EDIT INSTANCE <instance name> [ON DATABASE <database name>]
- SET AUTO PFILE [ = {<initialization file path>|OFF} ];
- EDIT INSTANCE <instance name> [ON DATABASE <database name>]
- SET PROPERTY <property name> = <value>;
- EDIT INSTANCE * ON DATABASE <database name>
- SET PROPERTY <property name> = <value>;
- DGMGRL> edit configuration set protection mode as maxavilability;
- Syntax error before or at "maxavilability"
- DGMGRL> show configuration;
- Configuration - htz
- #最大可用的保护模式
- Protection Mode: MaxAvailability
- Databases:
- htzb - Primary database
- htz - Physical standby database
- Fast-Start Failover: DISABLED
- Configuration Status:
- SUCCESS
3.2 修改日志传递方式
- DGMGRL> edit database htz set property logxptmode=sync;
- Property "logxptmode" updated
- DGMGRL> edit database htzb set property logxptmode=sync;
- Property "logxptmode" updated
- DGMGRL> show database htz logxptmode
- LogXptMode = 'sync'
- DGMGRL> show database htzb logxptmode
- LogXptMode = 'sync
4 配置数据库的flashback
4.1 主库上面
- SQL> select open_mode,database_role,log_mode,flashback_on from v$database;
- OPEN_MODE DATABASE_ROLE LOG_MODE FLASHBACK_ON
- -------------------- ---------------- ------------ ------------------
- READ WRITE PRIMARY ARCHIVELOG NO
- #配置flashback
- SQL> alter database flashback on;
- Database altered.
- SQL> select open_mode,database_role,log_mode,flashback_on from v$database;
- OPEN_MODE DATABASE_ROLE LOG_MODE FLASHBACK_ON
- -------------------- ---------------- ------------ ------------------
- READ WRITE PRIMARY ARCHIVELOG YES
- #flashback的配置目录与大小
- SQL> show parameter recovery
- NAME TYPE VALUE
- ------------------------------------ ----------- ------------------------------
- db_recovery_file_dest string /u01/app/oracle/fast_recovery_
- area
- db_recovery_file_dest_size big integer 4032M
4.2 备库上面
- SQL> select open_mode,database_role,log_mode,flashback_on from v$database;
- OPEN_MODE DATABASE_ROLE LOG_MODE FLASHBACK_ON
- -------------------- ---------------- ------------ ------------------
- READ ONLY WITH APPLY PHYSICAL STANDBY ARCHIVELOG NO
- SQL> recover managed standby database cancel;
- Media recovery complete.
- SQL> alter database flashback on;
- Database altered.
- SQL> recover managed standby database using current logfile disconnect;
- Media recovery complete.
- SQL> select open_mode,database_role,log_mode,flashback_on from v$database;
- OPEN_MODE DATABASE_ROLE LOG_MODE FLASHBACK_ON
- -------------------- ---------------- ------------ ------------------
- READ ONLY WITH APPLY PHYSICAL STANDBY ARCHIVELOG YES
5 配置observer服务器
5.1 配置tnsnames.ora文件。
- [oracle@test admin]$ cat tnsnames.ora
- HTZB =
- (DESCRIPTION =
- (ADDRESS_LIST =
- (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.100.31)(PORT = 1521))
- )
- (CONNECT_DATA =
- (SERVER = dedicate)
- (SERVICE_NAME = htzb)
- )
- )
- HTZ =
- (DESCRIPTION =
- (ADDRESS_LIST =
- (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.100.30)(PORT = 1521))
- )
- (CONNECT_DATA =
- (SERVER = dedicate)
- (SERVICE_NAME = htz)
- )
- )
5.2 启动observer进程
- [oracle@test admin]$ dgmgrl sys/oracle@htz "start observer"
- DGMGRL for Linux: Version 11.2.0.2.0 - 64bit Production
- Copyright (c) 2000, 2009, Oracle. All rights reserved.
- Welcome to DGMGRL, type "help" for information.
- Connected.
- Observer started
6 配置fast-start failover
- DGMGRL> edit database htz set property FastStartFailoverTarget=htzb;
- Property "faststartfailovertarget" updated
- DGMGRL> edit database htzb set property FastStartFailoverTarget=htz;
- Property "faststartfailovertarget" updated
于fst-start failove相关的其它几个参数:
FastStartFailoverPmyShutdown
FastStartFailoverLagLimit
FastStartFailoverAutoReinstate
ObserverConnectIdentifier
我们来看一下这些值的默认值;这里我们都使用默认值;
- DGMGRL> show configuration verbose;
- Configuration - htz
- Protection Mode: MaxAvailability
- Databases:
- htzb - Primary database
- htz - (*) Physical standby database
- (*) Fast-Start Failover target
- Properties:
- FastStartFailoverThreshold = '30'
- OperationTimeout = '30'
- FastStartFailoverLagLimit = '30'
- CommunicationTimeout = '180'
- FastStartFailoverAutoReinstate = 'TRUE'
- FastStartFailoverPmyShutdown = 'TRUE'
- BystandersFollowRoleChange = 'ALL'
- Fast-Start Failover: DISABLE
- Threshold: 30 seconds
- Target: htz
- Observer: test
- Lag Limit: 30 seconds (not in use)
- Shutdown Primary: TRUE
- Auto-reinstate: TRUE
- Configuration Status:
- SUCCESS
7 启用fast-start failover
- DGMGRL> show configuration
- Configuration - htz
- Protection Mode: MaxAvailability
- Databases:
- htzb - Primary database
- htz - Physical standby database
- Fast-Start Failover: DISABLED
- Configuration Status:
- SUCCESS
- DGMGRL> enable fast_start failover
- Enabled.
- DGMGRL>
8.测试FAST-START FAILOVER是否生效
- DGMGRL> show configuration
- Configuration - htz
- Protection Mode: MaxAvailability
- Databases:
- htzb - Primary database
- htz - (*) Physical standby database
- Fast-Start Failover: ENABLED
- Configuration Status:
- SUCCESS
- #原主库直接shutdown abort;
- SQL> shutdown abort;
- ORACLE instance shut down.
- SQL>
- #observer进程的日志
- 19:03:03.93 Friday, September 07, 2012
Initiating Fast-Start Failover to database "htz"...
Performing failover NOW, please wait...
Failover succeeded, new primary is "htz"
19:03:13.24 Friday, September 07, 2012- #提示已经把主切换到htz
- #在htz上面查看一下
- SQL> select open_mode ,database_role from v$database;
- OPEN_MODE DATABASE_ROLE
- -------------------- ----------------
- READ WRITE PRIMARY
- 已经成功
- 手动启动原主库
- DGMGRL> show configuration;
Configuration - htz
Protection Mode: MaxAvailability
Databases:
htz - Primary database
Warning: ORA-16817: unsynchronized fast-start failover configuration
htzb - (*) Physical standby database (disabled)
ORA-16661: the standby database needs to be reinstated
Fast-Start Failover: ENABLED
Configuration Status:
WARNING
DGMGRL> connect sys/oracle@htzb
Connected.
DGMGRL> startup
ORACLE instance started.
Database mounted.
ORA-16649: possible failover to another database prevents this database from being opened- #过一分会后我们再查看一下状态
- DGMGRL> connect sys/oracle@htz
Connected.
DGMGRL> show configuration
Configuration - htz
Protection Mode: MaxAvailability
Databases:
htz - Primary database
htzb - (*) Physical standby database
Fast-Start Failover: ENABLED
Configuration Status:
SUCCESS- 查看状态,一切正常。