2012-03-20 76 views
0

在我的项目中,我正在使用begin transaction commit或rollback changes。但这会导致锁定到该特定功能的表中。交易锁的替代

因此,如果任何其他用户执行任何其他功能,那些锁定表将不可用,直到事务完成。

我想知道是否有任何替代交易,确保数据安全但表未被锁定。

+0

这可能是一个dba问题。 – JeffO 2012-03-20 16:13:06

回答

2

不,交易是确保数据库中数据一致性的方法。但是,他们通常不应该导致整个表被“锁定”给其他用户。在Oracle中,默认情况下,锁定仅放置在正在更新的行上。

+0

SQL Server确实锁定表,或者至少有。不知道他们最近是否改进了。我不确定OP要求什么,因为这个问题被标注为Oracle和SS-2005。 – DCookie 2012-03-20 15:46:18

+1

我知道SQL Server可以“升级”到table-lvel锁,但想必这不是常态,或者没有不平凡的数据库会工作吗?例如一个用户更新一个订单行,并且没有其他订单行可以以任何方式处理,直到他们的交易完成? – 2012-03-20 15:56:37

+0

我知道Tom Kyte在他的一本书中谈到了这一点,以及行级锁定如何经常导致页面锁定,这可以有效地阻止其他SQL,包括选择是否需要该页面。基于标签,OP的要求让我更加困惑。 – DCookie 2012-03-20 16:16:07