job任务执行几天后,
sqlserver打开链路服务器失效:
错误 7399: OLE DB 提供程序 MSDAORA' 报错。
OLE DB 错误跟踪 [OLE/DB Provider 'MSDAORA' IDBInitialire::Initialize returned 0x80004005: ]。
如下图:20150310/1.png
执行作业报错如下:
错误 22022: 无法将提示发布到 SQLServerAgent (原因: MapViewOfFine() 返回错误 8, 存储空间不足,无法处理此命令)
每次job执行都会打开链路服务器,链路服务器是sqlerver2000连接oracle库,来跨服务器做一些数据操作。
我再想是不是每次打开链路服务器都会需要开销内存啊,次数多了,就把资源占用完了,下次打开就报错了,那怎么样才能做到打开链路服务器做完数据操作后,关闭链路服务器啊,释放所使用的内存资源啊。
大概环境:job里面有去链路服务器执行数据操作的sql。然后设定job的运行时间,每一天运行一次job。
问题来了,如何做到每次执行完job也就是job里面执行完链路服务器的操作后,释放打开链路服务器所占据的资源啊?
job里面有大概一下通过链路服务器的操作
DELETE FROM openquery(PL_CHR,'SELECT * FROM POWERDESK.ZZZ_TEST')
WHERE ID=2;
UPDATE openquery(PL_CHR,'SELECT * FROM POWERDESK.ZZZ_TEST') SET NAME='A2' WHERE ID=1;
------解决思路----------------------
脚本最后调用 sp_dropserver
------解决思路----------------------
你前面怎么调用 sp_addlinkedserver 的?这个参数更简单啊。
------解决思路----------------------
如果你要强制删除链接服务器,那么脚本中添加和删除语句都得加上去。
可以看下帮助,都是很简单的参数。
------解决思路----------------------
链接服务器会不会与你服务有关,你有些程序阻止代理服务器运行了,或者你的代理服务器闭关了
------解决思路----------------------
和这个文章是类似的错误,差别就是用的驱动不一样。你照样改下注册表试试。
Server: Msg 7399, Level 16, State 1, Line 1
OLE DB provider 'OraOLEDB.Oracle' reported an error. The provider did not give any information about the error.
OLE DB error trace [OLE/DB Provider 'OraOLEDB.Oracle' IDBInitialize::Initialize returned 0x80004005: The provider did not give any information about the e
This error is related to the OLEDB process running by default in "out-of-process" mode which doesn't work with Oracle OLEDB driver. By setting a key in the registry under SQL Server this can be changed to run in-process (the default) the provider will work:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSSQLServer\Providers\ORAOLEDB.ORACLE
Change the value of the key "AllowInProcess" under the "OraOLEDB.Oracle" folder
to a hexadeciaml value of 1.