在SQL*LOADER 工具上(或者称为SQLLDR,读为:“sequel loader”),因为它仍然是装载数据的主要方法,SQLLDR 能够在极短的时间内装
载庞大数量的数据。
我也是初使用,理解不太深刻,所以做下简单的介绍希望能帮助大家。
sqlldr 帮助命令参考:
Microsoft Windows [版本 10.0.16299.726] (c) 2017 Microsoft Corporation。保留所有权利。 C:Users antian>sqlldr SQL*Loader: Release 12.2.0.1.0 - Production on 星期二 11月 6 15:46:09 2018 Copyright (c) 1982, 2017, Oracle and/or its affiliates. All rights reserved. 用法: SQLLDR keyword=value [,keyword=value,...] 有效的关键字: userid -- ORACLE 用户名/口令 control -- 控制文件名 log -- 日志文件名 bad -- 错误文件名 data -- 数据文件名 discard -- 废弃文件名 discardmax -- 允许废弃的文件的数目 (全部默认) skip -- 要跳过的逻辑记录的数目 (默认 0) load -- 要加载的逻辑记录的数目 (全部默认) errors -- 允许的错误的数目 (默认 50) rows -- 常规路径绑定数组中或直接路径保存数据间的行数 (默认: 常规路径 64, 所有直接路径) bindsize -- 常规路径绑定数组的大小 (以字节计) (默认 256000) silent -- 运行过程中隐藏消息 (标题,反馈,错误,废弃,分区) direct -- 使用直接路径 (默认 FALSE) parfile -- 参数文件: 包含参数说明的文件的名称 parallel -- 执行并行加载 (默认 FALSE) file -- 要从以下对象中分配区的文件 skip_unusable_indexes -- 不允许/允许使用无用的索引或索引分区 (默认 FALSE) skip_index_maintenance -- 没有维护索引, 将受到影响的索引标记为无用 (默认 FALSE) commit_discontinued -- 提交加载中断时已加载的行 (默认 FALSE) readsize -- 读取缓冲区的大小 (默认 1048576) external_table -- 使用外部表进行加载; NOT_USED, GENERATE_ONLY, EXECUTE columnarrayrows -- 直接路径列数组的行数 (默认 5000) streamsize -- 直接路径流缓冲区的大小 (以字节计) (默认 256000) multithreading -- 在直接路径中使用多线程 resumable -- 对当前会话启用或禁用可恢复 (默认 FALSE) resumable_name -- 有助于标识可恢复语句的文本字符串 resumable_timeout -- RESUMABLE 的等待时间 (以秒计) (默认 7200) date_cache -- 日期转换高速缓存的大小 (以条目计) (默认 1000) no_index_errors -- 出现任何索引错误时中止加载 (默认 FALSE) partition_memory -- 开始溢出的直接路径分区内存限制 (kb) (默认 0) table -- 用于快速模式加载的表 date_format -- 用于快速模式加载的日期格式 timestamp_format -- 用于快速模式加载的时间戳格式 terminated_by -- 由用于快速模式加载的字符终止 enclosed_by -- 由用于快速模式加载的字符封闭 optionally_enclosed_by -- (可选) 由用于快速模式加载的字符封闭 characterset -- 用于快速模式加载的字符集 degree_of_parallelism -- 用于快速模式加载和外部表加载的并行度 trim -- 用于快速模式加载和外部表加载的截取类型 csv -- 用于快速模式加载的 csv 格式数据文件 nullif -- 用于快速模式加载的表级 nullif 子句 field_names -- 用于快速模式加载的数据文件第一条记录字段名设置 dnfs_enable -- 启用或禁用输入数据文件 Direct NFS (dNFS) 的选项 (默认 FALSE) dnfs_readbuffers -- Direct NFS (dNFS) 读缓冲区数 (默认 4) sdf_prefix -- 要附加到每个 LOB 文件和辅助数据文件的开头的前缀 help -- 显示帮助消息 (默认 FALSE) empty_lobs_are_null -- 将空白 LOB 设置为空值 (默认 FALSE) defaults -- 直接路径默认值加载; EVALUATE_ONCE, EVALUATE_EVERY_ROW, IGNORE, IGNORE_UNSUPPORTED_EVALUATE_ONCE, IGNORE_UNSUPPORTED_EVALUATE_EVERY_ROW direct_path_lock_wait -- 当前已锁定时, 等待表访问权限 (默认 FALSE) PLEASE NOTE: 命令行参数可以由位置或关键字指定 。前者的例子是 'sqlldr scott/tiger foo'; 后一种情况的一个示例是 'sqlldr control=foo userid=scott/tiger'。位置指定参数的时间必须早于 但不可迟于由关键字指定的参数。例如, 允许 'sqlldr scott/tiger control=foo logfile=log', 但是 不允许 'sqlldr scott/tiger control=foo log', 即使 参数 'log' 的位置正确。 C:Users antian>
sqlldr 官方参考链接
sqlldr脚本如何写,小技巧可使用toad for oracle 导出sqlpldr 格式的文件,然后执行导入操作,首先我们使用子查询创建一张测试表示例如下:
建表语句如下
CREATE TABLE U_TAB
AS
SELECT USERNAME ,USER_ID , ACCOUNT_STATUS,
DEFAULT_TABLESPACE ,TEMPORARY_TABLESPACE
FROM DBA_USERS WHERE ACCOUNT_STATUS='OPEN';
然后鼠标右键查询的数据集上,选择Export Dataset
我们选择保存在桌面,点击ok .
打开导出文件U_TAB.ctl 如下:
-- SQL Loader Control and Data File created by TOAD -- Variable length, terminated enclosed data formatting -- -- The format for executing this file with SQL Loader is: -- SQLLDR control=<filename> Be sure to substitute your -- version of SQL LOADER and the filename for this file. -- -- Note: Nested table datatypes are not supported here and -- will be exported as nulls. OPTIONS (DIRECT=FALSE, PARALLEL=FALSE) LOAD DATA INFILE * BADFILE './U_TAB.BAD' DISCARDFILE './U_TAB.DSC' APPEND INTO TABLE WX.U_TAB Fields terminated by ";" Optionally enclosed by '"' ( USERNAME, USER_ID NULLIF (USER_ID="NULL"), ACCOUNT_STATUS, DEFAULT_TABLESPACE, TEMPORARY_TABLESPACE ) BEGINDATA "SYS";0;"OPEN";"SYSTEM";"TEMP" "SYSTEM";9;"OPEN";"SYSTEM";"TEMP" "WX";111;"OPEN";"USERS";"TEMP" "ZHJF";109;"OPEN";"MCC";"MCC_TEMP"
,进入sqlplus ,我们把表清空,然后使用sqlpldr 把表重新装在
C:Users antian>sqlplus wx/123 SQL*Plus: Release 12.2.0.1.0 Production on 星期二 11月 6 16:24:35 2018 Copyright (c) 1982, 2016, Oracle. All rights reserved. 上次成功登录时间: 星期二 11月 06 2018 16:24:30 +08:00 连接到: Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production SQL> TRUNCATE TABLE U_TAB; 表被截断。 SQL> ho sqlldr wx/123 control=C:Users antianDesktopU_TAB.ctl SQL*Loader: Release 12.2.0.1.0 - Production on 星期二 11月 6 16:24:54 2018 Copyright (c) 1982, 2017, Oracle and/or its affiliates. All rights reserved. 所用路径: 常规 达到提交点 - 逻辑记录计数 4 表 WX.U_TAB: 已成功载入 4 行。 查看日志文件: U_TAB.log 了解有关加载的详细信息。 SQL> set lines 200 SQL> column username format a20 SQL> SELECT * FROM U_TAB ; USERNAME USER_ID ACCOUNT_STATUS DEFAULT_TABLESPACE TEMPORARY_TABLESPACE -------------------- ---------- -------------------------------- ------------------------------ ------------------------------ SYS 0 OPEN SYSTEM TEMP SYSTEM 9 OPEN SYSTEM TEMP WX 111 OPEN USERS TEMP ZHJF 109 OPEN MCC MCC_TEMP SQL>
表数据已导入
使用这个工具可以免去写sqlldr控制文件的语法,控制文件是必须的,但数据文件的数据可以和控制文件一同写入。