对接问题描述: 不知道正式库 oracle 数据库账户密码, 对方愿意在对方的客户端上输入账号和密码, 但不告诉我们
解决方案: 使用一台 sql server 作为中间服务器, 可以通过转存数据到 sql server, 再从 sql server 同步数据到我方数据库. 在 sql server 上建立一个链接服务器连接 Oracle, 通过 openquery 查询 oracle 数据
具体实施方案:
在 sql server 创建链接服务器, 通过链接服务器查询 oracle 数据, 链接服务器对方设置, 我方不知道账户和密码.
创建连接服务器方案如下图:
1, 确保 pl/sql 能够登录上 oracle, 查看 pl/sql 的联系信息文件 tnsnames.ora, 找到数据库连接相关信息, 如下图:
如图, CUNJK 即数据库名字, 需要被 sql server 链接服务器使用
2, 登录 sql server, 创建链接服务器, 找到链接服务器文职, 服务器对象 -> 链接服务器, 步骤如下图
访问接口调节 oracle 的访问接口, 服务器对象 -> 链接服务器 -> 访问接口, 右键 OraCLEDB.Oracle 打开属性, 勾选允许进程内
3, 创建链接服务器
右键链接服务器 -> 新建链接服务器, 填写创建服务器名字, 选择访问接口为 oracle, 产品名称为 Oracle, 数据源请填写与 pl/sql 链接信息相同,
安全性登录, 如下图:
输入 Oracle 的账户和密码, 密码隐藏, 我方不会知晓,
服务器选项配置, 如下图:
调节 RPC 为 Ture,RPC Out 为 True
确定完成.
4, 建立查询, 测试
查询链接服务器需要使用 OPENQUERY 函数进行查询, sql 请参考 SQL server 的语法原则, 示例如下:
SELECT top 1 * FROM OPENQUERY(CUNJK,'select * from cjk_account') a;
方案总结: 能通过 sql server 查询数据, 我方即可通过同步程序连接 sql sever 进行数据同步
链接服务器查询 OPENQUERY
使用 sql server 链接服务器查询 oracle , 会先通过查询 sql 查询 oracle, 缓存到 sql server 中, 再通过 sql server 查询, 查询会较慢
OpenQuery 是 SQL Server 用来与其他 Server 交互的一种技术, 通过 OpenQuery,SQL Server 可以直接访问其他数据库资源. 而其他数据库在 OpenQuery 表达式中是以 Linked Server 存在的
在 OpenQuery 内部添加查询条件, 比在外面添加查询速度相对较快, 在内部添加条件''(单引号字符串条件) 会有限制,''(单引号必须进行转义), 两个双引号, 代表一个双引号, 示例如下:
Select from OPENQUERY(R,'select * from cjk_account where createdate <''2019-03-17 08:52:55'' ')
如果对 openquery 查询还没有弄明白, 可参考这篇博文: http://www.cnblogs.com/Dannier/archive/2011/09/21/openquery.html
来源: https://www.cnblogs.com/roychenyi/p/10546034.html