1、切换适用于主备工做状态良好。主库变动状态为备库,备库变动状态为主库。node
2、故障转移,适用于主库故障、崩溃,不可修复,让备库变动状态,接替主库角色。sql
2.一、切换前准备
数据库
一、检查主库上是否存在standby redo logfile服务器
select group#,member,type from v$logfile where type='STANDBY';session
2、在物理standby数据库上检查当standby端切换为主库时,是否能传递redo数据到新的standby数据库oracle
tnsping orcl 10 app
3、在主库上测试到备机得tnsnames是否联通ide
四、在swithover前检查物理standby数据库上是否有临时表空间的设置性能
五、检查主库和物理standby数据库是否有离线的数据文件测试
六、肯定主库和物理备份库的最大归档日志序列号是否匹配
在主库上查询每个实例的最大归档序列号
在备库上查询每个备库的最大归档序列号
select thread#,max(sequence#) from v$archived_log where applied='YES' group by thread#;
七、检查物理standby 上的MRP 进程是否处于运行状态
八、确保数据库无job运行,同时禁止rman、exp或者expdp备份
若是有考虑禁止job运行,并kill掉。方法以下:
declare
begin
DBMS_JOB.BROKEN(27,true);
end;
kill会话信息
根据sid查询出session信息
select SID,SERIAL# from V$Session where SID='9';
alter system kill session '9,43767';
九、设置JOB_QUEUE_PROCESSES =0
十、在rac环境中关闭一个数据库实例
oracle@snode1:~> srvctl stop instance -d srac -n snode2
oracle@snode1:~> srvctl status instance -d srac -i srac1,srac2
Instance srac1 is running on node snode1
Instance srac2 is not running on node snode2
十一、备库中止redo应用,而且确保standby数据库处于挂载状态
srvctl stop database -d trac -o immediate;
srvctl start database -d trac -o mount;
12、建议给主库和物理standby库作个全备份
一、在主库上执行以下命令查询主库状态是否为TO STANDBY 或者SESSION ACTIVE
SQL> select switchover_status,open_mode,database_role from v$database;
二、在主库上执行以下swithover命令。
SQL>alter database commit to switchover to physical standby with session shutdown;
三、在standby节点上运行switchover命令
SQL> select name,open_mode,database_role,protection_mode from gv$database;
NAME OPEN_MODE DATABASE_ROLE PROTECTION_MODE
--------- -------------------- ---------------- --------------------
SRAC MOUNTED PHYSICAL STANDBY MAXIMUM PERFORMANCE
SRAC MOUNTED PHYSICAL STANDBY MAXIMUM PERFORMANCE
SQL> ALTER DATABASE COMMIT TO SWITCHOVER TO PRIMARY WITH SESSION SHUTDOWN;
ALTER DATABASE COMMIT TO SWITCHOVER TO PRIMARY WITH SESSION SHUTDOWN
*
ERROR at line 1:
ORA-16139: media recovery required
SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION;
Database altered.
SQL> ALTER DATABASE COMMIT TO SWITCHOVER TO PRIMARY WITH SESSION SHUTDOWN;
Database altered.
4、在新主库节点上从新启动rac到 read write 状态
srvctl stop database -d torcl -o immediate;
srvctl start database -d torcl -o open;
SQL>select db_unique_name,database_role,open_mode from v$database;
五、在新备库(原主库)节点上重启数据库并应用redo log
srvctl stop database -d orcl -o immediate;
srvctl start database -d orcl -o open;
alter database recover managed standby database using current logfile disconnect from session;
3、failover步骤
一、failover主要用于主库因为服务器层或存储层产生的问题致使primary database变的不可访问。
二、对于faileover的考虑
standby数据库的硬件性能要知足生产环境。
确保全部可用的redo被应用到standby数据库。
faileover后new primary database处于最大性能保护模式。而无论以前数据库的保护模式最大保护或者最大性能。
1、若是主库崩溃后可以启动主库到mount状态,则执行以下命令
alter system flush redo to 'db_unique_name';
注意须要给standby 数据库的db_unique_name加单引号。
例如,假设备库的db_unique_name为dg2 则在主库执行以下命令
生产环境命令为在主库执行以下命令:alter system flush redo to ‘torcl’;
2、检测主库和standby数据库的状态,在主库上检测生成的最大归档日志文件
在主库检测生成的最大归档日志文件
Select thread# max(sequence#) from v$archived_log group by thread#;
在备库检测已经应用的最大归档日志文件
select max(sequence#) from v$archived_log where applied='YES' group by thread#;
以下图
select REGISTRAR,sequence#,applied from v$archived_log order by sequence#;
3、在备库处理未传递和应用的归档
说明
若是备库查询到的已经应用的最大日志序列号和主库有差异,则须要从主库手动拷贝归档到备库,并在备库上注册和应用归档。
若是无差异,则无需执行这一步骤
ALTER DATABASE REGISTER LOGFILE '/physical_standby1/thread1_dest/arcr_1_7.arc';
Alter database recover managed standby database disconnect from sessions;
若是主库的归档已经传递到了备库,可是没有应用,则手动应用。
若是主库彻底不可用,则备库须要恢复,恢复前须要在备库上应用全部已经传递过来的归档
四、在standby库即备库上中止redo应用
说明
Force 关键字用于当即终止RFS进程传递
FINISH 关键子用于failover和恢复当前standby redo logfile
SQL> alter database recover managed standby database cancel;
alter database recover managed standby database finish force;
select thread#,sequence#,process,status,client_process from v$managed_standby
在物理standby上执行以下命令使备库变动主库。
SQL>alter database commit to switchover to primary with session shutdown;
六、查询转换后的数据库状态
select db_unique_name,database_role,standby_became_primary_scn from v$database;
7、重启standby新数据库到 read write状态。
srvctl stop database -d torcl -o immediate;
srvctl start database -d torcl -o open;