当前位置: 首页 > 技术与资源 > 技术分享 > 正文

通过透明网关实现informix到oracle海量传输

2016-01-18 11:48:55

作者:莫建朝新炬网络高级技术专家。


前段时间参与了一个informix到oracle的迁移项目。因为版本的关系,无法使用Oracle Migration Workbench和GoldenGate。


起初想法是使用文本的方式,分别通过informix的unload和oracle的sql loader工具,写成多个shell脚本进行大批量数据卸装和装载。在执行过程中,发现unload的文件中,有部分中文与分隔符形成乱码。此种乱码文件,经测试可以正常装载到informix数据库,但无法装载到oracle数据库。informix工程师和oracle工程师均没给能给出很好的解释。为了解决问题,最终考虑使用oracle公司的透明网关。


透明网关(Transparent Gateway)是Oracle公司提出实现异构服务的技术。Oracle利用透明网关的技术实现与Informix、mysql、SQL Server和DB2等多种数据库互联。


下面介绍透明网关安装方法:


一、介质准备


oracle软件安装包的第五个包,为透明网关的安装包:


通过透明网关实现informix到oracle海量传输1

二、软件安装


1)将安装包上传到oracle服务器端,解压后,运行runInstaller进行安装。


通过透明网关实现informix到oracle海量传输2

注意:在安装时,选择输入ORACLE_HOME,后面配置监听时,需要用到。


2)选择“Oracle Database Gateway for Informix 11.2.0.4.0”


通过透明网关实现informix到oracle海量传输3

3)将输入informix数据库信息。依次输入informix数据库所在的hostname或者IP、端口、INFORMIXSERVER和databasename。也可以在安装完后,修改$ORACLE_HOME/ g4ifmx/admin/init initdg4ifmx.ora。


通过透明网关实现informix到oracle海量传输4

通过透明网关实现informix到oracle海量传输5

通过透明网关实现informix到oracle海量传输6

通过透明网关实现informix到oracle海量传输7

通过透明网关实现informix到oracle海量传输8

通过透明网关实现informix到oracle海量传输9

通过透明网关实现informix到oracle海量传输10

通过透明网关实现informix到oracle海量传输11

通过透明网关实现informix到oracle海量传输12

通过透明网关实现informix到oracle海量传输13

通过透明网关实现informix到oracle海量传输14

通过透明网关实现informix到oracle海量传输15

三、配置网关


1)安装完成后,在ORACLE_HOME下生成dg4ifmx文件夹。确认initdg4ifmx.ora配置是否正确。


slin1:/u01/app/oracle/product/11.2.0/infogw/dg4ifmx/admin # cat initdg4ifmx.ora
# This is a customized agent init file that contains the HS parameters
# that are needed for the Database Gateway for Informix
 
#
# HS init parameters
#
HS_FDS_CONNECT_INFO=[192.168.126.21]:27019/c12_net/testdb
HS_FDS_TRACE_LEVEL=OFF
HS_FDS_RECOVERY_ACCOUNT=RECOVER
HS_FDS_RECOVERY_PWD=RECOVER

2)gateways 和oracle安装在同机器情况下,配置grid用户的listener.ora和oracle用户的tnsnames.ora即可。


listener.ora:


grid:/u01/app/11.2.0/grid/network/admin> cat listener.ora
LISTENER =
 (ADDRESS_LIST=
      (ADDRESS=(PROTOCOL=tcp)(HOST=192.168.126.21)(PORT=1521))
 )
SID_LIST_LISTENER=
  (SID_LIST=
      (SID_DESC=
         (SID_NAME=dg4ifmx)                     
         (ORACLE_HOME=/u01/app/oracle/product/11.2.0/infogw)
         (PROGRAM = dg4ifmx)
        )
       )

tnsnames.ora:


oracle:/u01/app/oracle/product/11.2.0/db_1/network/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.
 
ORA11G =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.126.31)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = ora11g)
    )
  )
 
 
dg4ifmx  =
  (DESCRIPTION=
    (ADDRESS=(PROTOCOL=tcp)(HOST=192.168.126.21)(PORT=1521))
    (CONNECT_DATA=(SID=dg4ifmx))
    (HS=OK)
  )

3)重启监听,并进行测试


oracle@slin1:/tmp/oraclesetup> tnsping dg4ifmx
 
TNS Ping Utility for Linux: Version 11.2.0.4.0 - Production on 30-NOV-2015 09:08: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.126.21)(PORT=1521)) (CONNECT_DATA=(SID=dg4ifmx)) (HS=OK))
OK (10 msec)

4)创建访问INFORMIX数据库的link


create public database link testdb connect to "username" identified  by "password" using 'dg4ifmx';

5)测试连接


select count(*)  from "systables"@testdb;

四、数据传输


将表分成多个脚本,进行批量传输。


语法:insert into …… select * from ……,


注意:


1)gateway不能支持大对象数据类型的传输。比如,long数据类型。


2)在处理较大表时,需分步进行commit,否则有可能会导致传输hung住。关于null  3)null值的处理上,需要提前进行处理,否则无法处理。


4)在表结构存在变化时,需要重建过dblink。


五、总结


在informix 到 oracle之间传输,使用网关进行传输时,可以避免乱码的问题,效率上也还算OK。


在数据量较大的迁移中,可以准备多种手段。比如,编写java小工具,通过JDBC进行数据传输。

上一篇:软件全生命周期管理体系建设
下一篇:端到端的性能分析方案对比