暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

oracle 10g RAC Failover(二)

原创 黄宸宁 2013-04-17
767

oracle 10g RAC Failover(一)

实验准备:
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进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论