Oracle回滚段和ADO.NET

时间:2008-11-13 18:28:11

标签: oracle ado.net rollbacksegments

我使用的是古老版本的Oracle(8.something),我的ADO.NET应用程序需要做一些相当大的事务。足够大,不能在我们的小型回滚段中完成。现在我们也有一个大的回滚段,但默认情况下不会使用它。

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

我相信我不是唯一一个遇到这个问题的人。你是如何解决它的?或者你会如何解决它?

由于

3 个答案:

答案 0 :(得分:1)

如果这是“一次性”要求,那么一种解决方案是在运行交易时将其他回滚段置于脱机状态,然后在完成后将其置于联机状态;

ALTER ROLLBACK SEGMENT <name> OFFLINE;

ALTER ROLLBACK SEGMENT <name> ONLINE;

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

答案 1 :(得分:1)

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

我认为这是一个程序/功能。

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

此致 ķ

答案 2 :(得分:0)

我完全无法测试这个,但您可以尝试在设置的交易声明之前发出一个保存点,例如

  

SAVEPOINT use_big_rbs;

     

SET TRANSACTION使用ROLLBACK SEGMENT big_rbs;

     

更新......

     

...