我现在有一个批处理过程,可能需要一个小时才能运行。这不是数据库密集型的,只是有很多事情需要做网络调用。
我有一个事务缠绕整个事情,所以如果出现任何问题,我会回滚。
是否可以进行此事务,以便它只阻止写入数据库而不是只读的请求?如果没有,为什么不呢?这仅仅是数据库的自然限制吗?
我在.net 4.0中,我正在使用TransactionScope
来执行此任务。
答案 0 :(得分:1)
不要这样做。加载到临时表。操作完成后,将其批量转移到实际表格。
答案 1 :(得分:0)
一般来说,这样的事情根本不会成功;默认情况下,大多数资源管理器不会让事务持续那么长时间,如果它们发生了(如果涉及多个资源管理器),那么根据正在更新/修改的数据量,提交事务的行为非常很长时间。
如果您只想在进程中阻止数据库访问,最好在数据库中设置一个标志,然后如果设置了标志,则应用程序中的其他功能将失败。
应用程序的范围可能会影响标志的存储位置;如果只运行一个实例,则可以将该标志存储在内存中,但如果有多个实例,则可能每次都要检查数据库。