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控制文件的語法,控制文件是必須的,但數據文件的數據可以和控制文件一同寫入。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM