oracle11gR2 dataguard故障转移

故障转移

dataugard的配置参考:http://blog.csdn.net/asdewq380303318/article/details/8865138

dataguard的主从切换:http://blog.csdn.net/asdewq380303318/article/details/8865306

 

 

1. 故障转移一般是主库发生故障之后需要恢复服务,在这个时候,将备库转换成为主库,但是不把主库转换成为备库,也就是说备库来充当主库对外提供服务直到主库的恢复工作完成,

2. 故障转移的准备工作:

a)首先我们要创建一个故障转移的服务,客户端直接通过这个服务连接到主库,但是客户端并不知道现在哪个是一主库,真正确定连接连接到主库是通过这个服务,执行下面的sql语句来创建这个服务:

begin

DBMS_SERVICE.CREATE_SERVICE (

service_name => 'JED_RW',

network_name => 'JED_RW',

aq_ha_notifications => TRUE,

failover_method => 'BASIC',

failover_type => 'SELECT',

failover_retries => 30,

failover_delay => 5);

end;

/

b)创建了这个服务之后,我们还要确保这个服务在库上启动,并且确定它只能在主库上启动,执行下面的sql语句来创建一个存储过程:

 

create or replace procedurecmc_taf_service_proc

is

v_role VARCHAR(30);

begin

select DATABASE_ROLE into v_role from V$DATABASE;

ifv_role = 'PRIMARY' then

DBMS_SERVICE.START_SERVICE('JED_RW');

else

DBMS_SERVICE.STOP_SERVICE('JED_RW');

endif;

end;

/

c)然后我们创建两个触发器,让数据库杂启动和角色转换的时候运行此存储过程:

 

create or replace TRIGGERcmc_taf_service_trg_startup

after startup on database

begin

cmc_taf_service_proc;

end;

/

 

create or replace TRIGGER cmc_taf_manage_trg_rolechange

after db_role_change on database

begin

cmc_taf_service_proc;

end;

/

 

d)我们执行一次存储过程,确定服务正在运行,然后归档当前日志,让以上更改同步到备库。

SQL> exec cmc_taf_service_proc;

SQL> alter systemarchive log current;

使用show parameter service_names就可以查看到我们刚才创建的服务了

e)最后我们配置客户端的tns名去连接它,客户端的tns明配置如下:

 

JED_RW =

(DESCRIPTION =

(ADDRESS_LIST=

(ADDRESS = (PROTOCOL = TCP)(HOST = dev-db1)(PORT = 1521))

(ADDRESS = (PROTOCOL = TCP)(HOST = dev-db2)(PORT = 1521))

)

(CONNECT_DATA = (SERVICE_NAME = JED_RW)

(FAILOVER_MODE=(TYPE=SELECT)(METHOD=BASIC)(RETRIES=30)(DELAY=5))

)

)

 

到此,故障转移的准备工作就做完了。

 

3. 现在我们可以来测试下我们的故障转移是否成功

a)新开一个终端,使用下面的命令连接数据库,并查询现在连接数据库的唯一名:

SQL> connect system@JED_RW

SQL> select db_unique_name from v$database;

显示的结果就是我们现在连接的数据库

b)然后我们做一次主备切换,在备库转换成主库alter database commit to switchover to primarywith session shutdown;这一步的时候,我们在来查询一次数据库的唯一名

SQL> selectdb_unique_name from v$database;

这时,这一个查询应该就会挂住,这是因为客户端在尝试连接主机,但是有没有可以连接的主机,我们继续完成切换,最后这个条语句就可以返回数据, 这是返回来的唯一就是现在的主库。

 

 

 

你可能感兴趣的:(数据库,oracle11gR2,dataguard,故障转移)