• Oracle中使用透明网关链接到Sqlserver[Z]


    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安装,选择安装客户端

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

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

    安装类型选择:管理员

    安装完客户端后,重新运行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的信息.如下图所示:

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

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

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

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

    2、 编辑%ORACLE_HOME% g4msqladmininit%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=ZZLMSSQLSERVER;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:oracleora92) #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 etworkadmin nsnames.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

  • 相关阅读:
    Java学习-021-Properties 获取配置项对应的值
    Java学习-020-Properties 判断是否存在对应的 key 项
    Java学习-019-Properties 文件读取实例源代码
    Java学习-018-EXCEL 文件写入实例源代码
    Redis进阶实践之九 独立封装的RedisClient客户端工具类
    Redis进阶实践之八Lua的Cjson在Linux下安装、使用和用C#调用Lua脚本
    Redis进阶实践之七Redis和Lua初步整合使用
    Redis进阶实践之六Redis Desktop Manager连接Windows和Linux系统上的Redis服务
    Redis进阶实践之五Redis的高级特性
    Redis进阶实践之四Redis的基本数据类型
  • 原文地址:https://www.cnblogs.com/huak/p/3503680.html
Copyright © 2020-2023  润新知