2012-08-16 31 views
0

美好的一天。插入表格的有效方式<oracle 10g>

我們需要將大約800000條記錄插入到一​​個自定義表格中,該表格現在用一個簡單的插入語句花費約30+分鐘。我們將從文件中讀取記錄並使用簡單的插入語句創建一個.sql文件。我相信會有一種有效的方式來插入不同於正常方式的記錄。

我試過了下面。

  1. /附加/...。由於在每個插入語句之後進行提交,所花的時間比以前多。因此,這是排除
  2. 插入所有 到c_table(X,X,X)值('','','',)
    到c_table(X,X,X)值('','' ,'',) 進入c_table(X,X,X)值('','','',) 從雙選擇1;

對於計數爲1000的選項2是好的,但對於批量插入它再次需要超過30分鐘。 如果有其他選項,請分享。

注意:我不能使用sqloader或datapump,因爲我們沒有數據庫密碼。

問候, 普拉香特

+3

如果您沒有數據庫密碼,那麼SQL文件對您有什麼好處?您需要登錄到數據庫才能運行.sql文件。 800,000個單獨的SQL語句,其中沒有一個使用綁定變量會非常慢 - 大部分時間可能用於解析800,000個單獨的SQL語句。 SQL * Loader將會更加高效。一個簡單的Java/C#/ <<您最喜歡的語言>>應用程序創建一個帶有綁定變量的單個語句並遍歷80萬行將會更加高效。 – 2012-08-16 00:17:30

+0

@JustinCave:這被設置爲一個批處理作業進程,它將記錄插入到自定義表中。它將通過說「密碼將被加密的」X「用戶來執行。我相信要使用SQL * Loader我們需要傳遞用戶名/密碼。請建議。 – kanna 2012-08-16 00:29:27

+0

更多關於SQL * Loader [here](http://www.orafaq.com/wiki/SQL*Loader_FAQ) – Annjawn 2012-08-16 00:31:34

回答

2

不要創建從輸入數據的SQL文件。相反,請根據源文件創建一個External table並進行查詢 - 您應該能夠使用append選項運行整個插入,並且它應該比所有單獨的插入語句花費更少的時間。

+0

我無法使用外部表,因爲該文件僅在應用程序服務器中可用,並且數據目錄將在數據庫服務器中創建。請幫助我。我完全陷入這個問題。 – kanna 2012-08-21 03:27:49

+1

可以從應用服務器共享文件夾到數據庫服務器,例如,使用Samba共享。不過,不要問我怎麼樣,這就是我目前工作的方式。 – 2012-08-21 07:10:42