in

UGISS Community

Il sito della community dello User Group Italiano di SQL Server

Cosa crea il job su SqlServer Agent?

Last post 07-02-2009 17.12 by dmauri. 5 replies.
Page 1 of 1 (6 items)
Sort Posts: Previous Next
  • 06-30-2009 18.25

    Cosa crea il job su SqlServer Agent?

    Ciao,

     "butto lì" una domanda collegata al mio post precedente di oggi.

    Chi/cosa crea il nuovo job su sql server agent nel momento in cui da Report Manager viene definita una nuova subscription che fa riferimento ad una shared schedule?

     Ho spulciato un po' il database di ReportServer e ho effettivamente trovato dei trigger (mi aspettavo che facessero così, a fronte di una insert in ReportSchedule magari) , però mi pare di avere visto solo dei trigger di "pulizia" che lavorano after delete.

    Anche andando a cercare tra le sp, ci sono le varie CreateSubscription, AddReportSchedule.. però mi pare facciano tutte una INSERT in tabella e basta.

     A questo punto mi viene la curiosità di sapere chi ha la responsabilità di creare il job!
    Potrebbe forse essere l'implementazione di ReportServer a chiamare direttamente il servizio Sql Agent?

     matteo

     

    • Post Points: 20
  • 07-01-2009 11.44 In reply to

    • dmauri
    • Top 10 Contributor
      Male
    • Joined on 05-14-2007
    • Novate Milanese
    • Posts 1.907
    • Points 24.955

    Re: Cosa crea il job su SqlServer Agent?

    magomerlano:
     A questo punto mi viene la curiosità di sapere chi ha la responsabilità di creare il job!
     

    Dalla documentazione si può intuire che la schedulazione viene creata dal web service di management, ossia questo:

    http://<Server Name>/ReportServer/ReportService2005.asmx?wsdl

    tra i web method, infatti ci sono quelli preposti alla gestione della stessa:

    • CreateSchedule
    • DeleteSchedule
    • GetScheduleProperties
    • ListScheduledReports
    • ListSchedules
    • PauseSchedule
    • ResumeSchedule
    • SetScheduleProperties

    Il che signfica che il job viene creato dal servizio "Report Server" che oltre a fornire l'entry per per i Web Services si occupa anche di gestire la schedulazione.

    Attraverso l'utilizzo del profiler è possibile vedere tutti gli step eseguti quando si creare una schedulazione (ad esempio attraverso il manegement studio)

    Davide Mauri
    Microsoft MVP - SQL Server, MCP, MCAD, MCDBA, MCT - http://www.davidemauri.it
    Socio Fondatore e Mentor di Solid Quality Learning Italy - http://www.solidq.com
    Presidente di UGISS: User Group Italiano Sql Server - http://www.ugiss.org
    • Post Points: 20
  • 07-01-2009 14.02 In reply to

    Re: Cosa crea il job su SqlServer Agent?

    Uhm, così parrebbe.

    Però rimane il dubbio che quei WebMethods lavorino soltanto sul database dell'applicazione (il db ReportServer) che appunto ha la sua brava tabella SCHEDULE , senza però interagire con il SqlServer Agent.

    Una cosa che infatti mi sta creando qualche noia a livello di troubleshooting e che le informazioni di schedulazione vengono di fatto duplicate: sono salvate sia nel database (e questi sono i dati che si vedono nelle pagine aspx di Report Manager) e poi devono anche essere utilizzate per definire il job+schedule su Agent.

    La cosa brutta è che le due cose non sono "transazionali". Ad esempio, mi sono trovato ad avere un problema nell'aggiornare un job dal momento che gli avevo cambiato l'owner (e il comando arrivava dall'utente di default della webapp, cioè Network Service) però allo stesso tempo la update sulla tabella SCHEDULE era riuscito, ovviamente: morale mi sono trovato con la pagina di amministrazione in Report Manager che mostrava una schedulazione, ma in realtà il job su agent aveva ancora la schedulazione precedente!

    Partendo da questi "problemucci" mi era venuta voglia di capire un po' gli internals di questo meccanismo... in effetti alla fine la cosa più sicura è lanciare un bel profiler: secondo te che eventi conviene tracciare per intercettare la creazione/modifica di un job?

     Grazie molte per la risposta

    Matteo

    • Post Points: 20
  • 07-01-2009 16.13 In reply to

    • dmauri
    • Top 10 Contributor
      Male
    • Joined on 05-14-2007
    • Novate Milanese
    • Posts 1.907
    • Points 24.955

    Re: Cosa crea il job su SqlServer Agent?

    magomerlano:
    Però rimane il dubbio che quei WebMethods lavorino soltanto sul database dell'applicazione (il db ReportServer) che appunto ha la sua brava tabella SCHEDULE , senza però interagire con il SqlServer Agent.
     

    No ti confermo che invocano la procedure sp_create_job.

    Se non ci credi prova semplicemente ha tracciare le query inviate a SQL Server con il Profiler, ci vogliono meno di 5 minuti.....

    magomerlano:
    La cosa brutta è che le due cose non sono "transazionali"
     

    Gia, questo è il problema che si crea quando l'architetto che sviluppa l'applicazione (Reporting Services in questo caso) suppone che l'accesso ai dati della stessa sia fatto solamente ed unicamente tramite lo strato applicativo, i Web Services in questo caso.

    magomerlano:
    morale mi sono trovato con la pagina di amministrazione in Report Manager che mostrava una schedulazione, ma in realtà il job su agent aveva ancora la schedulazione precedente!
    .

    Non agire mai direttamente sui db dei Reporting Services (se non tramite SP documentate ed "autorizzate"), altrimenti ti troverai un mucchio di problemi. Usa i Web Services per accederci.

    magomerlano:
    in effetti alla fine la cosa più sicura è lanciare un bel profiler: secondo te che eventi conviene tracciare per intercettare la creazione/modifica di un job?
     

    E più che sufficiente la traccia di defatult.

    Buon lavoro!

    Davide Mauri
    Microsoft MVP - SQL Server, MCP, MCAD, MCDBA, MCT - http://www.davidemauri.it
    Socio Fondatore e Mentor di Solid Quality Learning Italy - http://www.solidq.com
    Presidente di UGISS: User Group Italiano Sql Server - http://www.ugiss.org
    • Post Points: 20
  • 07-02-2009 11.27 In reply to

    Re: Cosa crea il job su SqlServer Agent?

    dmauri:

    Gia, questo è il problema che si crea quando l'architetto che sviluppa l'applicazione (Reporting Services in questo caso) suppone che l'accesso ai dati della stessa sia fatto solamente ed unicamente tramite lo strato applicativo, i Web Services in questo caso.

     Su questo punto sono perplesso.

    Quello che ho fatto io è stato semplicemente usare ReportManager, quindi operando in maniera assolutamente standard e "ufficiale", assolutamente nulla di forzato. 

    Nel mio caso specifico, l'operazione di modifica job non va a buon fine a causa di un mismatch utenza tra l'owner del job e l'issuer del comando di modifica della schedulazione, ma il punto non è quello... l'errore potrebbe essere [whatever].

    Resta che l'applicazione mi ha modificato il record sul "suo" db, però ha fallito nell'updatarmi il job su agent: di questo mi riporta, bontà sua, un output di errore nella pagina web, peccato però che ormai a livello di Report Manager la modifica sia "committata" e risulti la schedulazione che io a questo punto ho solo l'illusione di avere applicato: tant'evvero che se rientro nella pagina è quella che vedo, e non quella effettiva (e vecchia) che è rimasta su sqlagent... per evitare pericolosissime "illusioni ottiche" non resta che re-impostarla a mano in modo coerente a quanto risulta sull'agent. Tongue Tied

    Forse, dal momento che poi la schedulazione che davvero "parte" è quella di agent, si sarebbe potuto almeno prima tentare l'operazione su sqlagent e POI solo a fronte di buon fine di questa aggiornare anche la tabella applicativa SCHEDULE. O ancor meglio, "ricordarsi" i valori precedenti e avere cura di ripristinarli in caso di errore nell'operazione di update su sqlagent!

    Ovviamente, grazie per tutte le utilissime indicazioni!

    Matteo

     

    • Post Points: 20
  • 07-02-2009 17.12 In reply to

    • dmauri
    • Top 10 Contributor
      Male
    • Joined on 05-14-2007
    • Novate Milanese
    • Posts 1.907
    • Points 24.955

    Re: Cosa crea il job su SqlServer Agent?

    magomerlano:
    Quello che ho fatto io è stato semplicemente usare ReportManager, quindi operando in maniera assolutamente standard e "ufficiale", assolutamente nulla di forzato. 
     

    Ah! Scusa, dalla tua mail avevo inteso che avevi provato a modificare il job manualmente, ossia senza passare attraverso i Reporting Services.

    magomerlano:
    esta che l'applicazione mi ha modificato il record sul "suo" db, però ha fallito nell'updatarmi il job su agent
     

    Purtroppo questo è perchè il Report Manager, evidentemente, non utilizza correttamente le transazioni Sad

    magomerlano:
    Forse, dal momento che poi la schedulazione che davvero "parte" è quella di agent, si sarebbe potuto almeno prima tentare l'operazione su sqlagent e POI solo a fronte di buon fine di questa aggiornare anche la tabella applicativa SCHEDULE.
     

    Corcordo. In realtà sarebbe bastato usare una transazione manuale esplicita.....

    magomerlano:
    Ovviamente, grazie per tutte le utilissime indicazioni!
     

    De nada Smile

    Davide Mauri
    Microsoft MVP - SQL Server, MCP, MCAD, MCDBA, MCT - http://www.davidemauri.it
    Socio Fondatore e Mentor di Solid Quality Learning Italy - http://www.solidq.com
    Presidente di UGISS: User Group Italiano Sql Server - http://www.ugiss.org
    • Post Points: 5
Page 1 of 1 (6 items)
(C) 2007 User Group Italiano di SQL Server