none
Truncado logs y Mirroring RRS feed

  • Pregunta

  • Hola

    Tengo configurado mirroring en SQL 2008 para todas las bases criticas de la compañia, sin embargo el log de dos de estas bases crece demasiado, todos los fines de semana estoy quitando el mirror el viernes hacia el medio dia y el sabado lo estoy restableciendo en la noche, porque si quito el mirror y trunco el log en ambos me dice que el log no es sufificinete para volver a inciar el mirror, no se como solucionar esto,no se si puede de manera automatica,  me pueden apoyar. Gracias.

    lunes, 9 de mayo de 2011 16:19

Respuestas

  • Hola Isabela, con el permiso de alberto.

    El modo de recuperacíon de tu base de datos es Full, esto quiere decir que para que SQL Server pueda usar partes del log tienen que haber sido guardadas mediante un backup. Si haces un truncado, solo enmascaras el problema de que creció demasiado, así pues alberto te propone que hagas esos backups del log de forma frecuente, (por ejemplo cada dos horas o cada cuatro horas), eso, hará que tu log, solo crezca lo que necesite durante 4 horas.

    Si ya estás haciendo backups periodicos del log (no de la BBDD completa sino con la instruccio´n backup log) entonces aplica lo que te dice alberto.  Mirando esa tabla, te dice porque tu log no se ha podido re-usar, que le impide volver a escribir en el principio.

    Recuerda que el log es una estructura circular, de forma que cuando termina al final de fichero, si la primera parte del fichero está ya liberada, (generalmente porque se ha hecho un backup y todos los comandos de mirroring han sido enviados) usa esa primera parte y si no lo está, hace crecer el fichero...

    Espero que te ayude a entenderlo


    Comparte lo que sepas, aprende lo que no sepas (FGG)
    lunes, 9 de mayo de 2011 20:30
    Moderador
  • Porque una cosa es hacer el backup del log, lo cual posibilita reutilizar la parte inactiva del mismo, y otra reducir el tamaño físico del mismo.

    Para hacer esto último tendrás que hacer un DBCC SHRINKFILE (http://technet.microsoft.com/es-es/library/ms189493.aspx) sobre el archivo del log.

    jueves, 12 de mayo de 2011 13:30

Todas las respuestas

  •  

    Te sugiero que realices backups del registro de transacciones (BACKUP LOG DATABASE) con mayor frecuencia, eso evitará el crecimiento de tu LOG y por lo mismo ya no tendras el problema que mencionas.

    Nota: Solo tienes que hacer el backup en el Principal.

    Saludos

    lunes, 9 de mayo de 2011 16:33
  • Que pena contigo, pero no entendi.... Yo trunco los logs y luego hago ese backup para establecer de nuevo el mirror.

    Pero haciendo el backup como me reduce el log?

    lunes, 9 de mayo de 2011 17:45
  • Hola.

    Sí, de hecho, la forma recomendada de propiciar que el log de transacciones se recicle es haciendo un backup del log. De todos modos, puedes mirar el motivo por el que el log no se reutiliza mirando sys.databases, campo log_reuse_wait_desc.

    Seguramente tengas un proceso de defragmentación en esa franja horaria que provoca un crecimiento desmedido del log.


    Alberto López Grande
    SQL Server MVP
    Visita mi blog en http://qwalgrande.blogspot.es/ Sígueme en twitter en http://twitter.com/qwalgrande

    lunes, 9 de mayo de 2011 18:10
    Moderador
  • Que pena, no entiendo... hago backup y luego trunco, igual no puedo truncar con el mirrorin iniciado...
    lunes, 9 de mayo de 2011 20:23
  • Hola Isabela, con el permiso de alberto.

    El modo de recuperacíon de tu base de datos es Full, esto quiere decir que para que SQL Server pueda usar partes del log tienen que haber sido guardadas mediante un backup. Si haces un truncado, solo enmascaras el problema de que creció demasiado, así pues alberto te propone que hagas esos backups del log de forma frecuente, (por ejemplo cada dos horas o cada cuatro horas), eso, hará que tu log, solo crezca lo que necesite durante 4 horas.

    Si ya estás haciendo backups periodicos del log (no de la BBDD completa sino con la instruccio´n backup log) entonces aplica lo que te dice alberto.  Mirando esa tabla, te dice porque tu log no se ha podido re-usar, que le impide volver a escribir en el principio.

    Recuerda que el log es una estructura circular, de forma que cuando termina al final de fichero, si la primera parte del fichero está ya liberada, (generalmente porque se ha hecho un backup y todos los comandos de mirroring han sido enviados) usa esa primera parte y si no lo está, hace crecer el fichero...

    Espero que te ayude a entenderlo


    Comparte lo que sepas, aprende lo que no sepas (FGG)
    lunes, 9 de mayo de 2011 20:30
    Moderador
  • La idea es que no tengas la necesidad de truncar.  Para lograr eso, hay que controlar que el LOG no crezca descontroladamente ¿cómo logramos eso? Respuesta: Haciendo BACKUPS DEL LOG DE TRANSACCIONES.

    En mi caso por ejemplo, realizó backups del registro de transacciones cada hora (17 backups diarios entre las 6:00 am hasta las 10:00 pm horario de atención de clientes)  y con eso el MIRRORING que he montado no tiene problemas.

    Saludos

    lunes, 9 de mayo de 2011 20:36
  • Gracias, ahora sip entendi,casi que no..jejeje...
    lunes, 9 de mayo de 2011 21:34
  • Hola

     

    Tengo una duda, investigando existen varias instruccones , pero las ejecuto y el log sige pesando 8 gigas , estoy haciendo algo mal?

    BACKUP

    LOG basededatos

     

    TO DISK = 'D:\basededatoslog.bak'

      

    BACKUP LOG basededatos

    TO DISK = 'D:\basededatoslog.bak'


    MIRROR TO DISK 'E:\basededatoslog.bak'
    WITH
       NOINIT,
       MEDIANAME = 'basededatosSet1'

    jueves, 12 de mayo de 2011 12:29
  • Que pena di enviar sin terminar...

     

    Al consultar en sysdatabases encontre:

     

    log_reuse_wait log_reuse_wait_desc modo_recuperacion_log page_verify_bbdd user_access estado_bbdd
    2 LOG_BACKUP FULL TORN_PAGE_DETECTION MULTI_USER ONLINE

     Adicional lo que entendi y no se si me equivoque, es que como ya mi data pesa demasiado, trunco el log, luego hago backup log cada media hora y en cuanto a sysdatabases si esta bien parametrizado para que se reuse .

     

    Me equivoco?

    jueves, 12 de mayo de 2011 12:51
  • Porque una cosa es hacer el backup del log, lo cual posibilita reutilizar la parte inactiva del mismo, y otra reducir el tamaño físico del mismo.

    Para hacer esto último tendrás que hacer un DBCC SHRINKFILE (http://technet.microsoft.com/es-es/library/ms189493.aspx) sobre el archivo del log.

    jueves, 12 de mayo de 2011 13:30
  • Los datos que has pasado indican que la razón por la cual el log no puede reutilizar su parte inactiva es porque no se ha hecho backup del mismo ("LOG_BACKUP"). Una vez que lo hagas, podrás reducir el tamaño del mismo con el método que te indicaba en el mensaje anterior.

    Por cierto, que el modo de verificación recomendado es CHECKSUM, no TORN_PAGE_DETECTION que es el que tienes ahora. Para más información, http://msdn.microsoft.com/es-es/library/ms190249.aspx (apartado "Opciones de recuperación")

    jueves, 12 de mayo de 2011 13:37
  • Gracias a todos y perdon lo intensin.
    jueves, 12 de mayo de 2011 15:08
  • Hola Isabela

     

    ¿Has podido solucionar tu problema?

     

    Saludos


    Eduardo Portescheller - LATAM Forum Support Engineer
    Microsoft Corporation
    viernes, 13 de mayo de 2011 17:46
    Moderador
  •  Hola, aunque un poco tarde...

     No hace falta que trunques el log, con que hagas backups periódicos del log de transacciones es suficiente. Tendrás que estudiar que frecuencia de estos backups se adapta mejor a tu entorno.
     Cuando hacemos backup del log y no se especifica lo contrario, marca la parte no activa del log (transacciones que ya se les hizo commit) para ser rehusada con nuevas transacciones. Si la parte no activa del log de transacciones no se marca para ser rehusada, con el "backup del log", se podrá llegar al final del archivo, y si las transacciones continúan, entonces el log debera crecer para seguir almacenando el resto de transacciones
     Un ejemplo para que puedas programar un JOB, para que se hagan estos backups de forma desatendida, sin pisarse al anterior, puede ser:
    declare @fichero varchar(250)
    select @fichero = 'Unida:\ruta\TU_bbdd_tlog_' + convert(varchar(20), getdate(),112) + left(replace(convert(varchar(10), getdate(), 114), ':', ''), 4) + '.trn'
    backup log [TU_bbdd] to disk = @fichero

     


     Norman M. Pardell 

    ||Microsoft Certified IT Professional|| Database Administrator. Database Developer. SQL Server 2008

    sábado, 14 de mayo de 2011 22:16