1、解决方法 在oracle设置ODBC及出现oracle提示TNS:无监听程序的解决办法 2009年10月16日 星期五 11:42 设置ODBC
ODBC的全名是Open Database Connectivity(开放式数据库连接),是应用程序连接数据库的接口。由于计算机的类型不同,从个人计算机到大型主机,都有自己处理数据的方式,ODBC则可以连接到相同或不相同的数据库管理系统,因此,ODBC可以给应用程序提供相同的存取数据库的接口,程序设计员在设计连接不同数据库时,只要处理与ODBC的连接就可以了,而不必针对不同的数据库设计完全不同的程序。特别需要提醒的是,不同的数据库都有自己对应的ODBC驱动程序,在使用不同数据库的同时,务必设置正确的ODBC驱动程序。就像在本节中,想要连接Oracle 10g数据库,就必须设置Oracle ODBC驱动程序,操作步骤如下: (1)选择Start→Programs→Oracle-OraDb10g_home1→Configuration and Migration Tools→Microsoft ODBC Administrator (2)打开ODBC Data Source Administrator, (3)单击System DSN标签 (4)单击Add按钮 (5)向下拖动滚动条,找到Oracle in OraDb10g_home1选项,选择该选项 (6)单击Finish按钮,进入Oracle ODBC Driver Configuration对话框 Data Source Name:自定义,程序调用时将使用这个名称,请输入misdbdsn。 TNS Service Name:Oracle TNS服务名称,在创建数据库时,一般默认TNS服务名称与数据库名称相同,请输入MISDB,读者也可以自定义。 User ID:用户的账户名称,这里使用System账户来测试。 (7)单击Test Connection按钮,出现Oracle ODBC Driver Connect对话框,如图13-10所示。 Password:请输入安装时给System设置的密码,或自行修改后的密码。 如果出现oracle提示ERROR - ORA-12541: TNS:无监听程序,那么就依照下列步骤做,这是因为你的分配的地址不对。 查看\oracle\product\10.2.0\db_1\network\admin\tnsnames.ora文件,用记事本打开,显示oracle值: ORACLE = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST =自动分配的IP地址)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = oracle) ) ) 主机名输入localhost或127.0.0.1都会提示无监听程序。由于自动分配的IP地址会有变动,所以将oralce值中的host改成本机的计算机名,保存修改后的tnsnames.ora。再次新建数据库,出错问题解决。 # tnsnames.ora Network Configuration File: G:\oracle\product\10.2.0\db_1\network\admin\tnsnames.ora # Generated by Oracle configuration tools. ORACLE = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST =计算机名称)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = oracle) ) ) 计算机名称可以右击‘我的电脑’找到 (8)单击OK按钮 (9)单击OK按钮,回到Oracle ODBC Driver Configuration对话框 (10)单击OK按钮,回到ODBC Data Source Administrator的System DNS选项卡 (11)单击OK按钮,完成ODBC的设置。 2、解决方式: <转>改变oracle数据库的ip地址引起的“ORA-12541:TNS:无监听程序”错误解决方法! 2009-10-11 05:25 P.M.
在用PL/SQL Developer连接数据库时出现 “ORA-12541:TNS:无监听程序”错误。
1、检查listener.log日志 发现下面错误: TNSLSNR for 32-bit Windows: Version 10.2.0.1.0 - Production on 20-9月 -2008 10:25:26 Copyright (c) 1991, 2005, Oracle. All rights reserved. 系统参数文件为D:\oracle\product\10.2.0\db_1\network\admin\listener.ora 写入D:\oracle\product\10.2.0\db_1\network\log\listener.log的日志信息 写入D:\oracle\product\10.2.0\db_1\network\trace\listener.trc的跟踪信息 跟踪级别当前为0 以 pid=1704 开始 监听: (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(PIPENAME=\\.\pipe\EXTPROC1ipc))) 监听该对象时出错: (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=0.5.0.5)(PORT=1521))) TNS-12545: 因目标主机或对象不存在, 连接失败 TNS-12560: TNS: 协议适配器错误 TNS-00515: 因目标主机或对象不存在, 连接失败 32-bit Windows Error: 49: Unknown error 不再监听: (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(PIPENAME=\\.\pipe\EXTPROC1ipc)))
2、查看Oracle的listener是否启动 C:\Documents and Settings\mengzhaoliang>lsnrctl status LSNRCTL for 32-bit Windows: Version 10.2.0.1.0 - Production on 20-9月 -2008 10:5 0:44 Copyright (c) 1991, 2005, Oracle. All rights reserved. 正在连接到 (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1))) TNS-12541: TNS: 无监听程序 TNS-12560: TNS: 协议适配器错误 TNS-00511: 无监听程序 32-bit Windows Error: 2: No such file or directory 正在连接到 (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=0.5.0.5)(PORT=1521))) TNS-12535: TNS: 操作超时 TNS-12560: TNS: 协议适配器错误 TNS-00505: 操作超时 32-bit Windows Error: 60: Unknown error 原来没有启动listener,用“lsnrctl start”命令也不能启动。 C:\Documents and Settings\mengzhaoliang>lsnrctl start LSNRCTL for 32-bit Windows: Version 10.2.0.1.0 - Production on 20-9月 -2008 10:5 2:16 Copyright (c) 1991, 2005, Oracle. All rights reserved. 启动tnslsnr: 请稍候... TNSLSNR for 32-bit Windows: Version 10.2.0.1.0 - Production 系统参数文件为D:\oracle\product\10.2.0\db_1\network\admin\listener.ora 写入D:\oracle\product\10.2.0\db_1\network\log\listener.log的日志信息 监听: (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(PIPENAME=\\.\pipe\EXTPROC1ipc))) 监听该对象时出错: (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=0.5.0.5)(PORT=1521)) ) TNS-12545: 因目标主机或对象不存在, 连接失败 TNS-12560: TNS: 协议适配器错误 TNS-00515: 因目标主机或对象不存在, 连接失败 32-bit Windows Error: 49: Unknown error 监听程序未能启动。请参阅上面的错误消息... 3、查看listener.ora的内容: # listener.ora Network Configuration File: D:\oracle\product\10.2.0\db_1\network\admin\listener.ora # Generated by Oracle configuration tools. SID_LIST_LISTENER = (SID_LIST = (SID_DESC = (SID_NAME = PLSExtProc) (ORACLE_HOME = D:\oracle\product\10.2.0\db_1) (PROGRAM = extproc) ) ) LISTENER = (DESCRIPTION_LIST = (DESCRIPTION = (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1)) (ADDRESS = (PROTOCOL = TCP)(HOST = 0.5.0.5)(PORT = 1521)) ) ) 原来本机的ip发生改变后,就出现了上述问题,改变数据库的监听ip地址: 把(ADDRESS = (PROTOCOL = TCP)(HOST = 0.5.0.5)(PORT = 1521)) 改成 (ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521)) 127.0.0.1:也就是目前数据库正在用的ip地址。
4、再次启动oracle的listener C:\Documents and Settings\mengzhaoliang>lsnrctl start LSNRCTL for 32-bit Windows: Version 10.2.0.1.0 - Production on 20-9月 -2008 10:5 4:40 Copyright (c) 1991, 2005, Oracle. All rights reserved. 启动tnslsnr: 请稍候... TNSLSNR for 32-bit Windows: Version 10.2.0.1.0 - Production 系统参数文件为D:\oracle\product\10.2.0\db_1\network\admin\listener.ora 写入D:\oracle\product\10.2.0\db_1\network\log\listener.log的日志信息 监听: (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(PIPENAME=\\.\pipe\EXTPROC1ipc))) 监听: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=127.0.0.1)(PORT=1521))) 正在连接到 (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1))) LISTENER 的 STATUS ------------------------ 别名 LISTENER 版本 TNSLSNR for 32-bit Windows: Version 10.2.0.1.0 - Produ ction 启动日期 20-9月 -2008 10:54:41 正常运行时间 0 天 0 小时 0 分 1 秒 跟踪级别 off 安全性 ON: Local OS Authentication SNMP OFF 监听程序参数文件 D:\oracle\product\10.2.0\db_1\network\admin\listener.o ra 监听程序日志文件 D:\oracle\product\10.2.0\db_1\network\log\listener.log 监听端点概要... (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(PIPENAME=\\.\pipe\EXTPROC1ipc))) (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=127.0.0.1)(PORT=1521))) 服务摘要.. 服务 "PLSExtProc" 包含 1 个例程。 例程 "PLSExtProc", 状态 UNKNOWN, 包含此服务的 1 个处理程序... 命令执行成功 启动已经成功,
5.再tnsnames.ora上添加上 ORCL_127.0.0.1 = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = orcl) ) ) 6、再次用PL/SQL Developer再次连接数据库 出现下面错误: TNS-12514: TNS: 监听程序当前无法识别连接描述符中请求的服务 再次检查listener.log日志 20-9月 -2008 11:01:54 * (CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=orcl)(CID= (PROGRAM=D:\plsql\plsqldev.exe)(HOST=RUIFEI-EF0ADC98)(USER=mengzhaoliang))) * (ADDRESS= (PROTOCOL=tcp)(HOST=127.0.0.1)(PORT=1267)) * establish * orcl * 12514 TNS-12514: TNS: 监听程序当前无法识别连接描述符中请求的服务 查看listener: C:\Documents and Settings\mengzhaoliang>lsnrctl services LSNRCTL for 32-bit Windows: Version 10.2.0.1.0 - Production on 20-9月 -2008 11:1 1:09 Copyright (c) 1991, 2005, Oracle. All rights reserved. 正在连接到 (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1))) 服务摘要.. 服务 "PLSExtProc" 包含 1 个例程。 例程 "PLSExtProc", 状态 UNKNOWN, 包含此服务的 1 个处理程序... 处理程序: "DEDICATED" 已建立:0 已被拒绝:0 LOCAL SERVER 命令执行成功
7、用sqlplus也出现同样错误: C:\Documents and Settings\mengzhaoliang>sqlplusscott/mzl@ORCL_127.0.0.1 SQL*Plus: Release 10.2.0.1.0 - Production on 星期六 9月 20 11:15:09 2008 Copyright (c) 1982, 2005, Oracle. All rights reserved. ERROR: ORA-12514: TNS: 监听程序当前无法识别连接描述符中请求的服务 8、查看listenser状态: C:\Documents and Settings\mengzhaoliang>lsnrctl status LSNRCTL for 32-bit Windows: Version 10.2.0.1.0 - Production on 20-9月 -2008 11:2 6:42 Copyright (c) 1991, 2005, Oracle. All rights reserved. 正在连接到 (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1))) LISTENER 的 STATUS ------------------------ 别名 LISTENER 版本 TNSLSNR for 32-bit Windows: Version 10.2.0.1.0 - Produ ction 启动日期 20-9月 -2008 11:24:33 正常运行时间 0 天 0 小时 2 分 8 秒 跟踪级别 off 安全性 ON: Local OS Authentication SNMP OFF 监听程序参数文件 D:\oracle\product\10.2.0\db_1\network\admin\listener.o ra 监听程序日志文件 D:\oracle\product\10.2.0\db_1\network\log\listener.log 监听端点概要... (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(PIPENAME=\\.\pipe\EXTPROC1ipc))) (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=127.0.0.1)(PORT=1521))) 服务摘要.. 服务 "PLSExtProc" 包含 1 个例程。 例程 "PLSExtProc", 状态 UNKNOWN, 包含此服务的 1 个处理程序... 命令执行成功 C:\Documents and Settings\mengzhaoliang>tnsping orcl TNS Ping Utility for 32-bit Windows: Version 10.2.0.1.0 - Production on 20-9月 - 2008 11:27:43 Copyright (c) 1997, 2005, Oracle. All rights reserved. 已使用的参数文件: D:\oracle\product\10.2.0\db_1\network\admin\sqlnet.ora TNS-03505: 无法解析名称 9、查看sqlnet.ora内容: # sqlnet.ora Network Configuration File: D:\oracle\product\10.2.0\db_1\network\admin\sqlnet.ora # Generated by Oracle configuration tools. # This file is actually generated by netca. But if customers choose to # install "Software Only", this file wont exist and without the native # authentication, they will not be able to connect to the database on NT. SQLNET.AUTHENTICATION_SERVICES= (NTS) NAMES.DIRECTORY_PATH= (TNSNAMES, EZCONNECT) 10.把listener.ora的内容: # listener.ora Network Configuration File: D:\oracle\product\10.2.0\db_1\network\admin\listener.ora # Generated by Oracle configuration tools. SID_LIST_LISTENER = (SID_LIST = (SID_DESC = (SID_NAME = PLSExtProc) (ORACLE_HOME = D:\oracle\product\10.2.0\db_1) (PROGRAM = extproc) ) ) LISTENER = (DESCRIPTION_LIST = (DESCRIPTION = (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1)) (ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521)) ) )
改成下面的内容: # listener.ora Network Configuration File: D:\oracle\product\10.2.0\db_1\network\admin\listener.ora # Generated by Oracle configuration tools. SID_LIST_LISTENER = (SID_LIST = (SID_DESC = (SID_NAME = orcl) (ORACLE_HOME = D:\oracle\product\10.2.0\db_1) # (PROGRAM = extproc) ) ) LISTENER = (DESCRIPTION_LIST = (DESCRIPTION = (ADDRESS = (PROTOCOL = IPC)(KEY = orcl)) (ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521)) ) ) 11、然后关闭、再启动listener 在cmd中执行“lsnrctl stop” 和“lsnrctl stop”命令,再次登陆正常! C:\Documents and Settings\mengzhaoliang>sqlplus scott/mzl@orcl SQL*Plus: Release 10.2.0.1.0 - Production on 星期六 9月 20 11:55:47 2008 Copyright (c) 1982, 2005, Oracle. All rights reserved.
连接到: Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production With the Partitioning, OLAP and Data Mining options SQL>
再次用PL/SQL Peveloper登陆就没有问题了。 完毕! 我通过以上步骤我的问题还没解决,然后重启了一下OracleOraDb10g_home1TNSListener服务就行了
|