0

¿Cómo encontrar nuestros ficheros huérfanos?

En los últimos días tuvimos un problema de espacio en una de nuestras unidades de almacenamiento de datos de uno de nuestros servidores. Repasando la unidad de almacenamiento e instancia, nos dimos cuenta que muchos archivos mdf, ndf y ldf (a tener en cuenta durante la entrada si tienes extensiones personalizadas) no se encontraban asociados a ninguna base de datos. Estos archivos se encontraban huérfanos, seguramente debido a que con el tiempo se han ido eliminando bases de datos cuando estaban Offline sin eliminar los archivos asociados.


¿Cómo puedo encontrar y limpiar los archivos de base de datos no utilizados?


Os proponemos varias alternativas:


1.A través de T-SQL:

Buceando por la red encontramos el siguiente script:


Otro script que nos encontramos fue el siguiente:


Su diferencia es que nos lista los ficheros de nuestras bases de datos y a continuación los que son huérfanos. Este script sólo busca en las carpetas indicadas en nuestras bases de datos que contienen sus ficheros.

Tras ejecutar cualquiera de las dos alternativas y con nuestro listado de ficheros huérfanos ya podemos eliminar, almacenar o lo que consideremos oportuno los archivos con el objetivo de mantener limpias nuestras unidades o no tener problemas en un futuro, por ejemplo, con ficheros con el mismo nombre al realizar una restauración.


2.Explorador

Un segundo método, poco (o nada) elegante pero eficaz, es simplemente seleccionar todos los archivos .MDF, .NDF y .LDF  y moverlos de ubicación. Si está en uso el sistema operativo no nos permitirá moverlos ni eliminarlos:


Para ello debemos cerciorarnos de que el servicio de la instancia está corriendo.

También, algo más elegante pero también usando el explorador es comparar los archivos que están en uso en la instancia utilizando la siguiente query:


Comparamos su resultado con los ficheros que hay en las ubicaciones de nuestros ficheros de base de datos. Ya te avisamos que esto es bastante tedioso sobre todo si contamos con decenas o cientos de archivos.


3.PowerShell

Como ya te comentamos en entradas anteriores a través de InvokeSQL podemos ejecutar consultas T-SQL a través de powershell, por lo que podríamos ejecutar las querys del primer apartado de la entrada. También con este método podrías ejecutar la consulta en varias instancias a la vez. Por ejemplo:


También te invitamos a echar un ojo a la entrada de los compañeros de SQLShack  que nos presentan una manera de realizar estas comprobaciones a través de PowerShell en una extensa entrada: https://www.sqlshack.com/multi-server-script-find-orphaned-data-files-using-powershell/


Y estos son las diferentes formas que hemos utilizado para repasar nuestras instancias dejando limpias nuestras unidades de almacenamiento evitando posibles problemas y, también importante, ahorrando un posible coste a nuestros clientes.


IMPORTANTE. Antes de eliminar cualquier fichero, recuerda realizar una copia de seguridad del mismo para poder recuperarlo si fuese necesario o tenerlo un tiempo en cuarentena.  No queremos que nos llenéis el buzón de correo de quejas 🙂

RSS
Facebook
Twitter
LINKEDIN

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *