Oracle创建到sqlserver的dblink中的一个巨坑

这两天搭生产环境。本系统用的是oracle数据库,但是,有几个表的数据要从sqlserver那里导入进来。用到了dblink,用到了oracle的透明网关。测试环境是一个同事搭的,但是他去别的项目去。于是生产环境的搭建落到了我的头上。透明网关,dblink什么的,网上找资料搞定(关于这些具体配置的文章,在在都是,我就不赘述了)。但是,要测试dblink的时候却总是有问题。网上找遍了关于透明网关的相关配置的文章,差不多的都试了,没用。担心安装透明网关的时候出了什么岔子,于是卸载安装了三遍。然后一遍一遍去对配置,跟测试环境对,跟网上的资料对。都他妈的没用。找环境组的同事,问是不是防火墙什么的问题。同事坚决否认,扯皮了半天也无果。最后,同事的结论是:其他的项目组都用着这个数据库,都没问题,肯定是你的监听配置有问题。(由于当时急着处理,忘了截图,而现在又一时没办法重现当时的错误,所以原谅我没有一张图片)。
    就这样耗掉了两天。后来,我想查一下dblink在数据库存在哪个表中,就查了一下(dblink信息在表dba_db_links中),结果看出问题所在了。我发现里面的username都大写的。原来,我们在创建dblink的时候,oracle会默认把字符串转成大写。于是,我把创建dblink的sql语句中的username用“”引起来,再去执行,然后测试,没问题了!
    说了这么多,显得很啰嗦,而且没有重点,显然是不符合猿类习惯的,估计很多小伙伴(如果有人看到的话^_^)要抓狂了,所以还是决定把重点拎出来,放在下面。

如果你创建oracle到sqlserver的dblink,在查询的时候出现了用户名和密码错误,那么,有可能你的sql语句是有问题的。
错误的sql:
create database link “db_link_a” connect to username1 identified by password1 using “sqlserver_db1”;
正确的sql:
create database link “db_link_a” connect to “username1” identified by “password1” using “sqlserver_db1”;

你可能感兴趣的:(oracle)