MSSQL通過link導(dǎo)數(shù)據(jù)至oracle出錯(cuò):Server: Msg 7399, Level 16
2024-08-29 13:29:19
供稿:網(wǎng)友
原貼地址:http://community.csdn.net/expert/topic/3798/3798231.xml?temp=.9782984
在sqlserver中建了一個(gè)link(name=xxlink)把相應(yīng)數(shù)據(jù)導(dǎo)入倒oracle數(shù)據(jù)庫中,具體insert語句如下:
insert into openquery(xxlink,'select col1,col2,col3 from tableinoracle')
select col1,col2,col3 from tableinsqlserver
where .......
以前一直可以的正常執(zhí)行的,從近來某一天開始,就不能搞定,報(bào)如下錯(cuò)誤
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或重啟服務(wù)器之后都有可能保證正常執(zhí)行,但是無法根本解決
處理辦法:添加啟動(dòng)參數(shù) -g (例如使用-g384)
聯(lián)機(jī)幫助對(duì)-g參數(shù)的解釋:
以兆字節(jié)為單位指定虛擬地址空間大小,sql server 將為 sql server 進(jìn)程內(nèi)的內(nèi)存分配保留這一部分地址空間,但將其置于 sql server 內(nèi)存池之外。這一區(qū)域由 sql server 用來裝載諸如擴(kuò)展過程 .dll 文件、分布式查詢所引用的 ole db 提供程序、transact-sql 語句中所引用的自動(dòng)化對(duì)象等項(xiàng)目。默認(rèn)值是 256 mb。
使用該選項(xiàng)有助于調(diào)節(jié)內(nèi)存分配,但僅當(dāng) sql server 2000 個(gè)人版或 sql server 2000 標(biāo)準(zhǔn)版的物理內(nèi)存大于 2 gb 或 sql server 2000 企業(yè)版的物理內(nèi)存大于 3 gb 時(shí)才適用。對(duì)于物理內(nèi)存少于上述值的配置,即使使用該選項(xiàng)也不會(huì)有什么幫助。如果 sql server 的內(nèi)存使用要求反常,并且 sql server 進(jìn)程的虛擬地址空間全都在使用,那么在這樣的大內(nèi)存配置中適合使用該選項(xiàng)。不正確地使用該選項(xiàng)可能導(dǎo)致 sql server 實(shí)例無法啟動(dòng)或遇到運(yùn)行時(shí)錯(cuò)誤。
除非在 sql server 錯(cuò)誤日志中看到下面的警告信息,否則應(yīng)使用 –g 參數(shù)的默認(rèn)值:
警告:clearing procedure cache to free contiguous memory
此信息表明 sql server 正試圖釋放 sql server 內(nèi)存池的部分空間,以便為擴(kuò)展存儲(chǔ)過程 .dll 文件或自動(dòng)化對(duì)象等項(xiàng)目尋找空間。在這種情況下,可以考慮增加由 -g 開關(guān)保留的內(nèi)存量。使用低于默認(rèn)值的值可以增加緩沖池和線程棧中的可用內(nèi)存量;在不使用很多擴(kuò)展存儲(chǔ)過程、分布式查詢或自動(dòng)化對(duì)象的系統(tǒng)中,這種方法可為需要大量?jī)?nèi)存的工作負(fù)荷帶來性能方面的好處。