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 :

[SQL Agent] Requête effectuée tous les jours à minuit


Sujet :

MS SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    183
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 183
    Par défaut [SQL Agent] Requête effectuée tous les jours à minuit
    Bonjour, j'aimerais savoir ce qui ne va pas dans mon code :

    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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
     
    BEGIN TRY 
        BEGIN TRAN 
        DECLARE @jobId BINARY(16) 
        --Add job 
        EXEC msdb.dbo.sp_add_job @job_name=N'PurgeTS7Ans', @job_id = @jobId OUTPUT 
        --Add step to job 
        EXEC msdb.dbo.sp_add_jobstep @job_id=@jobId, @step_name=N'Requête à effectuer',  
        @step_id=1,  
        @subsystem=N'TSQL',  
        @command=N'DELETE FROM Action_OPE WHERE     (DATEDIFF(dd, TimeStmp, GETDATE()) > 2558);',   
        @database_name=N'Bat_B1',  
        @flags=0 
        --Add schedule to job 
        EXEC msdb.dbo.sp_add_jobschedule @job_id=@jobId, @name=N'A_minuit',  
        @freq_type=1,  
        @freq_interval=4,  
        @freq_subday_type=1,    
        @freq_subday_interval=1,  
        @freq_relative_interval=0,  
        @freq_recurrence_factor=1,  
        @active_start_date=NULL,  
        @active_end_date=99991231,  
        @active_start_time=000000,  
        @active_end_time=235959 
        COMMIT TRAN 
    END TRY 
    BEGIN CATCH 
        SELECT ERROR_Message(), ERROR_Line(); 
        ROLLBACK TRAN 
    END CATCH
    Ce job doit me permettre d'effectuer une suppression des enregistrements vieux de plus de 7 ans dans ma table "Action_Ope" tous les jours à minuit mais j'ai vérifié et celui ci ne fonctionne pas. Pouvez vous m'aider à identifier la portion de l'algorithme fausse ?

    Merci d'avance et bonne journée.

    PS : voici l'aide sur le MSDN http://msdn.microsoft.com/en-us/library/ms187320.aspx

  2. #2
    Membre Expert

    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
    Billets dans le blog
    8
    Par défaut
    Ta requête, sur le plan "algorithmique" me parait correcte.

    Il faut vérifier que service Agent SQL Server est bien démarré. C’est l'Agent SQL Server qui se charge du traitement des travaux planifiés.

    Ci-dessous quelques autres pistes.

    - Vérifies le contenu des Journaux d’erreurs de Agent SQL Server

    - Vérifies également l’historique des travaux planifiés (sysjobhistory)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select * from msdb.dbo.sysjobhistory
    A+

  3. #3
    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 : 43
    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,

    Effectivement regarder l'historique du job, qui vous indiquera quelle est l'erreur qui se produit.

    Cela dit je ne vois pas pourquoi vous faites appel aux procédures de création des jobs et de leurs étapes, alors qu'il est plus simple pour cette tâche d'utiliser l'interface graphique.
    Est-ce que vous déployez le job sur plusieurs instances de SQL Server ?

    D'autre part votre requête contient un prédicat qui n'est pas SARGable :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DELETE FROM Action_OPE WHERE     (DATEDIFF(dd, TimeStmp, GETDATE()) > 2558);
    Parce que SQL Server maintient des statistiques sur la distribution des valeurs de TimeStmp, mais pas sur DATEDIFF(dd, TimeStmp, GETDATE()) > 2558).
    Vous pouvez également utiliser des années dans DATEDIFF :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DATEDIFF(year, TimeStmp, GETDATE()) > 7).
    Mais le mieux est d'écrire :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    DELETE FROM dbo.Action_OPE 
    WHERE TimeStmp < DATEADD(year, -7, GETDATE())
    Si la colonne TimeStmp est indexée, cela ira très vite.
    Avec votre requête, SQL Server est obligé de lire toute la table, ce qui peut prendre beaucoup de temps, surtout dans votre cas puisqu'il s'agit d'une table qui doit contenir de nombreuses lignes.

    @++

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    183
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 183
    Par défaut
    Ta requête, sur le plan "algorithmique" me parait correcte.

    Il faut vérifier que service Agent SQL Server est bien démarré. C’est l'Agent SQL Server qui se charge du traitement des travaux planifiés.

    Ci-dessous quelques autres pistes.

    - Vérifies le contenu des Journaux d’erreurs de Agent SQL Server

    - Vérifies également l’historique des travaux planifiés (sysjobhistory)
    Code :
    Sélectionner tout - Visualiser dans une fenêtre à part
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT * FROM msdb.dbo.sysjobhistory
    A+
    En fait j'utilise SQL server express 2005 et SQL Agent n'est pas accessible par l'arborescence de SQL server express Management.

    J'ai effectué votre requête de lecture et il n'y a rien dans la table "sysjobhistory"



    elsuket -> Comment savoir si mon champ est indexé ?
    J'utilise un job car cette solution m'a paru pratique cependant, si vous avez une autre solution je suis tout à fait preneur

  5. #5
    Membre Expert

    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
    Billets dans le blog
    8
    Par défaut
    Pour vérifier et le cas échéant démarrer l'Agent 'Agent SQL, il faut procéder comme suit :

    Dans le menu Démarrer, pointez sur Tous les programmes, sur Microsoft SQL Server 2005, sur Outils de configuration, puis cliquez sur Gestionnaire de configuration SQL Server.

    Dans le Gestionnaire de configuration SQL Server, développez Services SQL Server 2005, puis cliquez sur Agent SQL.

    Dans le volet de résultats, cliquez avec le bouton droit sur l'instance considérée, puis cliquez sur Démarrer.

    Une flèche verte sur l'icône à côté de l'Agent SQL Server, indique que l'Agent SQL Server est bien démarrée.

    A+,

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    183
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 183
    Par défaut
    Citation Envoyé par hmira Voir le message
    Pour vérifier et le cas échéant démarrer l'Agent 'Agent SQL, il faut procéder comme suit :

    Dans le menu Démarrer, pointez sur Tous les programmes, sur Microsoft SQL Server 2005, sur Outils de configuration, puis cliquez sur Gestionnaire de configuration SQL Server.

    Dans le Gestionnaire de configuration SQL Server, développez Services SQL Server 2005, puis cliquez sur Agent SQL.

    Dans le volet de résultats, cliquez avec le bouton droit sur l'instance considérée, puis cliquez sur Démarrer.

    Une flèche verte sur l'icône à côté de l'Agent SQL Server, indique que l'Agent SQL Server est bien démarrée.

    A+,
    Merci beaucoup pour votre réponse détaillée. Cependant, SQL server Express ne permet pas d'accéder à SQL Agent de cette façon c'est pour ça que je pense que la raison pour laquelle mon job ne démarre pas est tout simplement due au fait que SQL sever Express ne gère pas du tout SQL agent même lorsqu'on fait appel à lui avec un algorithme comme le mien

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

Discussions similaires

  1. Requête avec un GROUP BY sur tous les jours d'un mois
    Par Stouille89 dans le forum Requêtes
    Réponses: 1
    Dernier message: 21/02/2011, 21h55
  2. Réponses: 3
    Dernier message: 25/03/2008, 16h07
  3. [Requête/SQL]Ajouter un enregistrement à tous les membres
    Par fernandino dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 18/04/2007, 17h45
  4. [SQL] Ma requête renvoie tous les tuples et ne respecte pas la condition AND
    Par JackBeauregard dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 13/02/2007, 13h33
  5. décrémenter un compteur tous les jours
    Par Art19 dans le forum Langage SQL
    Réponses: 11
    Dernier message: 05/08/2005, 11h07

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