Oracle--大数据迁移--sqlldr技术的应用
1. 让表不产生REDO LOG
SQL> ALTER TABLE table_name nologging;
2.编写控制文件 *.ctl (重点)
如 0120.ctl
3.准备数据文件
如 0120.csv
4. 在装有oracle服务的Linux服务器上执行
sqlldr db_user/db_pwd@//url:port/orcl control=0120.ctl direct=true ; 注意这里的数据库连接串是oracle 18c的写法。
5. 执行结果
先使用 echo $? 回车,结果为0是成功;它也会生成日志文件查看具体情况的
详解0120.ctl的文件内容(以下表字段是原表的缩略版,删除了不少字段,但不影响使用)
OPTIONS (skip=1,rows=5000,errors=0) -- sqlldr 命令显示的选项可以写到这里边来,skip=1 用来跳过数据中的第一行(第一行往往是表头) unrecoverable -- 此选项必须要与DIRECT共同应用 LOAD DATA CHARACTERSET 'UTF8' --设置编码 INFILE "0120.csv" --指定外部数据文件 --INFILE "0121.csv" --若有多个数据文件要以前执行,则按照本行的写法继续写 --这里还可以使 用 BADFILE、DISCARDFILE 来指定坏数据和丢弃数据的文件, truncate --操作类型,truncate会清空表,还可以有 append 追加数据 INTO TABLE table_name -- 要插入记录的表 Fields terminated by "," -- 数据中每行记录用 "," 分隔 Optionally enclosed by '"' -- 数据中每个字段用 '"' 框起,比如字段中有 "," 分隔符时 trailing nullcols --表的字段没有对应的值时允许为空 ( -- virtual_column FILLER, --这是一个虚拟字段,用来跳 过由 PL/SQL Developer 生成的第一列序号,若有则需要跳过该列,否则注释掉 oid "sys_guid()" , -- 第一个主键字段使用 oracle的uuid函数生成 instcode ,-- 默认是varchar类型的,默认最大支持255的长度,如果超长的自己要手动设长度 如 instcode char(1024), instname , name , idcard , phone , dayavginsuranceassets NULLIF (dayavginsuranceassets="") "to_number(:dayavginsuranceassets)" , --表字段number类型,手动调用oracle的to_number函数转,当字段为""时就是 NULL banktimepointassets NULLIF (banktimepointassets="") "to_number(:banktimepointassets)" , --表字段number类型,手动调用oracle的to_number函数转,当字段为""时就是 NULL enterpriseassetsratio , systime "sysdate" , --这里使用系统默认生产时间,日期字段也可以参考number类型,使用to_date("yyyy-MM-dd",:systime) updatetime "sysdate" , --这里使用系统默认生产时间,日期字段也可以参考number类型,使用to_date("yyyy-MM-dd",:updatetime) dayavgcurrentassets_total NULLIF (dayavgcurrentassets_total="") "to_number(:dayavgcurrentassets_total)" , --表字段number类型,手动调用oracle的to_number函数转,当字段为""时就是 NULL stat_date , stat_dd , city_code )
csv文件,因保密原因只能截图部分字段
输出日志
经验之谈:
1. 如果分成几个csv格式的文件插入到同一个表完成数据的导入,第一个用truncate,后面的几个请使用append;
2. 如果把多个文件让一个ctl执行时,切记后面的文件不能有表头第一行;
我参考了两篇文章
sqlldr的用法 (这个最完整)
sqlldr使用详解
----------- 赠人玫瑰,手有余香 如果本文对您有所帮助,动动手指扫一扫哟 么么哒 -----------
未经作者 https://www.cnblogs.com/xin1006/ 梦相随1006 同意,不得擅自转载本文,否则后果自负