博客

共享 传承

导航

Informix数据导入到oracle数据库的方法

前言:

不同类型的数据库互导数据,由于数据库机制不同,不能通过简单的复制粘贴实现,还有由于文件格式的不同,也不能简单的导出文件,导入数据库。

关于informix导出数据,导入到oracle的方法,经过试验可以用如下方式:(虽然有点笨,但对于小批量需求,能行得通^_^)

(曾经用过perl脚本实现,但由于调试perl环境及pl的依赖包有点麻烦,未能顺利调通,暂且将笨方法记录如下)

 

1 informix中将数据导出成unl文件格式

unload to "/informix/system_setup20150617.unl"    select * from  system_setup ;

dbschema  -d nmosdb  -t tfa_alarm_relation –ss

 

2 制作ctl控制文件circuit.ctl

load data

infile  'circuit20150610.unl'     --导出的unl文件

into table circuit                     --导入的表名

fields terminated by '|'            --分隔符           

TRAILING NULLCOLS               --列出表中所有字段

( object_class char(10000),

resourcesid char(10000),

int_id char(10000),

circuitno char(10000),

......

bnodeport_rdn char(10000),

localnode_rdn char(10000),

romotenode_rdn char(10000) )

 

3 配置sqlldr命令可以使用的环境变量

 

用户环境变量:

ORACLE_UNQNAME=oracle

ORACLE_HOME=/opt/oracle/product/11g

ORA_NLS10=/opt/oracle/product/11g/nls/data
ORACLE_SID=orcl
ORACLE_BASE=/opt/oracle

PATH=/opt/oracle/product/11g/bin:/usr/sbin

LD_LIBRARY_PATH=/opt/oracle/product/11g/lib:/lib:/usr/lib

oracle客户端配置:

tnsnames.ora

ORCL =   (DESCRIPTION =     (ADDRESS = (PROTOCOL = TCP)(HOST = 10.10.0.9)(PORT = 1521))     (CONNECT_DATA =       (SERVER = DEDICATED)       (SERVICE_NAME = orcl)     )   )

SID_LIST_LISTENER =   (SID_LIST =     (SID_DESC =       (GLOBAL_DBNAME = orcl)              (ORACLE_HOME = /opt/app/oracle/product/11.2.0/db_1)               (SID_NAME = orcl)     )   )

 

listener.ora

LISTENER =   (DESCRIPTION_LIST =     (DESCRIPTION =       (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))       (ADDRESS = (PROTOCOL = TCP)(HOST = 10.10.0.9)(PORT = 1521))     )   )

SID_LIST_LISTENER =

  (SID_LIST =

    (SID_DESC =

      (SID_NAME = PLSExtProc)

      (ORACLE_HOME = /opt/oracle/product/11g)

      (PROGRAM = extproc)

      (ENVS="EXTPROC_DLLS=ANY")

    )

    (SID_DESC =

      (GLOBAL_DBNAME = orcl)

      (ORACLE_HOME = /opt/oracle/product/11g)

      (SID_NAME = orcl)

    )

  )

 

sqlldr 数据库用户名/密码@实例名  测试是否通

 

4 执行命令,导入文件

sqlldr userid=nrmdb/nrmoptr@orcl control= /opt/informix/data/circuit.ctl

data= /opt/informix/data/circuit20150610.unl

 

 附加:

informix的日期字段导入到oracle中,由于不是相同的类型,不能直接导入

通过一个字段 做了个中转。

例如informix日期字段为time_stamp;

在oracle中 创建一个time_stamp1 varchar(255)用于接收 informix的日期字段;

同时在oracle中创建一个time_stamp date 用于oracle中将日期字段从 varchar转换为date

update circuit set time_stamp=to_date(time_stamp1,'yyyy-mm-dd hh24:mi:ss')

将过度字段time_stamp1删除。

类型转换完成。

 

 

 

结语:

DBA匮乏的年代,能把实践落地的人更加的匮乏... 多做些动手实践,再去讨论什么方案可行,更有说服力

因为,只有在实践的过程中,才能遇到形形色色的问题,需要去一个个攻克它~~~

加油吧~~~trouble shooter^_^

 

--by Joyce

 

posted on 2015-06-17 17:23  好好学习&&&天天向上  阅读(3142)  评论(0编辑  收藏  举报