SQLServer輔導(dǎo):SQLLDR的使用方法

字號:

用于將格式化的文本數(shù)據(jù)上載到表中去
    以表emp為例
    首先編寫一個控制命令的腳本文件,通常以ctl結(jié)尾,內(nèi)容如下:
    emp.ctl
    load data
    append
    into table emp
    fields terminated by ''
    (
    no float external,
    name char(20),
    age integer external,
    duty char(1),
    salary float external,
    upd_ts date(14) 'YYYYMMDDHH24MISS'
    )
    括號里對數(shù)據(jù)文件里每個數(shù)據(jù)域進行解釋,以此在上載時與目標(biāo)表進行比對。
    除了append外,還有insert、replace、truncate等方式,與append大同小異,不作更多的解釋。
    再將上載數(shù)據(jù)組織成數(shù)據(jù)文件,通常以dat結(jié)尾,內(nèi)容如下:
    emp.dat
    100000000001Tom000020100000000500020020101000000
    100000000002Jerry000025200000000800020020101235959
    分隔符要與ctl文件中fields terminated by指定的一致,這個例子中為""
    ctl和dat文件就緒后可以執(zhí)行上載,命令為:
    sqlldr dbuser/oracle control=emp.ctl data=emp.dat
    也可以將dat文件合并在ctl文件中,ctl文件改寫為:
    emp2.ctl
    load data
    infile *
    append
    into table emp
    fields terminated by ''
    (
    no float external,
    name char(20),
    age integer external,
    duty char(1),
    salary float external,
    upd_ts date(14) 'YYYYMMDDHH24MISS'
    )
    begindata
    100000000003Mulder000020100000000500020020101000000
    100000000004Scully000025200000000800020020101235959
    控制文件中infile選項跟sqlldr命令行中data選項含義相同,如使用infile  *則表明數(shù)據(jù)在本控制文件以begin  data開頭的區(qū)域內(nèi)。
    這樣命令變成:
    sqlldr dbuser/oracle control=emp2.ctl
    conventional path
    通過常規(guī)通道方式上載。
    rows:每次提交的記錄數(shù)
    bindsize:每次提交記錄的緩沖區(qū)
    readsize:與bindsize成對使用,其中較小者會自動調(diào)整到較大者
    sqlldr先計算單條記錄長度,乘以rows,如小于bindsize,不會試圖擴張rows以填充bindsize;如超出,則以bindsize為準(zhǔn)。
    命令為:
    sqlldr dbuser/oracle control=emp.ctl log=emp.log rows=10000 bindsize=8192000
    direct path
    通過直通方式上載,不進行SQL解析。
    命令為:
    sqlldr dbuser/oracle control=emp.ctl log=emp.log direct=true
    例如:
    sqlldr userid=%s control=%s log=%s readsize=6553600 bindsize=6553600 rows=5000 silent=header,feedback direct = true