存储故障导致手动重建创建数据库后,出现通过tns不能连接的问题;检查发现tnsnames.ora中配置的host为scan_ip;但是,如果通过vip则可以访问数据库;那么可以确定是scan ip或scan listener问题;
检查所有listener后,发现LISTENER、LISTENER_SCAN1状态都正常,只是LISTENER_SCAN1没有注册服务;对比重建前后的相关listener参数后,发现新创建的数据库remote_listener参数没有设置,设置后正常,问题解决;下面是测试环境的配置表;
grid用户下$GRID_HOME/network/admin/listener.ora
[grid@db1 admin]$ cat listener.ora
LISTENER_SCAN1=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=IPC)(KEY=LISTENER_SCAN1))))# line added by Agent
LISTENER=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=IPC)(KEY=LISTENER))))# line added by Agent
ENABLE_GLOBAL_DYNAMIC_ENDPOINT_LISTENER=ON# line added by Agent
ENABLE_GLOBAL_DYNAMIC_ENDPOINT_LISTENER_SCAN1=ON# line added by Agent
grid用户下$GRID_HOME/network/admin/sqlnet.ora
[grid@db1 admin]$ cat sqlnet.ora
# sqlnet.ora.db1 Network Configuration
File: /u01/app/11.2.0/grid/network/admin/sqlnet.ora.db1
# Generated by Oracle configuration tools.
NAMES.DIRECTORY_PATH= (TNSNAMES, EZCONNECT)
ADR_BASE = /u01/app/grid
oracle用户下$ORACLE_HOME/network/admin/tnsnames.ora
[oracle@db1 admin]$ cat tnsnames.ora
# tnsnames.ora Network Configuration File:
/u01/app/oracle/product/11.2.0/db_1/network/admin/tnsnames.ora
# Generated by Oracle configuration tools.
RACDB =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = rac-scan)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = racdb)
)
)
此时,如果没有设置remote_listener参数,则不能通过scan ip登录,如:
$sqlplus
system/oracle@racdb
报错,不能连接;
设置remote_listener后正常;
SQL>alter system set remote_listener
=' rac-scan:1521' scope=both sid='*';
SQL>show parameter listener
NAMETYPEVALUE
------------------------------------
----------- ------------------------------
listener_networksstring
local_listenerstring(DESCRIPTION=(ADDRESS_LIST=(AD
DRESS=(PROTOCOL=TCP)(HOST=192
.168.1.120)(PORT=1521))))
remote_listenerstringrac-scan:1521