数据迁移小计

方法一:手工数据迁移,使用到了sqlloader
1、使用日终系统按指定的SQL将数据卸数到指定位置,生成所需的.ok文件和.dat文件。其中.ok文件的内容为表名、行数、字节大小。.dat文件的内容为具体的表数据,行分隔符为换行符\n,字段分隔符为|。
2、将.ok文件和.dat文件上传到服务器上
3、(linux)转到sqlldr_com.sh的路径,执行sh sqlldr_com.sh
shell文件:sqlldr_com.sh
#!/bin/sh 
datapath="/home/oracle/linux_sqlldr"; #控制文件文件路径
echo $datapath; 
#sqlldr  userid=shan/shan@xxx.xxx.xxx.xxx:1521/orcl   "control='$datapath/sqlldr_org_info_com.ctl'        log='$datapath/log/sqlldr_org_info_com.log'";

控制文件:sqlldr_org_info_com.ctl
LOAD DATA
CHARACTERSET  UTF8 #文本格式
INFILE  '/home/oracle/linux_sqlldr/sql/org_info_com.dat' #文件位置
REPLACE 
INTO TABLE dtemp_com_org_info #要插入的临时表
FIELDS TERMINATED BY '|' #字段分隔符
TRAILING NULLCOLS #要导入源文件此列内容为空,在导入到数据库表中,此列内容就是null

ORGID ,
SORTNO          ,
ORGNAME         ,
ORGLEVEL        ,
ORGPROPERTY     ,
RELATIVEORGID   ,
CMNUM TERMINATED BY WHITESPACE
)   
注意:利用sqlloader导入会出现ORA-01722:invalid number问题
原因:换行符的存在,如果integer或者number类型的栏位位于表的最后,最后其实会有CR/LF的换行符,在用sqlldr导入时会把换行符也算作那个数字的一部分,使得对应的导入CMNUM的值与CMNUM在数据库中定义的NUMBER(8)类型不匹配,从而出错。解决办法加integer或者加“TERMINATED BY WHITESPACE”。
参考: https://www.cnblogs.com/huanghuang/archive/2012/06/29/2570552.html
4、执行存储过程
方法一:在pl/sql的命令行窗口,先set serveroutput on将输出内容显示,然后执行存储过程exec p_com_org_info();

方法二:(linux)conn shan/shan;exec P_COM_ORG_INFO();

方法三:(linux)sh execp.sh

#!/bin/ksh
sqlplus /nolog<<!
conn shan/shan;
exec P_COM_ORG_INFO();


方法二:全自动数据迁移,使用到了etl和两个java程序,可以放到日终系统,进行每日调用
数据卸载
1、使用ETL工具进行抽取,我使用了kettle,生成转换文件。
2、将转换文件放到项目中,进行数据卸载,生成.ok的标识文件和.dat的数据文件。
3、将标识文件和数据文件上传到服务器上,具体的服务器路径可以在.xml自主配置。
数据装载
1、将标识文件和数据文件下载到工程中,具体的服务器路径可以在.xml自主配置。
2、使用ETL工具进行转换,我使用了kettle,生成转换文件。

3、将转换文件放到项目中,进行数据装载,就将数据写入到了数据库中。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值