RAC的TAF简单测试(二)

OracleRAC的高可用功能除了负载均衡还包括TAFTransparent Application Failover)。

RACTAF是指会话连接到一个实例上,如果这个实例出现了故障,Oracle会自动将会话迁移到另一个实例上。

RACTAF简单测试(一):http://yangtingkun.itpub.net/post/468/283068

这篇文章讨论FAILOVERSESSIONSELECT选项。


上一篇简单介绍了TAF,并通过具体的说明了SESSIONSELECT的区别。但是那个例子展示的只是二者区别的一个现象而已。真正的区别在于,配置了SELECT选项的FAILOVER在数据库实例失败时,会将会话切换到另一个实例,且将实例失败时运行的SELECT语句继续执行,并返回正确的结果。而SESSION则不具备这个功能。

先看看FAILOVER设置为SESSION的情况:

TESTRAC =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 172.25.198.224)(PORT = 1521))
(ADDRESS = (PROTOCOL = TCP)(HOST = 172.25.198.225)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = testrac)
(FAILOVER_MODE =
(TYPE = SESSION)
(METHOD = BASIC)
)
)
)

下面先看看FAILOVER设置为SESSION的情况:

SQL> CONN TEST/TEST@TESTRAC已连接。
SQL> SELECT INSTANCE_NAME FROM V$INSTANCE;

INSTANCE_NAME
----------------
testrac2

SQL> SET PAUSE ON
SQL> SELECT TRIGGER_NAME FROM DBA_TRIGGERS;


TRIGGER_NAME
------------------------------
DEF$_PROPAGATOR_TRIG
REPCATLOGTRIG
XDB$ACL$xd
xdb-log9_TAB$xd
SERVLET$xd
ftp-log14_TAB$xd
http-log20_TAB$xd
Folder23_TAB$xd
XDB$STATS$xd
XDB$CONFIG$xd
XDBCONFIG_VALIDATE
XDB_RV_TRIG
XDB_PV_TRIG
CWM$DIMENSIONDEL
CWM$CUBEDEL
CWM2$AWVIEWSUPD
CWM2$AWVIEWCOLSUPD
CWM$CLASSIFICATIONUPD
.
.
.
EM_TARGETS_DELETE
BLACKOUT_CHANGE
BLACKOUT_STATUS
UPDATE_SOURCE
BLACKOUT_WINDOW_INSERT
HANDLE_RELATED_TARGETS
MGMT_METRIC_COLL_INS

利用PAUSE的暂停功能,然后在另一个会话中关闭当前连接实例:

$ srvctl stop instance -d testrac -i testrac2

返回刚才执行SQL的窗口,按回车继续:

TRIGGER_NAME
------------------------------
MGMT_CREDS_UPD
MASTER_AGENT_CHANGE_TRIGGER
METRICS_INSERT_TRIGGER
TARGET_PROP_DEFS_TR
METRICS_DELETE
TARGETS_INSERT_TRIGGER
CHECK_DUPLICATE_TARGETS
RAW_METRICS_AFTER_INSERT
ERROR:
ORA-25401:
无法继续读取

已选择105行。

SQL> SELECT INSTANCE_NAME FROM V$INSTANCE;


INSTANCE_NAME
----------------
testrac1

虽然SELECT操作失败了。但是再次执行SQL时成功了。而且会话已经切换到了另外一个实例上。

从上面的结果也可以看到SQLPLUS的一些处理方法。PAUSE主要起作用在执行后和每一页的结束后。

PAUSESQL结果的提取是没有关系的。这也是为什么在PAUSE继续执行之后,仍然得到了一些记录的原因。

而且从最终获取105条记录也可以看出,OracleFETCH操作是通过数组进行的,在PAUSE的时候,这次数组提取已经完成。而PAUSE结束后,本次获取的数据可以显示,再次提取的时候出现了错误。

SQL> SHOW ARRAY
arraysize 15

可以看到,Oracle实际执行了7次提取操作。

上面扯远了一点,下面继续看FAILOVERSELECT表现。

首先修改tnsnames.oraFAILOVER的配置:

TESTRAC =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 172.25.198.224)(PORT = 1521))
(ADDRESS = (PROTOCOL = TCP)(HOST = 172.25.198.225)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = testrac)
(FAILOVER_MODE =
(TYPE = SELECT)
(METHOD = BASIC)
)
)
)

然后将刚才管理的instance启动:

$ srvctl start instance -d testrac -i testrac2

下面同样执行上面那个SQL,注意这里必须重新登陆一次,否则客户端TNSNAMES的修改无法对当前会话生效:

SQL> SET PAUSE OFF
SQL> CONN TEST/TEST@TESTRAC
已连接。
SQL> SELECT INSTANCE_NAME FROM V$INSTANCE;

INSTANCE_NAME
----------------
testrac1

SQL> SET PAUSE ON
SQL> SELECT TRIGGER_NAME FROM DBA_TRIGGERS;


TRIGGER_NAME
------------------------------
DEF$_PROPAGATOR_TRIG
REPCATLOGTRIG
XDB$ACL$xd
xdb-log9_TAB$xd
SERVLET$xd
ftp-log14_TAB$xd
http-log20_TAB$xd
Folder23_TAB$xd
XDB$STATS$xd
XDB$CONFIG$xd
XDBCONFIG_VALIDATE
XDB_RV_TRIG
XDB_PV_TRIG
.
.
.
UPDATE_SOURCE
BLACKOUT_WINDOW_INSERT
HANDLE_RELATED_TARGETS
MGMT_METRIC_COLL_INS

关闭当前会话连接的实例:

$ srvctl stop instance -d testrac -i testrac1

下面返回SQLPLUS会话,敲回车继续:

TRIGGER_NAME
------------------------------
MGMT_CREDS_UPD
MASTER_AGENT_CHANGE_TRIGGER
METRICS_INSERT_TRIGGER
TARGET_PROP_DEFS_TR
METRICS_DELETE
TARGETS_INSERT_TRIGGER
CHECK_DUPLICATE_TARGETS
RAW_METRICS_AFTER_INSERT
METRIC_ERRORS_CUR_AND_DUPES
SEVERITY_DELETE
INSERT_FLAT_TARGETS
MGMT_JOB_EXEC_INSERT
JOB_CMD_BLK_DELETE_TRIGGER
JOB_EXEC_DELETE_TRIGGER
.
.
.
SDO_DROP_USER_BEFORE
SDO_DROP_USER
SDO_GEOR_DROP_USER
SDO_NETWORK_DROP_USER
SDO_GEOR_TRUNC_TABLE

已选择164行。

SQL> SELECT INSTANCE_NAME FROM V$INSTANCE;


INSTANCE_NAME
----------------
testrac2

这次不但将会话切换到了正常的实例上,而且SELECT也得到了完整的结果,没有因实例故障而出现错误。这就是FAILOVERSESSIONSELECT设置的区别。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/4227/viewspace-69253/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/4227/viewspace-69253/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值