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

Langage SQL Discussion :

Intégrité en lecture du DML


Sujet :

Langage SQL

  1. #1
    Membre du Club
    Homme Profil pro
    Inscrit en
    Février 2014
    Messages
    80
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2014
    Messages : 80
    Points : 46
    Points
    46
    Par défaut Intégrité en lecture du DML
    Bonjour à tous,

    mon prof avait donner plusieurs définition de l’intégrité en lecture du dml donc à la fin je me suis un peu embrouillé si quelqu'un peut m'aider s'il vous plait, merci


    - la première définition qu'il avait donner c'est qu'il n'y a pas d’interaction entre 2 instructions du dml par exemple si un user fait un update et un autre user un select l'user qui a fait le select va agir soit avant que l'update a lieu soit après mais jamais entre.

    -la 2 ème définition c'est que le select garantie qu'il ne modifiera pas les donnees c est pourquoi on peut pas appeler une fonction qui modifie les donnes dans un select.


    donc voilà j'ai un peu du mal à comprendre est ce que l’intégrité en lecture c'est uniquement pour le select ou pour toutes les instructions du dml?
    Si quelqu'un peut me donner une meilleur définition s'il vous plait merci d'avance.

  2. #2
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 136
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 136
    Points : 38 561
    Points
    38 561
    Billets dans le blog
    9
    Par défaut
    Citation Envoyé par wear12 Voir le message
    - la première définition qu'il avait donner c'est qu'il n'y a pas d’interaction entre 2 instructions du dml par exemple si un user fait un update et un autre user un select l'user qui a fait le select va agir soit avant que l'update a lieu soit après mais jamais entre.
    Non, les interactions entre transactions sont liées aux types de verrous, à la taille des verrous et aux commits. Lisez vos cours sur ces sujets pour comprendre leur fonctionnement.

    Citation Envoyé par wear12 Voir le message
    -la 2 ème définition c'est que le select garantie qu'il ne modifiera pas les donnees c est pourquoi on peut pas appeler une fonction qui modifie les donnes dans un select.
    Un select ne modifie certes pas les données, mais il pose un verrou en lecture, qui peut provoquer le WAIT d'un thread qui s'exécute en parallèle et souhaite faire une mise à jour de la ligne.

    Seuls les verrous en lecture de type "UR " (uncommited read) permettent à une tache concurrente de verrouiller en mise à jour la même ligne.

  3. #3
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    2 947
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2 947
    Points : 5 846
    Points
    5 846
    Par défaut
    Citation Envoyé par escartefigue Voir le message
    Un select ne modifie certes pas les données, mais il pose un verrou en lecture, qui peut provoquer le WAIT d'un thread qui s'exécute en parallèle et souhaite faire une mise à jour de la ligne.
    La gestion des verrous, des transactions et des modes d'isolation est spécifique à chaque SGBD, il est généralement hasardeux de tenter des généralités.
    Il y a quand même 2 grandes familles (DB2, Sybase, Sqlserver en mode non snapshot) et les SGBD MVCC, mais chacun avec ses spécificités.

    Donc ce fonctionnement est vrai pour DB2 mais pas pour Oracle par exemple.

  4. #4
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 136
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 136
    Points : 38 561
    Points
    38 561
    Billets dans le blog
    9
    Par défaut
    Oracle et les autres SGBD utilisent les mêmes principes : utilisation de verrous plus ou moins larges et plus ou moins restrictifs, qui sont levés lors du commit

    La différence est une richesse plus ou moins importante sur les niveaux d'isolation et sur la taille des verrous (ex : pas d'isolation UR ni de verrou page avec Oracle)

  5. #5
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    2 947
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2 947
    Points : 5 846
    Points
    5 846
    Par défaut
    Citation Envoyé par escartefigue Voir le message
    Oracle et les autres SGBD utilisent les mêmes principes : utilisation de verrous plus ou moins larges et plus ou moins restrictifs, qui sont levés lors du commit
    Certes mais ce que je voulais dire c'est que :
    Un select ne modifie certes pas les données, mais il pose un verrou en lecture, qui peut provoquer le WAIT d'un thread qui s'exécute en parallèle et souhaite faire une mise à jour de la ligne.

    Seuls les verrous en lecture de type "UR " (uncommited read) permettent à une tache concurrente de verrouiller en mise à jour la même ligne.
    est probablement une description des verrous de DB2.

    Et par exemple la 1ère définition donnée :
    - la première définition qu'il avait donner c'est qu'il n'y a pas d’interaction entre 2 instructions du dml par exemple si un user fait un update et un autre user un select l'user qui a fait le select va agir soit avant que l'update a lieu soit après mais jamais entre.
    est fausse sur Oracle, même si le "jamais entre" mériterait une description un peu plus précises...

  6. #6
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 768
    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 768
    Points : 52 577
    Points
    52 577
    Billets dans le blog
    5
    Par défaut
    La norme SQL impose 4 niveaux d'isolation, permettant de s'affranchir des anomalies transactionnelles...
    0 - READ UNCOMMITTED => lecture sale (toutes anomalies possible)
    1 - READ COMMITTED => Lecture de données validées (évite les lectures sales)
    2 - REPEATABLE READ => Lecture répétables (évite les lectures sales et stabilise la relecture)
    3 - SERIALIZABLE => "mise en série des transactions (évite toutes les anomalies donc évite les lectures sales et stabilise la relecture et interdit l'apparition de lignes fantômes)
    Le verrouillage n'est que l'application physique au niveau de granularité souhaité de la technique de verrouillage induite par le niveau d’isolation choisit.
    L'article sur le sujet est ici : http://sqlpro.developpez.com/isolation-transaction/
    Les lectures bloquent les écritures (verrous partagés) et les écritures bloquent tout (verrous exclusif). On parle alors de verrouillage pessimiste, car les verrous doivent être posés AVANT le démarrage de tout traitement et la mise à jour est garantie si tous les verrous nécessaires ont été posés.

    Les éditeurs de logiciels ont, pour la plupart, rajouté un niveau d'isolation "hors norme" représenté par le SNAPSHOT.
    Ce niveau consiste à copier les données à traiter dans un autre espace de stockage, travailler dessus, et si le traitement propose des modifications de données (INSERT, UPDATE, DELLETE) alors, ces mises à jour sont reportées sur la "vraie" base, si, entre temps, personne n'a modifié le même jeu de données. On parle alors de verrouillage optimiste, car il n'y a pas pose de verrou (en fait si, mais pas de même nature...), les lectures ne bloquent personnes, les écritures ne bloquant qu'au moment du report.
    En terme vulgaire c'est appelé MVCC dans PG ou Oracle... Mais le système existe aussi dans SQL Server (niveau d’isolation SNAPSHOT).

    Cela dit ce niveau n'a pas que des avantages... Par exemple tout un traitement complexe ayant produit de nombreuses mise à jour et ayant couté cher en terme de ressources peut être au final abandonné au moment du COMMIT (validation) conduisant ainsi à un ROLLBACL forcé alors que l'on a demandé la validation...

    Le seul SGBDR connu pour assurer les 4 niveaux de la norme et le SNAPSHOT est SQL Server.

    Certains SGBDR ne respecte pas la norme SQL et ne propose que quelques niveaux d'isolation souvent différents de ce que la norme propose car ils mélange le SNAPSHOT et le READ COMMITTED. C'est le cas d'Oracle et de PostGreSQL, l'un ayant bêtement singé l'autre (je ne te dirait pas lequel.... mais c'est facile à deviner).

    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. [ADO] Sauvegarde / lecture de recordset
    Par SpaceFrog dans le forum VB 6 et antérieur
    Réponses: 7
    Dernier message: 20/09/2002, 16h54
  2. Lecture de fichiers ".WAV"...
    Par 0x4e84 dans le forum Langage
    Réponses: 2
    Dernier message: 03/09/2002, 09h43
  3. Pb Lecture de bitmap monochrome
    Par Loïc38 dans le forum C++Builder
    Réponses: 4
    Dernier message: 02/07/2002, 18h24
  4. Lecture d'une image bitmap
    Par Geronimo dans le forum x86 32-bits / 64-bits
    Réponses: 18
    Dernier message: 28/06/2002, 12h01
  5. [langage] Optimiser la lecture d'un fichier
    Par And_the_problem_is dans le forum Langage
    Réponses: 2
    Dernier message: 11/06/2002, 10h24

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