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 :

Comment générer un log en output d'une requete ?


Sujet :

MS SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Février 2011
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Février 2011
    Messages : 14
    Par défaut Comment générer un log en output d'une requete ?
    Bonjour,
    J'ai un batch qui lance un script et qui genere un fichier csv en sortie, comment puis je avoir aussi un log, afin d'avoir les messages d'erreur en cas de soucis ?

    Voici le contenu (simplifié) du .bat :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ECHO ExtractReporting.sql 
    sqlcmd -U %user% -P %passwd% -S %server% -d %dbname% -i "%SCRIPTSQL%\ExtractReporting.sql" -o "%SCRIPTSQL%\Monfichier.csv" -h-1 -s ";" -W >>c:\TEMP\ExtractReporting.log
    Le log est bien généré mais il est vide meme lorsqu'il y a une erreur...
    Comment puis je faire pour obtenir un fichier log ?
    Par avance merci pour votre aide !

  2. #2
    Membre Expert

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2007
    Messages
    1 216
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Août 2007
    Messages : 1 216
    Par défaut
    Est ce que le parametre:
    -m-1
    vous aide ?

  3. #3
    Membre averti
    Inscrit en
    Février 2011
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Février 2011
    Messages : 14
    Par défaut
    Je viens de tester ce parametre et le log reste toujours vide...
    Je ne dois pas etre le 1er à vouloir avoir un log suite à requete sql. est ce que c'est si complexe que cela ?

  4. #4
    Membre Expert

    Homme Profil pro
    Chargé de Développement et d'Analyse de données
    Inscrit en
    Mars 2010
    Messages
    1 278
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chargé de Développement et d'Analyse de données
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2010
    Messages : 1 278
    Par défaut
    sqlcmd ne dispose pas d'option pour générer nativement de fichier d'erreur comme le fait par exemple l'utilitaire bcp (option -e fichier_erreur.log).
    Dans ton cas tu jouer avec les options -m et -o (fichier de sortie).
    est ce que l'exécution des commandes du fichier d'entrer .sql renvoie des résultats ?
    Essaye de mettre SET NOCOUNT OFF au début du fichier .sql pour voir

    A+
    Etienne ZINZINDOHOUE
    Billets-Articles

  5. #5
    Membre Expert

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2007
    Messages
    1 216
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Août 2007
    Messages : 1 216
    Par défaut
    Je constate que:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sqlcmd -S.\test -dTest -i"error.sql" -m-1 >> c:\temp\logError.txt
    Produit un fichier log:
    --Probleme avec nom du serveur
    HResult 0xFFFFFFFF, Level 16, State 1
    SQL Network Interfaces: Error Locating Server/Instance Specified [xFFFFFFFF].
    --Probleme avec nom du serveur (2eme)
    HResult 0xFFFFFFFF, Level 16, State 1
    SQL Network Interfaces: Error Locating Server/Instance Specified [xFFFFFFFF].
    ---------------------------------------
    -- Log standard
    The number of orphaned users fixed by updating users was 0.
    The number of orphaned users fixed by adding new logins and then updating users was 0.
    ---------------------------------------
    -- Log avec -m-1
    Msg 15295, Level 0, State 1, Server SERVERNAME\TEST, Procedure sp_change_users_login, Line 273
    The number of orphaned users fixed by updating users was 0.
    Msg 15294, Level 0, State 1, Server SERVERNAME\TEST, Procedure sp_change_users_login, Line 274
    The number of orphaned users fixed by adding new logins and then updating users was 0.
    ---------------------------------------
    Par contre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sqlcmd -S.\test -dTest -i"error.sql" -o"erreurLog-o.txt" -m-1 >> c:\temp\logError.txt
    produit des outputs uniquement dans le fichier erreurLog-o.txt et non dans le fichier logError.txt qui est cree vide.

    Vous pouvez verifier la bonne execution de votre script en utilisant des controles sur le return code de sqlcmd.
    Vous pouvez vous reporter a l'exemple F de cet article.

    Bonne journee

  6. #6
    Expert confirmé
    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 : 46
    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
    Par défaut
    Difficile de faire ce que vous voulez avec SQLCMD.

    Soit vous utilisez l'option -o et vous aurez l'ensemble de vos résultats dans le fichier concerné (réussite ou échec) soit vous utilisez simplement le redirecteur d'erreur prévu à cet effet -r0|1

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sqlcmd -E -i "c:\temp\sqlcmd.sql" -r1 2> "c:\temp\sqlcmderror.txt"
    Néanmois si vous en avez la possibilité vous pouvez utiliser powershell de la manière suivante avec invoke-sqlcmd :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    $Server = "localhost"
    $Database = "AdventureWorks"
    $LogFile = "c:\temp\sqlcmderror.txt"
    $error.Clear()
     
    $Query = "select * from dbo.databaselog"
     
    try
    {
    invoke-sqlcmd -ServerInstance $Server -Database $Database -Query $query  | Out-File -filePath "C:\temp\sqlcmd.txt"
    }
    catch
    {
     $error | Out-File -filePath "C:\temp\sqlcmderror.txt"
    }
    ++

  7. #7
    Membre averti
    Inscrit en
    Février 2011
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Février 2011
    Messages : 14
    Par défaut
    Merci à tous pour vos differentes suggestions.
    J'ai testé avec l'option SET NOTCOUNT OFF mais le log reste toujours vide.
    Comme vous l'avez mentionné je joue avec l'option -o pour obtenir le fichier csv (au lieu du fichier log) et c'est le plus important.
    En cas d'erreur, le message apparait dans le csv.
    Je vais explorer la piste du powershell.
    Je pense que l'on peut fermer le post.
    Merci beaucoup pour votre aide !

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

Discussions similaires

  1. [2.x] Comment générer un log des téléchargements ?
    Par philodido dans le forum Symfony
    Réponses: 5
    Dernier message: 19/08/2013, 19h04
  2. Réponses: 6
    Dernier message: 27/06/2007, 10h33
  3. Réponses: 1
    Dernier message: 02/04/2007, 11h23
  4. [WebForms]Comment générer dynamiquement tout ou partie d'une page html
    Par skywaukers dans le forum Général Dotnet
    Réponses: 4
    Dernier message: 02/01/2007, 11h42
  5. Réponses: 11
    Dernier message: 31/08/2006, 20h19

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