Linux環境SQLLDR匯入出現SQLLOADER-553、509錯誤
在Linux環境下SQLLOADER匯入LOB資料,碰到了這個錯誤。
奇怪的是,整個測試在Windows環境下測試沒有問題,包括控制檔案和資料檔案,都是直接複製到Linux環境中,唯一的修改是針對Windows和Linux路徑的區別,對資料檔案中的路徑進行了修改。
控制檔案如下:
[oracle@dbserver1 sqlldr]$ more
sqlldr_1M.ctl
LOAD DATA
INFILE 'filename.dat'
INTO TABLE T_LOAD_1M
TRUNCATE
FIELDS TERMINATED BY ','
(ID CHAR(255),
FULL_NAME CHAR(255),
CREATE_DATE SYSDATE,
CONTENTS LOBFILE(FULL_NAME) TERMINATED BY EOF)
而資料檔案filename.dat的格式如下:
[oracle@dbserver1 sqlldr]$ more
filename.dat
1,/home/oracle/2M/IMG_5015.JPG
2,/home/oracle/2M/IMG_5016.JPG
3,/home/oracle/2M/IMG_5017.JPG
4,/home/oracle/2M/IMG_5018.JPG
5,/home/oracle/2M/IMG_5022.JPG
6,/home/oracle/2M/IMG_5023.JPG
7,/home/oracle/2M/IMG_5025.JPG
8,/home/oracle/2M/IMG_5026.JPG
9,/home/oracle/2M/IMG_5027.JPG
10,/home/oracle/2M/IMG_5028.JPG
11,/home/oracle/2M/IMG_5029.JPG
12,/home/oracle/2M/IMG_5030.JPG
13,/home/oracle/2M/IMG_5031.JPG
.
.
.
661,/home/oracle/2M/DSC00140.JPG
662,/home/oracle/2M/DSC00141.JPG
663,/home/oracle/2M/DSC00142.JPG
664,/home/oracle/2M/DSC00143.JPG
匯入命令很簡單,除了制定使用者名稱、密碼外,唯一的引數就是控制檔名。結果匯出碰到下面的錯誤。
[oracle@dbserver1 sqlldr]$ sqlldr enmotest/password control=sqlldr_1M.ctl
SQL*Loader: Release 11.2.0.2.0 - Production on Fri Aug 5 15:19:20 2011
Copyright (c) 1982, 2009, Oracle and/or its affiliates. All rights reserved.
' for field CONTENTS table
T_LOAD_1Mfile 'IMG_9651.txt
SQL*Loader-553: file not found
SQL*Loader-509: System error: No such file or directory
Commit point reached - logical record count 1
錯誤指出檔案不存在,而第一行的資訊比較奇怪,要說沒有意義,裡面還是包含了有價值的資訊的,要說有意義,整個語句沒有開頭也沒有結尾,而且通順不起來。
由於在Windows環境下測試過,懷疑是Linux環境的bug,檢查metalink,找到一個Bug 11777231的描述,雖然和我的問題並不一樣,但是這個錯誤的錯誤資訊幫我找到了方向:
SQL*Loader-502: unable to open data
file 'ADFFNTEIICDEV3ADAOAT1.DAT' for
field NOTE_DETAILS_BODY table DLO_STAGE.ADFFNTE
SQL*Loader-553: file not found
SQL*Loader-509: System error: The system cannot find the file specified.
對比這個錯誤資訊和前面的得到的錯誤資訊,可以確定第一行模糊不清的錯誤肯定是SQL*LOADER-502錯誤,而導致錯誤資訊不全的原因是由於Linux上的回車沒有換行,導致新一行的資料從本行開頭覆蓋了第一行的資訊。
根據行中出現換行的位置,以及找不到檔案的錯誤資訊,很容易判斷,問題出在資料檔案中。而導致檔案的原因也就明確了,雖然filename.dat是一個文字檔案,但是由於這個dat字尾,在ftp的時候被工具當做了二進位制檔案,因此沒有做轉化,而Windows上只有一個回車是正常的,但是Linux上只有回車沒有換行就會導致這樣的問題。
最簡單的辦法就是修改資料檔案的字尾,然後利用ftp的ASCII碼方式或sftp直接複製。隨後sqlldr匯入就沒有任何問題了。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/4227/viewspace-704654/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 【匯入匯出】sqlldr 匯入案例SQL
- 【ORACLE 匯入匯出】exp 錯誤Oracle
- rac環境下使用impdp匯入資料出錯
- sqlldr 匯入中文出現亂碼解決方法SQL
- sqlldr批量匯入匯出資料測試SQL
- sqlldr批次匯入匯出資料測試SQL
- oracle sqlldr匯入OracleSQL
- Oracle使用sqlldr load匯入txt出現中文亂碼OracleSQL
- 【匯入匯出】sqlldr 匯入含有內嵌換行符的資料SQL
- 資料匯入SQLLDRSQL
- Linux環境下sqlldr一個csv檔案LinuxSQL
- 【SQL*Loader】sqlldr匯入SQL
- sqlldr匯入日期函式SQL函式
- PPT匯入3D模型匯入出現錯誤或者模型紋理消失的解決方法3D模型
- 資料泵匯入時出現ORA-600(klaprs_11)錯誤
- Oracle 的資料匯入匯出及 Sql Loader (sqlldr) 的用法OracleSQL
- python安裝更新包出現環境變數訪問錯誤Python變數
- node.js安裝後出現環境變數錯誤找不到nodeNode.js變數
- sqlldr匯入資料包錯 Field in data file exceeds maximum lengthSQL
- sqlldr 匯入資料範例SQL
- STS(SQL Tuning Set)匯入匯出過程及錯誤處理SQL
- 關於 Oracle 的資料匯入匯出及 Sql Loader (sqlldr) 的用法OracleSQL
- sqlldr匯入資料中文亂碼SQL
- 通過SQLLDR匯入LOB資料SQL
- 使用sqlldr匯入文字資料到oracleSQLOracle
- 生產環境sqlldr載入效能問題及分析之一SQL
- 生產環境sqlldr載入效能問題及分析之二SQL
- 轉:Linux輸入輸出錯誤重定向Linux
- Linux環境下段錯誤的產生原因及除錯方法小結Linux除錯
- java配置環境變數的錯誤Java變數
- 資料泵轉換模式匯入時出現0ra31655錯誤模式
- expdp/impdp來解決exp/imp出現的錯誤並匯入指定表空間
- 當我匯入xpdl檔案時出現這樣的錯誤,該如何解決?
- GetDlgItem() 出現錯誤Git
- 匯入sql時報日期型別錯誤SQL型別
- Excel匯入null錯誤解決方式ExcelNull
- centos環境下如何匯出資料庫CentOS資料庫
- EVE-NG的環境匯入QEMU元件元件