¿Cómo puedo saber si todavía se está utilizando una base de datos de SQL Server?

dba.stackexchange https://dba.stackexchange.com/questions/2050

  •  16-10-2019
  •  | 
  •  

Pregunta

Estamos buscando el desmantelamiento de una instancia de SQL Server que tiene un par de bases de datos que aún permanecen en él.

¿Cómo puedo saber si todavía están siendo utilizados por los usuarios o una aplicación web?

que tenía una consulta T-SQL, usted podría funcionar para recuperar la última fecha de la consulta. Parece que funciona, pero me gustaría saber si esta información es lo suficientemente válida para borrar bases de datos. Es?

Si usted tiene métodos alternativos que podrían ayudar también.

¿Fue útil?

Solución

tendría que estar preocupado con artículos que han sido purgados de la memoria caché y que ha perdido, o para las bases de datos que tienen el uso poco frecuente.

En lugar de dejar caer las bases de datos de las manos las puso fuera de línea, ya sea para evitar el acceso sin dejarlos caer o en modo RESTRICTED_USER para limitar el acceso. Hacer esto puede dejarlos en ese estado durante un mes o dos para comprobar y ver si hay uso ocasional.

También podría buscar la implementación de una traza del lado del servidor filtrado en esa base de datos.

Otros consejos

Estos son los métodos que he utilizado en el pasado:

  1. Base de datos Poner fuera de conexión / Separar
  2. DENY usuario / acceso de inicio de sesión
  3. traza del

El problema es la siguiente: ¿cuánto tiempo esperar antes de que esté seguro de que nadie va a tener acceso a los datos? Para los datos financieros, ya tenga algunos componentes funcionan diariamente, semanal, mensual, trimestral, semestral y anual. Pero es un año el tiempo suficiente? También he visto peticiones para tener siempre a disposición de al menos 7 años de datos, y en un caso me dijeron que los datos en un sistema necesario para estar allí para siempre, a pesar de que nadie lo estaba usando.

El mejor consejo es el siguiente: todo lo que hace para desactivar el acceso, asegúrese de que puede volver a encenderla inmediatamente. He encontrado que la detatch funcionó mejor para esto. Solo quiero repetir la escritura a cabo el Volver a colocar y dar instrucciones a mi equipo "si alguien le pregunta dónde está, ejecutar este script". Eso nos dio la mejor oportunidad de poner las cosas lo más rápido posible.

Estoy de acuerdo con la NIC con su consejo. Si usted necesita estar seguro, entonces tendría que ir con Profiler (servicio de rastreo lado) porque algunas de las consultas SQL no se almacenan en caché o por cualquier razón podría purgar la caché de procedimientos.

Normalmente sería comprobar la información del archivo virtual estadísticas también para ver si hay alguna lee o escribe sucediendo a nivel de archivos OS. Incluso si la base de datos no está activo todavía se ve un pequeño lee / escribe si está tomando las copias de seguridad de registro de copias de seguridad completas, etc ... sino que también le dará una idea de la actividad de lectura / escritura en esa base de datos.

Antes de eliminar cualquier base de datos, me aseguraría de que tiene al-menos 2 o 3 copias de seguridad legibles (prueba de ellos) en lugares separados. Nunca se sabe cuando los necesite.

A continuación se muestran los DBs de consulta que han tenido ningún uso desde el último reinicio, sin depender de los planes de consulta que se celebra en la memoria caché, ya que muestra el usuario IO en contra de los índices (y montones). Esto es algo así a lo largo de las líneas de la utilización de las estadísticas de archivos virtuales, pero el DMV usa aquí excluye la actividad de IO de copias de seguridad. No hay necesidad de mantener una traza en marcha, no hay factores desencadenantes o auditorías requeridas. Por supuesto, si reinicia el servidor SQL con frecuencia (o conectar / apagado de las bases de datos a menudo) esto podría no ser el camino a seguir: -)

Una vez dicho esto, todavía de acuerdo en que, incluso si esta consulta parece confirmar que una base de datos se puede caer, definitivamente hacer lo offline / detach o denegar el acceso de los usuarios desde hace algún tiempo, más cualquier diligencia debida de preguntar por ahí antes de que realmente cayendo!

select [name] from sys.databases 
where database_id > 4
AND [name] NOT IN 
(select DB_NAME(database_id) 
from sys.dm_db_index_usage_stats
where coalesce(last_user_seek, last_user_scan, last_user_lookup,'1/1/1970') > 
(select login_time from sys.sysprocesses where spid = 1))

He trabajado en un lugar que tenía un gran número de bases de datos huérfanos y semi-huérfanos. Era difícil saber si realmente se quedaron huérfanos tantas tareas eran estacional o anual - por lo que el sitio web sólo se ejecuta durante 3-4 meses al año (como ejemplo, las formas W2 necesitan ser presentada electrónicamente 1/31, por lo que el procesamiento de página web éstos sólo se realizó de mediados de enero hasta finales de abril).

Lo que se hizo fue una combinación de:
* Pedir a todos los desarrolladores si estuvieran usando alguna base de datos o el otro (estos correos electrónicos irían a cabo mensualmente o cuando las copias de seguridad estaban tomando demasiado tiempo).
* Tomar la línea de base de datos y ver que se queja.
* Cambiar el nombre del servidor para ver que se queja.

Desde el jefe pelo puntiagudo solamente estaba dispuesto a permitir que la documentación "total y completa", un wiki fue expresamente prohibido, y las reducciones de personal conduce a una disminución dramática en la documentación que cumple con el estándar.

Si fuera por mí, no habría una página wiki por servidor con los nombres de contacto para cada base de datos (y tal vez una descripción breve de lo que es la base de datos para). Cualquier base de datos indocumentado en el wiki sería presa fácil para la eliminación.

tenía un cliente financiera grande que todavía estaba utilizando SQL Server 2000 fecha tan tardía como 2009, por lo que teníamos que mantener una instancia de SQL Server 2000 en funcionamiento hasta que el cliente se traslada definitivamente a SQL Server 2005.

Otras dos alternativas son:

  1. Crea activadores en la base de datos que le notificará (o tienda para tablas) de cualquier actividad.
  2. Habilitar la auditoría en los DBs.

    • depende de la versión de base de datos.

Los próximos espectáculos solución total temporal, páginas limpios y sucios en MB para las bases de datos particulares en su instancia (que se encuentra en Internet y modificado un poco):

SELECT
    (CASE WHEN ([database_id] = 32767) THEN 'Resource Database' ELSE DB_NAME (database_id) END) AS 'Database Name',
    COUNT(*) *8/1024 AS [TotalPages in MB],
    SUM(CASE WHEN ([is_modified] = 1) THEN 0 ELSE 1 END) *8/1024 AS [CleanPages in MB],
    SUM(CASE WHEN ([is_modified] = 1) THEN 1 ELSE 0 END) *8/1024 AS [DirtyPages in MB]
FROM sys.dm_os_buffer_descriptors
GROUP BY database_id
ORDER BY DB_NAME(database_id)

o

select value [DBid],attribute, last_execution_time ,text
from
sys.dm_exec_query_stats
cross apply
sys.dm_exec_plan_attributes(plan_handle)
cross apply
sys.dm_exec_sql_text(plan_handle)
where  attribute = 'dbid' 
order by last_execution_time desc

o

select value [DBid],attribute, last_execution_time ,text
from
sys.dm_exec_query_stats
cross apply
sys.dm_exec_plan_attributes(plan_handle)
cross apply
sys.dm_exec_sql_text(plan_handle)
--where dbid=8
where 
      text like '%idAdministrator%' and
      attribute = 'dbid' 
      and value>= 5 -- dbid >=5 for user databases but include resource database which
                     --you can exclude by its numer I don't remember at the moment
order by last_execution_time desc
Licenciado bajo: CC-BY-SA con atribución
No afiliado a dba.stackexchange
scroll top