oracle利用透明网关访问mssql
遇到一个客户,有个需求,想将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开始安装:
[oracle@Abbott soft]$ cd gateways/
[oracle@Abbott gateways]$ ls
doc install legacy response runInstaller stage welcome.html
[oracle@Abbott gateways]$ export DISPLAY=192.168.56.1:0.0
[oracle@Abbott gateways]$ ./runInstaller
这里需要指定gateway的home名称和路径
安装for MSSQLSERVER的软件
指定要访问的数据库服务器IP地址,端口号,实例名和数据库名
在这里点击安装即可,
等安装结束后,运行如下脚本:
但是运行脚本时会有如下提示,这是因为我把gateway和oracle安装在了同一台服务器上,有些环境变量发生了冲突,直接回车,忽略:
[root@Abbott /]# /u02/app/gateway/root.sh
Running Oracle 11g root.sh script... The following environment variables are set as:
ORACLE_OWNER= oracle
ORACLE_HOME= /u02/app/gateway Enter the full pathname of the local bin directory: [/usr/local/bin]:
The file "dbhome" already exists in /usr/local/bin. Overwrite it? (y/n)
[n]:
The file "oraenv" already exists in /usr/local/bin. Overwrite it? (y/n)
[n]:
The file "coraenv" already exists in /usr/local/bin. Overwrite it? (y/n)
[n]: Entries will be added to the /etc/oratab file as needed by
Database Configuration Assistant when a database is created
Finished running generic part of root.sh script.
Now product-specific root actions will be performed.
点击OK之后会自动弹出配置监听的窗口,选择配置典型监听,然后下一步,安装完成之后推出即可:
接着查看配置文件情况,因为在安装软件的时候就指定了MSSQLSERVER的ip地址,端口号,数据库名等参数,所以这里不需要做什么修改。配置文件目录为gateway的home目录下面的$ORACLE_HOME/dg4msql/admin/initdg4msql.ora:
[oracle@Abbott admin]$ vi initdg4msql.ora
# This is a customized agent init file that contains the HS parameters
# that are needed for the Database Gateway for Microsoft SQL Server #
# HS init parameters
#
HS_FDS_CONNECT_INFO=[192.168.56.110]:1433//MSDB
# alternate connect format is hostname/serverinstance/databasename
HS_FDS_TRACE_LEVEL=OFF
HS_FDS_RECOVERY_ACCOUNT=RECOVER
HS_FDS_RECOVERY_PWD=RECOVER
接着查看监听是否正常,进去之后看到没有配置静态监听,因此需要在这里添加一条静态静听(以下加黑标红部分请注意,这里的SID_NAME与配置文件的init+SID.ora中的SID要相同)。监听文件的路径为gateway_home目录下的/network/admin/listener.ora:
[oracle@Abbott admin]$ vi listener.ora
# listener.ora Network Configuration File: /u01/app/gateway/network/admin/listener.ora
# Generated by Oracle configuration tools. LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1523))
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.56.100)(PORT = 1523))
)
) ADR_BASE_LISTENER = /u01/app/oracle SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
# (GLOBAL_DBNAME = MSDB)
(PROGRAM = dg4msql)
(ORACLE_HOME = /u01/app/gateway)
(SID_NAME = dg4msql)
)
)
这里如果直接使用lsnrctl status查看监听状态,查看到的是oracle数据库的监听,因此需要export ORACLE_HOME=/u01/app/gateway,然后再使用此命令:
[oracle@Abbott admin]$ lsnrctl start LSNRCTL for Linux: Version 11.2.0.4.0 - Production on 04-JUL-2017 09:17:09 Copyright (c) 1991, 2013, Oracle. All rights reserved. Starting /u01/app/gateway//bin/tnslsnr: please wait... TNSLSNR for Linux: Version 11.2.0.1.0 - Production
System parameter file is /u01/app/gateway/network/admin/listener.ora
Log messages written to /u01/app/gateway/diag/tnslsnr/Abbott/listener/alert/log.xml
Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1523)))
Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.56.100)(PORT=1523))) Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1523)))
STATUS of the LISTENER
------------------------
Alias LISTENER
Version TNSLSNR for Linux: Version 11.2.0.1.0 - Production
Start Date 04-JUL-2017 09:17:09
Uptime 0 days 0 hr. 0 min. 0 sec
Trace Level off
Security ON: Local OS Authentication
SNMP OFF
Listener Parameter File /u01/app/gateway/network/admin/listener.ora
Listener Log File /u01/app/gateway/diag/tnslsnr/Abbott/listener/alert/log.xml
Listening Endpoints Summary...
(DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1523)))
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.56.100)(PORT=1523)))
Services Summary...
Service "dg4msql" has 1 instance(s).
Instance "dg4msql", status UNKNOWN, has 1 handler(s) for this service...
The command completed successfully
监听配置成功,接着就是配置tns,注意:这里的tns需要在oracle的home/network/admin/tnsnames.ora文件中配置:
[oracle@Abbott admin]$ cat tnsnames.ora
# tnsnames.ora Network Configuration File: /u01/app/oracle/product/11.2.0/db_1/network/admin/tnsnames.ora
# Generated by Oracle configuration tools. MSDB =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST =192.168.56.100)(PORT = 1523))
(CONNECT_DATA=(SID=dg4msql))
(HS=OK)
)
配置完成后尝试tnsping:
[oracle@Abbott admin]$ tnsping MSDB TNS Ping Utility for Linux: Version 11.2.0.4.0 - Production on 04-JUL-2017 11:30:13 Copyright (c) 1997, 2013, Oracle. All rights reserved. Used parameter files: Used TNSNAMES adapter to resolve the alias
Attempting to contact (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST =192.168.56.100)(PORT = 1523)) (CONNECT_DATA=(SID=dg4msql)) (HS=OK))
OK (0 msec)
如果tnsping没有问题,接着就可以进入数据库,创建dblink,然后查询mssqlserver的数据:
SQL> create public database link aaaa connect to "sa" identified by "1qaz@WSX" using 'MSDB'; Database link created. SQL> select * from dbo.t1@AAAA; id
----------
1 SQL> / id
----------
1 在表t1中再插入一行数据: SQL> / id
----------
1
2
遇到问题:
SQL> select 1 from dual@aaaa;
select 1 from dual@aaaa
*
ERROR at line 1:
ORA-28513: internal error in heterogeneous remote agent
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的更多相关文章
- Oracle Gateways透明网关访问SQL Server
自己的本机安装了Oracle 12c,公司的平台需要同时支持Oracle与SQL Server,很多时候都有将数据从Oracle同步到SQL Server的需求.通过SQL Server的link S ...
- Oracle透明网关访问SQLServer数据库
针对oracle数据库不同实例之间的数据访问,我们可以直接通过dblink访问,如果oracle数据库想访问mysql/sqlserver等数据库的数据,我们可以通过配置oracle透明网关实现异构数 ...
- ORACLE透明网关访问SQL Server配置总结
透明网关概念 ORACLE透明网关(Oracle Transparent Gateway)可以解决ORACLE数据库和非ORACLE数据库交互数据的需求.在一个异构的分布式环境中,通过ORACLE ...
- Oracle透明网关访问MySQL数据库
针对oracle数据库不同实例之间的数据访问,我们可以直接通过dblink访问,如果oracle数据库想访问mysql/sqlserver等数据库的数据,我们可以通过配置oracle透明网关实现异构数 ...
- 【Oracle】Oracle透明网关访问MSSQLServer
Oracle 数据库的透明网关 ( transparent gateway )是这样的一个接口:通过它,我们可以 sqlplus 操纵其他数据库,如 MS SQLServer . s ...
- Oracle 11g透明网关连接Sqlserver
Oracle 11g透明网关连接Sqlserver oracle 透明网关是oracle连接异构数据库提供的一种技术.通过Gateway,可以在Oracle里透明的访问其他不同的数据库,如SQL Se ...
- 使用别名访问MSSQL Express
当MSSQL Express安装成功后,默认只能用 .\sqlexpress 或者 (local)\sqlexpress 有时候我们希望使用(local) 就可以访问,此时就可以利用别名 1.MSSQ ...
- oracle 利用flashback将备库激活为read wirte(10g 及上)
oracle 利用flashback将备库激活为read wirte(10g 及上) 环境: OS: CENTOS 6.5 X64 DB: ORACLE 10.2.0.5 主库操作: SQL> ...
- 利用HttpWebRequest访问WebApi
WebApi现在越来越流行,下面给出利用HttpWebRequest访问WebApi的工具方法: 1.利用基准URL和参数字典生成完整URL /// <summary> /// 生成URL ...
随机推荐
- Java设计模式菜鸟系列(二十二)中介者模式建模与实现
转载请注明出处:http://blog.csdn.net/lhy_ycu/article/details/40027109 中介者模式(Mediator):主要用来减少类与类之间的耦合的,由于假设类与 ...
- XMPP之安装mySQL--Mac OS(一)
come from:http://www.cnblogs.com/xiaodao/archive/2013/04/04/2999426.html 一.安装 到MySQL官网上http://dev.my ...
- 已解决!Fatal error compiling: 无效的标记(maven启动失败)
问题描述 Fatal error compiling: 无效的标记 maven启动错误..版本号不对 <plugin> <artifactId>maven-compiler-p ...
- Android中SQLite数据库操作(2)——使用SQLiteDatabase提供的方法操作数据库
如果开发者对SQL语法不熟,甚至以前从未使用过任何数据库,Android的SQLiteDatabase提供了insert.update.delete或query语句来操作数据库. 一.insert方法 ...
- 数据竞赛利器 —— xgboost 学习清单
1. 入门大全 xgboost 作者给出的一份完备的使用 xgboost 进行数据分析的完整示例代码:A walk through python example for UCI Mushroom da ...
- 初探python+selenium
由于公司网络管管控严格,服务器上访问外网需要进行身份认证(按理说递交个申请给开放相关域名外网访问就好,无奈不给通过,又想马儿跑又不给马吃草),正好前一阵撸课程的时候看到selenium可以实现自动化, ...
- CentOS 7 部署 ASP.NET Core 应用程序
原文:CentOS 7 部署 ASP.NET Core 应用程序 看了几篇大牛写的关于 Linux 部署 ASP.NET Core 程序的文章,今天来实战演练一下.2017年最后一个工作日,提前预祝大 ...
- git 修改仓库地址
公司服务器地址换了 , 原来的git代码地址也跟着需要变 , git remote rm origin 执行该操作 , 删除原来的git地址 git remote -v 查看一下有没有删除成功 , ( ...
- DDD的.NET开发框架
基于DDD的.NET开发框架ABP实例,多租户 (Sass)应用程序,采用.NET MVC, Angularjs, EntityFramework-介绍 介绍 基于ABPZERO的多租户 (Sass) ...
- TL9000 电信业质量体系管理标准
1.背景介绍:1987年国际标准化组织创立了ISO9000标准.标准发布后,在世界范围内得到了迅速的推广和广泛的认可,成为全世界衡量质量管理水平与质量保证能力的公共标准.九十年代,美国三大汽车公司和航 ...