Oracle 原理:数据装载 ,SQLldr ,外部表
一、導入 SQLldr
SQL*LOADER可以把txt文件,Excel文件導入到數據庫中。使用SQLloader導入導出需要一個數據文件和一個控制文件。數據文件中存了你需要導入的數據,控制文件中寫你需要怎么導入這些數據。
LOAD DATA infile 'e:\aa.csv' ## 源文件路徑,路徑不要包括中文 into table xx_temp <impcmd> ## 要導入的表 (id terminated by whitespace ## id 為列名,whitespace 表示列之間使用空格來區分,如果是其他的 ‘|’ 方式則使用 terminated by '|' 逗號則用逗號.以此類推 ) ## 換行 也是自動終止字段讀的標識其中 impcmd 中 可以被4個值替換分別是insert (缺省默認值),append,replace,truncate
insert: 插入數據,要求表為空
append:追加數據,在原來表的基礎上再插入數據
replace :刪除原表數據,再插入
truncate:刪除原表數據,再插入,比replace 更高效
例如有這么張表
create table salary_tbl(employer_nm varchar(20) ,department varchar(20) not null,salary number not null,leader_nm varchar(20) )新建一個.txt文件用于存數據,可以自定義分隔符來區分字段
新建一個ctl 以字符 '?|' 分割?
或者這樣寫更簡便
load data infile 'data1.txt' into table SALARY_TBL append fields terminated by '|'(employer_nm ,department ,salary ,leader_nm )在cmd執行? cd 到對應目錄執行 ,執行完后可以查看對應位置log的內容
sqlldr userid=system/voapd@orcl control=control1.ctl log=11.log
在cmd 執行? sqlldr? ? ?可以查看sqlldr 的幫助
| 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(默認NOT_USED) |
| columnarrayrows | 直接路徑列數組的行數(默認5000) |
| streamsize | 直接路徑流緩沖區的大小(以字節計)(默認256000) |
| multithreading | 在直接路徑中使用多線程 |
| resumable | 啟用或禁用當前的可恢復會話(默認FALSE) |
| resumable_name | 有助于標識可恢復語句的文本字符串 |
| resumable_timeout | RESUMABLE的等待時間(以秒計)(默認7200) |
| date_cache | 日期轉換高速緩存的大小(以條目計)(默認1000) |
| no_index_errors | 出現任何索引錯誤時中止加載(默認FALSE) |
| PLEASENOTE | 命令行參數可以由位置或關鍵字指定。前者的例子是'sqlldrscott/tigerfoo';后一種情況的一個示例是'sqlldrcontrol=foouserid=scott/tiger'。位置指定參數的時間必須早于但不可遲于由關鍵字指定的參數。例如,允許'sqlldrscott/tigercontrol=foologfile=log',但是不允許'sqlldrscott/tigercontrol=foolog',即使參數'log'的位置正確。 |
| ? | ? |
?
------------------------------------------
二、導出spool
在SQLplus 或在SQl命令行 輸入
spool c:\test\spool.txtselect st.employer_nm||'|'||st.salary||'|'||st.department from salary_tbl st where LEADER_NM='雇傭者4'; spool off就可以導出了
此時ctl 文件該怎么寫才能正確導入呢 ?
其中 options skip 是選擇跳過的行數? ,? 順便使用支持中文導入的字符編碼
options(skip=3) load data CHARACTERSET ZHS16GBK infile 'spool.txt' into table SALARY_TBL truncate fields terminated by '|'(employer_nm ,salary ,department )?
二、外部表
? 外部表的數據不裝入數據庫中,數據庫中只存儲外部表的定義。實際數據位于操作系統中的平面文件中。外部表只讀,可以通過select 進行查詢。外部表可以由數據泵引擎生成的外部表。也可以通過文本文件生成的外部表
create table salary_tbl_external(employer_nm ,department ,salary ,leader_nm )organization external -----指明外部表 (type oracle_datapump --利用數據泵來創建default directory MY_DIR --D:\DIRTEST1location ('sal1.dmp','sal2.dmp') ) parallelas select salary_tbl.employer_nm,salary_tbl.department,salary_tbl.salary,salary_tbl.leader_nm from salary_tbl在MY_DIR 文件中有 SAL1.dmp 和SAL2.dmp文件。現在有了dmp文件可以通過外部表來創建外部表
create table salary_tbl_external2(employer_nm varchar2(20) ,department varchar2(20),salary number,leader_nm varchar2(20) ) organization external(type oracle_datapumpdefault directory MY_DIR --D:\DIRTEST1location ('sal1.dmp','sal2.dmp') )利用文本文件來創建外部表? 現有txt文件
create directory C_test as 'C:\test'; --使用oracle_loader創建外部表,數據文件中每一行為數據行,字段按照 ‘|'劃分 create table salary_tbl_external3(employer_nm varchar2(20) ,department varchar2(20),salary number,leader_nm varchar2(20) ) organization external(type oracle_loaderdefault directory C_test access parameters(records delimited by newline fields terminated by '|' )location ('data1.txt') )select * from salary_tbl_external3就可以查詢了。
?注意:?如果在access parameters 中? 注釋一些沒有用的代碼,系統認為這是不符合規則的語句,會產生錯誤ORA-29913
?
總結
以上是生活随笔為你收集整理的Oracle 原理:数据装载 ,SQLldr ,外部表的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Oracle 原理:逻辑备份和恢复
- 下一篇: Oracle 原理: 闪回 flash