又是这个百无聊赖的问题,尽管问题芝麻点大,却让我们好找啊!
非常久没有安装oracle了。今天安装11g的时候,用PLSQL Developer连接时,就出现了这个俗不可耐的问题:ORA-12154 TNS无法解析指定的连接标识符。
我自觉得安装的时候已经非常小心翼翼了,结果还是出了纰漏,于是乎,我抱着不解决这个问题誓不罢休的决心開始一步步排查问题,功夫不负有心人,终于得以解决。
以下我具体给大家介绍解决这个问题的思路:
首先搞清楚问题的主体有两个:oracle服务和PLSQL Developer。
一、先排查oracle服务这边。
1、开启服务和监听
命令行输入:lsnrctl start
或者界面操作 右键 我的电脑-->管理-->服务和应用程序-->服务,右键点击OracleOraDb11g_home1TNSListener-->启动类型-->自己主动(延迟启动)。这样启动的优点是仅仅要在使用oracle服务监听的时候才启动,节约内存。当然,在启动服务监听后顺便启动服务。
右键点击 OracleServiceORCL 与上面相同操作。
监听启动之后能够查看监听具体状态。
命令行输入:lsnrctl status。
监听和服务都启动成功之后,再用PLSQL Developer连接试一下,假设能够,以下步骤能够省略,假设不行,请看以下第二步。
2、用sqlplus測试连接
命令行输入:sqlplus/nolog
再输入:conn username/password @ 实例 as sysdba 。
演示样例:conn sys/123456@orcl as sysdba 或者 conn system/123456@orcl as sysdba。
说明:username和password是在安装oracle将要结束时。有个口令管理的选项进入设置的,username有非常多。比方sys,system,scott,可是password要自己设置。
假设能连接上,则可继续阅读下文,假设连接不上,则能够就此止步,去研究oracle安装哪里出了问题。
为了检測更加保险,我们还能够ping oracle服务。
命令行输入:tnsping localhost:1521/orcl。
假设出现“OK”字样,可表示ping 通。
试着PLSQL Developer继续连接,假设还连接不上。则继续下文。
细致检查D:\app\Administrator\product\11.2.0\dbhome_2\NETWORK\ADMIN 中tnsnames.ora文件内容有没有错误。比方多了空格啊什么的,特别是地址指向。只是一般在第一次使用的时候是不须要修改里面的东西。这里注意了,oracle 11g 安装完之后。安装文件夹下会有两个dbhome。dbhome_1和dbhome_2。两个里面都有tnsnames.ora。我们要检查的是dbhome_2文件夹里的tnsnames.ora。
二、PLSQL Developer
以上流程假设比較顺利。基本能够排除oracle服务的问题。我们再把问题转向PLSQL Developer。
1、打开PLSQL Developer,先不登录,点击取消。接着我们照样进入了操作主界面。点击菜单条中 工具-->首选项-->连接,右边选择oracleclient,选中你安装的。然后点击应用,确定就可以。
2、又一次登录,填上你刚刚ping oracle服务的username、password和实例。
再连接,假设还连接不上。把数据库实例加上主机名和port号。
演示样例:localhost:1521/orcl,这中配置是和tnsnames.ora配置一一相应的。再连接试试,必须成功,再不成功,那就超出我个人能力范围了,呵呵~
以下给出tnsnames.ora原汁原味的配置格式:
# tnsnames.ora Network Configuration File: d:\app\Administrator\product\11.2.0\dbhome_2\network\admin\tnsnames.ora # Generated by Oracle configuration tools. LISTENER_ORCL = (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521)) ORACLR_CONNECTION_DATA = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521)) ) (CONNECT_DATA = (SID = CLRExtProc) (PRESENTATION = RO) ) ) ORCL = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = orcl) ) )说明:
当然我们能够继续加入其它不同的实例。方法是。在tnsnames.ora中加入诸如例如以下代码:
ORCL2 = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = orcl) ) )这样我们就在本地服务上多了一个orcl2的实例,我们能够试一试。
REMOTEORCL= (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.2.105)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = orcl) ) )这样在登录时候。填写相应的实例、username和password就搞定了。