IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JDBC Java Discussion :

Oracle et les transactions


Sujet :

JDBC Java

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    138
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 138
    Points : 120
    Points
    120
    Par défaut Oracle et les transactions
    Bonjour,

    Je test les transactions en Oracle, et j'obtiens des résultats bizarre.

    Normalement, avec jdbc, on commence une transaction en définissant le niveau d'isolation, puis on enleve l'autocommit. Ensuite, la transaction est validé quand on fait le commit, ou quand on réactive l'autocommit.

    j'ai fait une fonction qui fait cela :
    -Création de la connection à la base Oracle
    -connection.setTransactionIsolation(Connection.TRANSACTION_SERIALIZABLE);
    -connection.setAutoCommit(false);
    -n=requette(connection,"select max(id) from matable");
    -n=n+1;
    -requette(connection,"insert into matable(id) values("+n+")");
    -n=n+1;
    -requette(connection,"insert into matable(id) values("+n+")");
    -connection.commit();

    Ensuite, je crée 2 threads qui appellent cette méthode. Le 2eme thread plante parce que les 2 thread il essai d'insérer les valeurs 1 et 2.
    Est-ce que Oracle ne sait pas gérer les transactions de niveau serialisable ?
    Est-ce qu'en Oracle on est obligé de passer par JTA pour utiliser les transactions ?
    Est-ce qu'il y a une option non standard à configurer pour pouvoir utiliser les transactions ?

    J'utilise Oracle 10 express, et j'ai essayé avec le driver ojdbc14-2.0.1.jar et la version 10.2.0.5, et dans les 2 cas, cela plante avec la même erreur.

    Pour info, en MySQL cela fonctionne sans problème (j'ai mis 20 thread et il n'y a pas eu la moindre erreur).

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    138
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 138
    Points : 120
    Points
    120
    Par défaut
    Après analyse, Oracle ne sait pas correctement gérer les transactions Serialisables.
    Normalement, si on démarre une transaction serialisable, puis qu'on fait un select sur une table, si une autre transaction fait un select sur la même table, l'autre transaction doit être bloquée.
    En Oracle cela ne fonctionne pas comme cela. Il faut passer par des instructions spéciales comme par exemple "select ... from matable for update of ..."
    Tout est expliqué ici, sur le site officiel d'Oracle :
    http://download.oracle.com/docs/cd/B...ist.htm#g35657

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Oracle et les transactions
    Par tulipebleu dans le forum Débuter
    Réponses: 2
    Dernier message: 29/12/2010, 16h36
  2. Choisir Oracle ou Sql-Server pour les transactions ?
    Par Roronoa01 dans le forum Décisions SGBD
    Réponses: 4
    Dernier message: 06/11/2005, 22h41
  3. petite aide sur les transactions et triggers SVP
    Par CharleLéo dans le forum Débuter
    Réponses: 4
    Dernier message: 15/11/2004, 20h43
  4. les Transactions sous interbase
    Par kouraichi35 dans le forum Bases de données
    Réponses: 2
    Dernier message: 20/10/2004, 11h15
  5. [interbase] gerer les transactions
    Par webbulls dans le forum Bases de données
    Réponses: 3
    Dernier message: 14/05/2004, 18h27

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo