前言:
不同类型的数据库互导数据,由于数据库机制不同,不能通过简单的复制粘贴实现,还有由于文件格式的不同,也不能简单的导出文件,导入数据库。
关于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/[email protected] 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^_^