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