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 :

Récupération du __$start_LSN de la table de capture


Sujet :

Développement SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2021
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juillet 2021
    Messages : 15
    Par défaut Récupération du __$start_LSN de la table de capture
    Bonjour,
    Dans le but de pouvoir annulé des opérations faite sur une table j'ai activé la capture des changements (cdc).
    Cette table contient plusieurs arbres qui ont leur identifiants d'arbre.
    Pour se faire j'ai créer une table historique dans laquelle j'ajoute via les procédure stockés de modification un libellé qui servira à connaitre les modifications coté utilisateur.
    Je parviens bien à récupérer la date de début de la transaction et a créer le libellé mais je n'arrive pas à récupérer le $__start_lsn associé.
    Pour se faire j'ai essayé de faire les modifications et calculer le libellé et la date de début de la transaction, finir la transaction et lancé la procédure qui entre les valeurs dans a table historique.
    Mon problème est le suivant : la procédure n'arrive pas à récupérer le $__start_lsn associé, mais si je fait la même requête manuellement le résultat est le bon.
    La requête étant la suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
     SELECT @SLN=C.__$start_lsn
    			FROM [cdc].[lsn_time_mapping] AS B
    			INNER JOIN [cdc].[dbo_T_DEVPART_DPT_CT] AS C
    			ON B.start_lsn=C.__$start_lsn
    			WHERE C.DEV_ID=@DEV_ID AND B.tran_begin_time=@DVT_TSTAMP;
    où DEV_ID est l'identificateur de l'arbre et DVT_TSTAMP est la date de début de la transaction.
    L'identificateur de l'arbre est présent ici juste pour être sur que si il y a plusieurs transaction au même instant t le bon est choisi.
    Merci d'avance.

  2. #2
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 998
    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 998
    Billets dans le blog
    6
    Par défaut
    il existe des outils pour cela comme Apex Log Explorer....

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

  3. #3
    Membre habitué
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2021
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juillet 2021
    Messages : 15
    Par défaut
    Bonjour,
    J'ai bien vu votre réponse et vous remercie pour votre temps.
    J'ai bien regardé l'outil Apex Log Explorer mais celui ci ne convient pas à l'objectif recherché.
    Je me suis peux être mal expliqué dans ma démarche.
    La table en question est une table de contenu de devis qui sont identifié par un ID : DEV_ID.
    Mon but est de fournir une option de retour en arrière vers un état précédent d'un devis particulier sans changé les autres et utilisable par des utilisateurs non initié au sql.
    Cette fonctionnalité devant être utilisé par des utilisateurs non initié au sql je souhaitais faire en sorte de créer une table historique qui indique quel opération "visible" par l'opérateur a été effectué ( par exemple insertion de l'article X dans le devis Y).
    La structure de cette table historique est la suivante :
    -DVT_ID : ID de l'historique ( clé primaire auto incrémenté)
    -DVT_LIBELLE : Libellé associé à l'opération effectué
    -DVT_TSTAMP : Heure du début de la transaction
    -DVT_LSN : LSN associé à la transaction
    -DEV_ID : ID Devis impacté par l'opération
    -DVT_USECRE : Nom de la personne ayant effectué l'opération
    Cette table historique servant à choisir l'état du devis à laquelle on souhaite revenir. C'est pourquoi je souhaitais calculé la valeur du LSN pour l'opération effectuée.
    Le retour en arrière se faisant en déterminant la liste de toutes les opérations effectués sur le devis sélectionné précédent le point de retour choisie et les inverser par la suite via une procédure stockée.
    Pour se faire j'avais prévu d'utiliser cette table d'historique qui avec ce système de stack repérer avec le champ SLN toutes les transaction à inverser.
    L'inversion étant calculer avec une jointure entre la liste des opérations de l'historique et de la table de capture.
    Le problème étant que le calcul de ce champ ne fonctionnais pas directement après la transaction qui a effectué la modification du devis.
    Merci

  4. #4
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 998
    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 998
    Billets dans le blog
    6
    Par défaut
    Le journal de transaction n'a qu'un but interne afin d'assurer l'atomicité des transaction. Accessoirement il peut être utiliser pour faire revenir L'INTÉGRALITÉ DE LA BASE en arrière... pas quelques données par ci par là... L'utiliser pour des besoins logiques est hautement casse gueule et proprement stupide car il existe des outils beaucoup plus adapté à votre demande... par exemple CHANGE TRACKING, CHANGE DATA CAPTURE, DATABASE AUDIT ou encore, ce que je préconiserait dans votre cas l'utilisation d'une table temporelle avec historisation automatique...

    Pour ce dernier cas, lisez la présentation que j'en avais fait chez Microsoft France pour les journées MS Cloud Summit à paris en 2017 :
    https://blog.developpez.com/sqlpro/p...r-presentation

    Suivez les exemples dans les PJ pour comprendre et savoir utiliser !

    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. Récupération de script de création de tables
    Par top-dogg dans le forum Oracle
    Réponses: 2
    Dernier message: 04/12/2006, 09h48
  2. Réponses: 2
    Dernier message: 12/05/2006, 12h00
  3. Récupération de tous les noms de tables d'une bdd paradox
    Par izidor dans le forum Bases de données
    Réponses: 6
    Dernier message: 23/02/2006, 17h41
  4. Réponses: 4
    Dernier message: 26/04/2005, 11h35
  5. [C#] Récupération d'une image depuis une table SQL Server
    Par borgfabr dans le forum Accès aux données
    Réponses: 10
    Dernier message: 08/04/2004, 13h20

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