MSSQL_ENG003165: An error was encountered while replication was being restored/removed. The database has been left offline
La restauración de un backup de una base de datos replicada sin usar la opción KEEP_REPLICATION a un servidor con metadata diferente de replicación implica trabajos adicionales y posteriores a la ejecución del RESTORE DATABASE como eliminación de metadata diferente de replicación, eliminación de triggers como por ejemplo tr_MStran_alterschemaonly, tr_MStran_altertable, tr_MStran_altertrigger y tr_MStran_alterview (creadas para validar alteraciones de tablas , triggers , vistas replicadas), se desmarca tablas replicadas, eliminación de subscripciones, publicaciones, artículos. Esto lo hace usando sp_restoredbreplication.
Bien, en este proceso de restauración se puede disparar el siguiente error y luego el estado de la base de datos restaurada se establecerá a offline. Si usted restaura el backup mediante un Job entonces sólo verá un mensaje de error en el Job History que no ayuda a solucionar el problema, no da detalles del error, sólo indica que falló el job. Pero si ejecuta la restauración mediante un SQL Query, el mensaje de error será más completo y ayudará a indagar la causa del error. Posibles causas del error está documentado en MSSQL_ENG003165.
Msg 3165, Level 16, State 1, Line 1
Database 'MiDB' was restored, however an error was encountered while replication was being restored/removed. The database has been left offline. See the topic MSSQL_ENG003165 in SQL Server Books Online.
Msg 3167, Level 16, State 1, Line 1
RESTORE could not start database 'MiDB'.
Msg 3013, Level 16, State 1, Line 1
RESTORE DATABASE is terminating abnormally.
En base a lo explicado anteriormente respecto a lo que SQL Server realiza luego de restaurar una base de datos replicada he encontrado que existe otra causa más para este tipo de errores. Si usted usa DDL database triggers para implementar procesos de auditoria de la actividad en la base de datos (y prevenir eliminaciones/modificaciones de objetos a usuarios no autorizados) es posible que algún trigger esté impidiendo que los cambios posteriores a la restauración sean completadas, por lo tanto, SQL Server disparará el error y ajustará el estado a offline. Los triggers que usted tendrá que remover(o deshabilitar) antes de generar el backup deben ser principalmente los relacionados a eliminación y modificaciones de tablas, triggers, vistas y otros objetos a nivel de bases de datos que sean replicados. Si desea ahorrarse el trabajo, pues deshabilite todos los triggers de auditoria a nivel de bases de datos y luego de restaurar puede habilitarlos. Otra alternativa para solucionar este tema es dejar que la restauración termine con el error y luego manualmente cambie el estado a online. La última alternativa implica que la depuración de configuraciones de replicaciones de la base de datos no se hayan realizado, tome sus precauciones. Espero sirva.
PercyReyes,