# OracleLock **Repository Path**: lixl/OracleLock ## Basic Information - **Project Name**: OracleLock - **Description**: 基于oracle的数据库锁机制研究 - **Primary Language**: Java - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2019-03-25 - **Last Updated**: 2020-12-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ### 多用户访问数据库会遇到的问题 ``` 脏读 不可重复读 幻读 ``` 数据隔离级别(多个线程操作数据库,隔离各个线程操作,保证操作结果的准确性) ``` Serializable (串行化):可避免脏读、不可重复读、幻读的发生。 Repeatable read (可重复读):可避免脏读、不可重复读的发生。 Read committed (读已提交):可避免脏读的发生。 Read uncommitted (读未提交):最低级别,任何情况都无法保证。 ``` 数据库锁 https://www.cnblogs.com/zhoading/p/8547320.html ``` 排他锁(exclusive lock,即X锁) 共享锁(share lock,即S锁) ``` ### 查看数据库会话 ``` SELECT * FROM v$session WHERE USERNAME='P2M_DATACENTER_20190319'; ``` ### 查看会话的隔离级别 ``` SELECT s.sid, s.serial#, CASE BITAND(t.flag, POWER(2, 28)) WHEN 0 THEN 'READ COMMITTED' ELSE 'SERIALIZABLE' END AS isolation_level FROM v$transaction t JOIN v$session s ON t.addr = s.taddr AND s.sid = sys_context('USERENV', 'SID'); ``` ### JDBC中设置与查看隔离级别 ``` connection.setTransactionIsolation(Connection.TRANSACTION_READ_COMMITTED); connection.getTransactionIsolation() ``` (参考)[https://blog.csdn.net/zdp072/article/details/51100593]