【发布时间】:2011-10-07 05:40:29
【问题描述】:
有一个用 Java 编写的批处理作业,它每隔几分钟就会截断并加载 Oracle 数据库中的某个表。有根据表格中的数据在网页上生成的报告。我想知道一种在数据加载过程发生时不影响报告查询部分的好方法,这样用户就不会得到一些数据和/或没有数据。
【问题讨论】:
有一个用 Java 编写的批处理作业,它每隔几分钟就会截断并加载 Oracle 数据库中的某个表。有根据表格中的数据在网页上生成的报告。我想知道一种在数据加载过程发生时不影响报告查询部分的好方法,这样用户就不会得到一些数据和/或没有数据。
【问题讨论】:
如果您在单个事务中处理所有 SQL 语句,那么从外部看到的状态总是有效的。请注意,TRUNCATE 在事务中不起作用,因此您必须使用 DELETE。虽然这可以保证您的表中始终有合理的数据,但它需要更大的回滚段并且会相当慢。
【讨论】:
您可以有 2 个表和一个元表,用于跟踪哪个表是用于查询的主表。您的批处理作业将截断并加载其中一个表,加载完成后您可以切换主表。因此查询应用程序现在将获取最新数据,您现在可以在另一个表中加载
【讨论】:
我要做的是在数据库表中设置一个标志以指示更新正在进行中,并让报告查找该标志并显示适当的消息并等待更新完成。更新完成后清除标志。
【讨论】: