环境:
OS:Centos 7
DB:11.2.0.4
一主两从架构:
主库:slnngk
从库1:slavea
从库2:slaveb
1.主从库上开启flashback
这里主从库上都要开启flashback,如果不开启flashback的话,DG就要重新搭建
查看是否开启flashback
SQL> select t.FLASHBACK_ON from v$database t;
FLASHBACK_ON
------------------
YES
具体开启部署请参考:
https://www.cnblogs.com/hxlasky/p/15221695.html
2.由于主库已经不可访问,我们所有的操作都在备库完成
我们假设主库slnngk所在机器已经宕机,我们将从库slavea提升为主库,下面的操作都在从库slavea上操作
SQL> alter database recover managed standby database cancel;
SQL> alter database recover managed standby database finish force;
SQL> select database_role from v$database;
DATABASE_ROLE
----------------
PHYSICAL STANDBY
SQL> alter database commit to switchover to primary;
alter database commit to switchover to primary
*
ERROR at line 1:
ORA-01093: ALTER DATABASE CLOSE only permitted with no sessions connected
解决办法:
SQL> alter database commit to switchover to primary with session shutdown;
Database altered.
SQL> alter database open;
3.尝试在新主库上做些操作
比如创建表,并写入数据
connect hxl/oracle
create table tb_test as select * from dba_objects;
4.现在利用flashback重建DG
在现在的主库slavea上执行如下查询,找到standby_became_primary_scn的值,下面原来的主库slnngk恢复后使用该值进行flashbak
SQL> select to_char(standby_became_primary_scn) from v$database;
TO_CHAR(STANDBY_BECAME_PRIMARY_SCN)
----------------------------------------
2662627
5.原来的主库slnngk进行flashback
等原来的主库机器启动后
SQL> startup mount
SQL> flashback database to scn 2662627; ##这个值为在新主库slavea上查询到的SCN值
SQL> alter database convert to physical standby;
SQL> shutdown immediate
SQL> startup
SQL> alter database recover managed standby database using current logfile disconnect from session;
6.检查第二个从库slaveb的日志使用情况
上面slnngk已经变成了从库,那么第二个从库slaveb是什么一个状态呢,我们查询下日志应用情况
SQL> select process,status from v$managed_standby;
PROCESS STATUS
--------- ------------
ARCH CLOSING
ARCH CONNECTED
ARCH CONNECTED
ARCH CLOSING
RFS IDLE
RFS IDLE
RFS IDLE
RFS IDLE
MRP0 APPLYING_LOG
RFS IDLE
RFS IDLE
11 rows selected.
因为从库slabea这里之前设置了如下参数,变成主库后会自动将归档日志应用到从库slaveb
SQL> show parameters log_archive_dest_2;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
log_archive_dest_2 string service=tnsslnngk async valid_
for=(online_logfiles,primary_r
ole) db_unique_name=slnngk
SQL> show parameters log_archive_dest_3;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
log_archive_dest_3 string service="tnsslaveb", LGWR ASYN
C NOAFFIRM delay=0 optional co
mpression=disable max_failure=
0 max_connections=1 reopen=300
db_unique_name="slaveb" net_t
imeout=30, valid_for=(all_logf
iles,primary_role)
若是没有设置归档到第二个从库slaveb的情况下,需要在新的主库slavea上执行
alter system set log_archive_dest_3= 'service=tnsslaveb async valid_for=(online_logfiles,primary_role) db_unique_name=slaveb' scope=both;
alter system set log_archive_dest_state_3=enable scope=both;
这个时候第二个从库slaveb会自动应用新主库生成的归档日志.
--The End --