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 :

Rejouer les logs SQL


Sujet :

MS SQL Server

  1. #1
    Membre régulier
    Inscrit en
    Novembre 2006
    Messages
    96
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Novembre 2006
    Messages : 96
    Points : 71
    Points
    71
    Par défaut Rejouer les logs SQL
    Bonjour,

    J'ai un gros problème avec mon serveur SQL.
    J'ai une application assez conséquente sur SQL Server 2005. Mercredi matin panique, tout le monde m'appelle en me disant que certaines fonctionnalité ne fonctionnent plus!

    Après recherche, il s'agit d'une table qui ne réponds plus, j'ai beau l'interroger, rien n'y fait, le serveur rame sans résultat. Seul moyen rapide que j'ai trouvé : redémarrer le service SQL Server. Et là pas de souci.

    Ce problème m'est déjà arrivé 2 fois, je me dis alors que cela doit être une de mes proc qui fait planter la table.

    Je décide sur un serveur de test de rejoué les log pour savoir à partir de quel heure ma base n'as plus fonctionné :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    restore database TEST
    from disk='D:\***.bak'
    with 
    norecovery,
    replace;
     
    go
     
    declare @date as datetime
    set @date = convert(datetime, '17/10/2007 09:00:00', 103)
     
    restore log TEST from disk='D:\***_log.bak'
    with 
    stopat=@date;
    Je découvre que la dernière date saisie est 8:20 après plus rien jusqu'au redémarrage du service.
    Mais ma base dans cet état fonctionne correctement!

    En clair j'aimerais savoir comment trouvé ce qui a fait planter ma table, je pensais que rejoué les log me permettrait de le savoir, mais ce n'est pas le cas, car la table est toujours accessible après avoir rejoué les log jusqu'à une heure ou elle été officiellement inutilisable!

    Pouvez vous m'aidez s'il vous plait? Je ne sais plus ou chercher...
    Merci d'avance

    Renaud

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    1 056
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 056
    Points : 1 216
    Points
    1 216
    Par défaut
    bonjour,

    quand vous dites :
    j'ai beau l'interroger, rien n'y fait, le serveur rame sans résultat
    la requête ne rend jamais la main ?

    avez-vous des erreurs dans le journal du sql serveur (fichier ERRORLOG) ?
    Emmanuel T.

  3. #3
    Membre régulier
    Inscrit en
    Novembre 2006
    Messages
    96
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Novembre 2006
    Messages : 96
    Points : 71
    Points
    71
    Par défaut
    Bonjour,

    Exactement, la requête ne me rend jamais la main, un simple select top 10 tourne en rond en attendant la réponse du serveur ...
    D'autre part je dois avoué n'avoir aucune idée de comment regardé dans le errorlog, j'ai bien essayé xp_readerrorlog, mais malheureusement cette procédure n'a été capable de m'afficher que les log depuis le redémarrage du serveur...

    Une idée alors?

    En tout cas merci pour ton attention
    Renaud

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    1 056
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 056
    Points : 1 216
    Points
    1 216
    Par défaut
    Il faut regarder dans le répertoir LOG sous l'emplacement où SQL Server a été installé. Normalement, il devrait y avoir un fichier nommé ERRORLOG, sans extension.

    Sinon, la table a combien d'enregistrments ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    execute sp_spaceused <table>
    Emmanuel T.

  5. #5
    Membre régulier
    Inscrit en
    Novembre 2006
    Messages
    96
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Novembre 2006
    Messages : 96
    Points : 71
    Points
    71
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     rows        reserved           data               index_size         unused
    ----------- ------------------ ------------------ ------------------ ------------------
    245637      14032 KB           10128 KB           3824 KB            80 KB
    C'est ce que j'ai obtenue.

    C'est une table relativement grosse, sachant qu'il s'agit d'une table ou les opérateur inscrive toutes les étapes de leur travail, donc entre 300 et 400 pointage par jour régulièrement archivés.

    J'ai essayé ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SELECT 
    	Operation
    	, [Transaction ID] 
    	, SPID
    	, [Begin Time]
    	, [End Time]
    	, [Transaction Name]
    FROM 
    	::fn_dblog(null, null)
    Je pense connaitre maintenant la transaction qui a fait planter la table à la seconde prés, mais je ne sais pas quel est le code associé ...

    Renaud

  6. #6
    Membre éprouvé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    1 056
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 056
    Points : 1 216
    Points
    1 216
    Par défaut
    ah oui, j'oubliais, est-il possible de poster la requête complète également ?
    Emmanuel T.

  7. #7
    Membre régulier
    Inscrit en
    Novembre 2006
    Messages
    96
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Novembre 2006
    Messages : 96
    Points : 71
    Points
    71
    Par défaut
    Je pense que tu veux dire la requête qui ne renvois pas de réponse.
    Tout simplement :
    Et rien ça tourne dans le vide ...

    EDIT : j'ai pu regarder le errorlog, et entre 0:00 et 10:00 (heure à laquelle j'ai redémarré le service), il n'y à rien du tout!

  8. #8
    Membre éprouvé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    1 056
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 056
    Points : 1 216
    Points
    1 216
    Par défaut
    Cette requête est censée retourner toutes les lignes de la table qui fait 200 000 lignes. Est-ce nécessaire ? N'est-il pas possible de filtrer ?

    Lorsque vous lancez le select *, le management studio
    peut avoir des difficultés à afficher les 200000 lignes, ce qui peut prendre un certain temps (mais bon, 200000 lignes, c'est loin d'être insurmontable)

    Qu'entendez-vous par "faire planter ma table" ? La table est peut-être verrouillée (-> utiliser la commande sp_lock pour vérifier les verrous) ?
    Lorsque le problème survient et que vous lancer la commande sp_who, est-ce qu'il y a des valeurs différentes de 0 dans la colonne "blocked" ?

    bon courage
    Emmanuel T.

  9. #9
    Expert confirmé
    Avatar de rudib
    Homme Profil pro
    Fakir SQL Server & NoSQL
    Inscrit en
    Mai 2006
    Messages
    2 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Fakir SQL Server & NoSQL

    Informations forums :
    Inscription : Mai 2006
    Messages : 2 573
    Points : 4 043
    Points
    4 043
    Par défaut
    Citation Envoyé par RaelRiaK Voir le message
    Exactement, la requête ne me rend jamais la main, un simple select top 10 tourne en rond en attendant la réponse du serveur ...
    Durant l'attente, que vois-tu dans le moniteur d'activité (onlget Gestion de SSMS) ?
    Ou avec ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM sys.dm_os_waiting_tasks
    Rudi Bruchez
    Rudi Bruchez EIRL, solutions MS SQL Server et NoSQL
    LinkedIn - [Outil libre de diagnostic SQL Server : Sql Trismegiste]
    LIVRES : Optimiser SQL Server -
    Microsoft SQL Server 2012 Security Cookbook
    - les bases de données NoSQL

    e-learning : LinkedIn Learning - Pluralsight

  10. #10
    Membre régulier
    Inscrit en
    Novembre 2006
    Messages
    96
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Novembre 2006
    Messages : 96
    Points : 71
    Points
    71
    Par défaut
    Bonjour

    D'après Microsoft, il pourrais s'agir d'un Dead lock (ce que je pensais également).

    Le SELECT * n'est en fait qu'un test, ma requete réél est beaucoup plus filtré (une 20aine de ligne maximum). Mais même un SELECT TOP 10 * ne fonctionne pas ...

    Dans le moniteur je vois des utilisateur connecté qui exécutent certaines proc ou requêtes, mais j'ai beau couper celle-ci, rien n'y fait ...

    En tout cas merci pour votre intérêt
    Renaud

Discussions similaires

  1. [SQL Server 2005] Tronquer les logs si session active
    Par CarlaJohnson dans le forum Administration
    Réponses: 14
    Dernier message: 07/06/2011, 10h49
  2. Rejouer les archives logs
    Par fulub dans le forum Administration
    Réponses: 7
    Dernier message: 06/04/2009, 11h59
  3. [SQL Server] Restaurer sans les logs ?
    Par psafp dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 27/11/2006, 11h54
  4. NOW() et rejouer les logs
    Par Naruseb dans le forum SQL Procédural
    Réponses: 2
    Dernier message: 21/11/2006, 14h46
  5. Réponses: 2
    Dernier message: 24/08/2006, 11h02

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