遇到一个客户,有个需求,想将mssql中的数据抽取到oracle中。经过上网查找,感觉gateway这个工具可以实现,因此就搭建实验环境进行测试。首先在oracle delivery上面下载对应的安装包。

实验环境如下:

oracle数据库:

  IP地址:192.168.56.100

  数据库名称:orcl

  数据库oracle_home:/u01/app/oracle/product/11.2.0/db_1

  监听端口号:1521

gateway软件:

  IP地址:192.168.56.100

  gateway的home目录:/u01/app/gateway

  SID名称:dg4msql

  监听端口号:1523

mssql数据库:

  IP地址:192.168.56.110

  数据库名:MSDB

  登录名:sa

  密码:1qaz@WSX

上传刚才下载的软件包,将其随便解压在某个路径,在这里需要注意,我是把gateway和oracle安装在同一台服务器上,进入gateway,runInstaller开始安装:

  1. [oracle@Abbott soft]$ cd gateways/
  2. [oracle@Abbott gateways]$ ls
  3. doc install legacy response runInstaller stage welcome.html
  4. [oracle@Abbott gateways]$ export DISPLAY=192.168.56.1:0.0
  5. [oracle@Abbott gateways]$ ./runInstaller

这里需要指定gateway的home名称和路径

安装for MSSQLSERVER的软件

指定要访问的数据库服务器IP地址,端口号,实例名和数据库名

在这里点击安装即可,

等安装结束后,运行如下脚本:

但是运行脚本时会有如下提示,这是因为我把gateway和oracle安装在了同一台服务器上,有些环境变量发生了冲突,直接回车,忽略:

  1. [root@Abbott /]# /u02/app/gateway/root.sh
  2. Running Oracle 11g root.sh script...
  3.  
  4. The following environment variables are set as:
  5. ORACLE_OWNER= oracle
  6. ORACLE_HOME= /u02/app/gateway
  7.  
  8. Enter the full pathname of the local bin directory: [/usr/local/bin]:
  9. The file "dbhome" already exists in /usr/local/bin. Overwrite it? (y/n)
  10. [n]:
  11. The file "oraenv" already exists in /usr/local/bin. Overwrite it? (y/n)
  12. [n]:
  13. The file "coraenv" already exists in /usr/local/bin. Overwrite it? (y/n)
  14. [n]:
  15.  
  16. Entries will be added to the /etc/oratab file as needed by
  17. Database Configuration Assistant when a database is created
  18. Finished running generic part of root.sh script.
  19. Now product-specific root actions will be performed.

点击OK之后会自动弹出配置监听的窗口,选择配置典型监听,然后下一步,安装完成之后推出即可:

接着查看配置文件情况,因为在安装软件的时候就指定了MSSQLSERVER的ip地址,端口号,数据库名等参数,所以这里不需要做什么修改。配置文件目录为gateway的home目录下面的$ORACLE_HOME/dg4msql/admin/initdg4msql.ora:

  1. [oracle@Abbott admin]$ vi initdg4msql.ora
  2. # This is a customized agent init file that contains the HS parameters
  3. # that are needed for the Database Gateway for Microsoft SQL Server
  4.  
  5. #
  6. # HS init parameters
  7. #
  8. HS_FDS_CONNECT_INFO=[192.168.56.110]:1433//MSDB
  9. # alternate connect format is hostname/serverinstance/databasename
  10. HS_FDS_TRACE_LEVEL=OFF
  11. HS_FDS_RECOVERY_ACCOUNT=RECOVER
  12. HS_FDS_RECOVERY_PWD=RECOVER

接着查看监听是否正常,进去之后看到没有配置静态监听,因此需要在这里添加一条静态静听(以下加黑标红部分请注意,这里的SID_NAME与配置文件的init+SID.ora中的SID要相同)。监听文件的路径为gateway_home目录下的/network/admin/listener.ora

  1. [oracle@Abbott admin]$ vi listener.ora
  2. # listener.ora Network Configuration File: /u01/app/gateway/network/admin/listener.ora
  3. # Generated by Oracle configuration tools.
  4.  
  5. LISTENER =
  6. (DESCRIPTION_LIST =
  7. (DESCRIPTION =
  8. (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1523))
  9. (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.56.100)(PORT = 1523))
  10. )
  11. )
  12.  
  13. ADR_BASE_LISTENER = /u01/app/oracle
  14.  
  15. SID_LIST_LISTENER =
  16. (SID_LIST =
  17. (SID_DESC =
  18. # (GLOBAL_DBNAME = MSDB)
  19. (PROGRAM = dg4msql)
  20. (ORACLE_HOME = /u01/app/gateway)
  21. (SID_NAME = dg4msql)
  22. )
  23. )

这里如果直接使用lsnrctl status查看监听状态,查看到的是oracle数据库的监听,因此需要export ORACLE_HOME=/u01/app/gateway,然后再使用此命令:

  1. [oracle@Abbott admin]$ lsnrctl start
  2.  
  3. LSNRCTL for Linux: Version 11.2.0.4.0 - Production on 04-JUL-2017 09:17:09
  4.  
  5. Copyright (c) 1991, 2013, Oracle. All rights reserved.
  6.  
  7. Starting /u01/app/gateway//bin/tnslsnr: please wait...
  8.  
  9. TNSLSNR for Linux: Version 11.2.0.1.0 - Production
  10. System parameter file is /u01/app/gateway/network/admin/listener.ora
  11. Log messages written to /u01/app/gateway/diag/tnslsnr/Abbott/listener/alert/log.xml
  12. Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1523)))
  13. Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.56.100)(PORT=1523)))
  14.  
  15. Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1523)))
  16. STATUS of the LISTENER
  17. ------------------------
  18. Alias LISTENER
  19. Version TNSLSNR for Linux: Version 11.2.0.1.0 - Production
  20. Start Date 04-JUL-2017 09:17:09
  21. Uptime 0 days 0 hr. 0 min. 0 sec
  22. Trace Level off
  23. Security ON: Local OS Authentication
  24. SNMP OFF
  25. Listener Parameter File /u01/app/gateway/network/admin/listener.ora
  26. Listener Log File /u01/app/gateway/diag/tnslsnr/Abbott/listener/alert/log.xml
  27. Listening Endpoints Summary...
  28. (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1523)))
  29. (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.56.100)(PORT=1523)))
  30. Services Summary...
  31. Service "dg4msql" has 1 instance(s).
  32. Instance "dg4msql", status UNKNOWN, has 1 handler(s) for this service...
  33. The command completed successfully

  监听配置成功,接着就是配置tns,注意:这里的tns需要在oracle的home/network/admin/tnsnames.ora文件中配置:

  1. [oracle@Abbott admin]$ cat tnsnames.ora
  2. # tnsnames.ora Network Configuration File: /u01/app/oracle/product/11.2.0/db_1/network/admin/tnsnames.ora
  3. # Generated by Oracle configuration tools.
  4.  
  5. MSDB =
  6. (DESCRIPTION =
  7. (ADDRESS = (PROTOCOL = TCP)(HOST =192.168.56.100)(PORT = 1523))
  8. (CONNECT_DATA=(SID=dg4msql))
  9. (HS=OK)
  10. )

  配置完成后尝试tnsping:

  1. [oracle@Abbott admin]$ tnsping MSDB
  2.  
  3. TNS Ping Utility for Linux: Version 11.2.0.4.0 - Production on 04-JUL-2017 11:30:13
  4.  
  5. Copyright (c) 1997, 2013, Oracle. All rights reserved.
  6.  
  7. Used parameter files:
  8.  
  9. Used TNSNAMES adapter to resolve the alias
  10. Attempting to contact (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST =192.168.56.100)(PORT = 1523)) (CONNECT_DATA=(SID=dg4msql)) (HS=OK))
  11. OK (0 msec)

  如果tnsping没有问题,接着就可以进入数据库,创建dblink,然后查询mssqlserver的数据:

  1. SQL> create public database link aaaa connect to "sa" identified by "1qaz@WSX" using 'MSDB';
  2.  
  3. Database link created.
  4.  
  5. SQL> select * from dbo.t1@AAAA;
  6.  
  7. id
  8. ----------
  9. 1
  10.  
  11. SQL> /
  12.  
  13. id
  14. ----------
  15. 1
  16.  
  17. 在表t1中再插入一行数据:
  18.  
  19. SQL> /
  20.  
  21. id
  22. ----------
  23. 1
  24. 2

  

遇到问题:

  1. SQL> select 1 from dual@aaaa;
  2. select 1 from dual@aaaa
  3. *
  4. ERROR at line 1:
  5. ORA-28513: internal error in heterogeneous remote agent
  6. ORA-02063: preceding line from AAAA

  最后检查,时因为监听中的SID_NAME错误的指定成了MSSQLSERVER的数据库名称MSDB,而不是dg4msql,这里为什么要指定为dg4msql呢?因为gateway的参数文件格式为initSID.ora,而默认的SID为dg4msql,我们也没有人为改动,指定SID表明gateway具体监听的哪个数据库,而当指定了dg4msql时,它自动会寻找initdg4msql.ora这个文件,从而根据配置文件找到对应的MSSQLSERVER。

oracle利用透明网关访问mssql的更多相关文章

  1. Oracle Gateways透明网关访问SQL Server

    自己的本机安装了Oracle 12c,公司的平台需要同时支持Oracle与SQL Server,很多时候都有将数据从Oracle同步到SQL Server的需求.通过SQL Server的link S ...

  2. Oracle透明网关访问SQLServer数据库

    针对oracle数据库不同实例之间的数据访问,我们可以直接通过dblink访问,如果oracle数据库想访问mysql/sqlserver等数据库的数据,我们可以通过配置oracle透明网关实现异构数 ...

  3. ORACLE透明网关访问SQL Server配置总结

      透明网关概念 ORACLE透明网关(Oracle Transparent Gateway)可以解决ORACLE数据库和非ORACLE数据库交互数据的需求.在一个异构的分布式环境中,通过ORACLE ...

  4. Oracle透明网关访问MySQL数据库

    针对oracle数据库不同实例之间的数据访问,我们可以直接通过dblink访问,如果oracle数据库想访问mysql/sqlserver等数据库的数据,我们可以通过配置oracle透明网关实现异构数 ...

  5. 【Oracle】Oracle透明网关访问MSSQLServer

             Oracle 数据库的透明网关 ( transparent gateway )是这样的一个接口:通过它,我们可以 sqlplus 操纵其他数据库,如 MS SQLServer . s ...

  6. Oracle 11g透明网关连接Sqlserver

    Oracle 11g透明网关连接Sqlserver oracle 透明网关是oracle连接异构数据库提供的一种技术.通过Gateway,可以在Oracle里透明的访问其他不同的数据库,如SQL Se ...

  7. 使用别名访问MSSQL Express

    当MSSQL Express安装成功后,默认只能用 .\sqlexpress 或者 (local)\sqlexpress 有时候我们希望使用(local) 就可以访问,此时就可以利用别名 1.MSSQ ...

  8. oracle 利用flashback将备库激活为read wirte(10g 及上)

    oracle 利用flashback将备库激活为read wirte(10g 及上) 环境: OS: CENTOS 6.5 X64 DB: ORACLE 10.2.0.5 主库操作: SQL> ...

  9. 利用HttpWebRequest访问WebApi

    WebApi现在越来越流行,下面给出利用HttpWebRequest访问WebApi的工具方法: 1.利用基准URL和参数字典生成完整URL /// <summary> /// 生成URL ...

随机推荐

  1. 微信小程序从零开始开发步骤(一)

    从零到有写一个小程序系列专题,很早以前就想写来分享,但由于项目一直在进展,没有过多的时间研究技术,现在可以继续分享了.1:注册用没有注册过微信公众平台的邮箱注册一个微信公众号, 申请帐号 ,点击 ht ...

  2. BZOJ 2021 Usaco2010 Jan Cheese Towers 动态规划

    题目大意:全然背包.假设最顶端的物品重量≥k,那么以下的全部物品的重量变为原来的45 考虑一些物品装进背包,显然我要把全部重量大于≥k的物品中重量最小的那个放在最顶端.才干保证总重量最小 那么我们给物 ...

  3. WINDOWS 同步(Interlocked,InterlockedExchangeAdd,Slim读/写锁,WaitForSingleObject,CreateWaitableTimer等等)

    NOTE0 在以下两种基本情况下,线程之间需要相互通信: 需要让多个线程同时访问一个共享资源,同时不能破坏资源的完整性: 一个线程需要通知其它线程某项任务已经完成 1.原子访问:Interlocked ...

  4. 【足迹C++primer】49、超载,更改,运营商

    超载,更改.运营商 Conversion Operators 转换操作符 operator type() const Conversions to an array or a function typ ...

  5. rac下一个/tmp/bootstrap权限问题

    原创作品,离 "深蓝blog" 博客,欢迎转载,请务必注明转载如下源,否则追究其版权责任. 深蓝的blog:http://blog.csdn.net/huangyanlong/ar ...

  6. 你的服务器没有正确响应Token验证的解决方法

    你的服务器没有正确响应Token验证,请阅读消息接口使用指南 微信 微信公众平台开发模式 平台 消息 接口 启用 URL Token作者:http://txw1958.cnblogs.com/ 原文: ...

  7. 将memo转化为JPG输出,使用Memo1.PaintTo(Bitmap.Canvas)

    unit unit1; interface uses  Windows, Messages, SysUtils, Graphics, Controls, Forms, StdCtrls,  Class ...

  8. Method for finding shortest path to destination in traffic network using Dijkstra algorithm or Floyd-warshall algorithm

    A method is presented for finding a shortest path from a starting place to a destination place in a ...

  9. 用java写的后台方法可以提供给C#调用吗?(转)

    最近和公司搞C#的同事联合搞了一个项目,我把我这边的数据加密之后传给C#,然后C#在对接收到的数据解密.可是问题来了,我这边用JAVA加密的数据C#的同事怎么也解密不出来,于是我就想到了可不可以将JA ...

  10. python 快速排序 完整

    两头开始 以第一个为基准,从有往左,找第一个比基准数 大的,然后交换 从左往右,找第一个比基准数晓得,然后交换 遍历剩下的 基准数  左边的数们  以及  基准数 右边的数们 def quick_so ...