日期:2014-05-16  浏览次数:20300 次

oracle网络配置和连接管理

oracle网络配置,对于使用PL/SQL Developer连接Oracle出现错误的一些解决方法,特别是当网络环境改变导致的连接错误。


三个配置文件 listener.ora、sqlnet.ora、tnsnames.ora ,都是放在$ORACLE_HOME\network\admin目录下。

1. sqlnet.ora—–作用类似于linux或者其他unix的nsswitch.conf文件,通过这个文件来决定怎么样找一个连接中出现的连接字符串。

例如我们客户端输入

sqlplus sys/oracle@orcl

假如我的sqlnet.ora是下面这个样子

SQLNET.AUTHENTICATION_SERVICES= (NTS)

NAMES.DIRECTORY_PATH= (TNSNAMES,HOSTNAME)

那么,客户端就会首先在tnsnames.ora文件中找orcl的记录.如果没有相应的记录则尝试把orcl当作一个主机名,通过网络的途径去解析它的 ip地址然后去连接这个ip上GLOBAL_DBNAME=orcl这个实例,当然我这里orcl并不是一个主机名

如果我是这个样子

NAMES.DIRECTORY_PATH= (TNSNAMES)

那么客户端就只会从tnsnames.ora查找orcl的记录,括号中还有其他选项,如LDAP等并不常用。

2. Tnsnames.ora——这个文件类似于unix 的hosts文件,提供的tnsname到主机名或者ip的对应,只有当sqlnet.ora中类似

NAMES.DIRECTORY_PATH= (TNSNAMES) 这样,也就是客户端解析连接字符串的顺序中有TNSNAMES是,才会尝试使用这个文件。

PROTOCOL:客户端与服务器端通讯的协议,一般为TCP,该内容一般不用改。

HOST:数据库侦听所在的机器的机器名或IP地址,数据库侦听一般与数据库在同一个机器上,所以当我说数据库侦听所在的机器一般也是指数据库所在的机器。在UNIX或WINDOWS下,可以通过在数据库侦听所在的机器的命令提示符下使用hostname命令得到机器名,或通过ipconfig(forWINDOWS) or ifconfig(for UNIX)命令得到IP地址。需要注意的是,不管用机器名或IP地址,在客户端一定要用ping命令ping通数据库侦听所在的机器的机器名,否则需要在 hosts文件中加入数据库侦听所在的机器的机器名的解析。

PORT:数据库侦听正在侦听的端口,可以察看服务器端的listener.ora文件或在数据库侦听所在的机器的命令提示符下通过lnsrctl status [listener name]命令察看。此处Port的值一定要与数据库侦听正在侦听的端口一样。

SERVICE_NAME:在服务器端,用system用户登陆后,sqlplus> showparameter service_name命令察看。

ORCL 对应的本机,SALES对应的另外一个IP地址,里边还定义了使用主用服务器还是共享服务器模式进行连接

#你所要连接的时候输入得TNSNAME

ORCL =

(DESCRIPTION =

(ADDRESS_LIST =

#下面是这个TNSNAME对应的主机,端口,协议

(ADDRESS = (PROTOCOL = TCP)(HOST =127.0.0.1)(PORT = 1521))

)

(CONNECT_DATA =

#使用专用服务器模式去连接需要跟服务器的模式匹配,如果没有就根据服务器的模式自动调节

(SERVER = DEDICATED)

#对应service_name,SQLPLUS>;showparameter service_name; 进行查看

(SERVICE_NAME = orcl)

)

)

#下面这个类似

SALES =

(DESCRIPTION =

(ADDRESS_LIST =

(ADDRESS = (PROTOCOL = TCP)(HOST =192.168.188.219)(PORT = 1521))

)

(CONNECT_DATA =

(SERVER = DEDICATED)

(SERVICE_NAME = sales)

)

)

注意:如果数据库服务器用MTS,客户端程序需要用database link时最好明确指明客户端用dedicated直连方式,不然会遇到很多跟分布式环境有关的ORACLEBUG。一般情况下数据库服务器用直接的连接会好一些,除非你的实时数据库连接数接近1000。