0

我得到了一些在多分区上运行的spring批处理作业......我想使用oracle的全局临时表作为批处理作业的临时表,这样暂存表只能在我的作业运行期间存在......截至目前,我有物理表Apache Tomcat连接池和Oracle全局临时表。数据可以共享吗?

我有所有这些运行在tomcat中。其中有tomcat连接池实现...

因此,我的临时表得到由分段编写器填充。我可以看到数据。一切看起来都很正常,直到如今

直到此时我的工作是单线程的..在此之后有multireaders所有的阅读不同范围的临时表中的记录..

分期阅读器分区,每个分区使用一个从池中连接..因此,大多数读者无法看到临时表中的数据..可能是一个或两个读者,我可以假设他们正在使用创建和插入表的同一个会话

有没有办法让所有使用连接池的读取器都可以使用数据?

回答

2

全局临时表中的数据只会在插入它的会话中可见。与使用本地临时表的其他数据库不同,表本身将始终存在(您的评论:“表只存在于我的作业运行过程中”似乎不正确)。

如果您希望跨会话可见数据,您实际需要将其加载到永久登台表中。还有其他方法可以跨多个会话共享数据 - 例如全局上下文 - 但是如果您生成多个线程来处理数据,那么这些选项对于您的数据量可能不太实用。根据处理的性质,您的应用程序中可能有一个线程将数据分配给所有其他线程,以便只有协调器需要查询登台表。

+0

你是对的我在这里错过了一个观点..当工作开始时,我实际上创建了表格,并且在我的工作结束之前截断并放下表格。谢谢 – Shiv 2013-03-21 18:06:36

+1

@Shiv - 你永远不会想创建一个运行时的全局临时表。应该在安装时创建一个全局临时表,就像每个永久表一样。 – 2013-03-21 18:07:39