oracle - sqlldr远程批量导入数据
需要将大量的数据导入oracle数据库,目前只找到了oracle sqlldr工具。
下边是详细步骤,亲测有效,可连接远程oracle数据库
1.安装oracle 19c client,安装好之后就有sqlldr了。
2.创建用户
alter system disable restricted session; --orace11g不用执行
alter session set "_ORACLE_SCRIPT"=true; --orace11g不用执行
create user tpch identified by "123456";
grant dba to tpch;
commit;
3.创建表,用工具连接oracle数据库,将schema换成tpch,执行下列语句。
CREATE TABLE CUSTOMER ( C_CUSTKEY INTEGER NOT NULL,
C_NAME VARCHAR(25) NOT NULL,
C_ADDRESS VARCHAR(40) NOT NULL,
C_NATIONKEY INTEGER NOT NULL,
C_PHONE CHAR(15) NOT NULL,
C_ACCTBAL DECIMAL(15,2) NOT NULL,
C_MKTSEGMENT CHAR(10) NOT NULL,
C_COMMENT VARCHAR(117) NOT NULL);
4.导入数据
用oracle client自带的工具sqlldr导入数据
4.1 将customer.tbl放在d:\dmp目录下
我的数据文件,各field的分隔符是|。注意这个分隔符,后边写ctl文件需要用到
1|Customer#000000001|IVhzIApeRb ot,c,E|15|25-989-741-2988|711.56|BUILDING|to the even, regular platelets. regular, ironic epitaphs nag e|
2|Customer#000000002|XSTf4,NCwDVaWNe6tEgvwfmRchLXak|13|23-768-687-3665|121.65|AUTOMOBILE|l accounts. blithely ironic theodolites integrate boldly: caref|
4.2 创建ctl文件。比较讨厌的是必须写上表所有的列名称,表多的情况下太累了,不知道怎么简化。
LOAD DATA
characterset UTF8
infile 'D:\dmp\customer.tbl'
APPEND INTO TABLE tpcds.customer
FIELDS TERMINATED BY '|'
(C_CUSTKEY,C_NAME, C_ADDRESS,C_NATIONKEY,C_PHONE,C_ACCTBAL,C_MKTSEGMENT, C_COMMENT)
4.3 在d:\dmp目录下执行,注意咱们的密码中如果含有@,得用双引号括起来并且转义 \"123@456\"; 如果没有,直接用tpch/123456即可
sqlldr userid=tpch/\"123456\"@host:port/HELOWIN direct=true rows=20000 streamsize=10485760 date_cache=5000 errors=9999 control='customer.ctl' log='customer.log'