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 :

stuck "In Recovery"


Sujet :

Administration SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de Monstros Velu
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2003
    Messages
    619
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2003
    Messages : 619
    Par défaut stuck "In Recovery"
    Bonjour,

    j'ai lancé un delete de 16 000 000 de lignes dans une table, et le log a pris tout la place sur le disque dur du server (de prod). Du coup, la DB était inutilisable.
    Du coup, j'ai annulé l'opération de delete... J'ai eu le message de Management Studio "Query was cancelled by user." mais la base est en "Recovery Mode" depuis.

    Que faut-il faire ?

  2. #2
    Membre éclairé Avatar de Monstros Velu
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2003
    Messages
    619
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2003
    Messages : 619
    Par défaut
    Il suffisait d'attendre... 45 minutes c'est long !

  3. #3
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    22 001
    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 : 22 001
    Billets dans le blog
    6
    Par défaut
    Un rollback est souvent beaucoup plus long qu'un COMMIT. Parce qu'il faut lire le JT en arrière alors que d'autres transactions l'avance !

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

  4. #4
    Modérateur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2005
    Messages
    5 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Haute Garonne (Midi Pyrénées)

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

    Informations forums :
    Inscription : Janvier 2005
    Messages : 5 826
    Par défaut
    Bonjour,

    Je crois que la colonne percent_complete de la DMV sys.dm_exec_requests prend une valeur non nulle dans le cas d'une récupération.
    Si tel est le cas, cela vous aurait permis de connaître l'avancement de la récupération .
    En revanche je suis certain qu'elle prend une valeur non-nulle pour un ROLLBACK.

    j'ai lancé un delete de 16 000 000 de lignes dans une table, et le log a pris tout la place sur le disque dur
    En effet, quel que soit le mode de récupération de votre base de données, le moteur écrit d'abord les données supprimées dans le fichier du journal de transaction avant de vider les pages de la table dans le fichier de données.

    Vous pouvez donc faire des lots de DELETE (DELETE TOP 100000 par exemple) dans un WHILE.

    Si vous utilisez le mode de récupération FULL OU BULK_LOGGED, entre chaque DELETE, procédez à une sauvegarde du fichier du journal des transactions, de manière à ne pas le faire grossir.
    Si vous êtes sous SQL Server 2008, vous pouvez rajouter l'option WITH COMPRESSION à l'instruction BACKUP LOG

    Si vous êtes dans le mode SIMPLE, vous n'avez pas besoin de sauvegarder le journal.

    Pour connaître le mode de récupération de votre base de données :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT name, recovery_model_desc
    FROM sys.databases
    WHERE name = 'maBD'
    @++

  5. #5
    Membre éclairé Avatar de Monstros Velu
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2003
    Messages
    619
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2003
    Messages : 619
    Par défaut
    On est en 2005, et en mode FULL. Et il y a une sauvegarde du fichier de log toutes les heures.

    Suite à cet incident, on a fait un nettoyage de l'espace disque du server, l'ajout de fichiers de log sur un disque qui servait à autre chose et sur lequel il y avait de la place, et une suppression par lot (une boucle contenant un begin tran et un commit). C'est finalement passé.

  6. #6
    Modérateur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2005
    Messages
    5 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Haute Garonne (Midi Pyrénées)

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

    Informations forums :
    Inscription : Janvier 2005
    Messages : 5 826
    Par défaut
    l'ajout de fichiers de log
    Si vous parlez du fichier du journal des transactions pour SQL Server, sachez que cela ne vous a procuré que de l'espace en plus, mais ne vous fait rien gagner en termes de performance, car ce fichier est écrit séquentiellement.

    Si vous avez donc plusieurs fichiers pour le journal des transactions, ceux-ci seront utilisés tour à tour

    @++

Discussions similaires

  1. Quote et double quote
    Par aktos dans le forum Langage
    Réponses: 8
    Dernier message: 05/01/2007, 19h55

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