diciembre 19, 2021

Diarios de DBA de SQL Server

Realizar copias de seguridad de bases de datos es una de las tareas que realiza con más frecuencia cualquier DBA. La mayoría de las veces, la ventana de mantenimiento que el equipo de DBA tiene para realizar actividades de mantenimiento de bases de datos suele ser menor. Más a menudo que no, las tareas de mantenimiento de la base de datos se ejecutan más allá de la ventana estipulada y el Equipo de aplicación comienza a quejarse de esto.

Incluso en nuestro entorno, por lo general, el equipo de aplicaciones vuelve a afirmar: «Nuestros trabajos críticos están a punto de comenzar en los próximos minutos. Vemos que un proceso de copia de seguridad de la base de datos está utilizando la mayoría de los recursos. Ya que puede afectar a nuestros trabajos, ¿puedes matarlo, por favor?»

Para ellos es el trabajo de copia de seguridad que se ejecuta todos los días. Pero solo el DBA sabría lo valioso que es una copia de seguridad de la base de datos. No recuerdo cuántas veces ese respaldo extra me ayudó a salir de situaciones difíciles o me dio la confianza para seguir adelante con alguna propuesta arriesgada.

Cuando alguien pregunta cuánto tiempo se ejecutará ese trabajo de copia de seguridad o cuánto trabajo ya ha realizado, la mejor opción en SQL Server 2000 era verificar la salida dada por el parámetro stats en el script de copia de seguridad. Pero si alguien olvidó incluir el parámetro stats en el script de copia de seguridad, no hay forma de verificar el estado de finalización de la copia de seguridad en SQL Server 2000.

Pero al iniciar SQL Server 2005, este comportamiento ha cambiado. Uno de los muchos maravillosos Dmv para ser incluido en SQL Server 2005 es sys.dm_exec_requests. Con este DMV del estado, porcentaje completado, etc. del proceso de copia de seguridad (para el caso, cualquier comando SQL) se puede rastrear fácilmente. Aquí está el guión que hace exactamente lo mismo.

SELECT A.NAME,B.TOTAL_ELAPSED_TIME/60000 AS ,B.ESTIMATED_COMPLETION_TIME/60000 AS ,B.PERCENT_COMPLETE as ,(SELECT TEXT FROM sys.dm_exec_sql_text(B.SQL_HANDLE))AS COMMAND FROM MASTER..SYSDATABASES A, sys.dm_exec_requests BWHERE A.DBID=B.DATABASE_ID AND B.COMMAND LIKE '%BACKUP%' order by percent_complete desc,B.TOTAL_ELAPSED_TIME/60000 desc

Sé que la mayoría de nosotros ya estamos usando una u otra versión de este script desde hace mucho tiempo. Dado que este script ayudó recientemente a David Rummel a rastrear la copia de seguridad de una gran base de datos, pensé que esto podría ayudar a otra persona en algún lugar.

Deja una respuesta

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