我使用的是古老版本的Oracle(8.something),我的ADO.NET应用程序需要做一些相当大的事务。足够大,不能在我们的小型回滚段中完成。现在我们也有一个大的回滚段,但默认情况下不会使用它。
Oracle有一个命令来选择要使用的回滚段(SET TRANSACTION USE ROLLBACK SEGMENT MY_ROLLBACK_SEGMENT
),但它必须是事务中发出的第一个命令。不幸的是,似乎ADO.NET在事务开始时发出了一些其他命令,因为在.BeginTransaction()之后发出此命令会引发一个关于SET TRANSACTION不是第一个命令的错误。
我相信我不是唯一一个遇到这个问题的人。你是如何解决它的?或者你会如何解决它?
由于
答案 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;
更新......
...