今天通过plsql 连接本地的数据库是,报如下错误
ORA-12154: TNS: 无法解析指定的连接标识符
先查看本地数据监听是否启动:
可以通过任务管理器查看,本地数据库服务的监听也启动
或者通过命令 lsnrctl 查看
在cmd窗口中输入 lsnrctl
然后在弹出的窗口中输入status
看到本地监听启动没有问题, 查看本地服务监听配置文件:
listener.ora 位置在oracle_home下/network/admin 下 这里oracle_home 指安装oracle时配置的环境变量,
本实例路径为 D:\software\oracle11\product\11.2.0\dbhome_1\NETWORK\ADMIN
打开看到内容如下:
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
)
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521))
)
)
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(SID_NAME = CLRExtProc)
(ORACLE_HOME = D:\software\oracle11\product\11.2.0\dbhome_1)
(PROGRAM = extproc)
(ENVS = "EXTPROC_DLLS=ONLY:D:\software\oracle11\product\11.2.0\dbhome_1\bin\oraclr11.dll")
)
(SID_DESC =
(GLOBAL_DBNAME= orcl)
(ORACLE_HOME = D:\software\oracle11\product\11.2.0\dbhome_1)
(SID_NAME = orcl)
)
)
ADR_BASE_LISTENER = D:\software\oracle11\product\11.2.0\dbhome_1\log
看到上面的内容,自己想当然的认为 SID_LIST_LISTENER 应改为 SID_LIST_LISTENER _ORCL,
lsnrctl stop
lsnrctl start
然后再去连接,仍然提示 ORA 12154 错误
然后想到会不会本地服务监听有问题,这里虽然能通过sqlplus 如下的方法连接
方法一:
但是该方法是不会通过监听连接的,sqlplus直接通过IPC的方式连接,所以不能证明本地服务的监听是否正常。
但是连接后可以通过获取IP的方式判断,如果获取不到IP表是监听不正常
select sys_context('userenv','ip_address') from dual;
根据查询结果知道服务监听有问题。
方法二 :通过sqlplus连接串连接数据库看是否能连接:
sqlplus username/passwd@localhost:1521/orcl as sysdba
看到仍旧提示 ORA-12514
所以判断服务的监听有问题,想着刚刚修改监听文件,然后还原监听文件,再重启
重启后通过连接串连接:看到同样能连接上了,
再次通过PLSQL 连接时,发现仍然不能连接还是同样的错误。ORA-12154,此时可以断定是客户端tnsnames.ora配置有问题,我们可以通过在plsql 中配置连接串来连接 表示客户端监听配置文件tnsnames.ora有问题
username/[email protected]:1521/orcl as sysdba
配置后通过如下方式连接
看到通过连接串能连接数据库。
方法二: 通过tnsping 网络服务名
step1 找到网络服务名
找到环境变量TNS_ADMIN 即找到客户端的监听文件配置:
本实例路径:D:\software\oraclient\network\admin
打开tnsnames.ora文件
看到本地服务的监听配置如下:
local_orcl =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = orcl)
)
)
即网络服务名为local_orcl
step 2 测试tnsname.ora配置是否正常
tnsping local_orcl
看到报错 TNS-03505: 无法解析名称
由此判定是客户端tnsnames.ora配置文件的问题
乍一看,内容都没有问题,仔细比对会发现,这里local_orcl 没有顶格,我勒个苍天……
然后修改配置文件
修改配置文件后,再次检测监听是否正常
通过上面的内容表示监听配置没有问题了,再次通过plsql也能正常连接了。
最后总结下,ORA-12154: TNS: 无法解析指定的连接标识符 以及 TNS-03505: 无法解析名称
或者跟监听相关的报错信息,解决问题的思路是
1、先判断服务器的监听是否正常,
1)可以通过 lsnrctl 命令 status来看,其实也开始的时候,仔细看到status的信息中说道了监听不支持服务,这就表示服务监听有问题
2)通过sqlplus连接串的方式连接数据库,如果能正常连接表示服务监听没有问题
3)通过sqlplus不用连接串的方式登录后,如果能正常获取ip表示数据库监听没有问题
2、如果服务器ip没有问题后,一般就是客户端监听文件配置问题了,客户端监听文件的配置可以通过
tnsping + 网络服务名 来测试,