发表于: 2008.04.04 23:49
分类: ORACLE
出处: http://yangtingkun.itpub.net/post/468/459005
---------------------------------------------------------------
前两天在使用10g的简化连接方式的时候突然想到的问题,如果TNSNAMES.ORA中的配置名称恰好是另一个数据库的简化连接方式,Oracle会连接到哪个数据库。
今天有时间,做了个简单的测试。
首先通过简化连接方式连接远端的数据库:
SQL> CONN YANGTK/YANGTK@172.25.1.100/TEST1已连接。
SQL> SELECT * FROM GLOBAL_NAME;
GLOBAL_NAME
-----------------------------------------------------
TEST1.YANGTINGKUN
下面在本地的TNSNAMES.ORA中配置另一个数据库,但是配置的名称为172.25.1.100/TEST1:
172.25.1.100/test1 =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = ytk-thinkpad)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = ytk102.ytk_thinkpad)
)
)
添加了这个配置后,保存TNSNAMES.ORA文件的修改,再次执行上面的连接操作,检查当前连接的数据库:
SQL> CONN YANGTK/YANGTK@172.25.1.100/TEST1已连接。
SQL> SELECT * FROM GLOBAL_NAME;
GLOBAL_NAME
---------------------------------------------------
YTK102.YTK_THINKPAD
这次TNSNAMES.ORA中的配置起了作用。看来Oracle应该是出于后向兼容性的考虑,仍然先查询TNSNAMES.ORA文件,在文件中找不到对应的配置信息,才会尝试使用简化连接方式。
这时如果将数据库简化连接方式稍做调整:
SQL> CONN YANGTK/YANGTK@172.25.1.100:1521/TEST1已连接。
SQL> SELECT * FROM GLOBAL_NAME;
GLOBAL_NAME
--------------------------------------------------
TEST1.YANGTINGKUN
只要简化连接方式和TNSNAMES.ORA中的配置不符就可以连接到目标数据库。同时Oracle的这种特性,在TNSNAMES.ORA中进行配置的时候,尽量不要使用和简易连接方式相近似的名字,这样可以避免不必要的错误。











