[zt] MSSQL通過link導資料至oracle出錯:Server: Msg 7399, Level 16

tolywang發表於2009-07-05

在SQLServer中建了一個Link(name=XXLink)把相應資料匯入倒Oracle資料庫中,具體INSERT語句如下:
INSERT INTO openquery(XXLink,'SELECT col1,col2,col3 FROM TableInOracle')
SELECT col1,col2,col3 FROM TableInSQLServer
WHERE .......

以前一直可以的正常執行的,從近來某一天開始,就不能搞定,報如下錯誤
Server: Msg 7399, Level 16, State 1, Line 1
OLE DB provider 'MSDAORA' reported an error. The provider ran out of memory.
[OLE/DB provider returned message: Out of memory.]
OLE DB error trace [OLE/DB Provider 'MSDAORA' IRowsetChange::InsertRow returned 0x8007000e:  The provider ran out of memory.].

開始就重啟SQLServer或重啟伺服器之後都有可能保證正常執行,但是無法根本解決

處理辦法:新增啟動引數 -g  (例如使用-g384)
聯機幫助對-g引數的解釋:
以兆位元組為單位指定虛擬地址空間大小,SQL Server 將為 SQL Server 程式內的記憶體分配保留這一部分地址空間,但將其置於 SQL Server 記憶體池之外。這一區域由 SQL Server 用來裝載諸如擴充套件過程 .dll 檔案、分散式查詢所引用的 OLE DB 提供程式、Transact-SQL 語句中所引用的自動化物件等專案。預設值是 256 MB。

使用該選項有助於調節記憶體分配,但僅當 SQL Server 2000 個人版或 SQL Server 2000 標準版的實體記憶體大於 2 GB 或 SQL Server 2000 企業版的實體記憶體大於 3 GB 時才適用。

對於實體記憶體少於上述值的配置,即使使用該選項也不會有什麼幫助。如果 SQL Server 的記憶體使用要求反常,並且 SQL Server 程式的虛擬地址空間全都在使用,那麼在這樣的大記憶體配置中適合使用該選項。不正確地使用該選項可能導致 SQL Server 例項無法啟動或遇到執行時錯誤。

除非在 SQL Server 錯誤日誌中看到下面的警告資訊,否則應使用 –g 引數的預設值:

警告:Clearing procedure cache to free contiguous memory

此資訊表明 SQL Server 正試圖釋放 SQL Server 記憶體池的部分空間,以便為擴充套件儲存過程 .dll 檔案或自動化物件等專案尋找空間。在這種情況下,可以考慮增加由 -g 開關保留的記憶體量。使用低於預設值的值可以增加緩衝池和執行緒棧中的可用記憶體量;在不使用很多擴充套件儲存過程、分散式查詢或自動化物件的系統中,這種方法可為需要大量記憶體的工作負荷帶來效能方面的好處。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/35489/viewspace-608334/,如需轉載,請註明出處,否則將追究法律責任。

相關文章