0

我有一个与多个实例一起运行的工作,即所有实例的代码库都是相同的,但是每个实例都在分配给它的数据集上工作,以便为应用程序实现并行性和更好的吞吐量。这些作业使用全局临时表来处理数据,因为在计算最终输出之前执行了多个复杂的操作。如果失败,事务会回滚(应该如此),但是这样我也会丢失 gtt 中的数据。

有没有办法在回滚事务的同时将 gtt 中的记录复制到另一个永久表中。我知道这听起来很奇怪,但这是我面临的一个实际问题。我需要以某种方式将数据存储在会话表中以防任何 sql 失败,同时回滚事务作为 sql 之一失败。

谢谢。

4

2 回答 2

0

唯一的方法是在回滚之前打印所需的数据。

您可以使用UTL_FILE在文件中存储数据。稍后,您可以使用external tableoracle 的概念来检索表中的数据。

干杯!!

于 2019-08-19T14:03:56.387 回答
0

嗯,大概是这样的:

  • 创建一个永久表,在发生故障时保存 GTT 数据
  • 创建一个自治的交易程序,该程序将insert into permanent select * from gttcommit
  • 在异常处理程序部分调用该过程,然后rollback
于 2019-08-19T12:27:59.680 回答