0

我正在使用旧版本的 Oracle (8.something),我的 ADO.NET 应用程序需要执行一些相当大的事务。大到不会在我们的小回滚段中结束。现在我们也有一个大的回滚段,但默认情况下不使用它。

Oracle 有一个命令可以选择要使用的回滚段 ( SET TRANSACTION USE ROLLBACK SEGMENT MY_ROLLBACK_SEGMENT),但它必须是事务中发出的第一个命令。不幸的是,ADO.NET 似乎在事务开始时发出了一些其他命令,因为在 .BeginTransaction() 之后立即发出此命令会引发有关 SET TRANSACTION 不是第一个命令的错误。

我确信我不是唯一一个面临这个问题的人。你如何解决它或者你将如何解决它?

谢谢

4

3 回答 3

1

如果这是“一次性”要求,那么一种解决方案是在您运行事务时将其他回滚段置于离线状态,然后在完成后将它们置于在线状态;

ALTER ROLLBACK SEGMENT <name> OFFLINE;

ALTER ROLLBACK SEGMENT <name> ONLINE;

否则使所有回滚段的大小相同。

于 2008-11-14T11:27:26.677 回答
1

我无法在 Oracle 8 上对此进行测试,但在较新的版本上,您可以通过发出提交然后更改回滚段来显式启动新事务。

我假设这是一个过程/函数。

begin
commit;
SET TRANSACTION USE ROLLBACK SEGMENT UNDOTBS1;
--Your code here
end;

问候 K

于 2008-11-14T22:20:08.277 回答
0

我绝对没有办法对此进行测试,但您可以尝试在设置交易语句之前发出一个保存点,例如

保存点 use_big_rbs;

设置事务使用回滚段 big_rbs;

更新 ...

...

于 2008-11-14T15:21:55.970 回答