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

Développement SQL Server Discussion :

Fonctionnement des transactions


Sujet :

Développement SQL Server

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    194
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 194
    Points : 74
    Points
    74
    Par défaut Fonctionnement des transactions
    Bonjour,
    Je voudrais comprendre comment fonctionne les transactions à travers un petit exemple.

    Imaginons une table remplie avec plus 5000 données. Cette table est utilisée en permanence partout dans le monde. Que ce passe t'il lorsque par exemple je veux supprimer le contenu de la table et le remplacer par un autre contenu? Cette modification se fera par avec une transaction mais lors de l'execution de la requête la table est elle toujours disponible. Le script serait tout simplement un delete du contenu suivi d'un ajout (pas qu'un mais 5000).
    Durant ce temps d'execution, la table est elle toujours accessible en lecture? lecture/ecriture (même si cela veut dire que les écritures seront écrasés lors de la fin d'execution du script)?

    J'ai cherché comment fonctionné une transaction mais sans succès (je pense que le résultat du script est copié dans un cache puis lors du commit alors blocage de la table puis recopie et enfin levé du verrou).
    Pouvez vous m'aider?
    Merci.

  2. #2
    Membre averti Avatar de pulsdrum
    Homme Profil pro
    MVP SQL Server - Consultant en Business Intelligence - MCITP, MCTS et MCSA SQL Server 2008/2012
    Inscrit en
    Juillet 2009
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : MVP SQL Server - Consultant en Business Intelligence - MCITP, MCTS et MCSA SQL Server 2008/2012
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2009
    Messages : 61
    Points : 335
    Points
    335
    Par défaut
    Bonjour,

    De base SQL Server est configuré avec un niveau d’isolation « READ COMMITTED » (et « READ_COMMITTED_SNAPSHOT » sur OFF).
    Le moteur de base de données utilise donc des verrous partagés pour empêcher d'autres transactions de modifier les lignes alors que la transaction en cours d’exécution.
    Plus d’information : ICI

    Voici comment fonctionne les Transactions : ICI

    ++

  3. #3
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 761
    Points : 52 547
    Points
    52 547
    Billets dans le blog
    5
    Par défaut
    Citation Envoyé par clouddd Voir le message
    Bonjour,
    Je voudrais comprendre comment fonctionne les transactions à travers un petit exemple.

    Imaginons une table remplie avec plus 5000 données. Cette table est utilisée en permanence partout dans le monde. Que ce passe t'il lorsque par exemple je veux supprimer le contenu de la table et le remplacer par un autre contenu? Cette modification se fera par avec une transaction mais lors de l'execution de la requête la table est elle toujours disponible. Le script serait tout simplement un delete du contenu suivi d'un ajout (pas qu'un mais 5000).
    Durant ce temps d'execution, la table est elle toujours accessible en lecture? lecture/ecriture (même si cela veut dire que les écritures seront écrasés lors de la fin d'execution du script)?
    Soit vous procédez en deux instructions SQL :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    DELETE ...
    INSERT ...
    et donc c'est 2 transactions implicites et entre les deux, les utilisateurs peuvent lire la table vidée.

    Soit vous implémentez une transaction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    BEGIN TRANSACTION
    DELETE ...
    INSERT ...
    COMMIT
    et tout dépend du niveau d'isolation...
    En niveau READ COMMITTED, pas de différence avec le précédent.
    Au niveau SERIALIZABLE les autres utilisateurs n'ont aucun accès à la
    table.

    J'ai cherché comment fonctionné une transaction mais sans succès (je pense que le résultat du script est copié dans un cache puis lors du commit alors blocage de la table puis recopie et enfin levé du verrou).
    Pouvez vous m'aider?
    Merci.
    A me lire :
    les transactions http://sqlpro.developpez.com/cours/sqlaz/techniques/
    les niveaux d'isolations : http://sqlpro.developpez.com/isolation-transaction/

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    194
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 194
    Points : 74
    Points
    74
    Par défaut
    Cool merci pour vos reponses.
    Je vais lire tout ca et essayer de comprendre.
    Mais d'après ce que vous dites lors de l'execution d'un script la table n'est plus accessible par les autres utilisateurs. C'est bien ca?

  5. #5
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 761
    Points : 52 547
    Points
    52 547
    Billets dans le blog
    5
    Par défaut
    Citation Envoyé par clouddd Voir le message
    Cool merci pour vos reponses.
    Je vais lire tout ca et essayer de comprendre.
    Mais d'après ce que vous dites lors de l'execution d'un script la table n'est plus accessible par les autres utilisateurs. C'est bien ca?
    NON !

    Tout dépend du niveau d'isolation des transaction et de la granularité des données concernées.

    Par exemple si vous faites un DELETE avec une claude WHERE et en mode READ COMMITTED, seule les lignes répondant à la clause WHERE seront inaccessible le temps de la transaction. En mode READ COMMITTED elles seront accessibles entre temps.

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

Discussions similaires

  1. Fonctionnement des transactions avec JPA / JTA
    Par tchize_ dans le forum JPA
    Réponses: 14
    Dernier message: 14/08/2014, 08h37
  2. [Data] Comment controler le bon fonctionnement des transactions?
    Par irnbru dans le forum Spring
    Réponses: 7
    Dernier message: 01/05/2010, 17h16
  3. Apropos des Transactions au sein d'un Stored Procedure
    Par Sarbacane dans le forum Connexion aux bases de données
    Réponses: 6
    Dernier message: 16/11/2004, 08h21
  4. gestion des transactions
    Par viny dans le forum Requêtes
    Réponses: 2
    Dernier message: 26/03/2004, 21h53
  5. [langage] fonctionnement des Processus
    Par GMI3 dans le forum Langage
    Réponses: 3
    Dernier message: 19/09/2003, 11h12

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