none
Configurar LogShipping de forma consistente RRS feed

  • Pregunta

  • Hola.

    Necesita crear una réplica para informes de una base de datos SqlServer 2012 r2 SE montada sobre un cluster FCI de Windows.

    He descartado montar una replicación transaccional porque hay muchas tablas que necesito replicar y no tienen PK. Los desarrolladores me dicen que no hay posibilidad de cambiar eso.

    Entonces he comenzado a hacer pruebas con LogShipping, que entiendo que no seria la solucion más recomendable pero no me queda otra opción.

    Dicho esto ¿alguien ha conseguido implementar esta solución de forma satisfactoria?

    Me encuentro muchos desafios:

    El principal es que la base de datos de producción realiza backups diarios tanto completos como diferenciales, ademas de los transaccionales. Cada vez que esto ocurre la base de datos replicada deja de aplicar los logs... Aun no he encontrado la forma de volver a aplicarlos desde el punto donde se quedó, mas allá de volver a volcar un full backup y comenzar de nuevo...

    Para volver a aplicar el log siguiente, necesito poner la BD en modo Single_User (se encuentra en StandBy/read_only)

    ALTER DATABASE Mydb SET SINGLE_USER WITH ROLLBACK AFTER 1

    Y acto seguido aplicar el log:

    RESTORE LOG [Mydb ]
    FROM  DISK = N'D:\Program Files\Microsoft SQL Server\MSSQL11.CDSPROREPREM\MSSQL\LogShipping\Mydb _20170926100000.trn'
    WITH  FILE = 1,  NORECOVERY,  NOUNLOAD,  STATS = 10

    El problema es que la BD se queda en modo recovering, y no soy capaz de volverla al modo standby

    Cuanquier sugerencia de cualquier tipo será mas que bien recibida.

    Gracias por adelantado.

    Un saludo


    martes, 26 de septiembre de 2017 12:00

Respuestas

  • Hola que tal. Por lo que leí, entiendo que lo que quieren realizar es tener un servidor secundario para hacer lecturas.

    Al tener Standard Edition, entiendo que la opción es utilizar LogShipping.

    El tema aca, es la restauración del Log de Transacciones. porque estás utilizando la cláusula NORECOVERY.

    Y para permitir lecturas, la opción es utilizar RESTORE LOG con la opción STANDBY.

    Te dejo un link con mas detalle:

    https://technet.microsoft.com/en-us/library/ms178034(v=sql.105).aspx

    La restricción que aparece con STANDBY, es que los usuarios no pueden acceder mientras se realiza la operación de RESTORE.

    Saludos.


    Mariano K.

    jueves, 28 de septiembre de 2017 15:54

Todas las respuestas

  • Me estoy perdiendo mucho en tu comentario.

    Nos puedes detallar que es lo que necesitas hacer yo desarrollo LS en diferentes BD's.

    Saludos.
    miércoles, 27 de septiembre de 2017 22:07
  • Hola que tal. Por lo que leí, entiendo que lo que quieren realizar es tener un servidor secundario para hacer lecturas.

    Al tener Standard Edition, entiendo que la opción es utilizar LogShipping.

    El tema aca, es la restauración del Log de Transacciones. porque estás utilizando la cláusula NORECOVERY.

    Y para permitir lecturas, la opción es utilizar RESTORE LOG con la opción STANDBY.

    Te dejo un link con mas detalle:

    https://technet.microsoft.com/en-us/library/ms178034(v=sql.105).aspx

    La restricción que aparece con STANDBY, es que los usuarios no pueden acceder mientras se realiza la operación de RESTORE.

    Saludos.


    Mariano K.

    jueves, 28 de septiembre de 2017 15:54
  • Hola, gracias por vuestras respuestas y perdon por tardar tanto en verlas, (...ya creia que nadie contestaria ;)

    El problema al que me referia, y que probablemente no supe explicar era que al hacer backups programados del log de transacciones en la BD primaria (no para LS, sino como estrategia de backup junto con full backup y diff backup) se me descuajiringaba la aplicación de los backup de log (esta vez si, hechos para LS) en la BD de réplica. Esto ya lo solucióne implementando una estrategia de backup en el servidor primario usando solo full Backup y diferencial backup, y haciendo backups del log solo para LogSipping.

    Ahora me estoy encontrando otro problema. Necesito que la BD de réplica esté en modo lectura, por ello configuro LS para que quede en modo StandBy tras restaurar los logs.

    En el momento de configurarla, seleccioné la opción de NO desconectar las sesiones abiertas cuando se ejecute el job de restore. Pensé que con ello cuanso se lanzase una consulta que durase muchos minutos, y se ejecutase el job de restore, se daria prioridad a esa consulta y el job fallaria dejando los backups pendientes de restaurar para la siguiente ejecución del job.

    Pensaba que esto estaba funcionando, porque de hecho, al comprobar el historial de ejecución del job veia que en muchas ocasiones este restauraba varias copias hasta que en una determinada se detenia con un mensaje de "database is in use". Pero ahora me informan de que no era así, y que cuando lanzaban un report grande este se detenia si el job entraba en funcionamiento...

    ¿hay alguna forma de evitar esto? Lo ideal seria priorizar la ejecución de consultas sobre la restauracion de los backup de log.

    gracias de nuevo y un saludo

    martes, 3 de octubre de 2017 14:51
  • Hola, que tal. La situación de desconexión de usuarios al momento de hacer un restore no debería ocurrir, siempre y cuando "NO" se encuentre el tilde en la opción de Desconectar a los usuarios:

    Ya que el mecanismo de restore de Log si esta opción no está habilitada, se deberían acumular los backups hasta que se puedan restaurar en las sucesivas programaciones.

    Saludos!


    Mariano K.

    martes, 3 de octubre de 2017 15:14
  • Hola,

    Pues efectivamente... Estaba convencido de que no marqué ese check en el momento de configurar LS, pero he revisado el script que generé y el parámetro @disconnect_users estaba en 1

    Me ha confundido que las personas que atacaban a esta base de datos hasta hoy no me habian reportado este fallo... en fin. Lo he modificado con sp_change_log_shipping_secondary_database estableciendolo en 0 y ya no se cortan las consultas.

    Ahora la duda que me surge...¿que ocurrirá si el job se está ejecutando y alguien intenta conectarse a la base de datos?... ¿le dejará conectar?.... ¿le dejará conectar pero no consultar?...

    Me toca hacer pruebas, no obstante, ¿que seria lo que debo esperar?

    Gracias por la ayuda!

    martes, 3 de octubre de 2017 15:38
  • La base estara no disponible mientras se hace el restore.

    No es exactamente el escenario idóneo pero no te están dejando muchas alternativas.

    martes, 3 de octubre de 2017 18:53