oracle standby切换

1、 物理 standby的 Switchover

注意操作步骤的先后,很关键的哟。

1.1 检查是否支持 switchover 操作 --primary 数据库操作

登陆 primary 数据库,查询 v$database 视图的 switchover_status 列。

SQL>  select switchover_status from v$database;
SWITCHOVER_STATUS
--------------------
TO STANDBY

如果该列值为"TO STANDBY"则表示 primary 数据库支持转换为 standby 角色,否则的话你就需要重新检查一下 DataGuard 配置,比如看看 LOG_ARCHIVE_DEST_n之类参数值是否正确有效等等。

1.2 启动 switchover --primary 数据库操作

首先将 primary 转换为 standby 的角色,通过下列语句:

SQL>alter database commit to switchover to physical standby;
数据库已更改。

语句执行完毕后,primary 数据库将会转换为 standby 数据库,并自动备份控制文件到 trace。

1.3 重启动到 mount --原 primary 数据库操作

SQL>  shutdown immediate
ORA-01507: 未装载数据库
ORACLE 例程已经关闭。
SQL>  startup mount
ORACLE 例程已经启动。

1.4 检查是否支持 switchover 操作 --待转换 standby 数据库操作

待原 primary 切换为 standby 角色之后,检查待转换的 standby 数据库 switchover_status 列,看看是否支持角色转换。

SQL> select switchover_status from v$database;
SWITCHOVER_STATUS
--------------------
TO PRIMARY

此时待转换 standby 数据库 switchover_status 列值应该是"TO_PRIMARY",如否则检查其初始化参数文件中的设置,提示一下,比着原 primary 数据库的初始化参数改改。

1.5 转换角色到 primary --待转换 standby 数据库操作

通过下列语句转换 standby 到 primary 角色:

SQL> alter database commit to switchover to primary;
数据库已更改。

注意:待转换的物理 standby 可以处于 mount 模式或 open read only 模式,但不能处于 open read write模式。

1.6 完成转换,打开新的 primary 数据库

SQL> alter database open;
数据库已更改。

注:如果数据库处于 openread-only 模式的话,需要先 shutdown 然后直接 startup 即可。

1.7 验证一下

新的 primary 数据库

SQL> show parameter db_unique
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
db_unique_name string jsspdg
SQL> select max(sequence#) from v$archived_log;
MAX(SEQUENCE#)
--------------
67
SQL>  alter system switch logfile;
系统已更改。
SQL> select max(sequence#) from v$archived_log;
MAX(SEQUENCE#)
--------------
68

新的 standby 数据库

SQL> show parameter db_unique
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
db_unique_name string jssweb
SQL> select max(sequence#) from v$archived_log;
MAX(SEQUENCE#)
--------------
68

转换成功。

2、 物理 standby的 Failover

2.1在备库确认是否有日志没有同步:

SELECT THREAD#, LOW_SEQUENCE#, HIGH_SEQUENCE# FROM V$ARCHIVE_GAP;

2.2如果此查询有记录,需要把这些日志从主库拷贝到备库,并注册到数据库中

ALTER DATABASE REGISTER PHYSICAL LOGFILE '拷贝过来的日志文件';

2.3 查询日志是否应用到最新状态:

select distinct thread#,max(sequence#) over(partition by thread#) a from v$archived_log;

2.4 在备库做失败切换:

alter database recover managed standby database finish force;
alter database commit to switchover to primary;

此时不再是dataguard环境了,需要根据现有的主库搭建一个新的dataguard环境

3.备库激活

alter database recover managed standby database cancel;
alter database recover managed standby database finish force;
alter database activate physical standby database;
alter database open;

你可能感兴趣的:(oracle standby切换)