0

Comprueba la última fecha de tus CHECKDB

Empezamos este nuevo año y década hablando sobre como comprobar la última fecha que se ejecutó un CHECKDB sobre nuestras bases de datos.

En primer lugar, ¿sabemos que es un CHECKDB?

Es un comando de SQL Server que nos permite comprobar la integridad lógica y física de nuestras bases de datos.

Podemos leer toda la información, opciones y peculiaridades en el siguiente enlace oficial de Microsoft:

https://docs.microsoft.com/en-us/sql/t-sql/database-console-commands/dbcc-checkdb-transact-sql

IMPORTANTE: para ejecutar este comando tienes que ser miembro del rol db_owner de la base de datos o miembro del rol sysadmin en la instancia SQL Server.

Si ya somos conscientes de lo que es y lo estamos aplicando en nuestros entornos, es importante tener un control de cuándo se está ejecutando estas comprobaciones. Para ello, tenemos dos opciones que utilizaremos en función de nuestra versión de SQL Server:

-A partir de SQL Server 2016, podemos usar la función DATABASEPROPERTYEX, pasando como primer parámetro el nombre de la base de datos y como segundo el valor LastGoodCheckDbTime:

select DATABASEPROPERTYEX ('NOMBRE_BBDD','LastGoodCheckDbTime') as UltimoCheckDB_OK

Si queremos lanzarlo sobre todas las bases de datos de nuestras instancia SQL Server, utilizamos la tabla de sistema sys.databases:

select name,DATABASEPROPERTYEX (name,'LastGoodCheckDbTime') as UltimoCheckDB_OK
from sys.databases

Más información sobre la función DATABASEPROPERTYEX:

https://docs.microsoft.com/en-us/sql/t-sql/functions/databasepropertyex-transact-sql

Más información sobre la tabla de sistema sys.databases:

https://docs.microsoft.com/en-us/sql/relational-databases/system-catalog-views/sys-databases-transact-sql

Si tenemos versiones anteriores a SQL Server 2016, podemos usar un comando DBCC, que seguramente conozcas:

DBCC DBINFO()

Usamos dos tablas para ir cargando la información de todas las bases de datos, como ves, no es tan sencillo, pero con este script podrás tener la última fecha del CHECKDB de todas tus bases de datos:

CREATE TABLE ##temp2
    (DatabaseName varchar(1000) NULL,UltimoCheckDB_OK datetime null)
EXECUTE sp_MSForEachDB
'
CREATE TABLE #tmp
    (ParentObject varchar(1000) NULL,Object varchar(1000) NULL,Field varchar(1000) NULL,Value varchar(1000) NULL)
use ?;
insert into #tmp
EXEC (''DBCC DBINFO() WITH TABLERESULTS'')
insert into ##temp2 select DB_NAME() as DatabaseName, cast(value as datetime) as UltimoCheckDB_OK from #tmp where field=''dbi_dbcclastknowngood''
drop  table  #tmp'
select * from  ##temp2
drop table ##temp2

Si enlazas esta entrada con una que ya publicamos, puedes lanzar estas consultas en todas tus instancias:

Y hasta aquí una entrada para implementar en tus entornos y clientes, ¡te la recomendamos 100%!

Deja una respuesta

Tu dirección de correo electrónico no será publicada.