我有一个使用多个实例运行的作业,即所有实例的代码库都是相同的,但每个实例都在分配给它的数据集上工作,以实现应用程序的并行性和更好的吞吐量。 这些作业使用全局临时表来处理数据,因为在计算最终输出之前会执行多个复杂的操作。 如果失败,事务将回滚(应有的(,但这样一来,我也丢失了 gtt 中的数据。
有没有办法在回滚事务时将 gtt 中的记录复制到另一个永久表。 我知道这听起来很奇怪,但这是我面临的一个实际问题。 我需要以某种方式将数据存储在会话表中,以防任何 sql 失败,同时回滚事务,因为其中一个 sql 失败了。
谢谢。
嗯,也许是这样的:
- 创建一个永久表,该表将在发生故障时保存 GTT 数据
- 创建一个
insert into permanent select * from gtt
和commit
的自主交易程序 - 在异常处理程序部分中调用该过程,然后
rollback
唯一的方法是在回滚之前打印所需的数据。
您可以使用UTL_FILE
在文件中存储数据。稍后,您可以使用 oracle 的概念来检索表中external table
数据。
干杯!!