ORACLE 创建DBlink访问SQL SERVER数据库

本文涉及的产品
云数据库 RDS SQL Server,基础系列 2核4GB
RDS SQL Server Serverless,2-4RCU 50GB 3个月
推荐场景:
简介: Oracle中使用透明网关链接到Sqlserver 在最近项目中需要从Oracle中访问SQL Server数据库, 自然想到了透明网关. 因为Oracle数据库是Linux上的, 而Linux上的Oracle9i不包括连接到SQL Server的透明网关.

 

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

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

环境如下:

Oracle Database ServerLinux + oracle 9.2.0.4 IP:10.194.129.197

Transparent GatewayWindows 2003 server IP: 10.194.129.225

MS SQL ServerWindows 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 ServicesOracle 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, 编辑对应listenerSID_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 AssistantNet 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所在的机器的IPService_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';

 

 

其中tg4msqltnsnames中建立的连接字符串.

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

 

7BUG解决。

如果在第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

相关实践学习
使用SQL语句管理索引
本次实验主要介绍如何在RDS-SQLServer数据库中,使用SQL语句管理索引。
SQL Server on Linux入门教程
SQL Server数据库一直只提供Windows下的版本。2016年微软宣布推出可运行在Linux系统下的SQL Server数据库,该版本目前还是早期预览版本。本课程主要介绍SQLServer On Linux的基本知识。 相关的阿里云产品:云数据库RDS&nbsp;SQL Server版 RDS SQL Server不仅拥有高可用架构和任意时间点的数据恢复功能,强力支撑各种企业应用,同时也包含了微软的License费用,减少额外支出。 了解产品详情:&nbsp;https://www.aliyun.com/product/rds/sqlserver
目录
相关文章
|
1月前
|
存储 Oracle 关系型数据库
Oracle数据库的应用场景有哪些?
【10月更文挑战第15天】Oracle数据库的应用场景有哪些?
162 64
|
22天前
|
SQL Oracle 关系型数据库
Oracle数据库优化方法
【10月更文挑战第25天】Oracle数据库优化方法
29 7
|
22天前
|
Oracle 关系型数据库 数据库
oracle数据库技巧
【10月更文挑战第25天】oracle数据库技巧
25 6
|
22天前
|
存储 Oracle 关系型数据库
Oracle数据库优化策略
【10月更文挑战第25天】Oracle数据库优化策略
20 5
|
29天前
|
存储 Oracle 关系型数据库
数据库数据恢复—Oracle ASM磁盘组故障数据恢复案例
Oracle数据库数据恢复环境&故障: Oracle ASM磁盘组由4块磁盘组成。Oracle ASM磁盘组掉线 ,ASM实例不能mount。 Oracle数据库故障分析&恢复方案: 数据库数据恢复工程师对组成ASM磁盘组的磁盘进行分析。对ASM元数据进行分析发现ASM存储元数据损坏,导致磁盘组无法挂载。
|
1月前
|
监控 Oracle 关系型数据库
Oracle数据库性能优化
【10月更文挑战第16天】Oracle数据库性能优化是
29 1
|
1月前
|
SQL 监控 Oracle
Oracle SQL性能优化全面指南
在数据库管理领域,Oracle SQL性能优化是确保数据库高效运行和数据查询速度的关键
|
1月前
|
SQL 存储 Oracle
Oracle数据库SQL语句详解与应用指南
在数字化时代,数据库已成为各类企业和组织不可或缺的核心组件。Oracle数据库作为业界领先的数据库管理系统之一,广泛应用于各种业务场景。掌握Oracle数据库的SQL语句是数据库管理员、开发人员及运维人员的基本技能。本文将详细介绍Oracle数据库SQL语句的基本概念、语法、应用及最佳实践。一、Or
56 3
|
1月前
|
SQL Oracle 关系型数据库
Oracle SQL:了解执行计划和性能调优
Oracle SQL:了解执行计划和性能调优
53 1
|
1月前
|
存储 Oracle 关系型数据库
【数据库-Oracle】《Oracle 数据库探秘:基础知识点全攻略》
《Oracle 数据库探秘:基础知识点全攻略》深入介绍 Oracle 数据库的基础知识点,包括数据类型、表结构、查询语句等。通过详细讲解、代码示例和流程图,帮助读者快速掌握 Oracle 数据库的基本操作,为数据库开发和管理打下坚实基础。
38 0

推荐镜像

更多
下一篇
无影云桌面