2012-11-28 40 views
2

我試圖從Java方法運行SQL Loader,但我遇到了問題。從Java運行SQL Loader - 並非所有行都加載

我正在創建運行時進程來運行SQLLDR命令,但並未加載數據文件中的所有行。相反,無論數據文件中的總行數如何,它都會陷入相同數量的行(5184行)。

但是,當我複製完全相同的命令並直接從命令提示符運行它時,它工作正常並且所有行都正在加載。

任何想法可能是這個問題的原因是什麼?是否需要更改Java中的某種緩衝區大小?

謝謝!

// Run SQL Loader after creating the control file 
     Runtime rt = Runtime.getRuntime(); 
     String sqlLoaderPath = "C:\\app\\product\\11.1.0\\client_1\\BIN\\"; 
     String cmd = sqlLoaderPath + "SQLLDR.EXE userid=***************************" 
          + "data=c:\\sqlldr\\sqlldr_data.dat " 
          + "control=c:\\sqlldr\\sqlldr_control.ctl " 
          + "log=c:\\sqlldr\\sqlldr_log.log " 
          + "discard=c:\\sqlldr\\sqlldr_discard.disc " 
          + "bad=c:\\sqlldr\\sqlldr_bad.bad "; 
     Process proc = rt.exec(cmd); 
     int exitVal = proc.waitFor(); 
     proc.destroy(); 
+0

日誌文件說什麼? –

+0

你能展示你的代碼嗎? –

+0

好的我編輯帖子以包含代碼。 日誌文件爲空,因爲進程沒有終止,因此它不會向日志文件寫入任何內容。 – user1856152

回答

0

我知道現在回答這個問題的時間已經太晚了,但現在寫出來是因爲我面臨類似的問題。只需在sql-loader控制文件的選項子句中添加SILENT = FEEDBACK即可。 Sql-loader爲輸出流提供了有限的緩衝區大小,在讀取它時會失敗,這將導致子進程通過JAVA掛起,因此只需在其選項中使用SILENT停止sql-loader的輸出流即可。

相關問題