Перейти к содержимому

Как создать хранимую процедуру для мониторинга заданий (job) в MSSQL. Хранимая процедура для PRTG

Была задача создать хранимую процедуру что бы мониторить разные задания(джобы, job) в MSSQL. Это доробатаная процедура посравнению с Сенсор для prtg. Сенсор для задания sql

USE [msdb]
GO

/****** Object:  StoredProcedure [dbo].[alertjob]    Script Date: 05/24/2017 10:24:34 ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

CREATE PROCEDURE [dbo].[alertjob]
@name VARCHAR(max)
AS
BEGIN
SELECT TOP 100
	    
	    b.[message], b.run_date,  b.run_time

into #t	        
--SELECT *
FROM   
 dbo.sysjobs a
       FULL OUTER JOIN dbo.sysjobhistory b
            ON  a.job_id = b.job_id
                AND a.[enabled] = '1'
WHERE
--CONVERT(VARCHAR(20),b.run_date,5)  = (select CONVERT (date, SYSDATETIME())) and
a.name IN ('LSRestore_s0085_ZUP_MOLL') and
run_date=(SELECT MAX(run_date) FROM dbo.sysjobs a

       FULL OUTER JOIN dbo.sysjobhistory b
            
Читать далее

Установка диспетчера виртуальных машин System Center 2016 – шаг за шагом (руководство по быстрому запуску)

В следующей статье я расскажу об основной установке System Center Virtual Machine Manager 2016. Вы должны использовать это в качестве шаблона для эксперимента или доказательства концепции (POC). Вы должны изменить развертывание, чтобы удовлетворить потребности клиентов, если вы хотите установить SCVMM в производственной среде.

Немного справочной информации. Я использую 2 сервера 1 x VMM Server (со всеми установленными ролями и 1 x SQL 2014 SP1 Server). На обоих серверах работает сервер 2016.

В AD создайте следующие учетные записи и группы в соответствии с соглашением об именах:

  • Учетная запись учетной записи службы DOMAIN \ Svc-SCVMM SCVMM
  • DOMAIN \ Svc-SCVMMAdmin SCVMM Учетная запись
Читать далее

Как узнать кому отправлялись письма из mssql

msdb.dbo.sysmail_allitems - просмотр всех сообщений;
msdb.dbo.sysmail_sentitems – просмотр только отправленных сообщений;
msdb.dbo.sysmail_unsentitems - просмотр неотправленных сообщений;
msdb.dbo.sysmail_faileditems – просмотр сообщений с ошибками;
msdb.dbo.sysmail_event_log – журнал работы компонента Database Mail.
Например, для просмотра всех отправленных сообщений можно использовать следующий запрос:
SELECT sent_date AS [Дата отправки письма], 
	   send_request_user AS [Кем отправлено письмо],
	   recipients AS [Кому отправлено письмо], 
	   subject AS [Тема письма], 
	   body AS [Текст письма], 
	   file_attachments AS [Отправленные файлы], 
	   query AS [SQL запрос]
 FROM msdb.dbo.sysmail_sentitems

 

Хранимая процедура для архивирования журнала при достижении @danger_value.

Архивирования журнала при достижении @danger_value. Идея в том что лог будет усекаться при достижении 7 гб. Это сделано так как настроен лог шипинг.

eclare @tran_log_space_usage table( 
        database_name sysname
,       log_size_mb float
,       log_space_used float
,       status int
); 
declare @log_space_used float	-- Доля (в процентах) файла журнала, в настоящее время заполненная
declare @danger_value int		-- Значение в Мб, при достижение которого архивируется журнал
declare @job_start_name sysname -- Название задания в Агенте MSSQL 

set @danger_value = 7000
set @job_start_name = N'SSAS_LSBackup_ax_molniya'

insert into @tran_log_space_usage 
exec('DBCC SQLPERF ( LOGSPACE )') ; 

set @log_space_used = (
select (log_space_used * log_size_mb / 100)  from 
Читать далее

Отправить СМС из MSSQL

Есть настроенная программа для отправки смс через usb modem, Программа для отправки смс используется http://nhutils.ru/blog/nhsms/download/
https://www.adminbd.ru/prtg-sms-%d0%b0%d0%bb%d0%b5%d1%80%d1%82-%d0%be%d1%82-prtg-%d0%bd%d0%b0-%d1%82%d0%b5%d0%bb%d0%b5%d1%84%d0%be%d0%bd-%d1%87%d0%b5%d1%80%d0%b5%d0%b7-usb-modem/

Хранимая процедура для отправки:

USE [ax_molniya]
GO

/****** Object:  StoredProcedure [dbo].[SendSMS]    Script Date: 01/11/2017 10:33:15 ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO


CREATE procedure [dbo].[SendSMS] (@smsText varchar(8000), @phoneNumber varchar(50))
as

declare @buildStr varchar(8000), 
		@fileName varchar(255), 
		@folderName varchar(255), 
		@query varchar(8000)


set @query = 'select ''[1]'' union all select ''Phone=' 
			+ @phoneNumber + ''' union all select ''Alert=0'' union all select ''' 
			+ 'Text = ' + replace(replace(@smsText, char(13), ' '), char(10), ' ') 
			+ ''' union all select ''ValidityPeriod=1d'''
print @query

set @fileName 
Читать далее

Как узнать в какой файловой группе больше всего записи и чтения.

Задача распределить файловые группы на разные диски. Чем больше операций чтения и записи в файловой группе тем быстрее будут выделены диски и RAID.

Есть база весит 1.5 тб. В ней файловые группы:

Как узнать в какой файловой группе больше всего записи и чтения.Нужно подумать как их распределить.

База TempDb у нас находится на ssd в зеркале.Размер диска 370 гб. TempDb разбит на файлы по рекомендации майкрософт

Как узнать в какой файловой группе больше всего записи и чтения.

Сначала был выполнен скрипт накопление статистики ожидания из статьи https://habrahabr.ru/post/216309/

WITH [Waits] AS
    (SELECT
        [wait_type],
        [wait_time_ms] / 1000.0 AS [WaitS],
        ([wait_time_ms] - [signal_wait_time_ms]) / 1000.0 AS [ResourceS],
        [signal_wait_time_ms] / 1000.0 AS [SignalS],
        [waiting_tasks_count] AS [WaitCount],
        100.0 * [wait_time_ms] / SUM ([wait_time_ms]) OVER() AS [Percentage],
        
Читать далее

Как сделать бэкап множества баз mssql на сетевое хранилище с созданием папок под бэкап. И после удалить эти базы.

Задача сделать бэкапы баз на 50 серверах в одно файловой хранилище в разные папки

DECLARE @name NVARCHAR(500)
DECLARE @cmd NVARCHAR(500)
DECLARE @Cursor CURSOR   
DECLARE @nameser NVARCHAR(500)
SET @nameser = @@SERVERNAME
SET @Cursor =    CURSOR FOR
SELECT NAME
FROM   [master].[sys].[databases]
WHERE  NOT NAME IN ('master'
                   ,'tempdb'
                   ,'model'
                   ,'msdb'
                   ,'SES'
                   ,'SES_ARCHIVE'
                   ,'SES_SERVICE')
       AND NAME LIKE '%2013%'
       OR NAME LIKE '%2014%'
       OR NAME LIKE '%2015%'
OPEN @Cursor
FETCH NEXT FROM @Cursor INTO @name
WHILE (@@FETCH_STATUS=0)
BEGIN
    --print @nameser
    SET @cmd = '
EXEC xp_cmdshell ''MD \\192.168.0.38\Backup\cristal_arhiv\'+@nameser+'\''
BACKUP DATABASE ['+@name+'] TO  DISK = N''\\192.168.0.38\Backup\cristal_arhiv\'+@nameser+'\'+@nameser+'_'+
        @name+'.BAK'' WITH NOFORMAT, NOINIT,  NAME = N'''+@name+
        '-Полная База данных 
Читать далее

Как увеличить количество файлов в TempDB

USE [master]
GO
ALTER DATABASE [tempdb] MODIFY FILE ( NAME = N'tempdev', SIZE = 6144000KB , MAXSIZE = 35840000KB )
GO
ALTER DATABASE [tempdb] ADD FILE ( NAME = N'tempdev1', FILENAME = N'S:\tempdb1.mdf' , SIZE = 6144000KB , MAXSIZE = 35840000KB , FILEGROWTH = 10%)
GO
ALTER DATABASE [tempdb] ADD FILE ( NAME = N'tempdev2', FILENAME = N'S:\tempdb2.mdf' , SIZE = 6144000KB , MAXSIZE = 35840000KB , FILEGROWTH = 10%)
GO
ALTER DATABASE [tempdb] ADD FILE ( NAME = N'tempdev3', FILENAME = N'S:\tempdb3.mdf' , SIZE = 6144000KB , MAXSIZE = 35840000KB , FILEGROWTH = 10%)
GO
ALTER DATABASE [tempdb] ADD 
Читать далее

Как добавить права чтения или записи на базу, сразу многим пользователям.

declare @db nvarchar(max) declare @sql nvarchar(max) declare cursor_size_srv cursor for 
SELECT 
  @@SERVERNAME AS Server , name AS DBName 
  --recovery_model_Desc AS RecoveryModel , --Compatibility_level AS CompatiblityLevel , 
  --create_date , 
  --state_desc FROM sys.server_principals WHERE NAME LIKE 'HEAD_OFFICE\_Розничная сеть%' ORDER BY Name; OPEN cursor_size_srv FETCH NEXT FROM cursor_size_srv INTO @db WHILE (@@FETCH_STATUS=0) BEGIN set @sql = 'USE [Demo_connect] GO CREATE USER ['+@db+'] FOR LOGIN ['+@db+'] GO USE [Demo_connect] GO EXEC sp_addrolemember N''db_datareader'', N'''+@db+''' GO' print (@sql); FETCH NEXT FROM cursor_size_srv INTO @db END CLOSE cursor_size_srv DEALLOCATE cursor_size_srv

 


 

Как найти и удалить дубликаты строк в таблице mssql

Select id, objectname from [ax_molniya].[dbo].[www_reindex_tablename]  where objectname in (
Select objectname from [ax_molniya].[dbo].[www_reindex_tablename] Group by objectname having Count(*) >1)
Delete from t from [ax_molniya].[dbo].[www_reindex_tablename]  t, [ax_molniya].[dbo].[www_reindex_tablename]  v
where t.objectname = v.objectname
and t.id > v.id