数据导入导出
2024/9/5原创大约 2 分钟约 525 字
1. 多线程执行
/*+ parallel(8) */
2. 导出工具 sqluldr2
2.1. 导出命令
注
field: 分隔符
head: 是否导出表头
2.1.1. Window 平台
sqluldr264.exe user/passwd@bjgc query="select run_date,loc from table" file=d:\pjc.csv field=0x7c head=yes
2.1.2. Linux 平台
./sqluldr2_linux64_10204.bin user=user/passwd@127.0.0.1:1521/dbname query="select run_date,loc from tableName" file=/data/table_name.csv head=yes log=./oraexp.log
3. 导入工具 sqlloader
3.1. 导入命令
相关信息
sqlldr 命令无效,检查自己的 oracle 客户端是否已安装并配置了环境变量,这里不再赘述;
ctl 文件需事先编辑好,放到对应路径下(格式见第 2 点);
log 和 bad 是用于打印执行日志和错误日志,执行时间和报错信息都会记录下来,可自定义文件名,无则默认同 ctl 文件名,如 ht_user.log ,ht_user.bad ;
errors=1000 表示可忽略的最多的报错行数,默认 50 行,超过则会中断执行
密码如带有特殊字段,会报错:-bash: !123456@: envent not found
命令行密码部分需用单引号,如 '!123456@',执行会提示手动输入用户名和密码
sqlldr oracle用户/oracle密码 control=/data/bak/ht_user.ctl log=/data/bak/ bad=log=/data/bak/ errors=1000;
ctl 文件
相关信息
表字段为普通的字符格式,不需要特别转化
number 类型,需字段后加 float external
date 类型,需加 DATE "YYYY-MM-DD hh24:mi:ss",日期格式根据 csv 文件实际情况转换
TIMESTAMP 需加 TIMESTAMP "YYYY-MM-DD hh24:mi:ss:ff" 时间格式根据 csv 文件实际情况转换
options(skip=1,ROWS=1000) --跳过第一行,每次提交1000数据
load data
CHARACTERSET UTF8 --导入文件编码
infile '/home/oracle/ht_users.csv' --文件
insert into table "HT_USERS" --表名,必须双引号
fields terminated by ',' --分割符
ARRAYSIZE 1000 --将一次性导入1000行数据到表中
trailing nullcols --将所有不在纪录中的指定位置的列当作空值
(
TRANS_SEQ,
USER_ACCTNO,
USER_ACCTTYPE,
TRANS_AMT float external,
TRANS_DATE DATE "YYYY-MM-DD hh24:mi:ss",
TRANS_DATETIME TIMESTAMP "YYYY-MM-DD hh24:mi:ss:ff",
USER_CODE,
USER_NAME,
USER_STATE,
USER_PASSWORD
)