返回

当Oracle驱动升级引发死锁时

见解分享

死锁概览

死锁是一个经典的计算机科学问题,它发生在两个或多个进程相互等待对方释放资源而导致系统陷入僵局。在数据库系统中,死锁通常是由并发事务对同一资源的竞争引起的。当一个事务等待另一个事务释放资源时,如果另一个事务也在等待第一个事务释放资源,那么就会发生死锁。

案例分析

最近,我在一个项目中遇到了一个死锁问题。该项目是从虚拟机环境迁移到容器环境的。在迁移后的两天内,该项目出现了两次死锁问题。

以下是部分关键日志:

2023-03-08 13:20:32.123 [DefaultMess] DEBUG o.s.s.c.DatabaseClientConfiguration - Driver joracle-22.5.0
2023-03-08 13:20:32.123 [DefaultMess] INFO  o.s.s.c.DatabaseClientConfiguration - Connection settings are JDBC_URL='jdbc:oracle:thin:@//192.168.1.101:1521/ORCLPDB1', USER='scott', PASSWORD=**** **
2023-03-08 13:20:32.123 [DefaultMess] DEBUG o.s.s.c.DatabaseClientConfiguration - Running SQL 'SELECT 1 FROM DUAL' to test JDBC connection.
2023-03-08 13:20:32.123 [DefaultMess] DEBUG o.s.s.c.DatabaseClientConfiguration - Connected to Oracle database at URL 'jdbc:oracle:thin:@//192.168.1.101:1521/ORCLPDB1'
2023-03-08 13:20:32.123 [DefaultMess] DEBUG o.s.s.c.s.AbstractConnectionProvider - Creating new connection.
2023-03-08 13:20:32.123 [DefaultMess] DEBUG o.s.j.d.DefaultDataSource - Driver supports JDBC 4.2
2023-03-08 13:20:32.123 [DefaultMess] DEBUG o.s.j.d.DefaultDataSource - Driver's JDBC major version is 4
2023-03-08 13:20:32.123 [DefaultMess] DEBUG o.s.s.c.DatabaseClientConfiguration - Detected Oracle driver version as '22.5.0'
2023-03-08 13:20:32.123 [DefaultMess] DEBUG o.s.s.c.s.AbstractConnectionProvider - Created new connection.
2023-03-08 13:20:32.123 [DefaultMess] DEBUG o.s.j.d.AbstractDataSource - Successfully detected Oracle driver version '22.5.0'
2023-03-08 13:20:32.123 [DefaultMess] DEBUG o.s.j.d.OracleDataSource - Using driver 'joracle-22.5.0' at 'jdbc:oracle:thin:@//192.168.1.101:1521/ORCLPDB1'
2023-03-08 13:20:32.123 [DefaultMess] INFO  o.s.j.d.OracleDataSource - OracleDataSource configured as follows: driverClassName='oracle.jdbc.driver.OracleDriver', URL='jdbc:oracle:thin:@//192.168.1.101:1521/ORCLPDB1', user='scott', password='**** **', connectionProperties={connectionTimeout=30000, idleTimeout=600000, maximumPoolSize=10, minimumIdle=1}
2023-03-08 13:20:32.123 [DefaultMess] DEBUG o.s.s.s.SynchronousSession - Created synchronous session for JDBC driver [oracle.jdbc.OracleDriver]
2023-03-08 13:20:32.123 [DefaultMess] DEBUG o.s.s.s.SynchronousSession - Returned JDBC connection [oracle.jdbc.driver.T4CConnection@5a6d2705] to pool.
2023-03-08 13:20:32.123 [DefaultMess] DEBUG o.s.s.s.SynchronousSession - Closed synchronous session for JDBC driver [oracle.jdbc.OracleDriver]
2023-03-08 13:20:32.123 [DefaultMess] INFO  o.s.j.d.OracleDataSource - Returning cached OracleDataSource [oracle.jdbc.OracleDataSource@18c6c8da]
2023-03-08 13:20:32.123 [DefaultMess] INFO  o.s.s.s.SynchronousSession - Creating new JDBC synchronous session.
2023-03-08 13:20:32.123 [DefaultMess] DEBUG o.s.s.s.SynchronousSession - Creating JDBC connection for synchronous session.
2023-03-08 13:20:32.123 [DefaultMess] DEBUG o.s.s.s.SynchronousSession - Created JDBC connection [oracle.jdbc.driver.T4CConnection@3904b57d] for synchronous session.
2023-03-08 13:20:32.123 [DefaultMess] DEBUG o.s.s.s.SynchronousSession - Created synchronous session for JDBC driver [oracle.jdbc.OracleDriver]
2023-03-08 13:20:32.123 [DefaultMess] DEBUG o.s.s.s.SynchronousSession - Returned JDBC connection [oracle.jdbc.driver.T4CConnection@18d474bb] to pool.
2023-03-08 13:20:32.123 [DefaultMess] DEBUG o.s.s.s.SynchronousSession - Closed synchronous session for JDBC driver [oracle.jdbc.OracleDriver]
2023-03-08 13:20:32.123 [DefaultMess] INFO  o.s.j.d.OracleDataSource - Returning cached OracleDataSource [oracle.jdbc.OracleDataSource@18c6c8da]
2023-03-08 13:20:32.123 [DefaultMess] INFO  o.s.s.s.SynchronousSession - Creating new JDBC synchronous session.
2023-03-08 13:20:32.123 [DefaultMess] DEBUG o.s.s.s.SynchronousSession - Creating JDBC connection for synchronous session.
2023-03-08 13:20:32.123 [DefaultMess] DEBUG o.s.s.s.SynchronousSession - Created JDBC connection [oracle.jdbc.driver.T4CConnection@6d753c8c] for synchronous session.
2023-03-08 13:20:32.123 [DefaultMess] DEBUG o.s.s.s.SynchronousSession - Created synchronous session for JDBC driver [oracle.jdbc.OracleDriver]
2023-03-08 13:20:32.123 [DefaultMess] DEBUG o.s.s.s.SynchronousSession - Returned JDBC connection [oracle.jdbc.driver.T4CConnection@6d753c8c] to pool.
2023-03-08 13:20:32.123 [DefaultMess] DEBUG o.s.s.s.SynchronousSession - Closed synchronous session for JDBC driver [oracle.jdbc.OracleDriver]
2023-03-08 13:20:32.123 [DefaultMess] INFO  o.s.j.d.OracleDataSource