You may and should have monitoring in place to monitor state of your servers, services, jobs, critical and not critical errors etc.
Here I just wanted to share a quick script to create a SQL Server agent job to alert you whenever SQL Server service is started/restarted.
If you have CMS setup, you could use it to deploy this across all SQL or most critical instances after tweaking it to meet your requirements
-- For SQL 2005 or up
-- Make sure it is running SQL 2005 or up
IF (@@microsoftversion / 0x1000000) & 0xff >= 9
PRINT 'This server is running SQL Server 2005 or up.'
ELSE
BEGIN
RAISERROR('ERROR: This server is running SQL 2000 or older version, exiting...',16, 1)
return
END
USE[msdb]
GO
EXECmsdb.dbo.sp_set_sqlagent_properties@alert_replace_runtime_tokens=1
GO
SELECT NEWID()
USE[msdb]
GO
-- IF THE SERVER IS DEV OR TEST, CHANGE THE CRITICAL OPERATO FROM PAGE TO JUST EMAIL
DECLARE@CriticalOperator varchar(500)
IF (@@servername like '%dev%' or @@servername like '%tst%')
SET@CriticalOperator = '<youremailaddresshere>'
ELSE
SET@CriticalOperator = '<yourpageraddresshere'
USE[msdb]
IF NOT EXISTS (select * from dbo.sysoperators where name = 'DBA - Critical')
EXEC msdb.dbo.sp_add_operator @name=N'DBA - Critical',
@enabled=1,
@weekday_pager_start_time=90000,
@weekday_pager_end_time=180000,
@saturday_pager_start_time=90000,
@saturday_pager_end_time=180000,
@sunday_pager_start_time=90000,
@sunday_pager_end_time=180000,
@pager_days=0,
@email_address=@CriticalOperator,
@category_name=N'[Uncategorized]'
IF NOT EXISTS (select * from dbo.sysoperators where name = 'DBA - NonCritical')
EXEC msdb.dbo.sp_add_operator @name=N'DBA - NonCritical',
@enabled=1,
@weekday_pager_start_time=80000,
@weekday_pager_end_time=180000,
@saturday_pager_start_time=80000,
@saturday_pager_end_time=180000,
@sunday_pager_start_time=80000,
@sunday_pager_end_time=180000,
@pager_days=62,
@email_address=N'<youremailaddresshere>',
@category_name=N'[Uncategorized]'
GO
USE[msdb]
GO
BEGIN TRANSACTION
DECLARE@ReturnCode INT
SELECT@ReturnCode = 0
IF NOT EXISTS (SELECT name FROM msdb.dbo.syscategories WHERE name=N'Database Maintenance' ANDcategory_class=1)
BEGIN
EXEC@ReturnCode = msdb.dbo.sp_add_category @class=N'JOB', @type=N'LOCAL', @name=N'Database Maintenance'
IF (@@ERROR <> 0 OR@ReturnCode <> 0)GOTO QuitWithRollback
END
DECLARE@jobId BINARY(16)
IF not EXISTS (SELECT job_id FROM msdb.dbo.sysjobs_view WHERE name = N'DBA - SQL Server Service Start Notification')
BEGIN
PRINT 'CREATING JOB...'
EXEC@ReturnCode = msdb.dbo.sp_add_job @job_name=N'DBA - SQL Server Service Start Notification',
@enabled=1,
@notify_level_eventlog=0,
@notify_level_email=3,
@notify_level_netsend=0,
@notify_level_page=0,
@delete_level=0,
@description=N'No description available.',
@category_name=N'Database Maintenance',
@owner_login_name=N'sa',
@notify_email_operator_name=N'DBA - Critical', @job_id = @jobId OUTPUT
IF (@@ERROR <> 0 OR@ReturnCode <> 0)GOTO QuitWithRollback
/****** Object: Step [dummy] Script Date: 09/29/2010 10:54:23 ******/
EXEC@ReturnCode = msdb.dbo.sp_add_jobstep @job_name=N'DBA - SQL Server Service Start Notification', @step_name=N'dummy',
@step_id=1,
@cmdexec_success_code=0,
@on_success_action=1,
@on_success_step_id=0,
@on_fail_action=2,
@on_fail_step_id=0,
@retry_attempts=0,
@retry_interval=0,
@os_run_priority=0, @subsystem=N'TSQL',
@command=N'select @@version',
@database_name=N'master',
@flags=0
IF (@@ERROR <> 0 OR@ReturnCode <> 0)GOTO QuitWithRollback
EXEC@ReturnCode = msdb.dbo.sp_update_job @job_id = @jobId, @start_step_id = 1
IF (@@ERROR <> 0 OR@ReturnCode <> 0)GOTO QuitWithRollback
EXEC@ReturnCode = msdb.dbo.sp_add_jobschedule @job_name=N'DBA - SQL Server Service Start Notification', @name=N'When it starts',
@enabled=1,
@freq_type=64,
@freq_interval=0,
@freq_subday_type=0,
@freq_subday_interval=0,
@freq_relative_interval=0,
@freq_recurrence_factor=0,
@active_start_date=20100929,
@active_end_date=99991231,
@active_start_time=0,
@active_end_time=235959
IF (@@ERROR <> 0 OR@ReturnCode <> 0)GOTO QuitWithRollback
EXEC@ReturnCode = msdb.dbo.sp_add_jobserver @job_id = @jobId, @server_name = N'(local)'
IF (@@ERROR <> 0 OR@ReturnCode <> 0)GOTO QuitWithRollback
END
ELSE
PRINT 'JOB ALREADY EXISTS ON THIS SERVER'
COMMIT TRANSACTION
GOTOEndSave
QuitWithRollback:
IF (@@TRANCOUNT > 0) ROLLBACK TRANSACTION
EndSave:
GO