实例环境
node1:rac1
node2:rac2
node3:rac3
node4:rac4
每台实例 listener 配置方法
node1:<listener.ora>
LISTENER_RAC1 =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = node1-vip)(PORT = 1521)(IP = x.x.x.x))
(ADDRESS = (PROTOCOL = TCP)(HOST = node1-priv)(PORT = 1521)(IP = x.x.x.x))
(ADDRESS = (PROTOCOL = IPC)(KEY = extproc))
)
)
)
node2:<listener.ora>
LISTENER_RAC2 =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = node2-vip)(PORT = 1521)(IP = x.x.x.x))
(ADDRESS = (PROTOCOL = TCP)(HOST = node2-priv)(PORT = 1521)(IP = x.x.x.x))
(ADDRESS = (PROTOCOL = IPC)(KEY = extproc))
)
)
)
node3:<listener.ora>
LISTENER_RAC3 =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = node3-vip)(PORT = 1521)(IP = x.x.x.x))
(ADDRESS = (PROTOCOL = TCP)(HOST = node3-priv)(PORT = 1521)(IP = x.x.x.x))
(ADDRESS = (PROTOCOL = IPC)(KEY = extproc))
)
)
)
node4:<listener.ora>
LISTENER_RAC4 =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = node4-vip)(PORT = 1521)(IP = x.x.x.x))
(ADDRESS = (PROTOCOL = TCP)(HOST = node4-priv)(PORT = 1521)(IP = x.x.x.x))
(ADDRESS = (PROTOCOL = IPC)(KEY = extproc))
)
)
)
每个实例中tnsnames.ora都加入下面信息.
LISTENER_RAC =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = node1-vip)(PORT = 1521)(IP = x.x.x.x))
(ADDRESS = (PROTOCOL = TCP)(HOST = node2-vip)(PORT = 1521)(IP = x.x.x.x))
(ADDRESS = (PROTOCOL = TCP)(HOST = node3-vip)(PORT = 1521)(IP = x.x.x.x))
(ADDRESS = (PROTOCOL = TCP)(HOST = node4-vip)(PORT = 1521)(IP = x.x.x.x))
)
LISTENER_RAC1 =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = node1-vip)(PORT = 1521)(IP = x.x.x.x))
)
LISTENER_RAC2 =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = node2-vip)(PORT = 1521)(IP = x.x.x.x))
)
LISTENER_RAC3 =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = node3-vip)(PORT = 1521)(IP = x.x.x.x))
)
LISTENER_RAC4 =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = node4-vip)(PORT = 1521)(IP = x.x.x.x))
)
为避免出现连接问题, 主动定义让 pmon 能够为 listener 注册, 在每个实例中修改一下 local_listener 与 remote_listener, 以防万一, 注 local_listener 定义了每个实例的 listener 名称, sid 定义每个实例 sid
ALTER SYSTEM SET LOCAL_LISTENER='LISTENER_RAC1' SCOPE=BOTH SID='RAC1';
ALTER SYSTEM SET LOCAL_LISTENER='LISTENER_RAC2' SCOPE=BOTH SID='RAC2';
ALTER SYSTEM SET LOCAL_LISTENER='LISTENER_RAC3' SCOPE=BOTH SID='RAC3';
ALTER SYSTEM SET LOCAL_LISTENER='LISTENER_RAC4' SCOPE=BOTH SID='RAC4';
ALTER SYSTEM SET REMOTE_LISTENER='LISTENER_RAC' SCOPE=BOTH SID='RAC1';
ALTER SYSTEM SET REMOTE_LISTENER='LISTENER_RAC' SCOPE=BOTH SID='RAC2';
ALTER SYSTEM SET REMOTE_LISTENER='LISTENER_RAC' SCOPE=BOTH SID='RAC3';
ALTER SYSTEM SET REMOTE_LISTENER='LISTENER_RAC' SCOPE=BOTH SID='RAC4';
客户端的 tns 也需要做一下处理, 当连接到 sqlplus tt@rac 之后, 就可以实现 load balance 调度了.
rac =
(DESCRIPTION =
(ADDRESS_LIST =
(LOAD_BALANCE=ON)
(FAILOVER=ON)
(ADDRESS = (PROTOCOL = TCP)(HOST = node1-vip)(PORT = 1521)(IP = x.x.x.x))
(ADDRESS = (PROTOCOL = TCP)(HOST = node2-vip)(PORT = 1521)(IP = x.x.x.x))
(ADDRESS = (PROTOCOL = TCP)(HOST = node3-vip)(PORT = 1521)(IP = x.x.x.x))
(ADDRESS = (PROTOCOL = TCP)(HOST = node4-vip)(PORT = 1521)(IP = x.x.x.x))
)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = RAC)
(FAILOVER_MODE =
(TYPE = SELECT)
(METHOD = BASIC)
)
)
)
产生多个连接后利用 gv$session 查询一下调度情况吧.
注: v$session 是某个实例的环境, gv$session 是全局环境