2008-11-13 2 views
0

Я использую древнюю версию Oracle (8.something), и моему приложению ADO.NET необходимо выполнить некоторые довольно крупные транзакции. Достаточно большой, чтобы не плавать в наших маленьких сегментах отката. Теперь у нас есть большой сегмент отката, но он по умолчанию не используется.Сегменты отладки Oracle и ADO.NET

Oracle имеет команду выбора сегмента отката, который будет использоваться (SET TRANSACTION USE ROLLBACK SEGMENT MY_ROLLBACK_SEGMENT), но это должна быть первая команда, выданная в транзакции. К сожалению, похоже, что ADO.NET выдает некоторые другие команды в начале транзакции с момента выпуска этой команды сразу после .BeginTransaction() выдает ошибку о том, что SET TRANSACTION не является первой командой.

Уверен, что я не единственный, кто столкнулся с этой проблемой. Как вы его решаете или как вы обходите это?

Благодаря

ответ

1

Если это «одноразовая» требование, то одно решение поставить другие сегменты отката отсутствует во время запуска ваши транзакции затем поместить их в Интернете, когда вы закончили;

ALTER ROLLBACK SEGMENT <name> OFFLINE; 

ALTER ROLLBACK SEGMENT <name> ONLINE; 

В противном случае сделайте все сегменты отката одинакового размера.

0

У меня нет абсолютно никакого способа проверить это, но вы могли бы попробовать создать точку сохранения перед вашим установленным оператором транзакции, например.

SAVEPOINT use_big_rbs;

НАЗВАНИЕ СДЕЛКИ ИСПОЛЬЗУЙТЕ СЕГМЕНТ ROLLBACK big_rbs;

UPDATE ...

...

1

Я не могу проверить это на Oracle 8, но на более новых версиях можно явно начать новую транзакцию путем выдачи коммит и затем изменяя сегмент отката.

Я предполагаю, что это процедура/функция.

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

С уважением K

Смежные вопросы