MSSQL通過link導數據至oracle出錯:Server: Msg 7399, Level 16, State 1, Line 1
2024-08-29 13:44:42
供稿:網友
原貼地址:http://community.csdn.net/EXPert/topic/3798/3798231.xml?temp=.9782984
在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 開關保留的內存量。使用低于默認值的值可以增加緩沖池和線程棧中的可用內存量;在不使用很多擴展存儲過程、分布式查詢或自動化對象的系統中,這種方法可為需要大量內存的工作負荷帶來性能方面的好處。