在客户端的tnsnames.ora配置文件中添加以下行:
rac=(DESCRIPTION=
(ADDRESS_LIST=
(LOAD_BALANCE=ON)
(FAILOVER=ON)
(ADDRESS=(PROTOCOL=tcp)(HOST=your_ip_or_name)(PORT=1522))
(ADDRESS=(PROTOCOL=tcp)(HOST=your_ip_or_name)(PORT=1523))
(ADDRESS=(PROTOCOL=tcp)(HOST=your_ip_or_name)(PORT=1521)))
(CONNECT_DATA=
(FAILOVER_MODE=
(TYPE=select)(METHOD=basic))
(SERVICE_NAME=rac.test.com)))
然后就可以在客户端使用rac连接串来连接数据库了.
连接时,因为设置了load_balance=on,因此会随机选择一个来连接.查看连接到哪个实例:
SQL select instance_name from v$instance;
INSTANCE_NAME
----------------
rac3
假如在服务器端将rac3停掉,可以用shutdown immediate;或者shutdown abort;
再运行此语句,则:
SQL /
INSTANCE_NAME
----------------
rac1
客户端在监测到instance down了以后,重新连接,这次连到了rac1.
注重:
在非RAC环境下,假如用户设置了failover=on,则instance down时,用户未commit的数据自动回滚了.在RAC下,需要用户执行rollback. 假如不rollback 而执行SQL语句,则Oracle会报错:
ERROR at line 1:
ORA-25402: transaction must roll back
到现在,单节点上多instance的RAC就配置好了.
希望能对大家有所帮助.