Domanda

Abbiamo un vecchio SQL Server 2000 macchina in cui un gruppo di lavoro eseguito durante la notte. Di tanto in tanto, dopo la manutenzione del server viene eseguita e la macchina si riavvia, alcuni componenti di SQL non se ne escono con il sistema operativo (anche se sono configurati per farlo). Quindi, prima che i nostri posti di lavoro notturne sono tenuti a correre, vorrei (da un computer remoto) eseguire alcuni controlli per vedere se SQL Server, SQL Server Agent, e il servizio OLAP di SQL Server sono in esecuzione. Ho trovato un paio di cose che sembrano come dovrebbero lavorare, ma mi chiedo se gli esperti in questa comunità possono commentare la qualità e l'affidabilità di ogni approccio. Posso codice questa applicazione sia come file vbs eseguito tramite le operazioni pianificate di Windows o creare un C # Windows Service.

Candidate 1: Eseguire una query su master..sysprocesses e guardare nella colonna program_name per i rispettivi processi che si aspettano di trovare.

Candidate 2: Eseguire una query su master..xpcmd_shell in questo modo:

exec master..xp_cmdshell 'sc \\hostname query SQLServerAgent'

Quindi cercare 'STATO: 4 RUNNING' nei risultati

Candidato 3: Utilizzando .NET Framework, la ricerca per il processo in questo modo: Verificare se un processo è in esecuzione su un sistema remoto utilizzando C #

Questa è una cosa che in realtà ha solo bisogno di eseguire una volta al giorno e invierà un avviso e-mail se qualcuno dei processi che dovrebbero essere in esecuzione non sono.

È stato utile?

Soluzione

Per chi fosse interessato la soluzione che ho finito con ... continuate a leggere.

ho finito per andare con il candidato 1 a causa del tempo di sviluppo facile e la familiarità che ho con C # / ADO.NET / SQL Server. Ho creato un servizio di Windows in C # per chiamare un proc memorizzato all'interno di un evento Timer_Elapsed (roba abbastanza standard).

Ecco le budella del proc memorizzato il servizio sta chiamando:

SELECT
    RTRIM(LTRIM(hostname)) AS hostname,
    RTRIM(LTRIM(program_name)) AS program_name,
    RTRIM(LTRIM(nt_domain)) AS nt_domain,
    RTRIM(LTRIM(nt_username)) AS nt_username,
    RTRIM(LTRIM(loginame)) AS loginame
FROM
    master..sysprocesses
WHERE
    hostname = 'CSSMCDBSW03'
AND
    program_name IN ('Microsoft SQL Server Analysis Services', 'SQLAgent - Generic Refresher')
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top