PL/SQL通过scan ip连接数据库

11.2.0.1版本的一个bug,就是客户端无法通过scan连接到数据库解决方法如下:

1、地址信息

#PUBLIC
172.30.13.105    rac1
172.30.13.106    rac2
 
#PRIVATE
10.10.10.1    rac1-priv 
10.10.10.2    rac2-priv   

#VIP
172.30.13.107   rac1-vip
172.30.13.108   rac2-vip
172.30.13.109   rac-scan

2、原配置信息

RAC1

SQL> show parameter listene;

NAME				     TYPE	 VALUE
------------------------------------ ----------- ------------------------------
listener_networks		     string
local_listener			     string	 (DESCRIPTION=(ADDRESS_LIST=(AD
						 DRESS=(PROTOCOL=TCP)(HOST=rac1
						 -vip)(PORT=1521))))
remote_listener 		     string	 rac-scan:1521
SQL> select instance_name,status from v$instance;

INSTANCE_NAME	 STATUS
---------------- ------------
orcl1		 OPEN

RAC2

SQL>  show parameter listene;

NAME				     TYPE	 VALUE
------------------------------------ ----------- ------------------------------
listener_networks		     string
local_listener			     string	 (DESCRIPTION=(ADDRESS_LIST=(AD
						 DRESS=(PROTOCOL=TCP)(HOST=rac2
						 -vip)(PORT=1521))))
remote_listener 		     string	 rac-scan:1521
SQL> select instance_name,status from v$instance;

INSTANCE_NAME	 STATUS
---------------- ------------
orcl2		 OPEN

3、修改配置

alter system set local_listener='(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=rac-scan)(PORT=1521))))' sid='orcl1';

SQL>  alter system set local_listener='(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=rac-scan)(PORT=1521))))' sid='orcl1';

System altered.

SQL> show parameter listener;

NAME				     TYPE	 VALUE
------------------------------------ ----------- ------------------------------
listener_networks		     string
local_listener			     string	 (DESCRIPTION=(ADDRESS_LIST=(AD
						 DRESS=(PROTOCOL=TCP)(HOST=rac-
						 scan)(PORT=1521))))
remote_listener 		     string	 rac-scan:1521

alter system set local_listener='(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=rac-scan)(PORT=1521))))' sid='orcl2';

SQL>  alter system set local_listener='(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=rac-scan)(PORT=1521))))' sid='orcl2';

System altered.

SQL> show parameter listener;

NAME				     TYPE	 VALUE
------------------------------------ ----------- ------------------------------
listener_networks		     string
local_listener			     string	 (DESCRIPTION=(ADDRESS_LIST=(AD
						 DRESS=(PROTOCOL=TCP)(HOST=rac-
						 scan)(PORT=1521))))
remote_listener 		     string	 rac-scan:1521