TNSNAMES配置中空格导致的bug(二)

之前一直认为这是Oracle的一个bug,直到前一段时间通读网络服务参考手册时,才发现问题的真相。
TNSNAMES配置中空格导致的bug:http://yangtingkun.itpub.net/post/468/487506
当时测试发现,只要在SERVICE_NAME下面的一行缺少空格,就会导致错误的产生:

TEST08 =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 172.25.13.229)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = test08)
)
  )

替换下划线的版本为:

TEST08 =
__(DESCRIPTION =
____(ADDRESS = (PROTOCOL = TCP)(HOST = 172.25.13.229)(PORT = 1521))
____(CONNECT_DATA =
______(SERVER = DEDICATED)
______(SERVICE_NAME = test08)
)
__)

后来发现,却是这种情况会引发TNSNAMES.ORA解析错误,但是如果这里添加了空格,而在其他位置删除空格,会引发同样的问题。不过由于一直把这个现象当做了BUG,没有再进行深入的分析。
问题的答案在看文档的时候被揭晓。原来Oracle的TNSNAMES.ORA中对格式存在要求,换行的下一行如果和上一行存在父子关系,则不能顶头,至少要保留一个空格,来提示Oracle这不是一个新的配置,而是上面配置的继续。
根据文档的描述,对于子配置项,如果要单独一行,那么至少要在换行后保留一个空格,否则就应该与主配置同属一行。
本以为发现的是Oracle的一个bug,没想到却是文档中明确说明的特性,这就是文档没有看全就自以为是乱下判断的结果,引以为戒。

This entry was posted in ORACLE and tagged , , , . Bookmark the permalink.

Leave a Reply

Your email address will not be published. Required fields are marked *