今天用pl/sql时出现一个问题,本是可以连接的一个数据库,在添加了一个数据库配置以后,就出现了“ORA-12154:TNS:无法解析指定的连接标识符”的问题。网上查了这个问题的解决办法。先贴一部分:
pl/sql 每当oracle client中service name发生变化,都会按照client安装目录下最新的tnsnames.ora,去作为它的读取文件;如果该文件在卸载oracle client后被手工删除或手工改动过后,未在oracle client中修改;则会报“ORA-12514:tns:无法解析指定的连接标识符”错误。
解决方法:
1、用tnsping 检测 plSQL登陆时database(数据库)别名是否可正确解析,如报“TNS-03505:无法解析名称”,则此database别名有冲突,需更改。
2、手工改动tnsnames.ora后,在oracle client中修改主机名(“对象”–“将数据库添加到树”–“从本地的……”,然后把错误主机名删除或从树中移除)
3、重新打开plSQL,用正确的database别名登陆,即恢复正常
4、如仍有问题,不登陆进入plSQL界面,进入”tools”–“Preferences”–“Oracle”–“Connection”,把”home”(oracle主目录名)里的数据清空,应用后,重新启动plSQL即可。
附录:在做以上更改后oracle自带的sqlPLUS,可能会出现不能正常登陆远程服务器的情况;因为其访问的是database下的tnsnames.ora文件,目录与client的不一样,默认为 X(盘符):\oracle\product\10.2.0\db_1\NETWORK\ADMIN\tnsnames.ora
解决方法:只需将client下tnsnames.ora中定义的主机字符串(service_name)的命令行复制到database 下的tnsnames.ora内,然后保存就可以了。
然而本人遇到的却不是这样的一个问题,本人添加的数据库别名与之前的并不冲突,在添加之前是这样:
<!-- 数据库1 -->
orcl =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.111)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orcl)
)
)
添加了一个这样的配置
<!-- 数据库1 -->
orcl =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.111)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orcl)
)
)
<!-- 新添数据库 -->
index123 =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.2.222)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = index123)
)
)
然而,就这样一个操作导致连接出现“ORA-12154:TNS:无法解析指定的连接标识符”错误。
经过多番试验检验,发现只要在orcl这个别名下,写一个空格+注释行
<!-- 数据库1 -->
orcl =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.111)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orcl)
)
)
<!-- 任意内容 -->
就会报这个错,我分析应该是oracle在orcl这个别名配置下加空格加注释行的话,默认识别空格为配置体内容,于是会继续解析成特殊含义。当然,也不知道是不是软件版本bug,总之如遇到这种错误无法解决时可查看是否在orcl别名下有空格加注释行,如有,将其整行删去或者是删去注释行前的空格再试试。
p.s.:
不是说对于特定的这个orcl别名会出现这种情况,是对于所有要登录的别名配置下,只要有空格加注释行就会出现该错误。如果我在之前新添加的index123配置下也加注释行的话,是没法登陆成功的。