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

MS SQL Server Discussion :

Corruption de schéma


Sujet :

MS SQL Server

  1. #1
    Membre à l'essai
    Inscrit en
    Juillet 2010
    Messages
    34
    Détails du profil
    Informations forums :
    Inscription : Juillet 2010
    Messages : 34
    Points : 19
    Points
    19
    Par défaut Corruption de schéma
    Bonjour,
    J'ai voulu restaurer une sauvegarde .bak sous sqlserver 2008. J'obtiens le message "corruption possible du schéma".

    - La requête ci-après n'a pas résolu le pb
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    restore database mabase
    from disk='xxxxxx.bak'
    with replace, CONTINUE_AFTER_ERROR
    - J'ai pu identifier la table à pb et j'ai généré un script (schéma+données) des autres tables, un à un. Mais le pb c'est que les compteurs sur les clés primaires sont supprimés donc à recréer. Ce qui n'est pas bon pour moi car je dois garder les mêmes valeurs de Id que l'ancienne base (re-créer impossible donc). Je m'explique un peu : dans l'ancienne table j'ai un Vendeur_id 1, 2, 3. Pour des raisons XYZ, le Vendeur_Id 2 a été supprimé. Lorsque j'importe cette table Vendeur, je dois seulement avoir les Id 1 et 3. donc si je regénère mes Ids, mon ancien Id 1 devient 1 mais mon Id 3 devient 2. alors que j'aimerais garder 1 et 3. Une prochaine insertion de vendeur devrait donner un Id 4 et non 3.

    Pourriez-vous me donner quelques tuyaux sur comment procéder? Actuellement mon ancienne base fonctionne correctement malgré cette corruption de schéma car c'est une table temporaire qui n'a pas de lien avec les autres. Mais pour la restaurer sur un autre serveur, je suis complètement boquée.

    Merci

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    332
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Juin 2002
    Messages : 332
    Points : 502
    Points
    502
    Par défaut
    Bonjour, ne peux-tu pas simplement régler le problème à la source et générer un autre backup?

    Sinon, il existe des outils qui aident à faire des backups.

    Par exemple RedGate.

    Il y a une période d'essai de 14 jours et ce qui est intéressant avec ce genre d'outil c'est qu'ils ont une certaine approche didactique: ils vont élaborer sur les erreurs rencontrées et tu peux inspecter le code qui est généré, ce qui est un excellente source d'apprentissage.

    Ou encore, s'il ne s'agit que de transporter une partie des tables pour faire des tests par exemple, tu pourrais simplement utiliser Tasks->Import Data...

  3. #3
    Membre à l'essai
    Inscrit en
    Juillet 2010
    Messages
    34
    Détails du profil
    Informations forums :
    Inscription : Juillet 2010
    Messages : 34
    Points : 19
    Points
    19
    Par défaut
    Tous mes backups sont inutilisables (les anciens comme les nouveaux) : toujours le même pb de corruption de schéma.
    Je ne sais pas si c'est faisable mais j'aimerai faire un backup sans la table T1 qui est la source du pb. une idée? je ne connais que la requête pour un FULL BACKUP

  4. #4
    Membre habitué
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Juin 2011
    Messages
    118
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2011
    Messages : 118
    Points : 180
    Points
    180
    Par défaut
    Bonjour,

    Essaye de faire un :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    DBCC CHECKTABLE(nom_de_la_table)
    DBCC CHECKCATALOG(nom_de_la_base)
    voir si'l remonte des informations.

    Attention si le serveur est en production et très sollicité, ça peut causer des ralentissements importants.

    Il y a une option qui permet de réparer les erreurs, mais avec un risque important de perdre des données. Suivant l'importance de cette table il faut utiliser l'option de réparation ou non...

  5. #5
    Membre expert Avatar de iberserk
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Novembre 2004
    Messages
    1 795
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 795
    Points : 3 173
    Points
    3 173
    Par défaut
    Vous dites que c'est une table temporaire mais je doutes que ce soit le cas, les table temporaires étant stockées dans tempdb, votre table est plutôt une table que vous videz et remplissez régulièrement et dont la pérennité des données vous importe peu...
    Tous mes backups sont inutilisables
    Cela veux dire que vous n'avez pas de DBCC CHECKDB en plan de maintenance?

    Pensez-y pour l'avenir...

    Votre base est elle répliquée ou possède t'elle des SNAPSHOT?

  6. #6
    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
    Tu peux effectivement commencer par faire un DBCC CHECKDB sur ta base de données et voir où se situe le problème (sans option de réparation).

    Peux-tu nous fournir le résultat de la commande suivante en remplaçant tabase par le nom de ta base de données :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DBCC CHECKDB('tabase') WITH NO_INFOMSGS,  ALL_ERRORMSGS, TABLERESULTS
    ++

  7. #7
    Membre à l'essai
    Inscrit en
    Juillet 2010
    Messages
    34
    Détails du profil
    Informations forums :
    Inscription : Juillet 2010
    Messages : 34
    Points : 19
    Points
    19
    Par défaut
    Bonjour et merci pour vos réponses/conseils.
    En fait, je fais tourner une sauvegarde automatique hebdo et comme il n'y avait pas de msg d'erreurs, je ne me suis aperçu de rien (erreur de débutante ! ).
    ce n'est que lorsque on m'a demandé de migrer la base que j'ai obtenu l'erreur. Les sauvergades saines que j'ai en ce moment remonte à plusieurs mois donc pas interessant.
    Sinon pour le checkdb, voici le résultat :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Msg*211, Niveau*23, État*51, Ligne*1
    Corruption du schéma possible. Exécutez DBCC CHECKCATALOG.
    Msg*0, Niveau*20, État*0, Ligne*0
    Une erreur grave s'est produite sur la commande actuelle. Les résultats éventuels doivent être ignorés.

  8. #8
    Membre à l'essai
    Inscrit en
    Juillet 2010
    Messages
    34
    Détails du profil
    Informations forums :
    Inscription : Juillet 2010
    Messages : 34
    Points : 19
    Points
    19
    Par défaut
    DBCC CHECKCATALOG(mabase):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Exécution de DBCC terminée.
    Aucun autre message d'erreur

    DBCC CHECKTABLE(ma_table)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Msg*211, Niveau*23, État*51, Ligne*1
    Corruption du schéma possible. Exécutez DBCC CHECKCATALOG.

  9. #9
    Membre habitué
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Juin 2011
    Messages
    118
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2011
    Messages : 118
    Points : 180
    Points
    180
    Par défaut
    A tout hasard, tu as quelque chose avec cette requête :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM msdb..suspect_pages

  10. #10
    Membre à l'essai
    Inscrit en
    Juillet 2010
    Messages
    34
    Détails du profil
    Informations forums :
    Inscription : Juillet 2010
    Messages : 34
    Points : 19
    Points
    19
    Par défaut
    ça ne donne aucun résultat...

  11. #11
    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
    Dans ton cas tu as une corruption sévère au niveau du catalogue système qui empêche dbcc checkdb de s'exécuter correctement. Cela risque de poser problème même pour ta restauration du coup.

    Tu ne vas pas voir d'autre choix que d'importer manuellement ta table et des données et surtout refaire un dbcc checkdb derrière pour voir si tout est correct.

    ++

  12. #12
    Membre à l'essai
    Inscrit en
    Juillet 2010
    Messages
    34
    Détails du profil
    Informations forums :
    Inscription : Juillet 2010
    Messages : 34
    Points : 19
    Points
    19
    Par défaut
    J'ai déjà fait un import manuel de toutes mes tables et données mais le souci c'est que le compteur sur les clés primaires doit être recréé. mon premier post explique en détail le pb.
    une petite astuce? avant, il n'y avait pas ce pb sur sql2000 et sql2005. on définissait juste que le champ devait être incrémenté et on pouvait spécifier la prochaine valeur. pourquoi ce n'est pas possible sur sql2008...je n'arrive pas trop à me l'expliquer !!!

  13. #13
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 896
    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 896
    Points : 53 126
    Points
    53 126
    Billets dans le blog
    6
    Par défaut
    Si bien sur il faut utiliser
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DBCC CHECKIDENT (nom_table, RESEED , 123);
    En mettant le bon nom de table et la valeur du futur incrément.

    A l'avenir faite un DBCC CHECKDB tous les jours.

    Dans l'immédiat, changez vos disques !

    A +

  14. #14
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Points : 13 092
    Points
    13 092
    Par défaut
    Bonjour,

    Pour des raisons XYZ, le Vendeur_Id 2 a été supprimé. Lorsque j'importe cette table Vendeur, je dois seulement avoir les Id 1 et 3. donc si je regénère mes Ids, mon ancien Id 1 devient 1 mais mon Id 3 devient 2. alors que j'aimerais garder 1 et 3.
    Pour insérer vos "anciennes données" avec vos "anciens ID", vous pouvez forcer l'insertion des ID :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    SET IDENTITY_INSERT Vendeur ON
    INSERT INTO Vendeur (IdAuto, Col1, col2) VALUES
        (1, 'aa', 'xx')
    ,   (3, 'bb', 'yy')
    ,   ...
    SET IDENTITY_INSERT Vendeur OFF

  15. #15
    Membre à l'essai
    Inscrit en
    Juillet 2010
    Messages
    34
    Détails du profil
    Informations forums :
    Inscription : Juillet 2010
    Messages : 34
    Points : 19
    Points
    19
    Par défaut
    Mon pb est résolu (même je ne comprends pas trop la logique )
    - Installer sql2005 sur le nouveau serveur (laisser tomber sql2008)
    - Importer les tables 1 à 1
    - Re-créer les compteurs sur les clés primaires (ça marche, il garde mes anciennes valeurs. Mais à la prochaine insertion, il me met dernier_id + 1)...oufffff
    - Ne plus oublier le chekdb dans mon plan de maintenance....

    Merci à vous de vous être penché sur mon pb. mais je n'ai toujours pas compris le pb avec sql2008 !!! tant pis, je creuserai le sujet une prochaine fois. pour l'instant je suis en plein dans l'imporation de mes tables

  16. #16
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 896
    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 896
    Points : 53 126
    Points
    53 126
    Billets dans le blog
    6
    Par défaut
    Une autre façon de faire aurait été de faire un RESTORE PAGE en cherchant dans une très vieille sauvegarde les pages non corrompues puis en appliquant tous les journaux de transaction...

    Mais cela uniquement à partir de la version Enterprise.

    A +

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

Discussions similaires

  1. [Modélisation] Schéma constellation
    Par senke dans le forum Décisions SGBD
    Réponses: 8
    Dernier message: 13/05/2016, 13h27
  2. grant sur un schéma ou und bd
    Par Bouboubou dans le forum PostgreSQL
    Réponses: 9
    Dernier message: 28/02/2004, 13h05
  3. Réponses: 3
    Dernier message: 14/02/2004, 10h10
  4. Générer automatiquement un schéma entité/association
    Par worldchampion57 dans le forum Outils
    Réponses: 3
    Dernier message: 03/06/2003, 17h11
  5. [Crystal Report 9] Changer de schéma avec Oracle
    Par sur_uix dans le forum SAP Crystal Reports
    Réponses: 2
    Dernier message: 14/11/2002, 12h19

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