Whi*_*and 46 sql stored-procedures server-error sql-server-2008-r2
我已经在这一天工作了大约一天半,并在网上搜索了大量的博客和帮助文章.我发现了几个与此错误有关的SO问题,但我认为它们并不适用于我的情况(或者在某些情况下,遗憾的是,我无法理解它们的实现:P).我不确定我能够很好地描述这一点以获得帮助......但是这里有:
我们有一个.NET应用程序来跟踪我们的资源.有一个导出功能可以将资源复制到时间跟踪系统和计费系统; 这将访问链接到时间和计费数据库的存储过程.
我最近将计费系统数据库移动到新服务器(原始服务器:Server 2003 SP2,SQL 2005;新服务器:Server 2008 R2,SQL 2008 R2).我有一个指向2008数据库的链接服务器设置.我更新了存储过程以指向2008服务器,然后我收到有关MSDTC和RPC的错误(http://www.safnet.com/writing/tech/archives/2007/06/server_myserver.html).我在链接服务器上启用了"rpc/rpc out"并将MSDTC设置为允许网络访问(类似于:http://www.sqlwebpedia.com/content/msdtc-troubleshooting).
现在,当我尝试运行导出功能时,我得到了上述内容:"此SqlTransaction已完成;它已不再可用." 对我来说似乎很奇怪的是,当我刚刚运行存储过程(来自SSMS)时,它表示它已成功完成.
谁看过这个吗?我在配置中遗漏了什么吗?我继续浏览相同的页面,我发现的唯一一件事是我在进行MSDTC更改后没有重新启动(在此处提到:http://social.msdn.microsoft.com/forums/en-US/adodotnetdataproviders/thread/7172223f-acbe-4472-8cdf-feec80fd2e64 /).
我可以发布部分或全部存储过程,如果它有帮助...请告诉我.
Phi*_*ler 42
我相信这个错误消息是由于"僵尸交易".
查找transacton被提交两次的可能区域(或回滚两次,或回滚并提交等).SP已经提交后,.Net代码是否提交了事务?.Net代码是否在遇到错误时回滚它,然后尝试在catch(或finally)子句中再次回滚它?
可能在旧服务器上从未遇到错误情况,因此错误的"双回滚"代码从未被命中.也许现在你遇到这样的情况出现是在新服务器上的一些配置错误,现在的错误代码是越来越通过异常处理命中.
你可以调试错误代码吗?你有堆栈跟踪吗?
Dan*_*Boy 10
遇到了完全相同的问题,只是找不到正确的解决方案。希望这对某人有帮助。
我有一个带有 EF Core 的 .NET Core 3.1 WebApi。同时收到多个调用后,应用程序会尝试同时添加更改并将更改保存到数据库中。
就我而言,问题是保存数据的表没有主键集。
不知何故,当从应用程序运行迁移时,EF Core 错过了模型中的 ID 应该是主键的情况。
我通过打开 SQL Profiler 并看到所有事务都已成功提交到数据库(从应用程序),但只创建了一个新行,发现了问题。探查器还显示发生了某种类型的死锁,但我在探查器的跟踪日志中看不到更多信息。经过进一步检查,我注意到“Id”列中缺少主键标识符。
我从我的申请中得到的例外是:
此SqlTransaction已完成;它不再可用。
和/或
出现了异常,可能是由于暂时性故障造成的。考虑通过将“EnableRetryOnFailure()”添加到“UseSqlServer”调用来启用瞬态错误恢复能力。
最近我在一个新的连接管理器中进行了重构后得到了这个.新例程接受了一个事务,因此它可以作为批处理的一部分运行,问题在于使用块:
public IEnumerable<T> Query<T>(IDbTransaction transaction, string command, dynamic param = null)
{
using (transaction.Connection)
{
using (transaction)
{
return transaction.Connection.Query<T>(command, new DynamicParameters(param), transaction, commandType: CommandType.StoredProcedure);
}
}
}
Run Code Online (Sandbox Code Playgroud)
看起来外部使用正在关闭底层连接,因此任何提交或回滚事务的尝试都会抛出消息 "This SqlTransaction has completed; it is no longer usable."
我删除了使用添加了覆盖测试,问题消失了.
public IEnumerable<T> Query<T>(IDbTransaction transaction, string command, dynamic param = null)
{
return transaction.Connection.Query<T>(command, new DynamicParameters(param), transaction, commandType: CommandType.StoredProcedure);
}
Run Code Online (Sandbox Code Playgroud)
在事务上下文中检查可能正在关闭连接的任何内容.
我最近遇到了类似的情况。要在任何 VS IDE 版本中进行调试,请从 Debug (Ctrl + D, E) 打开异常 - 选中“Thrown”列中的所有复选框,并在调试模式下运行应用程序。我意识到其中一个表没有正确导入到新数据库中,因此内部 Sql Exception 正在终止连接,从而导致此错误。
故事的要点是,如果以前的工作代码在新数据库上返回此错误,则可能是数据库模式丢失问题,通过上述调试提示实现,
希望有帮助,HydTechie
还要检查从 .NET 应用程序针对数据库执行的任何长时间运行的进程。例如,您可能正在调用一个没有足够时间完成的存储过程或查询,这可能会在日志中显示为:
执行超时已过期。操作完成之前超时时间已过,或者服务器未响应。
检查命令超时设置尝试运行跟踪(分析器)并查看数据库端发生了什么...
归档时间: |
|
查看次数: |
111457 次 |
最近记录: |