¿Desinstalaste Microsoft SQL Server y quedaron las carpetas Binn, DATA y Log que se niegan a borrarse? Esta guía práctica te muestra cómo liberar bloqueos, recuperar permisos NTFS y eliminarlas con seguridad, paso a paso y sin recurrir a herramientas de terceros.
Resumen del problema
Después de desinstalar SQL Server, pueden permanecer carpetas con binarios, bases de datos y registros de transacciones. Aunque ya no tengas la instancia, Windows puede rechazar su eliminación por bloqueos de procesos, permisos heredados, servicios huérfanos o atributos protegidos del sistema. El objetivo es limpiar Binn, DATA y Log de forma segura, evitando errores de Acceso denegado o Archivo en uso.
Solución resumida
- Detener todos los servicios y procesos relacionados con SQL Server, incluida cualquier instancia LocalDB.
- Tomar propiedad y concederte permisos de control total a las rutas donde residen las carpetas.
- Eliminar las carpetas Binn, DATA y Log desde un símbolo del sistema con privilegios elevados.
- Si algo sigue bloqueado, aplicar medidas adicionales: reinicio, modo seguro, quitar atributos, borrar servicios huérfanos, pausar antivirus o deshabilitar la indexación.
⚠️ Precaución: eliminar DATA y Log borra definitivamente archivos
.mdf
/.ndf
y.ldf
. Si necesitas conservar algo, haz copia de seguridad antes.
Qué representan Binn, DATA y Log
- Binn: binarios y ejecutables de la instancia (por ejemplo,
sqlservr.exe
), DLLs y utilidades. - DATA: archivos de base de datos de usuario y del sistema (
.mdf
,.ndf
). - Log: registros de transacciones (
.ldf
) y, según la versión, trazas y volcados.
Estas carpetas suelen vivir bajo una ruta de instancia como C:\Program Files\Microsoft SQL Server\MSSQL15.SQLEXPRESS\MSSQL\
, aunque pueden haberse configurado en volúmenes diferenciados.
Escenarios habituales que impiden el borrado
- Servicios activos: la instancia principal, el agente, el navegador, Launchpad, PolyBase, SSIS/SSAS/SSRS o VSS Writer pueden mantener archivos abiertos.
- LocalDB: instancias automáticas del usuario (p. ej.,
MSSQLLocalDB
) que se levantan bajo demanda y bloquean ficheros. - Permisos NTFS: el propietario puede ser TrustedInstaller o una cuenta de servicio; sin propiedad, icacls puede fallar.
- Servicios huérfanos: entradas residuales en el administrador de control de servicios que reactivan bloqueos.
- Atributos protegidos: carpetas marcadas como solo lectura, ocultas o de sistema.
- Antivirus o indexación: motores que escanean la ruta, generando exclusiones temporales necesarias.
- Rutas largas: nombres que superan el límite clásico de la API; se resuelve usando el prefijo
\\?\
.
Detener servicios y procesos de SQL
Antes de tocar permisos o borrar nada, asegúrate de que no quede un solo proceso de SQL activo.
Detener desde el administrador de servicios
- Abre services.msc (Win + R →
services.msc
). - Detén todo servicio que comience por: SQL Server (instancia predeterminada o nombrada), SQL Server Agent, SQL Server Browser, SQL Server VSS Writer, SQL Server Launchpad, PolyBase, SSIS/SSAS/SSRS, CEIP.
Detener con la consola de servicios
sc query type= service state= all | find "SQL"
sc stop MSSQLSERVER
sc stop MSSQL$SQLEXPRESS
sc stop SQLBrowser
sc stop SQLWriter
sc stop SQLAgent$SQLEXPRESS
Sustituye los nombres por los que muestre tu sistema.
Cerrar instancias LocalDB
sqllocaldb info
sqllocaldb stop "MSSQLLocalDB"
sqllocaldb delete "MSSQLLocalDB"
Detectar bloqueos con herramientas del sistema
- Monitor de recursos (
resmon.exe
) → pestaña CPU → Asociado con controladores → busca por “SQL” o por la ruta exacta. - Process Explorer → Find → Find Handle or DLL → escribe parte del nombre de la carpeta o mdf/ldf.
Tomar propiedad y conceder permisos
Sin propiedad, Windows puede denegar cambios ACL. Con una consola CMD como administrador, ejecuta:
takeown /f "C:\Program Files\Microsoft SQL Server" /r /d y
icacls "C:\Program Files\Microsoft SQL Server" /grant "%USERNAME%":(F) /t /c
takeown /f "C:\Program Files (x86)\Microsoft SQL Server" /r /d y
icacls "C:\Program Files (x86)\Microsoft SQL Server" /grant "%USERNAME%":(F) /t /c
takeown /f "C:\ProgramData\Microsoft\SQL Server" /r /d y
icacls "C:\ProgramData\Microsoft\SQL Server" /grant "%USERNAME%":(F) /t /c
La carpeta ProgramData
es oculta; puedes pegar la ruta en el explorador o habilitar la vista de elementos ocultos.
Si tus DATA/Log están en otra unidad, repite los comandos sobre esa ruta específica (por ejemplo, D:\SQLData
o E:\SQLLogs
).
Eliminar Binn, DATA y Log
Ubica la carpeta que contiene las subcarpetas de la instancia. Suele ser algo como:
C:\Program Files\Microsoft SQL Server\MSSQL15.SQLEXPRESS\MSSQL\
Desde una CMD como administrador:
cd "C:\Program Files\Microsoft SQL Server\MSSQL15.SQLEXPRESS\MSSQL"
rmdir /s /q "Binn"
rmdir /s /q "DATA"
rmdir /s /q "Log"
Para una limpieza completa (cuando ya no existan otras instancias):
rmdir /s /q "C:\Program Files\Microsoft SQL Server"
rmdir /s /q "C:\Program Files (x86)\Microsoft SQL Server"
rmdir /s /q "C:\ProgramData\Microsoft\SQL Server"
Medidas adicionales si el borrado falla
Reinicio o modo seguro
Reinicia y repite la eliminación. Si el bloqueo persiste, inicia en modo seguro y vuelve a ejecutar los comandos sobre las rutas afectadas.
Quitar atributos protegidos
attrib -r -h -s "RUTA\A\LA\CARPETA" /s /d
Eliminar servicios huérfanos
sc query type= service state= all | find "SQL"
sc delete MSSQL$SQLEXPRESS
sc delete MSSQLSERVER
sc delete SQLBrowser
sc delete SQLWriter
Usa sc query
para identificar los nombres reales antes de ejecutar sc delete
.
Control de antivirus e indexación
Pausa temporalmente el antivirus o agrega la ruta como exclusión. Considera deshabilitar de forma temporal la indexación de Windows sobre el volumen donde residen las carpetas.
Problemas de ruta larga
Si aparece un error relacionado con la longitud de la ruta, usa el prefijo extendido:
del /f /s /q \\?\C:\RUTA\MUY\LARGA\.
rmdir /s /q \\?\C:\RUTA\MUY\LARGA
Si la base sigue adjunta a otra instancia
Cuando existe otra instancia en la máquina que mantiene la base adjunta, libera los archivos desde SSMS o con T‑SQL:
USE master;
ALTER DATABASE [TuBD] SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
EXEC spdetachdb N'TuBD';
Después de esto, borra los .mdf
/.ldf
desde el Explorador o con rmdir
/del
.
Rutas y componentes frecuentes
Componente | Ruta típica | Notas |
---|---|---|
Binarios de instancia | C:\Program Files\Microsoft SQL Server\MSSQLxx.INSTANCIA\MSSQL\Binn | Contiene ejecutables y bibliotecas. |
Archivos de datos | C:\Program Files\Microsoft SQL Server\MSSQLxx.INSTANCIA\MSSQL\DATA o volúmenes dedicados (D:\SQLData ) | Incluye master.mdf , model.mdf , bases de usuario. |
Registros | ...\MSSQL\Log o E:\SQLLogs | Registros de transacciones y, según la versión, trazas. |
Archivos compartidos | C:\Program Files\Microsoft SQL Server | Componentes comunes de cliente y motor. |
Datos de programa | C:\ProgramData\Microsoft\SQL Server (oculto) | Configuración y metadatos compartidos. |
Comandos equivalentes en PowerShell
Si prefieres PowerShell, puedes combinar detención de servicios y borrado forzado:
# Ejecutar como administrador
Get-Service SQL | Where-Object {$_.Status -eq 'Running'} | Stop-Service -Force
Tomar propiedad y permisos con utilidades clásicas
takeown /f "C:\Program Files\Microsoft SQL Server" /r /d y
icacls "C:\Program Files\Microsoft SQL Server" /grant "\$env\:USERNAME":(F) /t /c
Eliminar carpetas
Remove-Item -LiteralPath "C:\Program Files\Microsoft SQL Server" -Recurse -Force -ErrorAction SilentlyContinue
Remove-Item -LiteralPath "C:\Program Files (x86)\Microsoft SQL Server" -Recurse -Force -ErrorAction SilentlyContinue
Remove-Item -LiteralPath "C:\ProgramData\Microsoft\SQL Server" -Recurse -Force -ErrorAction SilentlyContinue
Script de limpieza integrado
Úsalo únicamente si entiendes cada línea y ya hiciste copia de seguridad de lo necesario. Pega el contenido en un archivo .bat
y ejecútalo como administrador.
@echo off
echo === Limpieza de carpetas residuales de SQL Server ===
echo ADVERTENCIA: esto puede borrar DEFINITIVAMENTE bases de datos y registros.
pause
REM Detener servicios conocidos
for %%S in (MSSQLSERVER MSSQL\$SQLEXPRESS SQLBrowser SQLWriter SQLAgent\$SQLEXPRESS) do (
sc stop %%S >nul 2>&1
)
REM Cerrar y eliminar LocalDB
sqllocaldb info >nul 2>&1
if %errorlevel%==0 (
sqllocaldb stop "MSSQLLocalDB" >nul 2>&1
sqllocaldb delete "MSSQLLocalDB" >nul 2>&1
)
REM Tomar propiedad y permisos
for %%P in ("C:\Program Files\Microsoft SQL Server" "C:\Program Files (x86)\Microsoft SQL Server" "C:\ProgramData\Microsoft\SQL Server") do (
takeown /f "%%~P" /r /d y >nul 2>&1
icacls "%%~P" /grant "%USERNAME%":(F) /t /c >nul 2>&1
)
REM Quitar atributos por si acaso
for %%P in ("C:\Program Files\Microsoft SQL Server" "C:\Program Files (x86)\Microsoft SQL Server" "C:\ProgramData\Microsoft\SQL Server") do (
attrib -r -h -s "%%~P" /s /d >nul 2>&1
)
REM Borrar rutas
rmdir /s /q "C:\Program Files\Microsoft SQL Server"
rmdir /s /q "C:\Program Files (x86)\Microsoft SQL Server"
rmdir /s /q "C:\ProgramData\Microsoft\SQL Server"
echo === Proceso completado. Reinicia el equipo si alguna carpeta quedo bloqueada. ===
pause
Errores frecuentes y cómo resolverlos
Mensaje típico | Causa probable | Solución inmediata |
---|---|---|
Acceso denegado | No eres propietario o faltan permisos NTFS | Ejecuta takeown e icacls sobre la ruta |
La carpeta está en uso | Servicio o proceso mantiene un manejador abierto | Detén servicios, usa resmon o Process Explorer para identificar el proceso |
No se puede encontrar el archivo especificado | Rutas con caracteres especiales o permisos inconsistentes | Usa el prefijo \\?\ y revisa herencia de ACL |
El sistema no puede acceder a la ruta | Atributos de sistema, oculto o solo lectura | Ejecuta attrib -r -h -s en la carpeta |
Permiso denegado por antivirus | Motor de seguridad escaneando la ruta | Pausa temporalmente o agrega exclusión |
Buenas prácticas al desinstalar
- Desinstala siempre desde el instalador de SQL Server o desde la consola de aplicaciones, cerrando SSMS y herramientas auxiliares.
- Si moviste DATA y Log a otros volúmenes, documenta las rutas antes de desinstalar para una limpieza posterior precisa.
- Evita borrar manualmente mientras los servicios aún están iniciados automáticamente; cambia a deshabilitado y reinicia.
- No elimines carpetas compartidas si piensas reinstalar otra instancia que dependa de esos componentes.
Procedimiento completo, explicado paso a paso
Detención exhaustiva de servicios
Comprueba en el Administrador de tareas que no quede sqlservr.exe
, ReportingServicesService.exe
, msmdsrv.exe
u otras utilidades en ejecución. Cierra SSMS. Si usas contenedores, deténlos y desmonta volúmenes que apunten a tus rutas de DATA/Log.
Recuperación de propiedad
El propietario suele ser TrustedInstaller. Con takeown
reasignas la propiedad al usuario actual. Con icacls
concedes control total recursivo ((F)
). La opción /t
baja por subcarpetas, /c
continúa ante errores.
Eliminación controlada
Usa rmdir /s /q
para suprimir contenido sin confirmaciones. Si la carpeta contiene rutas largas, aplica el esquema \\?\
. Verifica que ninguna ventana del Explorador esté mostrando la carpeta objetivo para evitar manejadores abiertos en explorer.exe
.
Depuración de servicios residuales
Con sc query
localizas servicios cuyos binarios ya no existen, pero que siguen registrados. Elimínalos con sc delete
para evitar reintentos de arranque que vuelvan a crear bloqueos.
Medidas en modo seguro
En modo seguro solo se cargan servicios mínimos, reduciendo la probabilidad de bloqueos por antivirus, indexador o componentes que dependan de SQL Server. Repite los comandos de permisos y eliminación desde allí si fuera necesario.
Plan de recuperación ante errores de borrado
Si eliminaste una base por accidente y aún conservas una copia de los archivos, puedes reanexarla:
CREATE DATABASE [TuBD] ON
( FILENAME = N'D:\SQLData\TuBD.mdf' ),
( FILENAME = N'E:\SQLLogs\TuBD_log.ldf' )
FOR ATTACH;
Si el registro no está disponible, considera FOR ATTACHREBUILDLOG como último recurso y valida integridad con DBCC CHECKDB
en la nueva instancia.
Lista de verificación rápida
- Todos los servicios de SQL detenidos y deshabilitados.
- LocalDB detenido y eliminado si estaba activo.
- Propiedad y permisos concedidos en las rutas de instalación y datos.
- Atributos de sistema retirados donde aplique.
- Carpetas Binn, DATA y Log eliminadas sin errores.
- Servicios huérfanos eliminados con
sc delete
. - Reinicio final para validar que no se regeneren rutas ni servicios.
Resultado esperado
Con los servicios detenidos, permisos asignados y sin bloqueos, podrás eliminar por completo Binn, DATA y Log. Si algún paso arroja un error, anota el mensaje exacto y la ruta implicada; con esa información es posible ajustar el comando preciso para tu caso particular.
Ejemplos y plantillas de comandos
Adapta las rutas a tu entorno. A continuación tienes un resumen listo para copiar:
:: Detener todo lo relacionado con SQL
sc stop MSSQLSERVER
sc stop MSSQL$SQLEXPRESS
sc stop SQLBrowser
sc stop SQLWriter
sc stop SQLAgent$SQLEXPRESS
\:: LocalDB
sqllocaldb stop "MSSQLLocalDB"
sqllocaldb delete "MSSQLLocalDB"
\:: Propiedad y permisos
takeown /f "C:\Program Files\Microsoft SQL Server" /r /d y
icacls "C:\Program Files\Microsoft SQL Server" /grant "%USERNAME%":(F) /t /c
\:: Atributos (si procede)
attrib -r -h -s "C:\Program Files\Microsoft SQL Server" /s /d
\:: Eliminación dirigida
cd "C:\Program Files\Microsoft SQL Server\MSSQL15.SQLEXPRESS\MSSQL"
rmdir /s /q "Binn"
rmdir /s /q "DATA"
rmdir /s /q "Log"
\:: Limpieza total (opcional)
rmdir /s /q "C:\Program Files\Microsoft SQL Server"
rmdir /s /q "C:\Program Files (x86)\Microsoft SQL Server"
rmdir /s /q "C:\ProgramData\Microsoft\SQL Server"
Consejos finales
- Si piensas reinstalar, conserva los componentes compartidos y limpia solo las rutas específicas de la instancia que fue desinstalada.
- En entornos con varias instancias, confirma dos veces la ruta de MSSQLxx.NOMBREINSTANCIA antes de eliminar.
- Si usas discos dedicados, desmonta puntos de montaje o quita letras de unidad tras la limpieza para evitar recreaciones accidentales.
- Documenta todos los cambios y conserva un registro de comandos ejecutados para auditoría o soporte futuro.