当csv文件较小时,
可以使用数据库管理工具,
比如DBevaer导入到数据库,
当csv文件很大时,
可以使用Oracle提供的sqlldr命令行工具,
能够快速导入大量数据。
在数据库之间进行数据迁移时,
特别是不同类型的数据库,
使用csv文件是一种很好的选择。
2.sqlldr用法
下面介绍sqlldr用法,
有一个USER_INFO.csv文件,
需要导入到数据库中USER_INFO表,
而且有1.5亿条数据,
要求导入耗时尽量小。
这里先介绍基本的导入方式,
然后介绍direct导入方式,
最后介绍parallel导入方式。
3.获取csv文件
USER_INFO.csv文件内容如下,
这里仅选取了三条测试数据:
MSISDN,PROVINCE_CODE,CREATE_TIME
8617512570551,30,2019-10-31 17:16:09
8613063310680,33,2019-10-31 17:16:12
8613295281345,80,2019-10-31 17:16:14
4.创建USER_INFO表
CREATE TABLE "USER_INFO" (
"MSISDN" VARCHAR2(16),
"PROVINCE_CODE" VARCHAR2(4),
"CREATE_TIME" DATE,
CONSTRAINT "PK_USER_INFO_MSISDN" PRIMARY KEY ("MSISDN")
) TABLESPACE "USERS"
COMMENT ON COLUMN "USER_INFO"."MSISDN" IS '用户手机号'
COMMENT ON COLUMN "USER_INFO"."PROVINCE_CODE" IS '省份编码'
COMMENT ON COLUMN "USER_INFO"."CREATE_TIME" IS '用户创建时间'
注意表中字段要和csv文件对应。
5.创建ctl文件
创建名为loaddata_USER_INFO.ctl的控制文件:
options(skip=1,BINDSIZE=20971520, ROWS=10000, READSIZE=20971520, ERRORS=999999999)
load data
in
(1) 从Oracle服务器上拷贝相应的sqlldr执行程序。 1>scp /usr/local/oracle/sqlldr 2>mkdir -p /usr/local/oracle/rdbms/mesg cd /usr/local/oracle/rdbms/mesg/ scp ./ulus.msb3>测试
$>sqlldr
打印帮助信息!
如果失败则配置环境变量:
vim /etc/profile------------------------------------------------------------------------------
export ORACLE_HOME=/usr/local/oracle
export TNS_ADMIN=$ORACLE_HOME
export LD_LIBRARY_PATH=$ORACLE_HOME:/usr/local/lib:${LD_LIBRARY_PATH}
export SQLPATH=$ORACLE_HOME
export PATH=$PATH:$ORACLE_HOME
------------------------------------------------------------------------------
$TNS_ADMIN 目录中建立tnsnames.oradb-192.168.0.20 =(DESCRIPTION =(ADDRESS_LIST =(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.20)(PORT = 1521)))(CONNECT_DATA =(SERVICE_NAME = orcl)))
source /etc/profile
再次尝试!
(2) 在/etc/ld.so.conf.d下添加lib运行时目录
cd /etcls ld* (ld.so.cache ld.so.conf)....cat ld.so.confcd ld.so.conf.d/etc/ld.so.conf.d$ ls/etc/ld.so.conf.d$ sudo touch tm.conf/etc/ld.so.conf.d$ cat libc.confsudo vi tm.conf 配置上/usr/local/oraclesudo ldconfig/etc/ld.so.conf.d$ ls/etc/ld.so.conf.d$ cat tm.conf
(3) 可执行命令
sqlldr direct=true
parallel=false skip=1 errors=100 rows=500000 readsize=20971520
bindsize=20971520 skip_index_maintenance=false commit_discontinued=false
control=D:\Test.ctl bad=D:\Test.bad log=D:\Test.log
-------
如果还不行,首先使用ldd -r sqlldr 看一下是否缺少依赖库文件,其次 strace 跟踪一下sqlldr系统调用,看一下是缺少哪些文件,基本上就可以搞定了.
希望能够帮助你,望采纳,谢谢。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)