代码之家  ›  专栏  ›  技术社区  ›  Tamas Czinege

Oracle回滚段和ADO.NET[关闭]

  •  0
  • Tamas Czinege  · 技术社区  · 17 年前

    我使用的是Oracle的一个古老版本(8.0左右),我的ADO.NET应用程序需要执行一些相当大的事务。足够大,不会在我们的小回滚段中出现鳍。现在我们也有一个大的回滚段,但默认情况下不使用它。

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

    我相信我不是唯一一个面对这个问题的人。你如何解决这个问题,或者你将如何绕过它?

    谢谢

    3 回复  |  直到 17 年前
        1
  •  1
  •   pablo    17 年前

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

    ALTER ROLLBACK SEGMENT <name> OFFLINE;
    
    ALTER ROLLBACK SEGMENT <name> ONLINE;
    

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

        2
  •  1
  •   Khb    17 年前

    我无法在Oracle8上测试这一点,但在较新的版本上,您可以通过发出提交,然后更改回滚段来显式启动新事务。

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

    K

        3
  •  0
  •   Freakent    17 年前

    设置事务使用回滚段大\u rbs;

    ...