日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

SQLldr_乔羽简介

發布時間:2023/12/15 综合教程 36 生活家
生活随笔 收集整理的這篇文章主要介紹了 SQLldr_乔羽简介 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1. SQLLDR導入

1.1簡介

 SQL*LOADER是ORACLE的數據加載工具,通常用來將操作系統文件(數據)遷移到ORACLE數據庫中。SQL*LOADER是大型數據倉庫選擇使用的加載方法,因為它提供了最快速的途徑(DIRECT,PARALLEL)。

2.2語法和參數

語法: SQLLDR keyword=value [,keyword=value,…];

Sqlldr 參數一覽

Keyword

默認值

描述

userid

ORACLE用戶名/口令

control

控制文件名

log

日志文件名

bad

錯誤文件名

data

數據文件名

discard

廢棄文件名

discardmax

全部

允許廢棄的文件的數目

skip

0

要跳過的邏輯記錄的數目

load

全部

要加載的邏輯記錄的數目

errors

允許的錯誤的數目

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

使用外部表進行加載;
NOT_USED, GENERATE_ONLY, EXECUTE

columnarrayrows

5000

直接路徑列數組的行數

streamsize

256000

直接路徑流緩沖區的大小 (以字節計)

multithreading

在直接路徑中使用多線程

resumable

FALSE

啟用或禁用當前的可恢復會話

resumable_name

有助于標識可恢復語句的文本字符串

resumable_timeout

7200

RESUMABLE的等待時間 (以秒計)

date_cache

1000

日期轉換高速緩存的大小 (以條目計)

3 范例

利用PLSQL生成測試數據cux_sqlldr_test.txt

BEGIN

FORiIN1..100

LOOP

IFMOD(i,2)=1THEN

dbms_output.put_line(‘”‘||i||'”,”column1_’||i||'”,’||'”column2_’||i||'”,’||'”column3_’||i||'”,’||'”show_column_’||i||'”,’||'”hide_column_’||i||'”,”2017-01-01″‘);

ELSE

dbms_output.put_line(‘”‘||i||'”,”column1_’||i||'”, ,’||'”column3_’||i||'”,’||'”show_column_’||i||'”,’||'”hide_column_’||i||'”‘);

ENDIF;

ENDLOOP;

END;

建表

CREATETABLEcux.cux_sqlldr_test

(line_numNUMBER,

seq_numNUMBER,

column1VARCHAR2(30),

column2VARCHAR2(30)NOTNULL,

column3VARCHAR2(30)DEFAULT’column2′,

show_columnVARCHAR2(30),

hide_columnVARCHAR2(30),

creation_dateDATE

);

CREATEORREPLACESYNONYMapps.cux_sqlldr_testFORcux.cux_sqlldr_test;

CREATESEQUENCEcux.cux_sqlldr_test_sSTARTWITH10001;

CREATEORREPLACESYNONYMapps.cux_sqlldr_test_sFORcux.cux_sqlldr_test_s;

Sqlldr 有兩種使用方式

(1) 在控制文件中包涵數據.

創建一個文件命名為cux_sqlldr_test.ctl,在服務器下創建目錄Sqlldr,在sqlldr下創建log和bad文件夾,

上傳cux_sqlldr_test.ctl至服務器 ,如下圖所示:

cux_sqlldr_test.ctl內容如下。

OPTIONS (skip=3,rows=128)

load data

CHARACTERSET ZHS16GBK

infile *

badfile “/u02/ebsuat/app/fs2/EBSapps/appl/cux/12.0.0/sqlldr/bad/cux_sqlldr_test.bad”

discardfile “/u02/ebsuat/app/fs2/EBSapps/appl/cux/12.0.0/sqlldr/bad/cux_sqlldr_test.disc”

TRUNCATE into table cux_sqlldr_test

WHEN column1 != “column1_1”

Fields terminated by “,”

Optionally enclosed by ‘”‘

TRAILING NULLCOLS

(

line_num RECNUM ,

seq_num “cux_sqlldr_test_s.nextval” ,

column1 ,

column2 ,

column3 NULLIF (column3=”column3_4″),

show_column “UPPER(:show_column)” ,

hide_column FILLER ,

creation_date DATE ‘YYYY-MM-DD’ “CASE WHEN :creation_date is null THEN TO_CHAR(sysdate,’YYYY-MM-DD’) ELSE :creation_date END”

)

BEGINDATA

“1”,”column1_1″,”column2_1″,”column3_1″,”show_column_1″,”hide_column_1″,”2017-01-01″

“2”,”column1_2″, ,”column3_2″,”show_column_2″,”hide_column_2″

“3”,”column1_3″,”column2_3″,”column3_3″,”show_column_3″,”hide_column_3″,”2017-01-01″

“4”,”column1_4″, ,”column3_4″,”show_column_4″,”hide_column_4″

“5”,”column1_5″,”column2_5″,”column3_5″,”show_column_5″,”hide_column_5″,”2017-01-01″

“6”,”column1_6″, ,”column3_6″,”show_column_6″,”hide_column_6″

“7”,”column1_7″,”column2_7″,”column3_7″,”show_column_7″,”hide_column_7″,”2017-01-01″

“8”,”column1_8″, ,”column3_8″,”show_column_8″,”hide_column_8″

“9”,”column1_9″,”column2_9″,”column3_9″,”show_column_9″,”hide_column_9″,”2017-01-01″

“10”,”column1_10″, ,”column3_10″,”show_column_10″,”hide_column_10″

運行命令

sqlldr userid=apps/appsjiahuicontrol=/u02/ebsuat/app/fs2/EBSapps/appl/cux/12.0.0/sqlldr/file/cux_sqlldr_test.ctl log=$CUX_TOP/sqlldr/file/cux_sqlldr_test.log

查看結果

查看表

由上圖可以看出,運行命令后,在file文件夾下生成了cux_sqlldr_test.log,在bad下生成了cux_sqlldr_test.bad,在表中生成了3條記錄,下面分析一下cux_sqlldr_test.ctl的內容和結果

代碼

說明

OPTIONS (skip=3,rows=128)

sqlldr的內容可以寫在cotrol文件
load_data的前面,此處跳過前3行,每次提交128行

load data

加載數據

CHARACTERSET ZHS16GBK

字符集編碼(如果出現亂碼要考慮一下)

infile*

加載的文件,*表示本文件

badfile

錯誤的數據所放的文件(校驗錯誤)

discardfile

丟棄的數據放的路徑(記錄的格式錯誤或過濾行)

TRUNCATE into table cux_sqlldr_test

先TRUNCATE cux_sqlldr_test再將記錄插入表

WHEN column1 != “column1_1”

過濾行,對于值為column1_1的行過濾

Fields terminated by “,”

多個字段間用“,”隔開

Optionally enclosed by ‘”‘

單個字段用“””,“””開始結束

TRAILING NULLCOLS

對于值為空的字段允許為空

(line_numRECNUM ,

序號,自動生成,并不取自數據

seq_num“cux_sqlldr_test_s.nextval” ,

取每條記錄的第一個字段,此處應
為1..10,但是這里賦值序列。

代碼

說明

column1 ,

column1

column2 ,

column2,表定義為非空字段,雖然上面
允許為空,但是如果該值為空,不能插入表種

column3 NULLIF (column3=”column3_4″),

column3=”column3_4″時候默認為空

show_column “UPPER(:show_column)” ,

大寫列(調用UPPER大寫函數)

hide_columnFILLER ,

FILLER隱藏列

creation_date DATE ‘YYYY-MM-DD’

“CASE WHEN :creation_date is null THEN

TO_CHAR(sysdate,’YYYY-MM-DD’)

ELSE :creation_date END”

日期類型,格式為YYYY-MM-DD,為空的時候取系統日期

)

BEGINDATA

數據開始

*******

數據內容,默認每行一條記錄

插入表的4種方式

insert,為缺省方式,在數據裝載開始時要求表為空
append,在表中追加新記錄
replace,(delete table) 刪除舊記錄,替換成新裝載的記錄
truncate,(truncate table)刪除舊記錄,替換成新裝載的記錄

10條數據由條件skip=3去除三條,因此上面命令運行結果是logicrecord count 7,查看file文件夾下的log日記(log是不斷疊加的,badfile是重新覆蓋的)

從日志可以看出7條數據中,4條記錄無法沒導入的原因。

查看cux_sqlldr_test.bad,其中記錄4條錯誤的數據。

(2) 在控制文件中不包涵數據.

上傳cux_sqlldr_test.txt,cux_sqlldr_test.ctl至服務器,cux_sqlldr_test.txt由上面PLSQL腳本生成,cux_sqlldr_test.ctl如下

OPTIONS (skip=3,rows=128)

load data

CHARACTERSET ZHS16GBK

infile “/u02/ebsuat/app/fs2/EBSapps/appl/cux/12.0.0/sqlldr/file/cux_sqlldr_test.txt”

badfile “/u02/ebsuat/app/fs2/EBSapps/appl/cux/12.0.0/sqlldr/bad/cux_sqlldr_test.bad”

discardfile “/u02/ebsuat/app/fs2/EBSapps/appl/cux/12.0.0/sqlldr/bad/cux_sqlldr_test.disc”

TRUNCATE into table cux_sqlldr_test

WHEN column1 != “column1_4”

Fields terminated by “,”

Optionally enclosed by ‘”‘

TRAILING NULLCOLS

(

line_num RECNUM ,

seq_num “cux_sqlldr_test_s.nextval” ,

column1 ,

column2 “nvl(:column2,’***’)”,

column3 NULLIF (column3=”column3_4″),

show_column “UPPER(:show_column)” ,

hide_column FILLER ,

creation_date DATE ‘YYYY-MM-DD’ “CASE WHEN :creation_date is null THEN TO_CHAR(sysdate,’YYYY-MM-DD’) ELSE :creation_date END”

)

運行命令

sqlldr userid=apps/appsjiahuicontrol=/u02/ebsuat/app/fs2/EBSapps/appl/cux/12.0.0/sqlldr/file/cux_sqlldr_test.ctl log=$CUX_TOP/sqlldr/file/cux_sqlldr_test.log

100條數據由于skip = 3 從第4條開始處理變成97條,第四條數據由于WHEN column1 != “column1_4”

被丟棄在bad的cux_sqlldr_test.disc路徑下,沒有錯誤數據。查看表共96條數據,如下圖所示:

column2 “nvl(:column2,’***’)”, 對于 column2默認為 “***” .

其他

此外,sqlload可以實現同時加載多個文件,同時把數據加載到多個表。

參考網址:

http://www.cnblogs.com/jyzhao/p/4819884.html

http://m635674608.iteye.com/blog/1895316

http://blog.csdn.net/zq9017197/article/details/7352627

總結

以上是生活随笔為你收集整理的SQLldr_乔羽简介的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。