![]() |
1
3
由于此代码最初用于扩展存储过程,因此听起来像是非托管代码。非托管代码中的错误很容易使进程崩溃。 clr集成比扩展存储过程更加健壮,但代码仍在进程内运行,因此错误可能会导致SQL Server停机或损坏。(相比之下,理论上,安全的clr例程将无法损坏SQL Server,尽管它可能会导致问题,从而在不完全关闭SQL Server的情况下降低服务器的可用性。) 基本上,在这种情况下,避免SQL Server崩溃的唯一方法是:
|
![]() |
2
1
一般来说是的。我的意思是,如果你正在炮击一个操作系统进程,那么你正在炮击一个操作系统进程。我不知道如何使用扩展存储过程API来实现这一点必然比使用sqlcrl API更安全,尤其是当可能崩溃的事情是一个操作系统进程(位于数据库外部)时。 当然,我不确定xp api,因为我没有使用它,但我知道以下几点:
当然,当程序集设置为
但是上面所说的,如果您调用的是外部exe,它有自己的appdomain。 所以,你可以做的是:
当然, 那个 大家都说,这到底有多重要?这意味着,一个进程完全崩溃并用它来删除所有内容的可能性有多大?当然,这并非不可能,但通常崩溃只会破坏AppDomain,而不会破坏CLR主机本身。我认为人们遇到的问题更可能是代码没有崩溃,但是写得不好,占用了太多内存和/或CPU。 |