oracle: listener.ora 、sqlnet.ora 、tnsnames.ora的配置及例子
1.解决问题:TNS或者数据库不能登录。
最简单有效方法:使用oracle系统提供的工具 netca 配置(把原来的删除掉重新配置)
$netca
2.然而,仍有疑问:如何指定'listener.ora'存放的目录?不要默认目录($ORACLE_HOME/network/admin)
在 '.profile' 中加入
- TNS_ADMIN=/f01/oracle11/app/oracle/product/8.0.6/network/admin
- export TNS_ADMIN
TNS_ADMIN=/f01/oracle11/app/oracle/product/8.0.6/network/admin
export TNS_ADMIN
3.介绍三个配置文件
1)listener.ora
2)sqlnet.ora
3)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)
SQLNET.AUTHENTICATION_SERVICES= (NTS)
NAMES.DIRECTORY_PATH= (TNSNAMES,HOSTNAME)
那么,客户端就会首先在tnsnames.ora文件中找orcl的记录,如果没有相应的记录则尝试把orcl当作一个主机名,通过网络的途径去解析它的ip地址然后去连接这个ip上GLOBAL_DBNAME=orcl这个实例。当然我这里orcl并不是一个主机名
如果我是这个样子
- NAMES.DIRECTORY_PATH= (TNSNAMES)
NAMES.DIRECTORY_PATH= (TNSNAMES)
那么客户端就只会从tnsnames.ora查找orcl的记录
括号中还有其他选项,如LDAP等并不常用。
2)Tnsnames.ora(客户及服务器端)
这个文件类似于unix 的hosts文件,提供的tnsname到主机名或者ip的对应,只有当sqlnet.ora中类似
NAMES.DIRECTORY_PATH= (TNSNAMES) 这样,也就是客户端解析连接字符串的顺序中有TNSNAMES时,才会尝试使用这个文件。
例子中有两个,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>show parameter 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)
- )
- )
#你所要连接的时候输入得TNSNAME
ORCL =
(DESCRIPTION =
(ADDRESS_LIST =
#下面是这个TNSNAME对应的主机,端口,协议
(ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521))
)
(CONNECT_DATA =
#使用专用服务器模式去连接需要跟服务器的模式匹配,如果没有就根据服务器的模式
#自动调节
(SERVER = DEDICATED)
#对应service_name,SQLPLUS>show parameter 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)
)
)
3)listener.ora(服务器端) --listener监听器进程的配置文件
关于listener进程就不多说了,接受远程对数据库的接入申请并转交给oracle的服务器进程。所以如果不是使用的远程的连接,listener进程就不是必需的,同样的如果关闭listener进程并不会影响已经存在的数据库连接。
Listener.ora文件的例子
- #listener.ora Network Configuration File: #E:/oracle/product/10.1.0/Db_2/NETWORK/ADMIN/listener.ora
- # Generated by Oracle configuration tools.
- #下面定义LISTENER进程为哪个实例提供服务
- #这里是ORCL,并且它对应的ORACLE_HOME和GLOBAL_DBNAME
- #其中GLOBAL_DBNAME不是必需的除非使用HOSTNAME做数据库连接
- SID_LIST_LISTENER =
- (SID_LIST =
- (SID_DESC =
- (GLOBAL_DBNAME = boway)
- (ORACLE_HOME = E:/oracle/product/10.1.0/Db_2)
- (SID_NAME = ORCL)
- )
- )
- #监听器的名字,一台数据库可以有不止一个监听器
- #再向下面是监听器监听的协议,ip,端口等,这里使用的tcp1521端口,并且使#用的是主机名
- LISTENER =
- (DESCRIPTION =
- (ADDRESS = (PROTOCOL = TCP)(HOST = boway)(PORT = 1521))
- )
#listener.ora Network Configuration File: #E:/oracle/product/10.1.0/Db_2/NETWORK/ADMIN/listener.ora
# Generated by Oracle configuration tools.
#下面定义LISTENER进程为哪个实例提供服务
#这里是ORCL,并且它对应的ORACLE_HOME和GLOBAL_DBNAME
#其中GLOBAL_DBNAME不是必需的除非使用HOSTNAME做数据库连接
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = boway)
(ORACLE_HOME = E:/oracle/product/10.1.0/Db_2)
(SID_NAME = ORCL)
)
)
#监听器的名字,一台数据库可以有不止一个监听器
#再向下面是监听器监听的协议,ip,端口等,这里使用的tcp1521端口,并且使#用的是主机名
LISTENER =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = boway)(PORT = 1521))
)
上面的例子是一个最简单的例子,但也是最普遍的。一个listener进程为一个instance(SID)提供服务。
4.监听器的操作命令
$ORACLE_HOME/bin/lsnrctl start
其他诸如stop,status等。具体敲完一个lsnrctl后看帮助。
上面说到的三个文件都可以通过图形的配置工具来完成配置
- $ORACLE_HOME/netca 向导形式的
- $ORACLE_HOME/netmgr
- profile 配置的是sqlnet.ora也就是名称解析的方式
- service name 配置的是tnsnames.ora文件
- listeners配置的是listener.ora文件,即监听器进程
具体的配置可以尝试一下然后来看一下配置文件。
这样一来总体结构就有了,是当你输入sqlplus sys/oracle@orcl的时候
- 查询sqlnet.ora看看名称的解析方式,发现是TNSNAME
- 则查询tnsnames.ora文件,从里边找orcl的记录,并且找到主机名,端口和service_name
- 如果listener进程没有问题的话,建立与listener进程的连接。
- 根据不同的服务器模式如专用服务器模式或者共享服务器模式,listener采取接下去的动作。默认是专用服务器模式,没有问题的话客户端就连接上了数据库的server process。
- 这时候网络连接已经建立,listener进程的历史使命也就完成了。
5.几种连接用到的命令形式
1.sqlplus / as sysdba 这是典型的操作系统认证,不需要listener进程
2.sqlplus sys/oracle 这种连接方式只能连接本机数据库,同样不需要listener进程
3.sqlplus sys/oracle@orcl 这种方式需要listener进程处于可用状态。最普遍的通过网络连接。
以上连接方式使用sys用户或者其他通过密码文件验证的用户都不需要数据库处于可用状态,操作系统认证也不需要数据库可用,普通用户因为是数据库认证,所以数据库必需处于open状态。
然后就是
6.平时排错可能会用到的
1.lsnrctl status查看服务器端listener进程的状态
- LSNRCTL> help
- The following operations are available
- An asterisk (*) denotes a modifier or extended command:
- start stop status
- services version reload
- save_config trace change_password
- quit exit set*
- show*
- LSNRCTL> status
LSNRCTL> help
The following operations are available
An asterisk (*) denotes a modifier or extended command:
start stop status
services version reload
save_config trace change_password
quit exit set*
show*
LSNRCTL> status
2.tnsping 查看客户端sqlnet.ora和tnsname.ora文件的配置正确与否,及对应的服务器的listener进程的状态。
- C:/>tnsping orcl
- TNS Ping Utility for 32-bit Windows: Version 10.1.0.2.0 - Production on 16-8月 -
- 2005 09:36:08
- Copyright (c) 1997, 2003, Oracle. All rights reserved.
- Used parameter files:
- E:/oracle/product/10.1.0/Db_2/network/admin/sqlnet.ora
- Used TNSNAMES adapter to resolve the alias
- Attempting to contact (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)
- (HOST = 127.0.0.1)(PORT = 1521))) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_
- NAME = orcl)))
- OK (20 msec)
C:/>tnsping orcl
TNS Ping Utility for 32-bit Windows: Version 10.1.0.2.0 - Production on 16-8月 -
2005 09:36:08
Copyright (c) 1997, 2003, Oracle. All rights reserved.
Used parameter files:
E:/oracle/product/10.1.0/Db_2/network/admin/sqlnet.ora
Used TNSNAMES adapter to resolve the alias
Attempting to contact (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)
(HOST = 127.0.0.1)(PORT = 1521))) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_
NAME = orcl)))
OK (20 msec)
3.
- SQL>show sga 查看instance是否已经启动
- SQL> select open_mode from v$database; 查看数据库是打开还是mount状态。
- OPEN_MODE
SQL>show sga 查看instance是否已经启动
SQL> select open_mode from v$database; 查看数据库是打开还是mount状态。
OPEN_MODE
----------
READ WRITE
7.使用hostname访问数据库而不是tnsname的例子
使用tnsname访问数据库是默认的方式,但是也带来点问题,那就是客户端都是需要配置tnsnames.ora文件的。如果你的数据库服务器地址发生改变,就需要重新编辑客户端这个文件。通过hostname访问数据库就没有了这个麻烦。
需要修改服务器端listener.ora
- #监听器的配置文件listener.ora
- #使用host naming则不再需要tnsname.ora文件做本地解析
- # listener.ora Network Configuration File: d:/oracle/product/10.1.0/db_1/NETWORK/ADMIN/listener.ora
- # Generated by Oracle configuration tools.
- SID_LIST_LISTENER =
- (SID_LIST =
- (SID_DESC =
- # (SID_NAME = PLSExtProc)
- (SID_NAME = orcl)
- (GLOBAL_DBNAME = boway)
- (ORACLE_HOME = d:/oracle/product/10.1.0/db_1)
- # (PROGRAM = extproc)
- )
- )
- LISTENER =
- (DESCRIPTION_LIST =
- (DESCRIPTION =
- (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC))
- )
- (DESCRIPTION =
- (ADDRESS = (PROTOCOL = TCP)(HOST = boway)(PORT = 1521))
- )
- )
#监听器的配置文件listener.ora
#使用host naming则不再需要tnsname.ora文件做本地解析
# listener.ora Network Configuration File: d:/oracle/product/10.1.0/db_1/NETWORK/ADMIN/listener.ora
# Generated by Oracle configuration tools.
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
# (SID_NAME = PLSExtProc)
(SID_NAME = orcl)
(GLOBAL_DBNAME = boway)
(ORACLE_HOME = d:/oracle/product/10.1.0/db_1)
# (PROGRAM = extproc)
)
)
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC))
)
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = boway)(PORT = 1521))
)
)
客户端sqlnet.ora 如果确认不会使用TNSNAME访问的话,可以去掉TNSNAMES
- # sqlnet.ora Network Configuration File: d:/oracle/product/10.1.0/db_1/NETWORK/ADMIN/sqlnet.ora
- # Generated by Oracle configuration tools.
- SQLNET.AUTHENTICATION_SERVICES= (NTS)
- NAMES.DIRECTORY_PATH= (HOSTNAME)
# sqlnet.ora Network Configuration File: d:/oracle/product/10.1.0/db_1/NETWORK/ADMIN/sqlnet.ora
# Generated by Oracle configuration tools.
SQLNET.AUTHENTICATION_SERVICES= (NTS)
NAMES.DIRECTORY_PATH= (HOSTNAME)
Tnsnames.ora文件不需要配置,删除也无所谓。
下面就是网络和操作系统的配置问题了,怎么样能够解析我的主机名的问题了
可以通过下面的方式连接
sqlplus sys/oracle@boway
这样的话,会连接boway这台服务器,并且listener来确定你所要连接的service_name。
-------------------------------------------------------------------------------
8.启动时listener.ora,sqlnet.ora,tnsnames.ora配置问题解决思路
from:http://www.ixdba.net/hbcms/article/ec/231.html
1:监听文件listener.ora tnsnames.ora中关于host的配置建议都用ip来表示,
2:如果监听不能启动或者启动后不能正常使用,
(1)首先确认你的OS的hostname,执行hostname命令,尝试ping "hostname",看是否能通,
(2)然后检查监听的listener.ora ,tnsnames.ora这两个配置文件中关于host的信息是否是用主机名表示的。
(3)如果是,更改到新的主机名,然后把新的主机名加入系统的hosts文件,linux下为/etc/hosts;
然后ping 新主机名,应该能通的。
(4)如果全部是用ip表示的,那么直接将新的主机名加入系统的hosts文件即可。
然后ping 新主机名,也应该能通的。
3:如果第二步还是解决不了问题,
(1)检查启动的oracle的instance信息,select * fromv$instance;
然后查看本级系统的主机名,两者应该是相等的。
(2)如果查询出来的是老的主机名,尝试"ping老主机名"应该不通,
通过listener也应该是连结不上;
(3)如果是新的主机名,如果"ping新主机名"不通,
请修改/etc/hosts文件增加新主机名,确认能ping通,然后重启oracle
4:注意tns和listener文件的设置。
具体操作步骤:
1)修改hostname为www.ixdba.net
2)修改/etc/hosts,去掉原来的主机名的行,增加该行
192.168.60.253 www.ixdba.net
3)重启数据库,查询instance信息
select * from v$instance;
得到新的HOST_NAME为www.ixdba.net
4)修改listener.ora,把HOST改成新的主机名
5)修改tnsname.ora,修改对应的HOST为新的主机名
6)重启listener
然后connect oracle/oracle@standby应该可以成功的。
oracle: listener.ora 、sqlnet.ora 、tnsnames.ora的配置及例子的更多相关文章
- 关于PLSQL配置了正确的Oracle客户端但是不能识别tnsnames.ora问题
场景描述: 在通过安装Oracle客户端使用PLSQL的时候发现PLSQL在已经正常配置了Oracle Home和Ocdi library的情况下不能识别tnsnames.ora中的有效配置. 正常安 ...
- oracle xe client 如何设置 tnsnames.ora(解决无法使用pl/sql developer的问题)
10.2版本xe的服务器和客户端安装都很方便,由于xe的服务器只允许建立一个实例,实例名字会直接默认为xe,客户端默认安装在C:\XEClient目录下,使用sqlplus连接服务器: sqlplus ...
- oracle net manager的配置文件tnsnames.ora位置
配置文件所在的路径:C:\app\Ling-PC\product\11.2.0\client_1\network\admin (红色为安装的盘符位置)
- oracle安装完成后目录中不论有没有tnsnames.ora和listener.ora文件 PLSQL都能连上的问题解决方法
今天遇到这个问题了,发现listener.ora文件和tnsnames.ora文件在Net Work文件夹下没有,正常情况下安装完oracle或者是oracle Client是会有的,但是在Net M ...
- 安装好oracle11gR2之后在相应路径下却没有生成tnsnames.ora和listener.ora
oracle安装帖子:https://blog.csdn.net/wjb123sw99/article/details/80780277 oracle安装过程中检查失败:需开启C盘共享,或者勾选忽略, ...
- lsnrctl 与 tnsnames.ora 的联系
平台:Windoxs XP+Oracle 11G 当使用oralce的 Net Manager创建了一个名为“L3”的Listener后,要想使用lsnrctl启动和关闭 L3 还必须在tnsname ...
- oracle的sqlnet.ora,tnsnames.ora,listener.ora三个配置文件
总结: 1 .三个配置文件都是放在$ORACLE_HOME\network\admin目录下. 2 .sqlnet.ora确定解析方式 3 .listener.ora上设SID_NAME,通常用于JD ...
- oracle的listener.ora sqlnet.ora tnsnames.ora三个文件的关联性
学习:http://www.cnblogs.com/william-lee/archive/2010/10/20/1856261.html 之前因为安装的是windows server 2008 r2 ...
- [oracle] listener.ora 、sqlnet.ora 、tnsnames.ora
路径 $ORACLE_HOME/network/admin sqlnet.ora(客户及服务器端) 作用类似于linux或者其他unix的nsswitch.conf文件,通过这个文件来决定怎么样找一个 ...
随机推荐
- Unity Unity发布的ios包在iphone上声音小的原因
实质上声音是从话筒里出来的,未走扬声器. 仔细查找文档发现是PlayerSettings里的设置不当引起的. 在PlayerSettings取消勾选 Prepare iOS for Recording ...
- 使用Xshell连接服务器
转载原地址:http://www.server110.com/linux/201308/830.html 1)关于Xshell 网上更多的资料里提到的SSH客户端是putty,因为简单.开源.免费.但 ...
- 35、XPath的使用示例
使用Xpath获取页面元素 [参见W3C官网说明] http://www.w3school.com.cn/xpath/xpath_syntax.asp 以下Xpath路径都是获取下面地址的元素 ...
- PHP中的header()函数
PHP header 函数的用法及其注意事项 void header ( string $string [, bool $replace = true [, int $http_response_co ...
- Quartz使用(2) - Quartz核心接口Scheduler、Job
quartz的核心接口如下: 接口 含义 Scheduler scheduler的主要API接口 Job 任务实现接口,期望调度器能够执行 JobDetail 用于定义Job实例 Trigger 调度 ...
- Homemade Script Language: RED
Made by C, named after RED(RecovEr from SaDness) 欢迎批评 :)
- POJ 1182——食物链——————【种类并查集】
食物链 Time Limit:1000MS Memory Limit:10000KB 64bit IO Format:%I64d & %I64u Submit Status P ...
- 浅析正则表达式模式匹配的 String 方法
在JavaScript代码中使用正则表达式进行模式匹配经常会用到String对象和RegExp对象的一些方法,例如replace.match.search等方法,以下是对一些方法使用的总结. Stri ...
- td标签里内容不换行
在一些页面开发中,除自己操作外,引起换行的情况一般有: Ex一.td标签里内容长度过长引起换行: Ex二.div标签(或其他标记)里内容有文本和图片引起换行: 解决方法: 针对例子一用<nobr ...
- MySQL的btree索引和hash索引
Hash 索引结构的特殊性,其检索效率非常高,索引的检索可以一次定位,不像B-Tree 索引需要从根节点到枝节点,最后才能访问到页节点这样多次的IO访问,所以 Hash 索引的查询效率要远高于 B-T ...