这是一个有关手工配置tnsnames.ora不当,导致服务名不可用的一个问题案例。提醒大家在手工配置的过程中注意其中的细节。
1.错误信息如下
当使用secooler这个服务名连接数据库的时候,收到如下错误
-bash-3.00$ sqlplus sec/sec@secooler
SQL*Plus: Release 10.2.0.1.0 - Production on Mon Sep 13 23:11:00 2010
Copyright (c) 1982, 2005, Oracle. All rights reserved.
ERROR:
ORA-12154: TNS:could not resolve the connect identifier specified
Enter user-name:
2.检查Oracle的监听配置文件tnsnames.ora
$ vi tnsnames.ora
……
secooler=
(DESCRIPTION=
(ADDRESS=(PROTOCOL=tcp)(HOST=secdb)(PORT=1521))
(CONNECT_DATA=
(SERVICE_NAME=secooler)))
……
问题就处在在配置secooler服务名的时候存在一行内容没有留有空格(上面第四行的信息"(CONNECT_DATA="前面没有留有空格)。
3.处理问题
仅需将第四行前增加一个空格即可解决问题。
4.关于tnsnames.ora配置文件的写法
在手工配置tnsnames.ora文件的时候,最容易出现的就是语法和格式上的问题。针对具体的一个服务名的配置只允许开始服务名顶头书写。
即便是整个服务名内容均写在一行也是没有问题的。例如secooler服务名按照如下方法进行配置。
secooler=(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=secdb)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=secooler)))
测试服务名secooler的可用性
-bash-3.00$ sqlplus sec/sec@secooler
SQL*Plus: Release 10.2.0.1.0 - Production on Mon Sep 13 23:14:10 2010
Copyright (c) 1982, 2005, Oracle. All rights reserved.
Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options
SQL>
5.小结
文中提到的问题与Oracle解析tnsnames文件有关。如果大家习惯使用netca来配置服务名,那将会很少遇到因为tnsnames.ora格式上的问题。不过netca这种图形化界面工具在某些条件下不便于使用(如仅允许使用命令行界面完成维护任务)。因此,建议大家对tnsnames.ora文件格式有充分的了解,避免不必要的麻烦。
Good luck.
secooler
10.09.13
-- The End --
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/70034820/viewspace-2994410/
,如需转载,请注明出处,否则将追究法律责任。