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 :

Squirrel, select et verrou


Sujet :

Langage SQL

  1. #1
    Membre averti
    Inscrit en
    Mars 2004
    Messages
    1 907
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 1 907
    Points : 411
    Points
    411
    Par défaut Squirrel, select et verrou
    Bonjour,

    Squirrel nous permet de faire des select sur plusieurs type de base de données (MysqL, Postgresql, SQLserver..)

    Ma question est plus sur un paramétrage de squirrel. Comment empêcher de poser des verrous sur une table lors d'une requête select.
    En effet, à chaque requête de select, les utilisateur ne connaissent pas la syntaxe (ni même le concept) de verrou dans une table lors d'un select.
    Par exemple, sur SQLserver, on utilise with(nolock) mais kele but est que ces paramètres soient implicite sur squirrel.

  2. #2
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 133
    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 133
    Points : 38 556
    Points
    38 556
    Billets dans le blog
    9
    Par défaut
    Bonjour

    Si les utilisateurs ne sont pas bien formés à SQL, c'est risqué de leur mettre à disposition un outil permettant de faire des requêtes, surtout s'il s'agit de bases métier. Normalement, les utilisateurs non informaticiens ne devraient pouvoir accéder par requête qu'à des infocentres.

    Sinon, le niveau d'isolation le moins restrictif est "UR" (uncommited read).
    On peut donc définir ce niveau d'isolation en début de transaction ou en "current isolation" pour éviter de gêner les transactions concurrentes.
    Le hic c'est qu'avec ce paramètre, non seulement les lectures ne sont pas "répétables", mais qu'aussi on peut lire des "phantom records" et des lignes non commitées et qui ne le seront peut-être jamais.

    "UR" est le plus souvent utilisé quand des résultats approximatifs sont acceptables, par exemple si on veut connaître le nombre de lignes d'une table, une valeur moyenne d'une colonne, etc.

  3. #3
    Membre averti
    Inscrit en
    Mars 2004
    Messages
    1 907
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 1 907
    Points : 411
    Points
    411
    Par défaut
    Bonjour.
    Oui je sais qu'il faut l'option UR et je comprends ce que cela implique derrière.
    Mais comme tu l'as bien compris, on a ouvert la boîte de pandor. Maintenant, il faut que l'on trouve une solution compatible avec toutes les bases de données.
    La difficulté c'est que la syntaxe est différente selon les bases de données. A moins qu'il y ait unee option sur Squirrel qui permette de générer automatiquement les uncommited read quelques soit les bases de données (SQLserver, PostgreSQL, Oracle...)

  4. #4
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 133
    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 133
    Points : 38 556
    Points
    38 556
    Billets dans le blog
    9
    Par défaut
    La plupart des SGBD acceptent la syntaxe suivante :

    set transaction isolation level READ UNCOMMITTED

  5. #5
    Membre averti
    Inscrit en
    Mars 2004
    Messages
    1 907
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 1 907
    Points : 411
    Points
    411
    Par défaut
    Merci

  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 763
    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 763
    Points : 52 554
    Points
    52 554
    Billets dans le blog
    5
    Par défaut
    Citation Envoyé par escartefigue Voir le message
    La plupart des SGBD acceptent la syntaxe suivante :

    set transaction isolation level READ UNCOMMITTED
    Heu non... Enfin pas tout à fait !
    Cette commande qui est conforme à la norme SQL est presque toujours supportée dans les SGBD Relationnels, mais n'a aucun effet dans la plupart !
    En effet, pour les SGBDR dont le type de verrouillage est optimiste et qui n'ont pas le possibilité de faire du verrouillage pessimiste, cette commande est inopérante... C'est le cas d'Oracle ou PostGreSQL par exemple
    https://blog.developpez.com/pachot/tk_isolation_levels/
    Pour ces deux SGBDR le READ UNCOMMITTED est transformé en READ COMMITTED !

    Enfin deux remarques :
    l'usage immodéré du NOLOCK est une imbécilité car il donne des résultats faux. Lire l'article que j'ai écrit à ce sujet :
    http://mssqlserver.fr/les-dangers-du-nolock/
    Le fait de demander à un utilisateur d'indiquer des verrous dans une requête ne fait pas partie du SQL est est une des pires mauvais pratique !
    https://www.budaconsulting.com/five-...e-query-hints/

    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/ * * * * *

  7. #7
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 133
    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 133
    Points : 38 556
    Points
    38 556
    Billets dans le blog
    9
    Par défaut
    Bonjour Frédéric

    Citation Envoyé par SQLpro Voir le message
    l'usage immodéré du NOLOCK est une imbécilité car il donne des résultats faux. Lire l'article que j'ai écrit à ce sujet :
    http://mssqlserver.fr/les-dangers-du-nolock/
    Nous sommes d'accord, c'est bien pourquoi je mentionnais
    Citation Envoyé par escartefigue Voir le message
    Sinon, le niveau d'isolation le moins restrictif est "UR" (uncommited read).
    On peut donc définir ce niveau d'isolation en début de transaction ou en "current isolation" pour éviter de gêner les transactions concurrentes.
    Le hic c'est qu'avec ce paramètre, non seulement les lectures ne sont pas "répétables", mais qu'aussi on peut lire des "phantom records" et des lignes non commitées et qui ne le seront peut-être jamais.

    "UR" est le plus souvent utilisé quand des résultats approximatifs sont acceptables, par exemple si on veut connaître le nombre de lignes d'une table, une valeur moyenne d'une colonne, etc.
    et sur ce point :

    Citation Envoyé par SQLpro Voir le message
    Le fait de demander à un utilisateur d'indiquer des verrous dans une requête ne fait pas partie du SQL est est une des pires mauvais pratique !
    https://www.budaconsulting.com/five-...e-query-hints/
    L'erreur c'est de donner la possibilité à des utilisateurs de faire des requêtes sur le système d'information.

  8. #8
    Membre averti
    Inscrit en
    Mars 2004
    Messages
    1 907
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 1 907
    Points : 411
    Points
    411
    Par défaut
    Oui effectivement, comme je l'ai dit on a ouvert la boîte de pandor en permettant cela.
    Comment faîtes vous chez vous pour permettre aux utilisateurs d'interroger des tables dans interférence avec le SI ?

  9. #9
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 133
    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 133
    Points : 38 556
    Points
    38 556
    Billets dans le blog
    9
    Par défaut
    S'il existe un S.I. décisionnel, on vérifie si les données requises y sont, auquel cas les utilisateurs peuvent réaliser l'extraction dans le décisionnel sans perturber le S.I. métier
    À défaut, s'il s'agit d'un besoin récurrent, on demande une expression de besoin, un budget et on réalise puis on met en prod un traitement réalisant l'extraction demandée

  10. #10
    Membre averti
    Inscrit en
    Mars 2004
    Messages
    1 907
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 1 907
    Points : 411
    Points
    411
    Par défaut
    Merci. Je pense que tu fais allusion au Datawarehouse. Effectivement nous en avons un. Mais on ne peux pas descendre toutes les tables ded database de production dans le Datawarehouse...

  11. #11
    Membre averti
    Inscrit en
    Mars 2004
    Messages
    1 907
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 1 907
    Points : 411
    Points
    411
    Par défaut
    De plus on ca ëtre confronté au dirty read à la puissance 10. Si les rables dont chargées le matin et que les utilisateurs interrogent en fin de journée.

  12. #12
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 763
    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 763
    Points : 52 554
    Points
    52 554
    Billets dans le blog
    5
    Par défaut
    Une solution avec SQL Server est d'utiliser un réplica AlwaysOn en lecture.

    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. [2008R2] problème de select (verrou ?)
    Par Kropernic dans le forum Administration
    Réponses: 3
    Dernier message: 06/01/2014, 11h32
  2. Verrou empechant même les select
    Par ilalaina dans le forum Administration
    Réponses: 11
    Dernier message: 03/10/2007, 15h55
  3. [T-SQL]verrou sur une ligne avant un select
    Par dinobogan dans le forum Sybase
    Réponses: 3
    Dernier message: 28/06/2007, 14h36
  4. [Verrou] SELECT FOR UPDATE
    Par e1lauren dans le forum PostgreSQL
    Réponses: 10
    Dernier message: 13/10/2005, 17h06
  5. faire un selection dans une image aves les APIs
    Par merahyazid dans le forum C++Builder
    Réponses: 3
    Dernier message: 30/04/2002, 10h44

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