В SQL Server с помощью службы SQL Server Agent и PowerShell можно достаточно просто соорудить задание, которое будет заглядывать в метаданные WMI локального или удалённого сервера, и сообщать по электронной почте, в случае если свободное место на указанном диске перешагнуло заданный порог. Ниже представлен облегчённый концепт сценария подобного задания (расписаний в нём нет и данные берутся по локальному серверу). Вам нужно будет заменить фиктивный адрес на реальный и указать почтовый профиль, если нельзя воспользоваться профилем по умолчанию.
USE [msdb]
GO
DECLARE @jobId BINARY(16)
EXEC msdb.dbo.sp_add_job
@job_name=N'Наблюдение за местом на диске С: текущего
сервера',
@enabled=1,
@notify_level_eventlog=0,
@notify_level_email=0,
@notify_level_netsend=0,
@notify_level_page=0,
@delete_level=0,
@category_name=N'[Uncategorized (Local)]',
@owner_login_name=N'sa', @job_id = @jobId OUTPUT
EXEC msdb.dbo.sp_add_jobstep
@job_id=@jobId,
@step_name=N'1',
@step_id=1,
@cmdexec_success_code=0,
@on_success_action=1,
@on_success_step_id=0,
@on_fail_action=3,
@on_fail_step_id=0,
@retry_attempts=0,
@retry_interval=0,
@os_run_priority=0,
@subsystem=N'PowerShell',
@command=N'$RemoteHost = "."
$FreeSpace=((gwmi CIM_LogicalDisk -computerName $RemoteHost -filter
"DeviceID = ''C:''").FreeSpace)/(1024*1024*1024)
IF ($FreeSpace -lt 1000) {
$conn = new-object system.data.oledb.oledbconnection
$connstring = "provider=sqloledb;data source=.;initial
catalog=tempdb;integrated security=SSPI"
$conn.connectionstring = $connstring
$conn.open()
$cmd = New-Object system.data.oledb.oledbcommand
$cmd.connection = $conn
$FreeSpace = "''"+$FreeSpace+"''"
$sqlquery = "EXEC msdb.dbo.sp_send_dbmail @recipients=''AlexanderGladchenko@domen.com'',@subject=$FreeSpace"
$cmd.commandtext = $sqlquery
$cmd.executenonquery() > NULL
$cmd = New-Object system.data.oledb.oledbcommand
$conn.close()
} Else {$FreeSpace}',
@database_name=N'master',
@flags=0
EXEC msdb.dbo.sp_add_jobserver
@job_id = @jobId,
@server_name = N'(local)'
GO
Комментариев нет:
Отправить комментарий