我现在有一个批处理过程,它可能需要一个小时才能运行。它不是数据库密集型的,它只是有很多事情要做,比如web调用。
我有一个围绕整个事件的事务,所以如果有任何错误,我将回滚。
是否可以使此事务只阻止写入数据库的请求,而不是只读请求?若否,原因为何?这仅仅是数据库的自然限制吗?
我在.net 4.0中使用TransactionScope
来完成这项任务。
发布于 2011-06-21 14:55:04
不要这样做。加载到临时表中。操作完成后,将其批量传输到实际的表中。
发布于 2011-06-21 14:58:15
一般来说,这样的事情根本不会成功;默认情况下,大多数资源管理器都不会让事务持续那么长时间,如果它们这样做了(如果涉及多个资源管理器),那么根据正在更新/修改的数据量,提交事务的行为可能需要很长时间。
如果您只是希望在处理过程中阻止数据库访问,最好在数据库中设置一个标志,然后在设置了标志的情况下使应用程序中的其他函数失败。
应用程序的作用域可能会影响标志的存储位置;如果只有一个实例在运行,则可以将标志存储在内存中,但如果有多个实例,则可能每次都必须检查数据库。
https://stackoverflow.com/questions/6425129
复制相似问题