这个错误很普遍,也很容易遇到。今天刚在电脑上装了个oracle,连接时就出现了这个问题
1、 ORA-12541: TNS: 没有监听器
显而易见,服务器端的监听器没有启动,另外检查客户端IP地址或端口填写是否正确。
启动监听器:
//1、进入cmd命令界面
//2、进入oracle
sqlplus / as sysdba
//3、启动监听器
$ lsnrctl start
2、ORA-12154: TNS: 无法处理服务名
检查输入的服务名与配置的服务名是否一致。另外注意生成的本地服务名文件(Windows下如D:oracleora92networkadmin tnsnames.ora,Linux/Unix下/network/admin/tnsnames.ora)里每项服务的首 行服务名称前不能有空格。
3、 ORA-12514: TNS: 监听进程不能解析在连接描述符中给出的SERVICE_NAME
打开Net Manager,选中服务名称,检查服务标识栏里的服务名输入是否正确。该服务名必须与服务器端监听器配置的全局数据库名一致。同时检查sqlnet.ora,例如如果想要采用简便连接方式连接就需要在NAMES.DIRECTORY_PATH参数中添加EZCONNECT。
4、ORA-12514:TNS:监听程序当前无法识别链接描述符中请求的服务
这种情况一般是配置了监听但是系统未写入到listener.ora文件中(在此我暂未搞明白什么时候写入),所以只需要在该文件中写入配置参数就可以了。
解决办法:
1、打开listener.ora文件
找到listener.ora文件的存放位置并打开。
我本机文件目录在D:\app\administer\product\11.2.0\dbhome_1\NETWORK\ADMIN下。该文件须根据自己安装目录的实际情况找。(注:Oracle10g与11g的目录好像不太一样)。文件内容如下:
# listener.ora Network Configuration File: D:\app\administer\product\11.2.0\dbhome_1\NETWORK\ADMIN\listener.ora
# Generated by Oracle configuration tools.
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(SID_NAME = CLRExtProc)
(ORACLE_HOME = D:\app\administer\product\11.2.0\dbhome_1)
(PROGRAM = extproc)
(ENVS = "EXTPROC_DLLS=ONLY:D:\app\administer\product\11.2.0\dbhome_1\bin\oraclr11.dll")
)
)
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
)
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.194)(PORT = 1555))
)
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
)
)
ADR_BASE_LISTENER = D:\app\administer
从上中我们可以看出我已经配置过监听了,但是报错是由于Oracle的地址没有写到SID_DESC中,在此我们将此写入就可以了。
2、修改listener.ora文件
将以下内容追加到该文件的SID_LIST节点下
(SID_DESC =
(GLOBAL_DBNAME = orcl)
(ORACLE_HOME = D:\app\administer\product\11.2.0\dbhome_1)
(SID_NAME = orcl)
)
结果如下图:
注:标红的部分根据自己机器安装目录修改
3、我在此本机修改完毕后,总是提示我不能保存,提示说该文件已在别的地方打开。于是我另存一份,然后直接将原来的文件给覆盖掉。
4、重启监听服务。OK搞定!!