Oracle清理所有内存中的数据源链接 博客分类: javaoracleJDBCDataSource JavaOracleJDBCDataSource
程序员文章站
2024-03-01 23:00:34
...
在实际生产过程可能会遇到频繁的更改Oracle数据库的Package Body的需求,如果用了中间件级别的数据源就需要重新加载数据源来实现更改后的Package包生效的目的,有两种做法可以使数据源在内存中失效再重新加载到内存,方法如下:
第一、停掉war包,即:重启应用包,重启应用包肯定重新加载数据源了。
第二、把中间件的数据源断掉,然后再重新部署并target到应用war上,这样也实现了数据源重新被内存加载的过程。
如果不想在应用层面动手脚。那么就只能在数据库层面动手脚了,可以在Oracle后台查询到所有的session连接,然后手动kill掉所有的session连接,这样也实现了应用war包所有的连接都要跟Oracle重新链接。
笔者这里是想介绍一下在应用war里写一段代码来断开所有的连接来实现清空内存中所有连接的事情,前提是应用war包用的是中间件的Oracle数据库驱动包,代码如下:
【注】上面的代码是Oracle数据库驱动包里的方法,其他数据库驱动包不晓得有没有类似的方法。
第一、停掉war包,即:重启应用包,重启应用包肯定重新加载数据源了。
第二、把中间件的数据源断掉,然后再重新部署并target到应用war上,这样也实现了数据源重新被内存加载的过程。
如果不想在应用层面动手脚。那么就只能在数据库层面动手脚了,可以在Oracle后台查询到所有的session连接,然后手动kill掉所有的session连接,这样也实现了应用war包所有的连接都要跟Oracle重新链接。
笔者这里是想介绍一下在应用war里写一段代码来断开所有的连接来实现清空内存中所有连接的事情,前提是应用war包用的是中间件的Oracle数据库驱动包,代码如下:
OracleConnectionCacheManager occm = ...... //Refresh all connections in cache occm.refreshCache(cacheName, OracleConnectionCacheManager.REFRESH_ALL_CONNECTIONS);
【注】上面的代码是Oracle数据库驱动包里的方法,其他数据库驱动包不晓得有没有类似的方法。