Oracle连接SDE,我相信搞GIS的,对这个话题应该不陌生了吧,不过让你们失望了,我不搞数据库,没那个能力啊,不过最近在研究一个项目的数据库连接时,发现了一个问题,供大家板砖。
先看一下Oracle的连接字符串
ConnString="Provider=MSDAORA;Persist Security Info=True;Data Source =yangzedong;Password =sde;User ID=sde"
看完这个字符串,疑问来了:里面怎么没有主机服务器地址,那么我的连接字符串是怎么找到数据库服务器的啊,难道就是因为OracleClient?要是这样的话,用户用我们的软件岂不是还要安装OracleClient,那用户的负担也挺大的哦。
索性顺藤摸瓜:
我把OracleClient里的IP换掉,提示:不能连接。
我把OracleClient里的数据库网络名换掉,提示不能连接。
到这里,相信大家应该明了:
继续做实验:我把程序中的DataSource换成TNS监视程序里的连接字符串:
Provider=MSDAORA;Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=XXXX)(PORT=1521)))(CONNECT_DATA=(SID=XXX)(SERVER=DEDICATED)));Persist Security Info=True;Password=sde;User ID=sde
同时把OracleClient客户端配置里的IP和网络名删除,返现仍然能够连接,这说明我第二次写的连接字符串已经绕过OracleClient了,直接和服务器连接了。但是这又产生一个问题,这个连接是绕过了客户端的配置呢,还是绕过了oracleclient的所有功能了,索性就试验到底吧。
接下来我们要先暂时屏蔽掉oracleClient(所谓屏蔽就是指,先让这个软件不能运行,但我不卸载它),怎么屏蔽呢?大家去网上查吧(给些提示:用“软件策略”在gpedit.msc面板里)。我将oracleClient屏蔽后,发现连接仍然可以用。那么可以确定了:新的连接字符串肯定是绕过了oracleClient的配置文件,至于有没有绕过oracleclient的DLL就不确定了。
对于测试有没有绕过oracleclient的DLL,最可怕了,只能把oracleclient卸载掉。舍不得孩子套不找狼啊,我就把oracleclient卸载掉了,再次链接,出现提示:
那就找到原因了:必须安装oracleclient客户端。
有人会问,非得安装吗?
oracle要挣钱,你用了人家的服务端,就继续用客户端吧
不用也行,把你再程序里用到的客户端类库,全部自己打包到你的程序里,但那样不太简单哦,而且还不敢保证安全性和稳定性。
我认怂了,还是安装OracleClient吧。
作者: 风云
出处: http://www.cnblogs.com/fengyunlishi/
本文版权归风云和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利.