SQLShack

a verificação de integridade do banco de dados SQL é uma das tarefas mais importantes e importantes do administrador do banco de dados. A tarefa integridade do banco de dados verifica a integridade estrutural e a alocação de todos os objetos e índices do banco de dados. As verificações de integridade podem ser realizadas usando o comando DBCC CheckDB. O comando CheckDB é usado para identificar a corrupção no banco de dados. O comando executa as seguintes operações no banco de dados.

    Executa o comando DBCC CHECKTABLE em cada tabela e exibir Executa o comando DBCC CHECKCATALOG sobre as bases de dados Executa o comando DBCC CHECKALLOC sobre as bases de dados Valida o agente de serviço de dados Valida o conteúdo de modos de exibição indexados

Você pode ler o DBCC CHECKDB (Transact-SQL) para saber mais sobre o comando DBCC CheckDB.

Normalmente, os DBAs criam scripts personalizados para identificar a corrupção nos bancos de dados. Mas, se você estiver trabalhando em vários bancos de dados, torna-se tedioso revisar os logs gerados pelo comando DBCC CheckDB. Portanto, criei um procedimento armazenado SQL que é executado em todos os bancos de dados e, se encontrar algum erro de consistência, ele envia os detalhes para a equipe DBA.

no meu artigo anterior, automatize backups de banco de dados SQL usando o Agendador de Tarefas do Windows, expliquei como poderíamos automatizar o processo para gerar um backup completo e diferencial do banco de dados SQL restaurado no SQL server express edition. Este artigo explica como podemos automatizar a verificação de consistência do banco de dados SQL criado no SQL Server express edition. Para demonstrar, baixei um banco de dados de amostra daqui. Eu tenho instalado o SQL Server Express edition e restaurar o banco de dados usando o seguinte comando:

1
2
3
4
5
6
7

USE
IR p
RESTAURAR BANCO de dados a PARTIR do DISCO = N’C:\SQL Backup\DemoCorruptMetadata2008R2.bak ‘
com FILE = 1,
mover N’Dcorruptmetadata’ para N’C:\Program arquivos \ Microsoft SQL Server\MSSQL11.SQLEXPRESS\MSSQL \ DATA \ Democorrupmetadata.mdf’,
mover N’Ddemocorruptmetadata_log’para N’ C:\Program arquivos \ Microsoft SQL Server\MSSQL11.SQLEXPRESS\MSSQL \ DATA \ DemoCorruptMetadata_log.ldf’,
NOUNLOAD, ESTATÍSTICAS = 5

uma Vez que um banco de dados é restaurado, vamos executar o comando DBCC CheckDB para ver os erros.

1
2
3
4
5

set nocount on
IR p
use master
IR p
dbcc checkdb (DemoCorruptMetadata) com all_errormsgs, no_infomsgs

erro de Consistência de banco de dados SQL

Como você pode ver na imagem acima, o banco de dados está corrompido, e a verificação de consistência de comando tem erros reportados. Para executar a verificação de consistência de eu ter criado um procedimento armazenado que

    Executar a verificação de consistência em todos os bancos de dados SQL, e se ele encontrar quaisquer erros de consistência, insere esses erros em uma tabela temporária Extrair a mensagem a partir da tabela temporária e enviar HTML formatado e-mail para a equipe de DBAS

O código do procedimento armazenado é mostrado abaixo:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85

USE master
GO
CREATE PROCEDURE Sp_db_integrity_check
AS
BEGIN
DECLARE @DBName VARCHAR(150)
DECLARE @dbcccommand NVARCHAR(max)
DECLARE @DBcount INT
DECLARE @i INT = 0
CREATE TABLE #errormsgs
(
error INT NULL,
level INT NULL,
state INT NULL,
messagetext VARCHAR (7000) NULL,
repairlevel INT NULL,
status INT NULL,
dbid INT NULL,
dbfragid INT NULL,
objectid INT NULL,
indexid INT NULL,
partitionid INT NULL,
allocunitid INT NULL,
riddbid INT NULL,
ridpruid INT NULL,
INT NULL,
page INT NULL,
slot INT NULL,
refdbid INT NULL,
refpruid INT NULL,
reffile INT NULL,
refpage INT NULL,
refslot INT NULL,
allocation INT NULL,
)
CREATE TABLE #userdatabases
(
nome VARCHAR(500)
)
insira em #userdatabases
selecione o nome
do sistema.bases de dados
ONDE database_id > 4
SET @DBcount=(SELECT Count(1)
FROM #userdatabases)
WHILE ( @DBcount > @i )
BEGIN
SET @DBName = (SELECT TOP 1 NOME
FROM #userdatabases)
SET @dbcccommand=’dbcc checkdb (‘ + @DBName
+ ‘) com no_infomsgs, all_errormsgs,tableresults’
INSERT INTO #errormsgs
EXEC (‘dbcc checkdb (‘ +@DBName +
‘) com no_infomsgs, all_errormsgs,tableresults’)
DELETE FROM #userdatabases
WHERE NOME = @DBName
SET @i=@i + 1
FIM
DROP TABLE #userdatabases
FIM
–seleccione MessageText de #errormsgs
DECLARE @sujeito NVARCHAR(max)
DECLARE @tableHTML NVARCHAR(max)
SET @subject = ‘Banco de dados Consistancy relatório de Verificação para o Servidor :’
+ @@servername
SET @tableHTML =
‘ <html> < > Corpo> <style type=”text/css”> table {font-size:9.0 pt;font-family:verdana;text-align:left;} tr {text-align:left;} h3 { display: block; font-size: 15.0 pt; font-weight: bold; font-family: verdana; text-align: left; } </estilo> <H3>de Verão do Banco de dados Consistancy de Verificação no Servidor ‘
+ @@servername + ‘</H3>’ + N'<limite da tabela=”1″>’
+ N'<tr><th>MessageText</th><th>Banco de dados Corrompido</th></tr>’
+ Elenco((SELECT Isnull(messagetext, “) COMO ‘TD’, “, Isnull(
Db_name(dbid), ” COMO ‘TD’, “, Isnull(repairlevel, “) COMO ‘TD’
, ” a PARTIR do #errormsgs PARA xml path ( ‘tr’ ), raiz) COMO tipo de dados NVARCHAR(
max))
+ N'</tabela> </html> </corpo>’
EXEC msdb..Sp_send_dbmail
@profile_name = ‘DBMailProfile’,
@recipients = ‘ni*********[email protected]’,
@assunto = @sujeito,
@importância = ‘Alta’,
@body = @tableHTML,
@body_format = ‘HTML’;

Como você sabe, o SQL Server Express edition não oferece suporte a banco de dados de email, mas você pode configurar o correio da base de dados usando consultas T-SQL. Você pode ler este artigo, configuração de correio de banco de dados no SQL Server Express edition para entender o processo em detalhes.

o SQL Server Express edition não oferece suporte a agentes do SQL Server, portanto, usamos o schedular de tarefas do Windows. O Windows schedular pode executar o arquivo em lote, então criei um arquivo em lote que executa um procedimento armazenado usando o comando SQLCMD. O código do arquivo em lote é o seguinte.

1
sqlcmd -S Nisarg-PC\SQLExpress -Q “executar sp_DB_Integrity_check” -d DBATools

Especificar o comando no editor de texto e salve o arquivo como *.arquivo bat. Agora, vamos criar uma tarefa usando o Windows task schedular. Abra o painel de controle abra as ferramentas de administrador abra o Agendador de Tarefas. Na tarefa schedular, clique em criar uma tarefa básica. Na primeira tela, especifique o nome da tarefa e descrição.

criar tela de tarefa básica

criar tela de tarefa básica

a verificação de consistência do banco de dados deve ser realizada todas as semanas, portanto, especifique semanalmente na tela de gatilhos de Tarefas.

tela do disparador de Tarefas

tela de disparo de tarefa

o script deve ser executado todos os domingos às 1:00 da manhã, portanto, especifique 01:00:00 na caixa de texto Iniciar. O trabalho deve ser executado uma vez por semana, então especifique 1 em repetir cada caixa de texto. Selecione domingo na lista dos dias.

tela de configuração de programação semanal

tela de configuração de programação semanal

estamos executando um script em lote para verificar a corrupção do banco de dados, então escolha a opção Iniciar um programa na tela de ação.

tela de ação da tarefa

tela de ação da tarefa

no início, uma tela de programa, especifique o caminho completo do arquivo em lote. Você pode encontrar o arquivo navegando pelos diretórios. No nosso caso, o arquivo em lote foi criado em C:\ DatabaseScripts, então eu forneci o caminho completo do arquivo em lote. Certifique-se de que o usuário que criou a programação deve ter acesso de leitura e gravação no diretório no qual o arquivo em lote foi criado. Clique em Avançar.

iniciar uma tela do programa

Inicie uma tela de programa

na tela de resumo, você pode revisar os detalhes da tarefa criada. Clique em Concluir.

tela de resumo

tela de resumo

você pode visualizar a tarefa no task schedular windows. Agora, vamos testar a tarefa configurada. Para fazer isso, clique com o botão direito do mouse em verificar integridade do banco de dados e clique em Executar. Como alternativa, clique no link chamado Executar no painel direito.

Exibir histórico de Tarefas

o processo de verificação de consistência começa.

 o processo DBCC CheckDB começa

o processo foi concluído com sucesso. Você pode verificar os detalhes na guia Histórico de Tarefas do schedular de Tarefas.

Histórico de execução de Tarefas

restauramos um banco de dados SQL corrompido, portanto, recebemos um e-mail com os erros de consistência do banco de dados. O e-mail se parece com a imagem a seguir.

 erro de consistência email

resumo

este artigo explicou como podemos identificar a corrupção do banco de dados usando um script em lote que foi agendado na tarefa do Windows schedular. Este artigo pode ser útil para os administradores de banco de dados de nível básico que desejam automatizar as tarefas de manutenção de banco de dados do banco de dados SQL criado ou restaurado no SQL server express edition. No meu próximo artigo, aprenderemos como podemos automatizar a manutenção de índice do banco de dados SQL criado no SQL Server express edition usando o Agendador de tarefas do Windows. Fique atento!

  • Autor
  • Posts Recentes

Nisarg Upadhyay
Nisarg Upadhyay é um Banco de dados SQL Server Administrator e Microsoft certified professional, que tem mais de 8 anos de experiência com SQL Server, administração e 2 anos com Oracle 10g administração do banco de dados.
ele tem experiência em design de banco de dados, ajuste de desempenho, backup e recuperação, configuração HA e DR, migrações de banco de dados e atualizações. Ele completou o B. Tech da Universidade Ganpat. Ele pode ser alcançado em nisargupadhyay87 @ outlook.com

Nisarg Upadhyay
postagens mais Recentes por Nisarg Upadhyay (ver todas)
  • Como mover tabelas para outro grupo de arquivos de uma base de dados SQL – 14 de dezembro de 2021
  • Configurar os Drivers de ODBC para Oracle 19c – dezembro 9, 2021 Configurar um Servidor Ligado entre o SQL Server e PostgreSQL usando drivers ODBC – dezembro 6, 2021

Write a Comment

O seu endereço de email não será publicado.