top of page

Job para verificar e salvar em uma tabela o resultado de todas as unidades de disco do servidor

Foto do escritor: CloudDBCloudDB

Job para verificar e salvar em uma tabela o resultado de todas as unidades de disco do servidor, informando quais estão formatadas em 64k ou não.

Um script faz a verificação em apenas um disco e o outro faz em diversos discos, criando steps no job conforme a quantidade de unidades informadas o ínicio do script


JOB PARA VERIFICAR SE O DISCO ESTÁ FORMATADO EM 64K E SALVAR O RESULTADO EM UMA TABELA.sql


--JOB PARA VERIFICAR SE UM DISCO ESPECÍFICO ESTÁ FORMATADO EM 64K E SALVAR O RESULTADO EM UMA TABELA

-- Informar na linha 56 o nome do servidor. $server = "DELL_G15\SQL2019"

-- O Script está fazedo a verificação do disco E, caso precise verificar outros discos, gerar outros steps para os outros discos


-- Verifica se o banco de dados DBA existe; caso contrário, cria o banco de dados

IF NOT EXISTS (SELECT * FROM sys.databases WHERE name = 'DBA')

BEGIN

CREATE DATABASE DBA;

END

GO


USE DBA;

GO


-- Cria a tabela FormatacaoDeDisco se não existir

IF NOT EXISTS (SELECT * FROM sys.tables WHERE name = 'FormatacaoDeDisco' AND schema_id = SCHEMA_ID('dbo'))

BEGIN

CREATE TABLE dbo.FormatacaoDeDisco (

ExecutionTime DATETIME,

OutputMessage NVARCHAR(MAX)

);

END

GO


USE msdb;

GO


-- Cria um novo job

EXEC sp_add_job

@job_name = N'DBA - VERIFICAR FORMATACAO DE DISCO 64K',

@enabled = 1,

@description = N'Job para verificar se o disco E está formatado em 64k usando PowerShell',

@start_step_id = 1;

GO


-- Adiciona um step ao job

EXEC sp_add_jobstep

@job_name = N'DBA - VERIFICAR FORMATACAO DE DISCO 64K',

@step_name = N'Executar Script PowerShell',

@subsystem = N'PowerShell',

@command = N'

$drive = "E"

$volume = Get-Volume -DriveLetter $drive

if ($null -eq $volume) {

$message = "Não foi possível encontrar o volume com a letra de drive $drive"

} else {

$allocationUnitSize = $volume.AllocationUnitSize

if ($allocationUnitSize -eq 65536) {

$message = "O drive $drive está formatado com uma unidade de alocação de 64k."

} else {

$message = "O drive $drive NÃO está formatado com uma unidade de alocação de 64k. Unidade de alocação atual: $allocationUnitSize bytes."

}

}


$server = "DELL_G15"

$database = "DBA"

$query = "INSERT INTO DBA.dbo.FormatacaoDeDisco (ExecutionTime, OutputMessage) VALUES (GETDATE(), ''$message'')"


try {

Invoke-Sqlcmd -ServerInstance $server -Database $database -Query $query

Write-Output "Dados inseridos com sucesso."

} catch {

Write-Output "Erro ao conectar ao SQL Server: $_"

}

',

@on_success_action = 1,

@on_fail_action = 2,

@output_file_name = N'C:\Temp\DBA - VERIFICAR FORMATACAO DE DISCO 64K.log';

GO


-- Adiciona o job ao servidor

EXEC sp_add_jobserver

@job_name = N'DBA - VERIFICAR FORMATACAO DE DISCO 64K';

GO


-- Define a programação do job (por exemplo, diariamente às 2h da manhã)

EXEC sp_add_jobschedule

@job_name = N'DBA - VERIFICAR FORMATACAO DE DISCO 64K',

@name = N'DailySchedule',

@freq_type = 4,

@freq_interval = 1,

@active_start_time = 020000;

GO



JOB PARA VERIFICAR SE O DISCO ESTÁ FORMATADO EM 64K E SALVAR O RESULTADO EM UMA TABELA v2.sql


-- JOB PARA VERIFICAR SE O DISCO ESTÁ FORMATADO EM 64K E SALVAR O RESULTADO EM UMA TABELA

/*

ATENÇÃO PARA ALTERAR OS ITENS ENTRE AS LINHAS 47 e 49

*/


-- Verifica se o banco de dados DBA existe; caso contrário, cria o banco de dados

IF NOT EXISTS (SELECT * FROM sys.databases WHERE name = 'DBA')

BEGIN

CREATE DATABASE DBA;

END

GO


USE DBA;

GO


-- Cria a tabela FormatacaoDeDisco se não existir

IF NOT EXISTS (SELECT * FROM sys.tables WHERE name = 'FormatacaoDeDisco' AND schema_id = SCHEMA_ID('dbo'))

BEGIN

CREATE TABLE dbo.FormatacaoDeDisco (

ExecutionTime DATETIME,

OutputMessage NVARCHAR(MAX)

);

END

GO


USE msdb;

GO


-- Verifica se o job já existe; se existir, exclui o job

IF EXISTS (SELECT job_id FROM msdb.dbo.sysjobs WHERE name = N'DBA - VERIFICAR FORMATACAO DE DISCO 64K')

BEGIN

EXEC sp_delete_job @job_name = N'DBA - VERIFICAR FORMATACAO DE DISCO 64K';

END

GO


-- Cria um novo job

EXEC sp_add_job

@job_name = N'DBA - VERIFICAR FORMATACAO DE DISCO 64K',

@enabled = 1,

@description = N'Job para verificar se o disco está formatado em 64k usando PowerShell',

@start_step_id = 1,

@owner_login_name = N'sa'; -- Definindo o owner do job como 'sa';

GO


-- Declaração das variáveis

DECLARE @server NVARCHAR(100) = 'DELL_G15\SQL2019'; -- Alterar o Nome do servidor

DECLARE @drives NVARCHAR(MAX) = 'C,D,E,F'; -- Alterar as Unidades para verificar

DECLARE @qtd_steps INT = 4; -- Alterar a Quantidade de steps

DECLARE @step_id INT = 1;

DECLARE @drive NVARCHAR(1);

DECLARE @command NVARCHAR(MAX);

DECLARE @step_name NVARCHAR(50);


-- Preenche uma tabela temporária com as unidades

DECLARE @drive_list TABLE (Drive NVARCHAR(1));

WHILE LEN(@drives) > 0

BEGIN

SET @drive = LEFT(@drives, CHARINDEX(',', @drives + ',') - 1);

SET @drives = STUFF(@drives, 1, LEN(@drive + ','), '');

INSERT INTO @drive_list (Drive) VALUES (@drive);

END


-- Adiciona steps ao job para cada unidade a ser verificada

DECLARE @current_drive NVARCHAR(1);


DECLARE drive_cursor CURSOR FOR

SELECT Drive FROM @drive_list;


OPEN drive_cursor;

FETCH NEXT FROM drive_cursor INTO @current_drive;


WHILE @@FETCH_STATUS = 0

BEGIN

-- Monta o nome do step

SET @step_name = N'Step ' + CAST(@step_id AS NVARCHAR(10));


-- Monta o comando PowerShell

SET @command =

'$drive = "' + @current_drive + N'"; ' +

'if (-not (Test-Path "C:\Temp")) { New-Item -ItemType Directory -Path "C:\Temp" }; ' +

'$volume = Get-Volume -DriveLetter $drive; ' +

'if ($null -eq $volume) { $message = "Drive ${drive}: Não foi possível encontrar o volume com a letra de drive."; } ' +

'else { ' +

' $allocationUnitSize = $volume.AllocationUnitSize; ' +

' if ($allocationUnitSize -eq 65536) { $message = "Drive ${drive}: O drive está formatado com uma unidade de alocação de 64k."; } ' +

' else { $message = "Drive ${drive}: NÃO está formatado com uma unidade de alocação de 64k. Unidade de alocação atual: " + $allocationUnitSize + " bytes."; } ' +

'}; ' +

'$server = "' + @server + N'"; $database = "DBA"; ' +

'$query = "INSERT INTO dbo.FormatacaoDeDisco (ExecutionTime, OutputMessage) VALUES (GETDATE(), ''" + $message + "'' )" ; ' +

'try { Invoke-Sqlcmd -ServerInstance $server -Database $database -Query $query; Write-Output "Dados inseridos com sucesso para $drive."; } ' +

'catch { Write-Output "Erro ao conectar ao SQL Server: $_"; }; ' +

'$logPath = "C:\Temp\DBA - VERIFICAR FORMATACAO DE DISCO 64K.log"; Add-Content -Path $logPath -Value $message;';


-- Se for o último step, define o comportamento de sucesso/erro para 1 e 2 (sucesso e falha)

IF @step_id = @qtd_steps

BEGIN

EXEC sp_add_jobstep

@job_name = N'DBA - VERIFICAR FORMATACAO DE DISCO 64K',

@step_name = @step_name,

@subsystem = N'PowerShell',

@command = @command,

@on_success_action = 1, -- Sucesso

@on_fail_action = 2; -- Falha

END

ELSE

BEGIN

-- Para os outros steps, continua para o próximo

EXEC sp_add_jobstep

@job_name = N'DBA - VERIFICAR FORMATACAO DE DISCO 64K',

@step_name = @step_name,

@subsystem = N'PowerShell',

@command = @command,

@on_success_action = 3, -- Próximo Step

@on_fail_action = 3; -- Próximo Step

END


FETCH NEXT FROM drive_cursor INTO @current_drive;

SET @step_id = @step_id + 1;

END


CLOSE drive_cursor;

DEALLOCATE drive_cursor;

GO


-- Adiciona o job ao servidor

EXEC sp_add_jobserver

@job_name = N'DBA - VERIFICAR FORMATACAO DE DISCO 64K';

GO


---- Define a programação do job (por exemplo, diariamente às 2h da manhã)

--EXEC sp_add_jobschedule

-- @job_name = N'DBA - VERIFICAR FORMATACAO DE DISCO 64K',

-- @name = N'DailySchedule',

-- @freq_type = 4,

-- @freq_interval = 1,

-- @active_start_time = 020000;

--GO


2 visualizações0 comentário

Posts recentes

Ver tudo

Σχόλια


Logo_quadrada.png
Logo_quadrada.png

 © 2020 Direitos Reservados CloudDB ®  O plágio é considerado crime e sua principal referência é a lei 9.610 - ♥ SEO WIX Partner - Phoenix

bottom of page