No listener
Linux Error: 111: Connection refused
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1521)))
TNS-12541: TNS:no listener
TNS-12560: TNS:protocol adapter error
TNS-00511: No listener
Linux Error: 2: No such file or directory
问题11:如何实现启动监听后,立即完成注册?
启动监听后一般要过60秒才会完成注册,但可以在sqlplus中手工执行命令,使其立即完成注册,操作如下:
SQL> alter system register;
此命令会触发pmon进程去将实例名字动态注册到监听中去。
问题12:如何生成tnsnames.ora文件?
参考图形化配置的方法,可以使用netca命令,调出图形化配置选项,如下选择第三项即为配置tnsnames.ora文件,配置好后会自动生成一个tnsnames.ora文件。





选择进行测试一下,如下:


下面这个服务名可以任意取,与前面的数据库服务名是两个概念,请注意。

点击完成选项,完成tnsnames.ora文件的创建,如下图所示:

问题13:在添加tnsnames.ora时会要求填写数据库服务名,这个名字应该依据什么进行填写?
在sqlplus中使用如下命令,即可查看到服务名。
SQL> show parameter service
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
service_names string hyl
问题14:如何查看1521端口的占用情况?
[root@hyldb ~]# netstat -tulnp|grep 1521
tcp 0 0 192.168.1.123:1521 0.0.0.0:* LISTEN 3473/tnslsnr
一般数据库服务器上本身会有不止一块网卡,通过命令可以查看到使用的哪一个网卡。
问题15:如何查看到tnsnames.ora文件及应该注意什么?
SQL> show parameter service
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
service_names string hyl
注意这里上面的“HYL”是可以任意取得,而下面的SERVICE_NAME = hyl,这里的SERVICE_NAME必须要和数据库服务名完全一样。
问题16:客户端连接数据库书写格式是怎样及为何这样书写?
一般书写格式为username/password@servicename。
之所以这种格式书写,是因为当遇到@这个符号时,oracle会自动到tnsnames.ora文件中解析@后跟的字符串。通过tnsnames文件解析字符串,tnsnames.ora文件中包含IP地址、端口号、数据库服务名。也就是说,当客户端进行sqlplus书写格式登陆数据库时,oracle会根据@字符后的字符串去到tnsnames.ora文件中对应的字符串解析出IP地址、端口号、数据库服务名的信息。
问题17:当客户端无法连接oracle数据库时,如何进行排错?
(1)、查看客户端tnsnames.ora文件设置是否正确,检查service_name(参考问题13)是否与数据库端相同;
(2)、查看服务器段IP地址、端口号(参考问题14)是否正确;
(3)、客户端使用tnsping命令ping服务名,查看情况,如下代表可以解析成功:
[oracle@hyldb admin]$ tnsping beijing_daotian
TNS Ping Utility for Linux: Version 11.2.0.4.0 - Production on 04-OCT-2014 01:34:07
Copyright (c) 1997, 2013, Oracle. All rights reserved.
Used parameter files:
Used TNSNAMES adapter to resolve the alias
Attempting to contact (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.123)(PORT = 1521))) (CONNECT_DATA = (SERVICE_NAME = hyl)))
OK (10 msec)
这里要注意,tns可以ping成功,也可能存在其它问题致使无法连接oracle,如你使用了一个没有注册到监听的service_name,tnsping可以完成,但此情况是无法连接数据库的。
问题18:在oracle网络中几个文件涉及到了service_name这个概念,之间是怎样的关系?
tnsnames.ora中service_name和listener.ora(监听文件)中service_name是对应的,应该与oracle的service_name相一致。当客户端发出请求时,会根据tnsnames.ora中的service_name与数据库服务器端监听文件中的service_name进行比对,只有一致时才会完成解析工作,客户端同监听建立起连接。这样监听才会把连接转移到数据库实例上,而实现客户端与oracle建立连接。
问题19:静态注册、动态注册的区别?
静态注册需要手工在listener.ora文件中添加内容,如下:
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = 数据库服务名)
(ORACLE_HOME = /u01/app/oracle/product/10.2.0/db_1)
(SID_NAME = 数据库实例名)
)
)
注册后可以查看效果,按如下操作:
[oracle@hyldb admin]$ lsnrctl stop
[oracle@hyldb admin]$ lsnrctl start
[oracle@hyldb admin]$ lsnrctl status
--查看到其中标识有UNKNOWN代表静态注册的监听
LSNRCTL for Linux: Version 11.2.0.4.0 - Production on 04-OCT-2014 12:28:47
Copyright (c) 1991, 2013, Oracle. All rights reserved.
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=hyldb)(PORT=1521)))
STATUS of the LISTENER
------------------------
Alias LISTENER
Version TNSLSNR for Linux: Version 11.2.0.4.0 -