做外贸比较好用的网站,白山网站建设,手机版网站建设合同,怎样学设计快速入门1. 什么是SQLLDR
SQLLDR是Oracle服务端自带的工具#xff0c;用于快速导入大批量数据。 2. 常规路径加载/直接路径加载
sqlldr导入有两种模式#xff0c;常规路径加载和直接路径加载#xff0c;默认使用常规路径加载#xff0c;当directy或者directtrue时#xff0c;使用…1. 什么是SQLLDR
SQLLDR是Oracle服务端自带的工具用于快速导入大批量数据。 2. 常规路径加载/直接路径加载
sqlldr导入有两种模式常规路径加载和直接路径加载默认使用常规路径加载当directy或者directtrue时使用直接路径加载。直接路径加载比常规路径拥有更高的效率但也有诸多限制。
常规路径加载 数据经过buffer cache使用SQL处理数据COMMIT提交操作一次加载可能会涉及到多个事务处理会产生大量undo数据回滚数据通过undo回滚触发INSERT 触发器操作过程中表仍可被并发访问 直接路径加载 数据不经过buffer cache从PGA直接把数据格式化成Oracle块再写入数据文件几乎不会产生undo数据。但是如果表上有索引会产生索引的undo数据而且索引的块会被读进buffer cache这将会花费大量时间在索引的维护上。因此在向表中传送大量数据时建议先将表上的索引设置为unusable或者使用skip_index_maintenancetrue待插入结束后再rebuild索引 alter index index_name rebuild nologging数据不会写入HWM高水位线以下的数据块而是在HWM之后写入通过HWM回滚触发器在进行直接路径加载之前已禁用在加载结束时会重新启用如果重新启用时不能访问某个被引用对象这些触发器可能会保持为禁用状态操作过程中对应的表会将会被锁定所有在这张表上的CRUD操作将会被禁止不能并发访问 3. SQLLDR的常用参数说明
属性值含义默认值或例子userid连接数据库的信息username/passwordip:prot/dbnameuseridUntifA/UntifA192.168.101.88:1521/oracledbcontrol控制文件控制导入细节的文件controlcontrol_name.txtparfile参数文件包含参数细节的文件parfileparfile_name.txtlog日志文件默认与控制文件同名.log或者自己指定loglog_name.logbad坏数据文件默认与控制文件同名.bad或者自己指定badbad_name.baddiscard丢弃的数据文件discardmax允许丢弃数据的最大值全部skip跳过的行/记录数默认值为0 如果前5行为表头则可以指定跳过表头所占的行数skip5load加载的记录数默认值为全部errors允许的错误记录数direct导入模式默认为false常规路径加载true直接路径加载rows每次提交的记录数常规路径64直接路径全部parallel并行导入仅在直接路径加载时有效推荐设置true默认值为falsefile并行加载时会用到该参数指定file参数要加载的内容即只向指定的数据文件写入数据减少i/ocolumnarrayrows指定直接路径加载时流缓冲区的行数5000streamsize指定直接路径加载时流缓冲区的大小字节256000multithreading指定直接路径加载时是否启用多线程date_cache指定直接路径加载时日期转换用缓存大小以条目为单位1000bindsize每次提交记录的缓冲区的大小字节256000silent禁止输出信息header,feedback,errors,discards,partitionsskip_unusable_indexes不允许/允许不可用的索引或索引分区falseskip_index_maintenance不维护索引将受影响的索引标记为不可用falsecommit_discontinued停止加载时提交加载的行falseexternal_table使用外部表进行加载不使用generate_onlysqlldr并不执行加载而是生成创建外部表的sql和处理数据的sql并保存在log文件中execute执行外部表并加载数据no_index_errors在任何索引错误上中止加载false 4. 控制文件controlcontrol_name.txt
控制文件指定了数据源、编码格式、列的控制方式等一系列参数我们只举例说明其中的常用内容。
语法格式
--关闭归档日志提高导入速度仅直接路径时有效
--unrecoverableLOAD DATA--导入字符集格式
CHARACTERSET UFT8--1.指定要加载的数据文件
--INFILE 和INDDN是同义词它们后面都是要加载的数据文件的绝对路径。如果用 * 则表示数据就在控制文件内。
--INFILE /home/oracle/user/UntifA/load_file.txt
[ { INFILE | INDDN } {file | * } ]
--BADFILE和BADDN是同义词。file指定坏数据保存的文件
--BADFILE /home/oracle/user/UntifA/load_file.bad
[{ BADFILE | BADDN } file ]
--DISCARDFILE和DISCARDDN是同义词。file指定丢弃的数据文件
--DISCARDFILE /home/oracle/user/UntifA/load_file.dis
[{ DISCARDFILE | DISCARDDN } file ]--2.指定操作类型
--INSERT默认值装载空表如果原先的表有数据sqlloader会停止
--APPEND原先的表有数据 就在表中追加新记录
--REPLACE删除旧记录(用 delete from table 语句)替换成新装载的记录
--TRUNCATE删除旧记录(用 truncate table 语句)替换成新装载的记录
[ APPEND | REPLACE | INSERT | TRUNCATE ]--3.指定操作的表
INTO TABLE [user.]table--4.指定过滤条件
--[when id id_memo]--5.指定字段分隔符
--字段分隔符
FIELDS TERMINATED BY ,
--字段用什么字符包括起来
OPTIONALLY ENCLOSED BY
--字段没有对应的值时允许为空
TRAILING NULLCOLS--6.指定表字段
--常见数据类型
--CHAR 字符
--DATE 日期
--INTEGER 整数
--FLOAT 普通符点
--DOUBLE 双精度符点
(
id,--类型未指定时默认为character每个字段的实际解析类型见log文件
code integer,
name char(1000),
sum double,
create_date date yyyy-mm-dd hh24:mi:ss,
col_1 FILLER, --此列的值不会被装载
col_1 CONSTANT UntifA, --此列的值默认为常量UntifA
col_2 substr(:col4,-3,3), --取col4的后三位
col_3,
col_4,
clo_5 to_date(20210202,YYYY-MM-DD) --日期格式字段插入固定日期
)例子1
LOAD DATA
CHARACTERSET UFT8
INFILE /home/oracle/user/UntifA/load_file.txt
BADFILE /home/oracle/user/UntifA/load_file.bad
DISCARDFILE /home/oracle/user/UntifA/load_file.dis
TRUNCATE
INTO TABLE test_01
FIELDS TERMINATED BY ,
OPTIONALLY ENCLOSED BY
TRAILING NULLCOLS
(
id,--类型未指定时默认为character每个字段的实际解析类型见log文件
code integer,
name char(1000),
sum double,
create_date date yyyy-mm-dd hh24:mi:ss,
col_1 FILLER, --此列的值不会被装载
col_1 CONSTANT UntifA, --此列的值默认为常量UntifA
col_2 substr(:col4,-3,3), --取col4的后三位
col_3,
col_4,
clo_5 to_date(20210202,YYYY-MM-DD) --日期格式字段插入固定日期
)例子2
OPTIONS (DIRECTtrue,SKIP_INDEX_MAINTENANCEtrue,PARALLELtrue)
LOAD DATA
INFILE nor.dat
BADFILE nor.bad
DISCARDFILE nor.dsc
INTO TABLE p95169.DISEASE_EXPERT_RELATION
APPEND
WHEN len3
FIELDS TERMINATED BY WHITESPACE
( len FILLER POSITION(1) CHAR, DISEASEEXPERTUUID EXPRESSION SYS_GUID(), EXPERTUUID CHAR, DISEASEUUID CHAR, DISEASESORTCODE EXPRESSION NULL, DISEASENAME CHAR, CREATEDTIME EXPRESSION TO_CHAR(sysdate,yyyymmddhh24miss), MODIFIEDTIME EXPRESSION TO_CHAR(sysdate,yyyymmddhh24miss)
)
INTO TABLE p95169.DISEASE_EXPERT_RELATION
APPEND
WHEN len2
FIELDS TERMINATED BY WHITESPACE
( len FILLER POSITION(1) CHAR, DISEASEEXPERTUUID EXPRESSION SYS_GUID(), EXPERTUUID CHAR, DISEASEUUID EXPRESSION NULL, DISEASESORTCODE EXPRESSION NULL, DISEASENAME CHAR, CREATEDTIME EXPRESSION TO_CHAR(sysdate,yyyymmddhh24miss), MODIFIEDTIME EXPRESSION TO_CHAR(sysdate,yyyymmddhh24miss)
)
INTO TABLE p95169.DISEASE_EXPERT_RELATION
APPEND
WHEN len1
FIELDS TERMINATED BY WHITESPACE
( len FILLER POSITION(1) CHAR, DISEASEEXPERTUUID EXPRESSION SYS_GUID(), EXPERTUUID CHAR, DISEASEUUID EXPRESSION NULL, DISEASESORTCODE EXPRESSION NULL, DISEASENAME EXPRESSION NULL, CREATEDTIME EXPRESSION TO_CHAR(sysdate,yyyymmddhh24miss), MODIFIEDTIME EXPRESSION TO_CHAR(sysdate,yyyymmddhh24miss)
) 控制文件还有很多对表、对列的单独控制如果有需求可以百度查找如何使用 参考帖子 [Oracle] SQL*Loader 详细使用教程1- 总览 [Oracle] SQL*Loader 详细使用教程2- 命令行参数 [Oracle] SQL*Loader 详细使用教程3- 控制文件 [Oracle] SQL*Loader 详细使用教程4- 字段列表