2012-01-03 42 views
0

我做了一個SQL查詢來更新表中的寄存器。該表擁有約1500萬個寄存器。更新語句是這樣的:SQL更新查詢未完成

UPDATE temp_conafe 
    set apoyo = trim(apoyo) 
    where cve_status like '%APOYO%'; 

我一直在檢查現場V $ transaction.used_ured,看看如果查詢是滾滾向前或向後但是當記錄數達到超過1500萬的查詢開始向後滾動。

  • 如何成功完成更新?

我不是DBA,只是程序員,但我不能繼續發展,直到那東西更新我的寄存器。

+3

什麼問題? – JNK 2012-01-03 20:16:49

+1

這聽起來像您可能會用完日誌空間來執行更改。考慮分塊更新,以便使用除cve_status之外的其他字段運行10個更小的更新。還要考慮你是否真的需要修剪數據;你能否安排去掉客戶端代碼中的尾隨空白?如果數據類型是CHAR(而不是VARCHAR2),那麼TRIM是毫無意義的;無論如何,這些數據都將以尾隨空格存儲。 – 2012-01-03 20:19:58

+0

@JonathanLeffler謝謝你的建議,我會檢查所有。我也在想空間,但想確定一下。 – BRabbit27 2012-01-03 20:57:22

回答

2

它看起來好像你的交易很大。嘗試在其中添加另一個限制條款。如果你有一個Id字段,你可以添加如下內容:

where cve_status like '%APOYO%' 
AND id > 1 AND id < 100000 

你需要多次運行它,相應地改變範圍。如果這不是一個選項,你必須與你的DBA交談,並要求他給你更多的資源。

+0

謝謝,我會盡量縮短我的交易時間,並與我的DBA交流,因爲我們一直在用這些大數據進行數據分析。 – BRabbit27 2012-01-03 20:58:16