0

I am using an ancient version of Oracle (8.something) and my ADO.NET application needs to do some fairly large transactions. Large enough to not fin in our small rollback segments. Now we have a large rollback segment as well but it is not used by default.

Oracle has a command to select the rollback segment to be used (SET TRANSACTION USE ROLLBACK SEGMENT MY_ROLLBACK_SEGMENT) but it needs to be the first command issued in the transaction. Unfortunately, it seems that ADO.NET issues some other commands at the beginning of a transaction since issuing this command right after .BeginTransaction() throws an error about SET TRANSACTION not being the first command.

I am sure I am not the only one who faced this issue. How do you solve it or how would you get around it?

Thanks

4

3 に答える 3

1

これが「1 回限り」の要件である場合、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

これをテストする方法はまったくありませんが、 set transaction ステートメントの前にセーブポイントを発行してみてください。

SAVEPOINT use_big_rbs;

SET TRANSACTION USE ROLLBACK SEGMENT big_rbs;

アップデート ...

...

于 2008-11-14T15:21:55.970 に答える