Oracle中使用透明网关链接到Sqlserver

在最近项目中需要从Oracle中访问SQL Server数据库, 自然想到了透明网关. 因为Oracle数据库是Linux上的, 而Linux上的Oracle9i不包括连接到SQL Server的透明网关.就在一台单独的Windows服务器上安装了透明网关用做Oracle访问SQL Server的桥梁.

环境如下:

Oracle Database Server:Linux + oracle 9.2.0.4 IP:10.194.129.197

Transparent Gateway:Windows 2003 server IP: 10.194.129.225

MS SQL Server:Windows 2003 server + SQL Server 2005 IP: 10.194.129.225

1、 Transparent Gateway for SQL Server安装

从Oracle 9i数据库安装光盘setup.exe安装,选择安装客户端

安装类型选择:管理员

安装完客户端后,重新运行setup.exe,安装产品选择Oracle 9i Database 9.2.0.1.0, 安装类型选择"自定义",安装组件选择Oracle Net Services和Oracle Transparent Gateways, 并在此项下选择Oracle Transparent Gateway for Microsoft SQL Server, 安装过程中可以不设置连接到SQL Server的信息.如下图所示:

以下的IP地址及数据库以实际环境为准

2、 编辑%ORACLE_HOME%\tg4msql\admin\init%ORACLE_SID%.ora, 该文件包含了TG for SQL Server的配置信息, 其中%ORACLE_SID%是给TG的"SID", 默认为tg4msql. 修改文件中的行

HS_FDS_CONNECT_INFO="SERVER=10.194.129.225;DATABASE=185life"

其中SERVER后为SQL Server所在的服务器名称或ip地址,Database为连接到的数据库名称.

当然,如果在SQL Server服务器上,有两个sql server实例,则使用‘服务器名"实例名’的方式设置上面的SERVER值,如:HS_FDS_CONNECT_INFO="SERVER=ZZL\MSSQLSERVER;DATABASE=MSDB"

3、 编辑%ORACLE_HOME%"network"admin"listener.ora, 编辑对应listener的SID_LIST

SID_LIST_LISTENER=

(SID_LIST=

(SID_DESC=

(SID_NAME=%ORACLE_SID%)

(ORACLE_HOME=oracle_home_directory)

(PROGRAM=tg4msql)

)

)

例如:

SID_LIST_LISTENER =

(SID_LIST =

(SID_DESC =

(SID_NAME = tg4msql)

(ORACLE_HOME = d:\oracle\ora92) #oracle的主目录

(PROGRAM = tg4msql)

)

)

其中%ORACLE_SID%必须为第二布中设置的SID, 默认值为tg4msql. 修改listener.ora文件后需重启listener使修改生效.如果没有listener.ora文件,请用Net Configuration Assistant或Net Manager新建一个LISTENER.

以上操作都是在Transparent Gateway所在机器上。

4、 在Oracle服务器上:编辑需要连接到透明网关的Oracle Server的$ORACLE_HOME\network\admin\tnsnames.ora, 例如:

TG4MSQL =

(DESCRIPTION =

(ADDRESS_LIST =

(ADDRESS = (PROTOCOL = TCP)(HOST = 10.194.129.225)(PORT = 1521))

)

(CONNECT_DATA =

(SERVICE_NAME = tg4msql)

)

(HS = OK)

)

HOST指向Transparent Gateway所在的机器的IP,Service_name为第3步中的SID_NAME

使用tnsping测试服务名是否连通,命令:tnsping tg4msql。如果不通,请检查防火墙及网络配置。

5、 在Oracle数据库中建立连接, 指向TG for SQL Server.

CREATE DATABASE LINK tg4msql CONNECT TO "user" IDENTIFIED BY "password" USING 'tg4msql';

其中tg4msql是tnsnames中建立的连接字符串.

ms sql server的用户名和密码必须小写,而且要加双引号

否则会报如下错误:

错误信息:

ORA-28500: connection from ORACLE to a non-Oracle system returned this messsage:

[Transparent gateway from MSSQL][Microsoft][ODBC SQL Server Driver][SQL Server]??

'sa'????? (SQL State:28000; SQL Code: 18456)

ORA-02063: preceding 2 lines from LINK_ZZL

错误原因:

在CREATE    DATABASE LINK LINK_ZZL的连接字符串中,ms sql server的用户名和密码必须小写,而且要加双引号

6、确保CATHS.sql已被运行。

以SYS用户连接上去,查看有没有SYS.HS_FDS_CLASS,如果没有,运行$ORACLE_HOME/RDBMS"ADMIN"CATHS.SQL

6、 测试, 如运行select * from emp@tg4msql等.
访问dblink时说明:
              这是基于网关的方式,因此不能在断开网络的情况下本地的oracle连接本地的ms sql server               ORA-28545: error diagnosed by Net8 when connecting to an agent
              NCRO: Failed to make RSLV connection
              ORA-02063: preceding 2 lines from LINK_ZZL

7、BUG解决。

如果在第6步出现以下错误提示,则以SYS运行

exec dbms_hs.replace_base_caps(531, 531, 'First/Last function');

ERROR at line 1:

ORA-28522: error initializing heterogeneous capabilities

ORA-28522: error initializing heterogeneous capabilities

ORA-28559: FDS_CLASS_NAME is <GTW>9.2.0.5.0_128, FDS_INST_NAME is <link>

ORA-02063: preceding 3 lines from %s

ORA-00604: error occurred at recursive SQL level 1

ORA-24274: no row exists in the HS$_BASE_CAPS table for these parameters

ORA-06512: at "SYS.DBMS_SYS_ERROR", line 86

ORA-06512: at "SYS.DBMS_HS_UTL", line 431

ORA-06512: at "SYS.DBMS_HS_CHK", line 51

ORA-06512: at "SYS.DBMS_HS_UTL", line 48

ORA-06512: at "SYS.DBMS_HS", line 38

ORA-06512: at line 1

Oracle中使用透明网关链接到Sqlserver[Z]的更多相关文章

  1. Oracle中使用透明网关链接到Sqlserver(转)

    测试环境介绍 1.ORACLEServer   Database version:10.2.0 IP:192.168.1.5 ORACLE_HOME:D:\oracle\product\10.2.0\ ...

  2. SharePoint 2010 中创建超链接到Pop-Up对话框

    SharePoint 2010 中创建超链接到Pop-Up对话框         SharePoint 2010 推出了新式的带有阴影的弹出对话框,你感觉怎么样?我感觉倒是挺酷的.这样少打开了一个页面 ...

  3. SSH开发中 使用超链接到action 其excute方法会被执行两次 actual row count: 0; expected: 1

    由于执行两次excute,所以在做删除操作的时候会出现 Batch update returned unexpected row count from update [0]; actual row c ...

  4. 配置Oracle透明网关用以连接 SQLServer经验总结

    一.情景介绍   业务中设计两个不同的系统,系统1和系统2,两个系统分别使用的是Oracle和SQLServer数据库.现需要在系统1的数据库中直接查询系统2数据库的数据.即在Oracle中执行SQL ...

  5. sqlserver和oracle中对全半角的转换

    oracle中对全半角的转换 to_single_byte(c)转换成半角 to_multi_byte(c)转换成全角 SELECT To_single_byte('881898?71') FROM ...

  6. 如何在Oracle中 查询一个表被其他数据库对象引用[z]

    这两天老大让我再oracle中把要替换的表被其他对象引用之处找出来,整理一份表,接到这个任务,我是一脸懵逼,怎么找?大海捞针么?问同事.查资料,自己研究,最后整理一下仅供大家参考,同时以备将来回顾.本 ...

  7. 转 update关联更新在sqlserver和oracle中的实现

    sqlserver和oracle中实现update关联更新的语法不同,都可以通过inline view(内嵌视图)来实现,总的来说sqlserver更简单些. 测试例子如下: create table ...

  8. ABP框架使用Oracle数据库,并实现从SQLServer中进行数据迁移的处理

    ABP框架的数据访问底层是基于EFCore(Entity Framework Core)的,是微软标志性且成熟的ORM,因此它本身是支持多种主流数据库MySQL,SqlServer,Oracle,SQ ...

  9. oracle 通过透明网关gateway 连接sqlserver

    真实配置如下: 1.安装gateway 在一台单独的机器上,ip:172.30.40.29 2.配置listener.ora如下: 路径:  D:\product\11.2.0\tg_1\NETWOR ...

随机推荐

  1. ListView嵌套ListView时发生:View too large to fit into drawing cache的问题

    watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcXkxMzg3/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/d ...

  2. MySQL半同步Semi-sync原理介绍【图说】

    上图先.

  3. Intent组件

    Android页面之间的跳转可以分为几类,比如有A和B两个页面,从A页面直接跳转到B页面,这样的跳转比较简单,或者从A页面跳转到B页面但是需要传送数据.在Android中,页面的跳转离不开Intent ...

  4. 将项目上传到bitbucket仓库

    先将项目添加git仓库中(本地) 成功后上门会有上传和下载按钮 提交代码:

  5. NT kernel & System 占用占用80端口

    问题: 1 运行'netstat -ano'发现80端口被pid=4的进程占用 2 打开任务管理器,发现pid=4的进程,其实是system进程,其对应的进程描述是NT kernel & sy ...

  6. java多线程的实现的两种方法

    通过继承Thread类实现 多线程- public class Hello{ public static void main(String args[]){ MyThread tr1 = new My ...

  7. zoj1108 FatMouse's Speed

    给你每个物体两个参数,求最长的链要求第一个参数递增,第二个参数递减,要求输出任意最长路径. 首先第一反应根据第二个参数排个序,然后不就是最长上升子序列的问题吗? O(nlogn)的复杂度,当然这样可以 ...

  8. 安装wxWidgets

    从官网可下载源码安装包.安装后,建立批处理文件对其进行编译: gvim bwx.bat 内容如下: @echo off set WXWIN=C:\wxWidgets-3.0.2 pushd %WXWI ...

  9. vim命令杂记

    vim 实用命令. . . 命令重复上一次修改动作 >G 增加当前行到文档末尾处的缩进 C 相当于c$,更改当前位置 至 行尾的单词 S 相当于^c , 更改一行 : 重复上次的f命令所查找的字 ...

  10. jsp中添加弹窗口并且实现向后台双向传递数据

    思路:使用jquery-easyui框架实现弹出div,在jsp初始化时从后台获得数据初始化div中的form表单元素的value属性,从而获得后台数据.在点击确定按钮时使用ajax向后台发送数据. ...