实验准备:
1、创建测试用户
create user scott identified by oracle default tablespace users;
grant create session to scott;
grant resource to scott;
grant select on v_$instance to scott;
grant execute on dbms_lock to scott;
GRANT SELECT ANY DICTIONARY TO scott;
grant select any table to scott;
2、配置local_listener和remote_listener(为了保证连接都只先连接到其中一个节点上)
ALTER SYSTEM SET LOCAL_LISTENER = '(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.100.112)(PORT = 1521))' sid = 'orcldb1';
ALTER SYSTEM SET LOCAL_LISTENER = '(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.100.114)(PORT = 1521))' sid = 'orcldb2';
ALTER SYSTEM SET remote_listener = '' sid = 'orcldb1';
ALTER SYSTEM SET remote_listener = '' sid = 'orcldb2';
一、Client-side Connection time Failover
1、配置客户端的tnsnames.ora文件
ORCLDB =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.100.112)(PORT = 1521))
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.100.114)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orcldb)
)
)
2、通过脚本测试连接
[oracle@hcn10g script]$ cat login.sh
for i in {1..10}
do
echo 'No.'$i
sqlplus -s scott/oracle@orcldb <<EOF
select instance_name from v$instance
/
exit
EOF
done
测试结果:
[oracle@hcn10g script]$ ksh login.sh
No. 1
INSTANCE_NAME
----------------
orcldb1
No. 2
INSTANCE_NAME
----------------
orcldb1
No. 3
INSTANCE_NAME
----------------
orcldb1
No. 4
INSTANCE_NAME
----------------
orcldb1
No. 5
INSTANCE_NAME
----------------
orcldb1
No. 6
INSTANCE_NAME
----------------
orcldb1
No. 7
INSTANCE_NAME
----------------
orcldb1
No. 8
INSTANCE_NAME
----------------
orcldb1
No. 9
INSTANCE_NAME
----------------
orcldb1
No. 10
INSTANCE_NAME
----------------
orcldb1
[oracle@hcn10g script]$
连续10次连接都连接到1号节点
3、进行测试
在运行下面脚本的过程中,对1号节点执行shutdown abort操作,模拟断电
[oracle@hcn10g script]$
[oracle@hcn10g script]$ cat loginfail.sh
for i in {1..10}
do
echo 'No.'$i
sqlplus -s scott/oracle@orcldb <<EOF
select instance_name from v$instance
/
set feedback off
exec dbms_lock.sleep(5)
exit
EOF
done
测试结果:
SQL>
SQL> select instance_name from v$instance;
INSTANCE_NAME
----------------
orcldb1
SQL> shutdown abort
ORACLE instance shut down.
SQL>
[oracle@hcn10g script]$
[oracle@hcn10g script]$ ksh loginfail.sh
No.1
INSTANCE_NAME
----------------
orcldb1
No.2
INSTANCE_NAME
----------------
orcldb1
No.3 ------在这个时刻节点1执行了shutdown abort的操作,下面的连接都连接到了2号节点上
INSTANCE_NAME
----------------
orcldb1
BEGIN dbms_lock.sleep(5); END;
*
ERROR at line 1:
ORA-03113: end-of-file on communication channel
No.4
INSTANCE_NAME
----------------
orcldb2
No.5
INSTANCE_NAME
----------------
orcldb2
No.6
INSTANCE_NAME
----------------
orcldb2
No.7
INSTANCE_NAME
----------------
orcldb2
No.8
INSTANCE_NAME
----------------
orcldb2
No.9
INSTANCE_NAME
----------------
orcldb2
No.10
INSTANCE_NAME
----------------
orcldb2
[oracle@hcn10g script]$
结论:
Client-side Connection time Failover 方式的Failover在实例出席异常后,需要重新连接,不能自动的转到正常的实例上。
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




