当SQL Agent在SQL Server 2005中运行以下每日脚本作为作业的一部分时,它似乎不会执行最后一行set fso = nothing
,并且永远不会从内存中删除对象,导致作业在一个月后失败或如此。
SQL Agent是否有理由不执行最后一行代码?
dim fso
set fso = CreateObject("Scripting.FileSystemObject")
If fso.FileExists("E:\Foo.mdb") Then
fso.DeleteFile "E:\Foo.mdb", True
End If
fso.CopyFile "E:\Foo.temp.mdb", "E:\Foo.mdb", True
set fso = nothing
答案 0 :(得分:1)
首先,您应该每月应用补丁,因此每月重启一次。
人们自豪地测量多年的正常运行时间的日子已经消失,因为不幸的是非常必要的补丁周期。如果您真的需要24/7/365访问(提示:不太可能),您需要具有群集或复制的高可用性设置。
其次,我不认为您的诊断是正确的。无论您是否明确释放VBScript引擎对象,都会释放所有 对象。所以你认为FSO是在记忆中吗?你是怎么证实的?
原则上,您可以使用sysinternals Process Explorer检查SQL Server代理进程是否卸载了关联的DLL,这通常会在最后一个对象被销毁的几分钟内发生。