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

Administration SQL Server Discussion :

Rollback trop long après un déploiement par script [2014]


Sujet :

Administration SQL Server

  1. #1
    Membre habitué Avatar de Nadinette
    Femme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2012
    Messages
    264
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2012
    Messages : 264
    Points : 144
    Points
    144
    Par défaut Rollback trop long après un déploiement par script
    Salut,
    Ma société vient de se voir confier une grosse TMA.
    La base de données fait 400Go répliquée sur deux sites.
    On est donc pas en code first. Du coup, je suis trop jeune pour connaitre les anciens usages pour revenir en arrière quand on passe des scripts d'alter table etc pour déployer une évolution.
    SQL Server peut-il automatiquement rollbacker le passage d'un script ou on doit pondre le script pour revenir en arrière ?
    L'option restaure backup est exclue car ça prend 6 heures on peut faire jusqu'à un déploiement par jour.
    J'avoue que je suis bloquée. Je ne sais pas du tout quoi proposer.
    Pourriez-vous m'aider ?
    Merci

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 080
    Points : 30 801
    Points
    30 801
    Par défaut
    Pour faire simple et rapide :
    • Rollback possible sur les instructions DML (celles qui modifient les données : ajout, modification, suppression de lignes)
    • Pas de rollback possible sur les instructions DDL (celles qui modifient les structures : création/modification/suppression de tables, index, vues...)
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  3. #3
    Membre habitué Avatar de Nadinette
    Femme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2012
    Messages
    264
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2012
    Messages : 264
    Points : 144
    Points
    144
    Par défaut
    Du coup comment font les grosses boites ?
    Lorsqu'on a un cluster, c'est possible genre de casser la liaison, de lancer l'appli sur un seul serveur en gardant l'autre dans l'ancienne version et si ça marche de reconstruire la liaison pour resynchroniser avec la nouvelle structure ou le contraire si ça ne fonctionne pas ?
    Merci
    Désolé si ces questions sont bêtes mais je ne suis pas du tout dba

  4. #4
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par al1_24 Voir le message
    Pour faire simple et rapide :
    • Rollback possible sur les instructions DML (celles qui modifient les données : ajout, modification, suppression de lignes)
    • Pas de rollback possible sur les instructions DDL (celles qui modifient les structures : création/modification/suppression de tables, index, vues...)
    J'ai l'impression que Nadinette parle de Rollback au sens général de retour en arrière, pas un vrai rollback au sens transaction SQL
    Peux-tu nous confirmer ça ?

    Pour gérer le modèle de données, j'ai déjà employé des outils comme RedGate SQL Compare qui permet de générer des scripts de retour en arrière vers une version particulière mais ça demande de faire du versionnage proprement. Visual Studio peut aussi faire ça.
    Dans un autre société, pour chaque modification effectuée, on avait le script et un script de retour en arrière.
    Évidemment, il y a des limitations dans ces modifications : si tu supprimes une colonne, tu peux la recréer mais le contenu ne sera plus là.

    Cela-dit si c'est un besoin régulier de retour en arrière en Production, il faudrait sérieusement revoir les pratiques de tests et validations dans les autres environnements en premier.
    C'est une procédure qui devrait être employée de façon très exceptionnelle.

  5. #5
    Expert éminent sénior
    Avatar de mikedavem
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2005
    Messages
    5 450
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Distribution

    Informations forums :
    Inscription : Août 2005
    Messages : 5 450
    Points : 12 891
    Points
    12 891
    Par défaut
    Pour faire simple et rapide :
    • Rollback possible sur les instructions DML (celles qui modifient les données : ajout, modification, suppression de lignes)
    • Pas de rollback possible sur les instructions DDL (celles qui modifient les structures : création/modification/suppression de tables, index, vues...)
    L'annulation d'une opération DDL est possible sur SQL Server (par ex CREATE TABLE , ADD COLUMN etc ...)

    Dans un autre société, pour chaque modification effectuée, on avait le script et un script de retour en arrière.
    Cela-dit si c'est un besoin régulier de retour en arrière en Production, il faudrait sérieusement revoir les pratiques de tests et validations dans les autres environnements en premier.
    C'est une procédure qui devrait être employée de façon très exceptionnelle.
    Il faut en effet prévoir les scripts de retour (UNDO) dans le meilleur des mondes. Mais je rejoins Nadinette sur le fait que tout cela doit être validé et testé en amont avant de passer en prod.
    Les environnements INT / ACC etc .. sont faits pour cela.

    Évidemment, il y a des limitations dans ces modifications : si tu supprimes une colonne, tu peux la recréer mais le contenu ne sera plus là.
    En principe d'une version N à N+1 on ne supprime jamais une colonne qui est censée ne plus être utilisée et on attend le passage à une version >= N+2. En cas de souci, il possible de revenir en arrière assez facilement. C'est ce que nous pratiquons en tout cas chez nous dans le cadre de notre politique de CI/CD.

    ++

  6. #6
    Membre expérimenté

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2003
    Messages
    733
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2003
    Messages : 733
    Points : 1 668
    Points
    1 668
    Billets dans le blog
    8
    Par défaut
    Citation Envoyé par al1_24 Voir le message
    • Pas de rollback possible sur les instructions DDL (celles qui modifient les structures : création/modification/suppression de tables, index, vues...)
    C’est faux !
    Sous SQL Server, les commandes DDL, à quelques très rares exceptions près, peuvent être enrôlées dans une transaction.

    A+

    PS : J’avais pas vu la réponse, ci-dessus, beaucoup plus complète, de mikedavem
    "Une idée mal écrite est une idée fausse !"
    http://hamid-mira.blogspot.com

  7. #7
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par mikedavem Voir le message
    En principe d'une version N à N+1 on ne supprime jamais une colonne qui est censée ne plus être utilisée et on attend le passage à une version >= N+2. En cas de souci, il possible de revenir en arrière assez facilement. C'est ce que nous pratiquons en tout cas chez nous dans le cadre de notre politique de CI/CD.
    C'est intelligent ça !
    Perso, dans les pratiques que j'ai vu, on supprime tout de suite... ou jamais !

    Si c'est une colonne potentiellement sensible à supprimer, j'ai tendance à copier les données dans une table temporaire que je supprimerai quelques mois plus tard.

  8. #8
    Expert éminent sénior
    Avatar de mikedavem
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2005
    Messages
    5 450
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Distribution

    Informations forums :
    Inscription : Août 2005
    Messages : 5 450
    Points : 12 891
    Points
    12 891
    Par défaut
    Citation Envoyé par 7gyY9w1ZY6ySRgPeaefZ Voir le message
    C'est intelligent ça !
    Perso, dans les pratiques que j'ai vu, on supprime tout de suite... ou jamais !

    Si c'est une colonne potentiellement sensible à supprimer, j'ai tendance à copier les données dans une table temporaire que je supprimerai quelques mois plus tard.
    Ca joue aussi tant qu'on peut revenir en arrière

  9. #9
    Membre habitué Avatar de Nadinette
    Femme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2012
    Messages
    264
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2012
    Messages : 264
    Points : 144
    Points
    144
    Par défaut
    Salut,

    On est en présence d'une application ancienne développée avec des vielles techniques et une base de données maintenue par un développeur qui était le moins mauvais de la boite en SQL et en aucun cas un DBA.
    Il y a souvent des problèmes lors des livraisons mixtes (Code + Data).

    Pour rollbacker le code ça prend 5 minutes.
    pour remonter un backup ca prend 6 heures !

    Je veux trouver une solution qui réduirait drastiquement le temps de remontée du backup OU trouver une autre astuce.

    Merci

  10. #10
    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
    Si la mise à disposition des données est bien conçue, les applications ne lisent pas les tables directement, elles utilisent les vues.
    Quand une colonne devient obsolète, le plus simple est donc de faire une nouvelle version de vue dans laquelle cette colonne n'est plus référencée et laisser la table en l'état. Les applications migrent sur cette version de vue (sauf si certaines spécifiques consultent les archives)
    Le ratio bénéfice/risque de la suppression réelle de la colonne de la table est trop faible pour justifier ce genre de chantier.

  11. #11
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Nadinette Voir le message
    On est en présence d'une application ancienne développée avec des vielles techniques et une base de données maintenue par un développeur qui était le moins mauvais de la boite en SQL et en aucun cas un DBA.
    Il y a souvent des problèmes lors des livraisons mixtes (Code + Data).
    De ce que tu écris, le problème est peut-être là : besoin d'une personne ayant des connaissances avancées en base de données pour gérer l'évolution du modèle de données. Difficile de contourner le problème en faisant des mises en prod essai / erreur.

    Quand je fais des mises en production (et c'est vraisemblablement le cas des autres participants de ce fil), c'est excessivement rare qu'il y ait besoin d'un rollback.
    Et s'il y a problème de bd, je suis capable de patcher rapidement dans la majorité des cas.

    Si j'avais besoin de faire un rollback régulièrement à cause d'un problème bd, mon boss m'aurait remercié rapidement.

  12. #12
    Membre habitué Avatar de Nadinette
    Femme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2012
    Messages
    264
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2012
    Messages : 264
    Points : 144
    Points
    144
    Par défaut
    Dans ce cas faire preuve de talent c'est de régler le problème sans chercher un coupable sinon on vire toute la boite.

  13. #13
    Expert éminent sénior
    Avatar de mikedavem
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2005
    Messages
    5 450
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Distribution

    Informations forums :
    Inscription : Août 2005
    Messages : 5 450
    Points : 12 891
    Points
    12 891
    Par défaut
    Encore une fois la solution passe par la mise en place d'un environnement de livraison correcte pour éviter ce genre de problèmes en production ou les scénarios de déploiement peuvent être rejoués pour garantir qu'il n'y a aura à priori aucun souci le jour de la production (le risque zéro n'existe pas).
    Néanmoins tu peux utiliser les snapshots de bases de données SQL Server (disponible pour toutes les éditions SQL Server 2016 SP1+) pour rapidement revenir en arrière en cas de problème. J'ai déjà eu recours à ce genre de mécanisme dans le passé et cela fonctionne plutôt bien. Attention cependant à la place nécessaire (si beaucoup de pages sont touchées) et à la performance si important dans ton cas).

    Bien que pratique cette méthode a aussi l'inconvénient qu'il faille s'assurer que tu sois le seul à mettre à jour les données au moment de ta MEP car tu vas aussi annuler les changements dans le même intervalle.

    ++

  14. #14
    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
    Une autre possibilité est de faire un snapshot SQL Server de la base avant modif, afin de revenir en arrière par une restauration, en principe plus rapide qu'un rollback.

    Attention, pendant ce temps là, pas d'accès aux données par des utilisateurs sinon, il se verrons rétrogradées leurs données aussi !

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

  15. #15
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Customer Success Manager @Vertica
    Inscrit en
    Septembre 2008
    Messages
    8 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Customer Success Manager @Vertica
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 452
    Points : 17 820
    Points
    17 820
    Par défaut
    Citation Envoyé par Nadinette Voir le message
    Du coup comment font les grosses boites ?
    Chez un grand site marchand du web, géré sur SQL-Serveur, les livrables contenaient obligatoirement le ou les scripts de livraison ainsi que le ou les scripts de rollbacks.
    Ces scripts sont enchaînés sur tous les environnements hors prod : MEP puis Rollback dans la foulée, vérification que la plateforme est bien à l'état initial, puis MEP et vérification que la plateforme est bien à l'état attendu.
    Une fois ces étapes validées, le script de MEP pouvait être passé en production, le script de rollback étant jugé suffisamment fiable.
    Je me demande même si le MEP => Rollback n'était pas joué deux fois (en hors prod), mais je ne me souviens plus exactement.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Texte trop long remplacé par 3 petits points
    Par artifrui dans le forum Langage
    Réponses: 3
    Dernier message: 03/09/2012, 17h52
  2. Script, telnet et timeout trop long
    Par Chris1845 dans le forum Linux
    Réponses: 5
    Dernier message: 02/07/2009, 12h58
  3. script sql trop long
    Par foulla dans le forum SQL Procédural
    Réponses: 13
    Dernier message: 18/07/2008, 18h27
  4. Déploiement Tomcat trop long
    Par batataw dans le forum Tomcat et TomEE
    Réponses: 4
    Dernier message: 26/09/2007, 14h01
  5. script trop long message afficher par navigateur
    Par nocoment dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 16/05/2007, 18h40

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