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

DB2 Discussion :

Problème DB2 sur IBM/390


Sujet :

DB2

  1. #21
    Membre expert
    Homme Profil pro
    Retraité
    Inscrit en
    Octobre 2005
    Messages
    1 473
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Finance

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 473
    Points : 3 283
    Points
    3 283
    Par défaut
    Citation Envoyé par ruthene
    Moi non plus je ne saisi pas ce dont tu parle par contrôle du timestamp ?

    La cohérence de tes données sera garantie si tu utilises des SELECT ... FOR UPDATE OF suivi d'un UPDATE.
    Oui mais on fait quoi entre le SELECT FOR UPDATE et l'UPDATE ?

    Si on fait rien de significatif ça ne sert à rien ...

  2. #22
    Christianchristian
    Invité(e)
    Par défaut
    Bonsoir,

    Citation Envoyé par ruthene a écrit :
    La cohérence de tes données sera garantie si tu utilises des SELECT ... FOR UPDATE OF suivi d'un UPDATE
    Citation Envoyé par Luc Orient
    Oui mais on fait quoi entre le SELECT FOR UPDATE et l'UPDATE ?
    Si on fait rien de significatif ça ne sert à rien ...
    Afin d'entretenir un peu cette discussion je vous propose une réflexion sur ce que je pense être un résumé du problème posé pa "Mousquetaires" et qui illustre une facettte du développement tel que je le perçois et tel que je l'ai pratiqué.
    Donc critiquable et certainement à critiquer !

    Rappel :
    L 'un des soucis majeurs qui se pose dans tout développement d'applications transactionnelles est celui de l'optimisation des ressources et des transmissions. Ceci afin de minimiser les coûts d'exploitation et de préserver l'efficacité du système. Efficacité dont l'illustrationn finale, outre les considérations de fiabilité, se ramène en schématisant à peine, à des temps de réponse satisfaisants c'est-à-dire < 3 secondes. (couple Question/Réponse)

    COUPLE QUESTION/REPONSE :
    Afin de satisfaire à ces exigeances les programmes TP (CICS,..) doivent dés la phase d'étude/élaboration, être élaborés de manière à assurer, de par leur logique d'exécution, une continuité entre les différents échanges homme/machine :
    Question formalisée par l'utilisateur à son clavier/terminal pressant une touche de fonction ce qui engendre un message expédié au site central. Lequel renvoie via CICS (BMS) une Réponse (Un message de confirmation (ou d'anomalie) par exemple et entre autres)
    Et cela, en monopolisant le moins de ressources (mémoire) possible du site central.
    Ces échanges assurent à l'utilisateur un enchaînement des différentes fonctions qui s'illustrent par l'affichage sur le terminal des écrans (MAP) nécessaires à la réalisation d'une tâche administrative (Création, Modification, Annulation, Consultation d'une entité administrative/fonctionnelle telle une commande avec son en-tête et ses n lignes).

    PSEUDO-CONVERSATIONNEL :
    De manière schèmatique, à un couple Question/Réponse correspond le chargement du programme CICS, son exécution, suivie de sa libération de la mémoire centrale. Les données néccessaires à la poursuite de la session de travail utilisateur (prochain couple Question/Réponse) ont été (heureusement) sauvegardées dans un fichier temporaire (Temporary Storage).
    ELLES PERMETTRONT LA MISE A JOUR DU (DES) FICHIER(S) APPLICATIF(S) (hormis pour le cas Consultation bien sûr).

    CONTROLES ASSURANT L'INTEGRITE DES DONNEES
    Et c'est ici qu'intervient une distinction entre ce que j'appelle les contrôles d'exclusivité (gérés par le SGBD) ET les contrôles d'accès concurrents (gérés par programme). Ils n'interviennent pas au même moment (au même niveau) au cours de la réalisation d'une session de travail (ensembles de couples Question/Réponse)

    CENTRALISATION DES MISES A JOUR DES FICHIERS.
    En effet dans un pgm TP toute mise à jour de l'ensemble des "enregistrements" constituant une entité administrative/fonctionnelle DOIT ËTRE centralisée (séquence d'instructions, éventuellement inscrites dans une itération, assurant la mise à jour de l'intégralité de l'entité fonctionnelle finalisée). Cette séquence est activée en fin de session par une action spécifique de l'utilisateur à son clavier (ex touche de fonction PF3 = validation).
    Cette organisation permet, entre autres avantages, de bénéficier des mécanismes de "logging" actifs et ainsi en cas d'incident de ne pas se retrouver avec des "entités" non finalisées (une en-tête sans (toutes ses) lignes par exemple).
    Mais elle permet également au programme de contrôler les mécanismes de "verrouillage" et de "déverrouillage" des "enregistrements" à mettre à jour.

    PSEUDO CONVERSATIONNEL = LIBERATION DES RESSOURCES "SYSTEMES" ENTRE DEUX COUPLES QUESTION/REPONSE :
    Aprés chaque "exécution unitaire" d'un pgm CICS "monté" en pseudo-conversationnel, les ressources sont libérées y compris les éventuels contrôles d'exclusivité. C'est en tout cas souhaitable car imaginons un verrouillage sur une ou plusieurs lignes d'une table DB2, intervenant nécessairement en début de session utilisateur, qui ne sera levé qu'en fin de session de travail. Si celle-ci dure 30 s c'est déjà grâve mais elle peut durer une ou plusieurs heures ..........(un utilisateur peut être détourné de sa tâche en cours pour une infinité de raisons).
    A extrapoler en considérant n transactions CICS actives à un instant donné!

    MAINTIEN DES RESSOURCES "APPLICATIVES" DURANT TOUTE LA DUREE DE LA SESSION UTILISATEUR.
    Par contre l'entité fonctionnelle sur laquelle l'utilisateur travaille, ELLE, doit être protégée le plus tôt possible c'est à dire en début de session, où plus exactement dés la saisie/transmission par l'utilisateur de son identifiant (sa clef). Ceci afin d'empêcher tout autre intervention sur cet entité. Elle ne sera libérée par le pgm CICS qu'en fin de session utilisateur,( ainsi que la TS et les données applicatives qu'elle contient, lesquelles ont permis la centralisation de la mise à jour du des fichier(s)).
    PROTECTION DES ENTITES FONCTIONNELLES
    La protection des entités fonctionnelles est assurée par chaque pgm CICS et une ressource fichier dédiée à cet usage.
    Chaque pgm doit vérifier si la nouvelle session qu'il administre, (dont l'identifiant de l'entité fonctionnelle vient d'être saisi et transmis par l'utilisateur ), ne se propose pas d'intervenir sur une "entité administrative" pour laquelle un "enregistrement" de clef primaire = à cet identifiant serait déjà présent dans le fichier dédié.
    Si tel est le cas le pgm transmet un message à l'utilisateur lui notifiant l'impossibilté d'intervenir pour le moment, sur cette entité fonctionnelle.
    Dans le cas contraire un "verrouillage pour mise à jour" est activé sur le fichier et l"enregistrement" de clé primaire = identifiant de l'entité est créé. Il sera éliminé du fichier lorsque l'utilisateur décidera de finaliser son travail.


    TABLE DB2 DE SERVICE en question :
    La table de service doit vraisemblablement permettre le stockage temporaire des identifiants des "entités administratives/données" sur lesquelles interviennent des utilisateurs qui ont ouvert les sessions de travail correspondantes.

    Ce que je ne comprends pas très bien c'est la raison pour laquelle les contrôles s'effectuent au niveau des données d'une même entité administrative ? Cela multiplie les lignes dans la table. C'est d'ailleurs ce qui génère, ou contribue à générer le -911.


    En espérant que la longueur de ce texte ne vous découragera pas,

    Cordialement,
    Dernière modification par Christianchristian ; 11/06/2006 à 00h28.

  3. #23
    jab
    jab est déconnecté
    Rédacteur
    Avatar de jab
    Homme Profil pro
    SharePoint developpeur
    Inscrit en
    Février 2004
    Messages
    1 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Belgique

    Informations professionnelles :
    Activité : SharePoint developpeur
    Secteur : Service public

    Informations forums :
    Inscription : Février 2004
    Messages : 1 173
    Points : 4 339
    Points
    4 339
    Par défaut
    Citation Envoyé par Christianchristian
    Bonsoir,

    Pouvez-vous préciser en quoi consiste le contrôle du time-stamp ? J'ai cherché sur internet et dans mes docs, je n'ai rien trouvé.

    Cordialement,
    Le principe: on enregistre dans le record le timestamp lors de l'update. Donc quand tu écris un record, tu peux relire le timestamp dans le fichier et le comparer à celui lu lors dur select initiale. S'il diffère c'est qu'une mise à jour à eu lieu entre les deux.

  4. #24
    Christianchristian
    Invité(e)
    Par défaut
    Bonjour,

    Citation Envoyé par jab
    Le principe: on enregistre dans le record le timestamp lors de l'update. Donc quand tu écris un record, tu peux relire le timestamp dans le fichier et le comparer à celui lu lors dur select initiale. S'il diffère c'est qu'une mise à jour à eu lieu entre les deux.
    Merci pour cette information jab, je ne connaissais pas cette technique.

    Par contre, ce que je ne perçois pas très bien c'est l'action à mener lorsque les timestamp sont différents.
    Pour la transaction qui fait ce constat, il semble qu'il soit trop tard, l'évènement est consommé.


    Cordialement,

  5. #25
    jab
    jab est déconnecté
    Rédacteur
    Avatar de jab
    Homme Profil pro
    SharePoint developpeur
    Inscrit en
    Février 2004
    Messages
    1 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Belgique

    Informations professionnelles :
    Activité : SharePoint developpeur
    Secteur : Service public

    Informations forums :
    Inscription : Février 2004
    Messages : 1 173
    Points : 4 339
    Points
    4 339
    Par défaut
    ET non justement. Il te reste différents actions possibles.

    Tu peux annuler l'opération en cours par un rollback et avertir l'utilisateur de l'échec de la transaction.
    Tu peux aussi avant de faire l'update vérifier le timestamp et s'il diffère vérifier les champs par rapport au données de départ (qu'il faut avoir conservées) Si les champs modifiées sont différents tu fais un genre de merge en ne mettant à jour que ce qui doit. En résumé tu passe du record locking au field locking.

    Ce genre de traitement est plus adapté à l'interactif qu'au traitement par lot.

  6. #26
    Christianchristian
    Invité(e)
    Par défaut
    D'accord pour la deuxième action, elle permet de gagner en finesse au niveau des mises à jour et permet également de préciser certains contrôles grâce à la comparaison possible entre les données initiales et celles saisies (contrôles du type : demande de mise à jour sans aucune modification effectuée ou bien tel champ déjà renseigné doit être modifié......).
    Et puis surtout elle évite la base de données de service.

    Mais en ce qui concerne la première action je ne suis pas d'accord, sauf peut-être pour des sessions de travail utilisateur de courte durée (très très peu de saisie) et encore ! Il est très pénalisant et déroutant pour une personne ayant passé plusieurs minutes, ou souvent davantage, à la saisie/modification de données (et à l'investigation qu'il lui faut quelquefois mener sur certaines d'entre elles), de voir tout son travail perdu pour une raison qu'elle ne maîtrise pas.



    Cordialement,
    Dernière modification par Christianchristian ; 12/06/2006 à 22h10.

  7. #27
    jab
    jab est déconnecté
    Rédacteur
    Avatar de jab
    Homme Profil pro
    SharePoint developpeur
    Inscrit en
    Février 2004
    Messages
    1 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Belgique

    Informations professionnelles :
    Activité : SharePoint developpeur
    Secteur : Service public

    Informations forums :
    Inscription : Février 2004
    Messages : 1 173
    Points : 4 339
    Points
    4 339
    Par défaut
    Citation Envoyé par Christianchristian
    Mais en ce qui concerne la première action, sauf peut-être pour des sessions de travail utilisateur de courte durée (très très peu de saisie) et encore ! Il est très pénalisant et déroutant pour une personne ayant passé plusieurs minutes, ou souvent davantage, à la saisie/modification de données (et à l'investigation qu'il lui faut quelquefois mener sur certaines d'entre elles), de voir tout son travail perdu pour une raison qu'elle ne maîtrise pas.
    Tout à fait d'accord avec toi mais c'est pourtant utilisé. Plutôt je pense (j'espère) dans un contexte ou les risques sont faibles grace au contexte business.

  8. #28
    Christianchristian
    Invité(e)
    Par défaut
    Bonsoir,

    Citation Envoyé par jab
    Tout à fait d'accord avec toi mais c'est pourtant utilisé. Plutôt je pense (j'espère) dans un contexte ou les risques sont faibles grace au contexte business.
    C'est vrai que l'on voit quelquefois des drôles de trucs en développement (TP).

    ______________________________________________________

    Dans les grandes lignes, il a été possible de reconstituer les causes du -911 posé par "Mousquetaires".
    Ce serait intéressant et formateur de recueillir différents avis sur ce problème particulier afin de tenter de davantage préciser, sur le plan technique et peut-être fonctionnel, les causes précises ou vraisemblables de l'incident (quelques lignes peuvent suffir). Par exemple en dégageant des scénarios plausibles à partir de la structure de la table de service, de sa clé primaire, du contexte mise à jour en TP, plus particulièrement lors de la suppression des lignes en fin de session de travail utilisateur.....
    Aurais-tu une ou plusieurs idées ?

    C'est une proposition un peu intéressée, car j'ai besion de me remettre dans le bain.

    Cordialement,

  9. #29
    Membre expert
    Homme Profil pro
    Retraité
    Inscrit en
    Octobre 2005
    Messages
    1 473
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Finance

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 473
    Points : 3 283
    Points
    3 283
    Par défaut
    Citation Envoyé par jab
    Le principe: on enregistre dans le record le timestamp lors de l'update. Donc quand tu écris un record, tu peux relire le timestamp dans le fichier et le comparer à celui lu lors dur select initiale. S'il diffère c'est qu'une mise à jour à eu lieu entre les deux.
    Une variante peu coûteuse consiste à envoyer au poste local le TIMESTAMP lu avant l'affichage et ceci dans un contexte caché (même les terminaux passifs savaient gérer, alors le PC ...). Au retour la ligne à modifier est d'abord lue (et là le SELECT FOR UPDATE est indispensable) et le TIMESTAMP sauvegardé au local et renvoyé au central est comparé au TIMESTAMP qui vient d'être lu. Si les deux sont identique, alors c'est OK sinon on repart sur le poste local avec un message du genre "entité modifiée entre temps ...".

    Citation Envoyé par Christianchristian
    Par contre, ce que je ne perçois pas très bien c'est l'action à mener lorsque les timestamp sont différents.
    Pour la transaction qui fait ce constat, il semble qu'il soit trop tard, l'évènement est consommé.
    Il faut bien entendu faire la comparaison des TIMESTAMP avant toute modification des données.

    Citation Envoyé par Christianchristian
    Mais en ce qui concerne la première action je ne suis pas d'accord, sauf peut-être pour des sessions de travail utilisateur de courte durée (très très peu de saisie) et encore ! Il est très pénalisant et déroutant pour une personne ayant passé plusieurs minutes, ou souvent davantage, à la saisie/modification de données (et à l'investigation qu'il lui faut quelquefois mener sur certaines d'entre elles), de voir tout son travail perdu pour une raison qu'elle ne maîtrise pas.
    Certes je peux le concevoir mais il est très pénalisant aussi d'avoir dans le SI des données incohérentes d'un point de vue fonctionnel.
    De toute façon, j'ai rarement vu au cours de ma carrière des projets qui traitaient cette problématique ou même qui l'avait envisagée. Aprés c'est un choix fonctionnel ou une question de probabilités. Mais deux agents qui travaillent sur le même dossier ça peut donner des résultats curieux et le client final est rarement satisfait ...

  10. #30
    Christianchristian
    Invité(e)
    Par défaut
    Bonsoir,

    Citation Envoyé par Luc Orient
    Il faut bien entendu faire la comparaison des TIMESTAMP avant toute modification des données....
    Oui certes, j'avais bien compris !
    Il fallait entendre par : l'événement est consommé :
    L'état d'avancement de la session de travail utilisateur est tel, (elle est, à ce stade, en cours de finalisation) qu'il est un peu trop tard pour signaler à l'utilisateur l'impossibilité de prendre en compte son travail.
    Ce à quoi Jab m'a fait deux réponses dont l'une n'a pas emporté mon adhésion ce qui a motivé votre troisième remarque et l'autre à répondu à mon interrogation ainsi formulée : Par contre, ce que je ne perçois pas très bien .......il semble qu'il soit rop tard............:

    Citation Envoyé par Luc Orient
    Certes je peux le concevoir mais il est très pénalisant aussi d'avoir dans le SI des données incohérentes d'un point de vue fonctionnel.
    De toute façon, j'ai rarement vu au cours de ma carrière des projets qui traitaient cette problématique ou même qui l'avait envisagée. Aprés c'est un choix fonctionnel ou une question de probabilités. Mais deux agents qui travaillent sur le même dossier ça peut donner des résultats curieux et le client final est rarement satisfait ...
    C'est précisément pour ne pas avoir de données incohérentes (voir ci-dessus) ET ne pas risquer de pénaliser les utilisateurs qu'il convient d'éviter cette méthode.
    La fréquence à laquelle cet événement est susceptible d'intervenir n'a que peu d'importance car ce n'est pas plus compliqué de monter un (squelette applicatif de) pgm CICS qui tient compte des 2 règles enoncées ci-dessus.

    Cordialement,
    Dernière modification par Christianchristian ; 13/06/2006 à 02h10.

Discussions similaires

  1. Problème d'erreur SQL avec une DB2 sur un AS400
    Par Baboulinet_ dans le forum Langage
    Réponses: 1
    Dernier message: 11/10/2011, 11h14
  2. Problème DB2 IBM's Optim
    Par a_karim_fr dans le forum DB2
    Réponses: 2
    Dernier message: 06/09/2011, 17h31
  3. [DB2 sur AS/400] Problème convention de nommage
    Par Sarawyn dans le forum DB2
    Réponses: 4
    Dernier message: 21/07/2010, 15h50
  4. Question sur IBM DB2
    Par SQLpro dans le forum DB2
    Réponses: 3
    Dernier message: 12/06/2007, 14h57
  5. Problème de config SAMBA/DB2 sur AIX
    Par ALHER dans le forum DB2
    Réponses: 1
    Dernier message: 23/08/2006, 15h54

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