SQLLDR利用EXPRESSION生成LOGFILE的檔名導致SEGMENTATION FAULT
嘗試利用SQLLDR匯入包含LOB的物件,當LOB檔案的路徑和名稱在資料檔案中分開儲存,利用單獨的欄位透過EXPRESSION的方式來獲得完整路徑,並透過這個欄位來載入LOB時,出現SEGMENTATION FAULT錯誤。
測試表結構如下:
SQL> DROP TABLE T_LOAD_LOB PURGE;
表已刪除。
SQL> CREATE TABLE T_LOAD_LOB
2 (ID NUMBER PRIMARY KEY,
3 NAME VARCHAR2(80),
4 DIRECTORY VARCHAR2(25),
5 FULL_NAME VARCHAR2(100),
6 CREATE_DATE DATE,
7 CONTENTS BLOB);
表已建立。
控制檔案如下:
LOAD DATA
INFILE *
INTO TABLE T_LOAD_LOB
FIELDS TERMINATED BY ','
(ID CHAR(255),
DIRECTORY CHAR(255),
NAME CHAR(255),
FULL_NAME EXPRESSION "DIRECTORY || '\\' || NAME",
CREATE_DATE SYSDATE,
CONTENTS LOBFILE(FULL_NAME) TERMINATED BY EOF)
BEGINDATA
1,d:\study\yangtk\others,2006年總結.doc
2,d:\study\yangtk\others,2007Oracle開發者大會(一).doc
3,d:\study\yangtk\others,2007Oracle開發者大會(二).doc
4,d:\study\yangtk\others,2007年總結.doc
.
.
.
74,d:\study\yangtk\others,問題診斷和PLSQL方面.doc
執行匯入過程:
D:\TEMP>SQLLDR TEST/TEST CONTROL=SQLLDR_LOB2.CTL
SQL*Loader: Release 10.2.0.5.0 - Production on 星期六 8月 6 22:40:44 2011
Copyright (c) 1982, 2007, Oracle. All rights reserved.
在windows環境下會彈出對話方塊,說明sqlldr.exe已停止工作。描述資訊為:出現了一個問題,導致程式停止正常工作。如果有可用的解決方案,Windows將關閉程式並通知您。
對應的LOG檔案為空,資料庫告警日誌檔案中也沒有任何記錄。
開始以為是Windows環境的問題,嘗試重啟資料庫,問題依舊。索性重啟了Windows環境,發現問題依然,開始懷疑問題並不是Windows下特有的。
嘗試了Windows下10.2.0.5和11.2.0.1環境的sqlldr,出現同樣的錯誤。
於是修改控制檔案,使之可以在Linux環境下執行:
[oracle@yans1 ~]$ vi sqlldr_lob.ctl
LOAD DATA
INFILE *
INTO TABLE T_LOAD_LOB
FIELDS TERMINATED BY ','
(ID CHAR(255),
DIRECTORY CHAR(255),
NAME CHAR(255),
FULL_NAME EXPRESSION ":DIRECTORY || '/' || :NAME",
CREATE_DATE SYSDATE,
CONTENTS LOBFILE(FULL_NAME) TERMINATED BY EOF)
BEGINDATA
1,/home/oracle,t_stat1.dp
2,/home/oracle,t_stat.dmp
3,/home/roacle,t_stat.dp
執行匯入時,出現了SEGMENTATION FAULT的錯誤:
[oracle@yans1 ~]$ sqlldr test/test control=sqlldr_lob.ctl
SQL*Loader: Release 10.2.0.3.0 - Production on 星期六 8月 6 20:18:07 2011
Copyright (c) 1982, 2005, Oracle. All rights reserved.
Segmentation fault
可以看到,這個錯誤在各個版本中普遍存在,如果去掉LOB的載入,則不會存在任何的錯誤,而如果FULL_NAME是透過資料檔案中讀取而不是這種EXPRESSION的方式,同樣可以成功載入。
Oracle的metalink上找不到類似的問題,懷疑SQLLDR不支援EXPRESSION作為LOGFILE讀取的引數,不過不管如何,出現SEGMENTATION FAULT都是不應該的。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/4227/viewspace-704336/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Segmentation fault (coredump)的解決Segmentation
- tacmd[203] no segmentation fault(coredump)ACMSegmentation
- 執行sqlplus遭遇Segmentation FaultSQLSegmentation
- sqplus 的 segmentation fault錯誤及解決!Segmentation
- mysql執行命令報segmentation fault 錯誤MySqlSegmentation
- ORACLE資料檔名導致的奇怪問題Oracle
- netca 啟動時報錯(Segmentation fault(coredump))Segmentation
- sqlplus中利用spool生成帶日期的檔名SQL
- 輸入表名後自動生成sqlldr控制檔案儲存過程SQL儲存過程
- 新搭建的mysql登陸報錯mysql Segmentation fault (core dumped)MySqlSegmentation
- Linux迭代呼叫共享動態庫導致segment faultLinux
- pytorch 程式碼出現 ‘segmentation fault (core dump)’ 問題PyTorchSegmentation
- 什麼是Segmentation fault(Core Dump)? + 我遇到的例項問題Segmentation
- alter database archivelog manual__導致oracle10g switch logfile不自動歸檔DatabaseHiveOracle
- TRUNCATE模式SQLLDR導致SECUREFILE的LOB空間不斷增長模式SQL
- sqlldr 匯入重複資料導致PK INDEX失效SQLIndex
- 當import matplotlib.pyplot as ply 出現Segmentation fault (core dumped)ImportSegmentation
- 從程式棧記憶體底層原理到Segmentation fault報錯記憶體Segmentation
- 10203 Rman執行delete obsolete報錯Segmentation faultdeleteSegmentation
- 【分散式Tensorflow(0.11.0)問題 未解決】Segmentation fault (core dumped)分散式Segmentation
- nmon 監控生成的檔案過大導致分析不了的解決方法 - split
- 【Oracle】安裝完oracle 9i,執行sqlplus 遇到Segmentation FaultOracleSQLSegmentation
- 安裝oracleRAC遇到的執行rootconfig: line 815: 10338 Segmentation faultOracleSegmentation
- window換行符導致Linux下sqlldr載入圖片失敗LinuxSQL
- 檔案上傳經由ZUUL轉發,導致的 檔名(OriginalFilename)亂碼問題Zuul
- 利用msfvenom生成木馬檔案
- 教你利用PHP生成PDF檔案PHP
- 效能:驗證數字簽名導致卡死
- 測試TOM=SQLLDR生成外部表SQL
- Dev 日誌 | 一次 Segmentation Fault 和 GCC Illegal Instruction 編譯問題排查devSegmentationGCStruct編譯
- sqlldr標準輸出未處理導致批處理掛起問題SQL
- Laravel 關聯模型由於名稱一致性導致的問題Laravel模型
- SQLLDR-CTL檔案SQL
- 兩個IO管腳佈局衝突導致Vivado不能生成bit檔案
- 利用SQLLDR載入包含LOB物件的資料(三)SQL物件
- 利用SQLLDR載入包含LOB物件的資料(二)SQL物件
- 利用SQLLDR載入包含LOB物件的資料(一)SQL物件
- sqlldr配合shell解決sqlldr 控制檔案中引入變數的方案SQL變數