La comprobación de integridad de la base de datos SQL es una de las tareas más cruciales e importantes del administrador de la base de datos. La tarea integridad de la base de datos comprueba la integridad estructural y la asignación de todos los objetos e índices de la base de datos. Las comprobaciones de integridad se pueden realizar mediante el comando DBCC CheckDB. El comando CheckDB se utiliza para identificar los daños en la base de datos. El comando realiza las siguientes operaciones en la base de datos.
- Ejecuta la TABLA DE COMPROBACIÓN de DBCC en cada tabla y view
- Ejecuta el catálogo de comprobación de DBCC en las bases de datos
- Ejecuta el CHECKALLOC de DBCC en las bases de datos
- Valida los datos del agente de servicio
- Valida el contenido de las vistas indexadas
Puede leer DBCC CHECKDB (Transact-SQL) para obtener más información sobre el comando DBCC CheckDB.
Por lo general, los DBA crean scripts personalizados para identificar los daños en las bases de datos. Pero, si está trabajando en varias bases de datos, se vuelve tedioso revisar los registros generados por el comando DBCC CheckDB. Así que he creado un procedimiento almacenado SQL que se ejecuta en todas las bases de datos, y si encuentra algún error de consistencia, envía los detalles al equipo de DBA.
En mi artículo anterior, Automatizar copias de seguridad de bases de datos SQL utilizando el Programador de tareas de Windows, había explicado cómo podríamos automatizar el proceso para generar una copia de seguridad completa y diferencial de la base de datos SQL restaurada en SQL server express edition. Este artículo explica cómo podemos automatizar la comprobación de consistencia de la base de datos SQL creada en SQL Server express edition. Para demostrarlo, he descargado una base de datos de muestra de aquí. He instalado SQL Server Express edition y restaurado la base de datos con el siguiente comando:
1
2
3
4
5
6
7
|
USE
GO
RESTAURAR LA BASE DE DATOS DESDE EL DISCO = N’C:\SQL Backup\democrorruptmetadata2008r2.bak ‘
CON FILE = 1,
MOVER N’Democorruptmetadata’A N’ C:\Program Archivos \ Microsoft SQL Server \ MSSQL11.SQLEXPRESS\MSSQL\DATA\DemoCorruptMetadata.mdf’,
MOVER N’Democorruptmetadata_log’A N’ C:\Program Archivos \ Microsoft SQL Server \ MSSQL11.SQLEXPRESS\MSSQL\DATA\democruptmetadata_log.ldf’,
NOUNLOAD, ESTADÍSTICAS = 5
|
una Vez que restaurar una base de datos, vamos a ejecutar el comando DBCC CheckDB para ver los errores.
1
2
3
4
5
|
establecer no cuenta en
GO
usar master
GO
dbcc checkdb (DemoCorruptMetadata) con all_errormsgs, no_infomsgs
|
Como puede ver en la imagen anterior, la base de datos está dañada y el comando comprobación de consistencia ha informado de errores. Para realizar la comprobación de coherencia, he creado un procedimiento almacenado que
- Ejecuta la comprobación de coherencia en todas las bases de datos SQL, y si encuentra errores de coherencia, los inserta en una tabla temporal
- Extrae el mensaje de la tabla temporal y envía el correo electrónico con formato HTML al equipo de DBA
El código del procedimiento almacenado se muestra a continuación:
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
(
NOMBRE VARCHAR(500)
)
INSERTAR EN #bases de datos de usuario
SELECCIONAR NOMBRE
DE sys.bases de datos
DONDE database_id > 4
SET @DBcount=(SELECT Count(1)
DE #userdatabases)
MIENTRAS ( @DBcount > @i )
BEGIN
SET @Nombrebd = (SELECT TOP 1 NOMBRE
DE #userdatabases)
SET @dbcccommand=’dbcc checkdb (‘ + @DBName
+ ‘) con no_infomsgs, all_errormsgs,tableresults’
INSERT INTO #errormsgs
EXEC (‘dbcc checkdb (‘ +@DBName +
‘) con no_infomsgs, all_errormsgs,tableresults’)
ELIMINAR DE #userdatabases
WHERE NOMBRE = @DBName
SET @i=@i + 1
END
DROP TABLE #userdatabases
END
select seleccione messageText de #errormsgs
DECLARE @subject NVARCHAR(max)
DECLARE @tableHTML NVARCHAR(max)
SET @subject = ‘Informe de comprobación de consistencia de la base de datos para el Servidor :’
+ @@nombre de servidor
ESTABLECER @ tableHTML =
‘ <html> < Cuerpo> < tipo de estilo = «texto / css» > tabla {tamaño de fuente: 9.0 pt; familia de fuentes: verdana; alineación de texto:izquierda;} tr {alineación de texto: izquierda;} h3 { pantalla: bloque; tamaño de fuente: 15.0 pt; font-weight: bold; font-family: verdana; text-align:left; } < / estilo> < H3> Resumen de la comprobación de consistencia de la base de datos en el Servidor ‘
+ @@nombre de servidor + «</H3> «+ N » <borde de la tabla=»1″>’
+ N ‘ < tr> < th> messageText< / th> < th> Base de datos corrupta< / th> < /tr>’
+ Cast((SELECT Isnull(messagetext, «) AS ‘TD’, «, Isnull(
Db_name(dbid), «) AS ‘TD’, «, Isnull(repairlevel, «) AS ‘TD’
, » FROM #errormsgs FOR xml path ( ‘tr’ ), root) AS NVARCHAR(
max))
+ N'</tabla> </html> < / Cuerpo>’
EXEC msdb..Sp_send_dbmail
@profile_name = ‘DBMailProfile’,
@recipients = ‘ni*********[email protected]’,
@subject = @ subject,
@ importance = ‘High’,
@body = @ tableHTML,
@body_format = ‘HTML’;
|
Como sabe, SQL Server Express edition no admite correo de base de datos, pero puede configurar el correo de base de datos mediante consultas T-SQL. Puede leer este artículo, Configuración de correo de base de datos en la edición SQL Server Express para comprender el proceso en detalle.
La edición SQL Server Express no admite agentes de SQL Server, por lo que utilizamos el cedular de tareas de Windows. Windows schedular puede ejecutar el archivo por lotes, por lo que he creado un archivo por lotes que ejecuta un procedimiento almacenado utilizando el comando SQLCMD. El código del archivo por lotes es el siguiente.
1
|
sqlcmd -S Nisarg-PC\SQLExpress -Q «ejecutar sp_DB_Integrity_check» -d DBATools
|
Especificar el comando en el editor de texto y guarde el archivo como *.archivo bat. Ahora, vamos a crear una tarea usando la tarea cedular de Windows. Abrir Panel de Control Abrir Herramientas de Administrador Abrir Programador de Tareas. En el calendario de tareas, Haga clic en Crear una tarea básica. En la primera pantalla, especifique el nombre de la tarea y la descripción.
La comprobación de coherencia de la base de datos debe realizarse cada semana, por lo que debe especificar semanalmente en la pantalla Desencadenadores de tareas.Pantalla de activación de tareas
El script debe ejecutarse todos los domingos a la 1:00 AM, así que especifique 01:00:00 en el cuadro de texto Inicio. El trabajo debe ejecutarse una vez a la semana, así que especifique 1 en el cuadro de texto Repetir cada uno. Seleccione Domingo de la lista de días.
Estamos ejecutando un script por lotes para verificar la corrupción de la base de datos, así que elija la opción Iniciar un programa en la pantalla de acción.Pantalla de acción de tareas
En el Inicio, una pantalla de programa, especifique la ruta completa del archivo por lotes. Puede encontrar el archivo navegando por los directorios. En nuestro caso, el archivo por lotes se ha creado en C:\ DatabaseScripts, por lo que he proporcionado la ruta completa del archivo por lotes. Asegúrese de que el usuario que ha creado la programación debe tener acceso de lectura y escritura en el directorio en el que se ha creado el archivo por lotes. Haga clic en Siguiente.
En la pantalla de resumen, puede revisar los detalles de la tarea creada. Haga clic en Finalizar.
Puede ver la tarea en ventanas cedulares de tareas. Ahora, probemos la tarea configurada. Para ello, haga clic con el botón derecho en Comprobar integridad de la base de datos y haga clic en Ejecutar. Alternativamente, haga clic en el enlace llamado Ejecutar desde el panel derecho.
Comienza el proceso de comprobación de consistencia.
El proceso se completó con éxito. Puede verificar los detalles desde la pestaña Historial de tareas del programa de tareas.
Hemos restaurado una base de datos SQL dañada, por lo que hemos recibido un correo electrónico con los errores de consistencia de la base de datos. El correo electrónico se parece a la siguiente imagen.
Resumen
Este artículo explica cómo podemos identificar la corrupción de la base de datos mediante un script por lotes que se ha programado en el programa de tareas de Windows. Este artículo puede ser útil para los administradores de bases de datos de nivel básico que deseen automatizar las tareas de mantenimiento de bases de datos de SQL database creadas o restauradas en SQL server express edition. En mi próximo artículo, aprenderemos cómo podemos automatizar el mantenimiento del índice de la base de datos SQL creada en SQL Server express edition utilizando el programador de tareas de Windows. ¡Estén atentos!
- Autor
- Publicaciones recientes
Tiene experiencia en diseño de bases de datos, ajuste de rendimiento, copia de seguridad y recuperación, configuración de HA y DR, migraciones y actualizaciones de bases de datos. Ha completado el B. Tech de la Universidad de Ganpat. Se puede contactar con él en [email protected]
- Cómo mover tablas a otro grupo de archivos de una base de datos SQL – 14 de diciembre de 2021
- Configurar controladores ODBC para Oracle 19c-9 de diciembre de 2021
- Configurar un servidor vinculado entre SQL Server y PostgreSQL mediante controladores ODBC-Diciembre 6, 2021