oracle网络配置
三个配置文件 listener.ora、sqlnet.ora、tnsnames.ora ,都是放在$ORACLE_HOME/network/admin目录下。sql
英文说明:数据库
The sqlnet.ora is an optional file expressing more parameters about the connection (eg: the trace level for debugging, the types of authentication you would like to support and so on). It may be found on the client or the server.express
The tnsnames.ora is used to find a Net8 listener and connect to it and pass to it the details of the database instance youwould like to connect to. It will be found on the client side. Note that a SERVER can be a client of another database so it is typical to find it on the SERVER as well.服务器
The listener.ora is used to setup the configuration of the net8 listener. to specify the port it will listen on, give it the details of the databases it can connect to and so on. This file is on the SERVER only.网络
1. sqlnet.ora-----经过这个文件来决定怎么样找一个链接中出现的链接字符串。
例如咱们客户端输入
sqlplus sys/oracle@ora
假如个人sqlnet.ora是下面这个样子
SQLNET.AUTHENTICATION_SERVICES= (NTS)
NAMES.DIRECTORY_PATH= (TNSNAMES,HOSTNAME)
那么,客户端就会首先在tnsnames.ora文件中找ora的记录.若是没有相应的记录则尝试把ora看成一个主机名,经过网络的途径去解析它的 ip地址而后去链接这个ip上GLOBAL_DBNAME=ora这个实例,固然我这里ora并非一个主机名oracle
若是我是这个样子
NAMES.DIRECTORY_PATH= (TNSNAMES)
那么客户端就只会从tnsnames.ora查找ora的记录,括号中还有其余选项,如LDAP等并不经常使用。tcp
2. tnsnames.ora------这个文件相似于unix 的hosts文件,提供的tnsname到主机名或者ip的对应。
只有当sqlnet.ora中相似NAMES.DIRECTORY_PATH= (TNSNAMES) 这样,也就是客户端解析链接字符串的顺序中有TNSNAMES是,才会尝试使用这个文件。
例子:
ORA_TEST =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521))
)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = ora)
)
) ide
ORA_TEST:客户端链接服务器端使用的服务别名。注意必定要顶行书写,不然会没法识别服务别名。
PROTOCOL:客户端与服务器端通信的协议,通常为TCP,该内容通常不用改。
HOST:ORACLE服务器端IP地址或者hostname。确保服务器端的监听启动正常。
PORT:数据库侦听正在侦听的端口,能够察看服务器端的listener.ora文件或在数据库侦听所在的机器的命令提示符下经过lnsrctl status [listener name]命令察看。此处Port的值必定要与数据库侦听正在侦听的端口同样。
SERVICE_NAME:在服务器端,用system用户登录后,sqlplus> show parameter service_name命令查看。spa
3. listener.ora------listener监听器进程的配置文件
关于listener进程就很少说了,接受远程对数据库的接入申请并转交给oracle的服务器进程。因此若是不是使用的远程的链接,listener进程就不是必需的,一样的若是关闭listener进程并不会影响已经存在的数据库链接。
例子:
#listener.ora Network Configuration File: #E:/oracle/product/10.1.0/Db_2/NETWORK/ADMIN/listener.ora
# Generated by Oracle configuration tools.
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = ora)
(ORACLE_HOME = E:/oracle/product/10.1.0/Db_2)
(SID_NAME = ora)
)
).net
LISTENER =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = hostname)(PORT = 1521))
)
LISTENER :监听名称,能够配置多个监听,多个监听的端口号要区分开来。
GLOBAL_DBNAME :全局数据库名。经过select * from global_name; 查询得出
ORACLE_HOME :oracle软件的跟目录
SID_NAME :服务器端(本机)的SID
PROTOCOL:监听协议,通常都使用TCP
HOST:本机IP地址,双机时候使用浮动IP
PORT:监听的端口号,使用netstat –an 检查该端口不被占用。
当你输入sqlplus sys/oracle@orcl的时候
1. 查询sqlnet.ora看看名称的解析方式,发现是TNSNAME
2. 则查询tnsnames.ora文件,从里边找orcl的记录,而且找到主机名,端口和service_name
3. 若是listener进程没有问题的话,创建与listener进程的链接。
4. 根据不一样的服务器模式如专用服务器模式或者共享服务器模式,listener采起接下去的动做。默认是专用服务器模式,没有问题的话客户端就链接上了数据库的server process。
5. 这时候网络链接已经创建,listener进程的历史使命也就完成了。
sql*plus运行基本机理:
在用户输入sqlplus system/manager@test 后,sqlplus程序会自动到sqlnet.ora文件中找NAMES.DEFAULT_DOMAIN参数,假如该参数存在,则将该参数中的值取出,加到网络服务名的后面,即此例中你的输入由sqlplus system/manager@test自动变为sqlplus system/manager@test.server.com,而后再到tnsnames.ora文件中找test.server.com网络服务名,这固然找不到了,由于该文件中只有test网络服务名,因此报错。解决的办法就是将sqlnet.ora文件中的NAMES.DEFAULT_DOMAIN参数注释掉便可,如 #NAMES.DEFAULT_DOMAIN = server.com。假如NAMES.DEFAULT_DOMAIN参数不存在,则sqlplus程序会直接到tnsnames.ora文件中找 test网络服务名,而后取出其中的host ,port,tcp,service_name,利用这些信息将链接请求发送到正确的数据库服务器上。