Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Следить за остатком места на диске через job  [new]
RegisteredUser
Member

Откуда:
Сообщений: 638
Коллеги!
Есть задача следить за остатком свободного места на ВСЕХ дисках сервака.
Злые языки утверждают, что это можно делать в хранимке.
Подскажите куда копать?
2 июн 16, 14:49    [19250424]     Ответить | Цитировать Сообщить модератору
 Re: Следить за остатком места на диске через job  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6802
RegisteredUser,

а чем системный шедулер вас обидел?
2 июн 16, 14:51    [19250433]     Ответить | Цитировать Сообщить модератору
 Re: Следить за остатком места на диске через job  [new]
komrad
Member

Откуда:
Сообщений: 5674
RegisteredUser
Коллеги!
Есть задача следить за остатком свободного места на ВСЕХ дисках сервака.
Злые языки утверждают, что это можно делать в хранимке.
Подскажите куда копать?


xp_fixeddrives
2 июн 16, 14:52    [19250440]     Ответить | Цитировать Сообщить модератору
 Re: Следить за остатком места на диске через job  [new]
AlanDenton
Member [скрыт]

Откуда:
Сообщений: 1004
На выбор...

Первый вариант отслеживает место только на тех логических дисках где располагаются базы:

SELECT DISTINCT
	  Drive = s.volume_mount_point
	, FreeSpace = s.available_bytes / 1048576.
FROM sys.databases d
CROSS APPLY sys.dm_os_volume_stats(d.database_id, 1) s

Второй вариант показывает все логические диски:

EXEC [master].dbo.xp_fixeddrives
2 июн 16, 14:54    [19250452]     Ответить | Цитировать Сообщить модератору
 Re: Следить за остатком места на диске через job  [new]
Jovanny
Member

Откуда:
Сообщений: 1196
Если версия позволяет, можно алерт.
EXEC msdb.dbo.sp_add_alert @name=N'Disk Space Less than 100 GB', 
		@message_id=0, 
		@severity=0, 
		@enabled=1, 
		@delay_between_responses=1800, 
		@include_event_description_in=1, 
		@category_name=N'[Uncategorized]', 
		@wmi_namespace=N'\\.\root\CIMV2', 
		@wmi_query=N'SELECT * FROM __InstanceModificationEvent WITHIN 600 WHERE TargetInstance ISA "Win32_LogicalDisk" AND TargetInstance.FreeSpace < 100000000000', 
		@job_id=N'00000000-0000-0000-0000-000000000000'

И указать в настройках адресатов рассылки.
2 июн 16, 15:23    [19250611]     Ответить | Цитировать Сообщить модератору
 Re: Следить за остатком места на диске через job  [new]
RegisteredUser
Member

Откуда:
Сообщений: 638
Jovanny, Классный подход!!!

а я вот как раз такое вот подобие залабал.
оставлю здесь, может кому-то понадобится

разбор по Alert было вот в этой ветке: https://www.sql.ru/forum/1186035/alerts-raiserror-throw

здесь привожу только код

USE [msdb]
GO


EXEC msdb.dbo.sp_add_alert @name=N'CheckersError', 
		@message_id=0, 
		@severity=9, 
		@enabled=1, 
		@delay_between_responses=0, 
		@include_event_description_in=1, 
		@notification_message=N'Checkers errors notification', 
		@event_description_keyword=N'rrerr', 
		@category_name=N'[Uncategorized]', 
		@job_id=N'00000000-0000-0000-0000-000000000000'
GO


use master
GO

if isnull(object_id('dbo.sp_freedrives'),0) = 0
	exec('create procedure dbo.sp_freedrives as print ''temporary procedure to hold location so we can use ALTER in the script''')
GO

/* Author : Me

EXAMPLE 
 EXEC sp_freedrives - Alert when less 15% free space
 EXEC sp_freedrives 70 -- Alert when less 70% free space
*/

ALTER PROCEDURE dbo.sp_freedrives
	@max_pecent_free tinyint = 15
AS
BEGIN

SET ARITHIGNORE ON
SET NOCOUNT ON

declare @sBuf varchar(2000) = '', @ErrMsg varchar(max) = '', @AlertPrefix varchar(5) = 'rrerr'


SELECT 
distinct volume_mount_point,logical_volume_name, (total_bytes / 1000000) as 'total_Mb', (available_bytes/ 1000000) as 'free_Mb', (available_bytes*100/total_bytes) as 'free_per'
, replace(volume_mount_point,':\','') as 'hdd', 1 as 'sql_files'
into #awrHDDsize
FROM sys.master_files AS f  
CROSS APPLY sys.dm_os_volume_stats(f.database_id, f.file_id)  
order by volume_mount_point


select @sBuf = @sBuf + concat('HDD:	',hdd,' (',logical_volume_name,')	', ' has free spase = ', free_Mb,'Mb (<',free_per,'%)') + char(10)
from #awrHDDsize
where free_per <= @max_pecent_free
order by hdd

Set @sBuf = rtrim(ltrim(@sBuf))

	if(len(@sBuf)>0)
	begin
		--print 'PIZDEZ!!!'

		 SELECT @ErrMsg = concat(CHAR(10),CHAR(10),'HDD FREE space report: ', CHAR(10), @sBuf, CHAR(10), @AlertPrefix )
		 RAISERROR('<< HDD FREE SPACE CHECKER >>  %s', 9, 1 , @ErrMsg) WITH LOG; 

		print @ErrMsg
	end
	else
	begin
		print 'ok!!!'
	end

END
2 июн 16, 18:12    [19251531]     Ответить | Цитировать Сообщить модератору
 Re: Следить за остатком места на диске через job  [new]
StarikNavy
Member

Откуда: Москва
Сообщений: 2407
RegisteredUser,

следить за XXX должно что-то, что не упадет, при отстуствие XXX
2 июн 16, 18:36    [19251602]     Ответить | Цитировать Сообщить модератору
 Re: Следить за остатком места на диске через job  [new]
RegisteredUser
Member

Откуда:
Сообщений: 638
StarikNavy
RegisteredUser,

следить за XXX должно что-то, что не упадет, при отстуствие XXX


глубоко...
теперь, внимание вопрос: о чем это?
2 июн 16, 19:38    [19251785]     Ответить | Цитировать Сообщить модератору
 Re: Следить за остатком места на диске через job  [new]
aleks2
Guest
RegisteredUser
StarikNavy
RegisteredUser,

следить за XXX должно что-то, что не упадет, при отстуствие XXX


глубоко...
теперь, внимание вопрос: о чем это?

Это о вопросе: кто сторожит сторожей?
3 июн 16, 06:03    [19252744]     Ответить | Цитировать Сообщить модератору
 Re: Следить за остатком места на диске через job  [new]
Jovanny
Member

Откуда:
Сообщений: 1196
Вот почему мне нравится алерт + WMI - кроме алерта, ничего не нужно.
3 июн 16, 08:36    [19252889]     Ответить | Цитировать Сообщить модератору
 Re: Следить за остатком места на диске через job  [new]
SQL2008
Member

Откуда: Москва
Сообщений: 4424
RegisteredUser
StarikNavy
RegisteredUser,

следить за XXX должно что-то, что не упадет, при отстуствие XXX


глубоко...
теперь, внимание вопрос: о чем это?

О том, что больной в палате не сможет вызвать врача, когда он умрет!
3 июн 16, 09:37    [19253051]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить