關於SQL2000到oracle連結資料庫執行失敗的原因

來源:互聯網
上載者:User

在公司有一個項目,使用SQL2000作為中轉站,從來源資料庫伺服器(SQL2000) 更新資料到 目標資料庫伺服器(oracle 10g),使用連結資料庫,通過預存程序實現。使用作業定時執行預存程序,在運行了N久之後,突然發現一個作業無法正常執行,另一個則正常運行。很莫名。。。。

錯誤現象:執行時有時好,有時出錯,一般運行數次後就會出錯

錯誤提示多為:

執行使用者: sa。OLE DB 提供者 'SQLOLEDB' 報錯。提供者已用盡記憶體。 [SQLSTATE 42000](錯誤 7399)  OLE DB 錯誤跟蹤[OLE/DB Provider 'SQLOLEDB' IRowset::GetNextRows returned 0x8007000e:  提供者已用盡記憶體。]。 [SQLSTATE 01000](錯誤 7300).  步驟失敗。

執行使用者: sa。OLE DB 提供者 'MSDAORA' 報錯。 [SQLSTATE 42000](錯誤 7399)   [SQLSTATE 01000](錯誤 7312)  OLE DB 錯誤跟蹤[OLE/DB Provider 'MSDAORA' IDBInitialize::Initialize returned 0x80004005:   ]。 [SQLSTATE 01000](錯誤 7300).  步驟失敗。

在網上查詢了N久,只見問問題的,也偶爾見答問題的,但也許使用該方法的實屬少數,沒有一個立竿見影的解決方案。

因為找不到相關文檔,在嘗試了N久,N種方法來測試之後,都一一失敗

其中包括,修改註冊表使用不同的dll,修改查詢語句最佳化資料查詢,建VIEW,增加表主鍵等偏門的方法,均無效。

最後,在觀察預存程序運行過程,及比較兩個作業實現上的區別,

其中正常啟動並執行作業因為需要插入資料時做比較更新,使用暫存資料表,結合觸發器實現。

而另一個作業由於比較簡單,使用直接表資料插入。

然而,正是由於它的簡單,導致了莫名錯誤的出現。

目標表資料量巨大是罪魁禍首,使用批量查詢語句是否為幫凶,沒有經過測試,但即使插入空資料,使用批量插入語句也會使SQL載入海量資料,不知道原因。

解決方案:在oracle中使用暫存資料表,通過觸發器轉存資料,而後清空暫存資料表,沒有出現SQL伺服器載入海量資料,大量消耗記憶體的情況。

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.