0

我通常会看到对用户持有的锁的引用。这是否意味着单个连接,所有通过用户帐户登录的连接等等......?

这通常如何适用于 Oracle 和 DB?

如果它适用于多个连接,人们在修改数据时不会看到数据吗?

这如何适用于 JDBC?

You can see any changes you have made during the transaction by querying the modified tables, but other users cannot see the changes. After you commit the transaction, the changes are visible to other users' statements that execute after the commit.

http://docs.oracle.com/cd/B19306_01/server.102/b14200/statements_4010.htm

4

1 回答 1

3

这意味着特定的用户会话。如果您查看该DBA_LOCKS表,您将看到一session_id列,它与v$session单个用户会话(即连接)相关并代表一个用户 ID,而不是所有会话。文档中解释了锁定机制。你是对的,如果不是这种情况,那么用户的其他会话/连接将看到未提交的更改,这是永远不允许的(无论如何,在 Oracle 中,但据我所知,适用于所有 RDBMS)。

对于 JDBC,同样适用,每个锁由单个连接持有。如果您的连接池具有针对同一用户帐户的多个打开的连接,则使用池中的一个连接所做的更改在提交之前对其他连接不可见。因此,如果您正在执行多个语句作为逻辑事务的一部分(在这种情况下,希望您没有启用自动提交),您需要继续为所有语句重用相同的连接,而不是从每次池,因为这可能会或可能不会与挂起的更改相同。

于 2013-04-23T04:48:41.823 回答