toad for oracle 小技巧

在SQL*LOADER 工具上(或者称为SQLLDR,读为:“sequel loader”),因为它仍然是装载数据的主要方法,SQLLDR 能够在极短的时间内装

载庞大数量的数据。

我也是初使用,理解不太深刻,所以做下简单的介绍希望能帮助大家。

sqlldr 帮助命令参考:

Microsoft Windows [版本 10.0.16299.726]
(c) 2017 Microsoft Corporation。保留所有权利。

C:\Users\nantian>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\nantian>

 

sqlldr 官方参考链接

https://docs.oracle.com/en/database/oracle/oracle-database/18/sutil/oracle-sql-loader-express-mode.html#GUID-8C235861-2A8B-4196-9705-E6FFED0C0C99

 

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\nantian>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\nantian\Desktop\U_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控制文件的语法,控制文件是必须的,但数据文件的数据可以和控制文件一同写入。

 

posted @ 2018-11-06 16:35  你的孤独虽败犹荣  阅读(3838)  评论(0编辑  收藏  举报