2008-11-13 3 views
0

J'utilise une version ancienne d'Oracle (8.quelque chose) et mon application ADO.NET doit effectuer des transactions assez importantes. Assez grand pour ne pas nager dans nos petits segments de rollback. Maintenant nous avons aussi un grand segment de rollback mais il n'est pas utilisé par défaut.Oracle Rollback Segments et ADO.NET

Oracle dispose d'une commande permettant de sélectionner le segment d'annulation à utiliser (SET TRANSACTION USE ROLLBACK SEGMENT MY_ROLLBACK_SEGMENT), mais il doit s'agir de la première commande émise lors de la transaction. Malheureusement, il semble que ADO.NET émet d'autres commandes au début d'une transaction depuis l'émission de cette commande juste après .BeginTransaction() renvoie une erreur à propos de SET TRANSACTION n'étant pas la première commande. Je suis sûr que je ne suis pas le seul à avoir fait face à ce problème. Comment le résolvez-vous ou comment le contourneriez-vous?

Merci

Répondre

1

Si cela est une exigence « unique », puis une solution consiste à mettre les autres rollback segments hors ligne pendant que vous exécutez vos transactions les mettre ensuite en ligne lorsque vous avez terminé;

ALTER ROLLBACK SEGMENT <name> OFFLINE; 

ALTER ROLLBACK SEGMENT <name> ONLINE; 

Sinon, tous les segments d'annulation ont la même taille.

0

Je n'ai absolument aucun moyen de tester cela, mais vous pouvez essayer d'émettre un point de sauvegarde avant votre instruction de transaction, par ex.

SAVEPOINT use_big_rbs;

ENSEMBLE TRANSACTION UTILISER SEGMENT DE ROLLBACK big_rbs;

MISE A JOUR ...

...

1

Je ne peux pas tester cela sur Oracle 8, mais sur les versions plus récentes vous pouvez explicitement commencer une nouvelle transaction en émettant une validation, puis modifier la segment de restauration. Je suppose qu'il s'agit d'une procédure/fonction. Je suppose qu'il s'agit d'une procédure/fonction.

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

salutations K