DataGuard角色切换


DataGuard角色切换分为两种情况:
1.正常角色切换(switchover)
2.故障转移切换(failover)
     通常情况下,数据库运行正常时,不需要执行DataGuard的角色切换.
     当数据库所在主机或数据库发生故障,不能及时解决的情况下,就需要进行DataGuard的角色转换.最大化保证业务运行,尽量减少损失.


一、正常角色切换(switchover)

switchover属于正常的DataGuar角色切换,切换后,原primary数据库转换角色为standby database;原standby database转换角色为primary database.
它们两个之间的保护关系依然可以维持.
概括的说,switchover分为三个部分,八个步骤.
第一部分:primary database端:
1.查看primary数据库是否能执行切换
执行切换时,确保数据库中除了数据库后台进程外没有其它用户登陆,也不能有job在运行(job定义为user类型的进程)
SQL> select switchover_status from v$database;
SWITCHOVER_STATUS
--------------------
TO STANDBY
2.执行primary到standby的switchover
SQL> alter database commit to switchover to physical standby;
Database altered.
3.关闭数据库,重新启动到standby状态
SQL> shutdown immediate
SQL> startup mount
SQL> select db_unique_name,database_role,switchover_status from v$database;
DB_UNIQUE_NAME                 DATABASE_ROLE    SWITCHOVER_STATUS
------------------------------ ---------------- --------------------
orcl                          PHYSICAL STANDBY TO PRIMARY


第二部分:standby database端:

4.查看standby数据库是否能进行switchover
SQL> select db_unique_name,database_role,switchover_status from v$database;
DB_UNIQUE_NAME        DATABASE_ROLE    SWITCHOVER_STATUS
--------------------- ---------------- --------------------
dgorcl                PHYSICAL STANDBY TO PRIMARY
5.将standby数据库转换为primary角色.
SQL> alter database commit to switchover to primary;
Database altered.
6.关闭数据库,重新启动到primary状态,准备接管前端应用.
SQL> shutdown immediate
SQL> startup mount
SQL> select db_unique_name,database_role,switchover_status from v$database;
DB_UNIQUE_NAME         DATABASE_ROLE    SWITCHOVER_STATUS
--------------------- ---------------- --------------------
dgorcl                PRIMARY          TO STANDBY
SQL> alter database open;
Database altered.


第三部分:切换后角色:

7.查看new primary database归档参数等状态,确认是否能正常传送归档日志到new standby database
SQL> show parameter log_archive
SQL> show parameter fal
SQL> show parameter standby_file
8.切换日志.确认新DataGuard生效.
SQL> alter system switch logfile;
System altered.


二、故障转移切换(failover)

Failover属于不正常状态下的DataGuard角色切换.
切换后,原standby database 转换角色为new primary database,接管原primary database的应用继续提供服务.
而原primary database因为其它原因(比如所在主机故障造成不可用)而不可用,废弃.之后可以重新再搭建DataGuard环境,继续提供保护.
因为Failover后原primary database不可用,所以,切换过程中,不需要对原primary database进行切换操作.


1.比对主备库之间是否存在日志的差异.

--备库最大归档日志序列:
SQL> select unique thread#,max(sequence#) over(partition by thread#) from v$archived_log;
   THREAD# MAX(SEQUENCE#)OVER(PARTITIONBYTHREAD#)
---------- --------------------------------------
         1                                    116
比对主,备库之间日志序列差异,从主库copy差异日志文件到备库(包括未归档日志文件,最大化减少数据损失).
2.确认归档日志的断点后,需要从primary database所在主机复制断点的归档日志到standby database所在主机.
scp /../.. oracle@ip or hostname:/xxx
3.手工恢复未应用的日志
SQL> recover standby database; --手工恢复(主要应用于未归档的主库online logfile,执行该命令后根据提示输入copy过来的日志文件路径)
例:
SQL>recover standby database;
SQL> recover standby database;
ORA-00279: change 327228 generated at 07/01/2008 15:41:20 needed for thread 1
ORA-00289: suggestion : /z02/arch/dgorcl_1_11_658924314.dbf
ORA-00280: change 327228 for thread 1 is in sequence #11
Specify log: {<RET>=suggested | filename | AUTO | CANCEL}
/z02/redo02.log
Log applied.
Media recovery complete.
SQL>
SQL>


4.激活数据库.

SQL> recover managed standby database disconnect;
Media recovery complete.
SQL>
SQL> recover managed standby database finish;
Media recovery complete.
SQL> select switchover_status from v$database;


SWITCHOVER_STATUS
--------------------
NOT ALLOWED


SQL> alter database commit to switchover to primary;
alter database commit to switchover to primary
*
ERROR at line 1:
ORA-16139: media recovery required


SQL>alter database activate standby database;


Database altered.


SQL> shutdown immediate

SQL> startup


你可能感兴趣的:(thread,oracle,sql,数据库,database,System)