Sidebar

Esencialmente Log Shipping se refiere al proceso de respaldar automaticamente la base de datos y el log de transacciones, restaurandolos en un servidor de respaldo. Esto mantiene a los dos equipos en sincronia en caso de que el servidor de producción tenga alguna falla. Para poder continuar la operación, lo que se tendría que hacer es apuntar a todos los usuarios al nuevo equipo.

Beneficios de usar Log Shipping

  • No requiere de gastos de hardware o software
  • Es muy sencilla su implementación
  • Es muy sencillo su mantenimiento
  • El cambio de un equipo al otro es sencillo

Problemas al usar Log Shipping

  • El cambio de un servidor a otro no es de manera automatica
  • Existe perdida de datos, dependiendo de la frecuencia en que se ejecute el log shipping.
  • La base de datos del servidor de respaldo no puede estar en uso mientras se tenga habilitado el log shipping
  • Cuando ocurra una falla en el quipo primario, se tienen que realiza una de las siguientes opciones: Renombrar el servidor de respaldo y cambiar su dirección IP con las de producción o apuntar todos los aplicativos al servidor de respaldo.

Sincronizando los logins de SQL Server

El primar paso para implementar el Log Shipping es asegurarnos que los logins ID'sesta sincronizados. Existen varias maneras para realizar esto:

  • Generar el script de los logines de producción y ejecutarlos en el servidor alterno. Esto se debe hacer periodicamente mientras se esten generando nuevos usuarios. Este procedimiento no es muy bueno ya que no se generarían los passsword, solo funcionaria si se utiliza la autentificación de windows.
  • Respaldar master y restaurarla en el servidor de respaldo.

Creando los dispositivos de respaldo

En el servidor de producción se deben de generar dos dispositivos de respaldo. los cuales solo serán utilizados para respaldar la base de datos y el log de transacciones.

El del respaldo lo llamaremos "database_name_backup_device" y el del log de transacciones "database_name_log_backup_device".

Crear un link server

En este paso generaremos un link server entre el servidor de producción y el servidor de alterno, para que podamos ejecutar store procedures en un servidor y que se ejecuten en el otro.

La razón de crear un servidores ligados, es debido a que vamos a necesitar ejecutar dos diferentes store procedures del servidor de alterno desde el servidor de producción. Estos SP's son  utilizados para restaurar la base de datos y el log de transacciones.

{mosimage}

{mosimage}

Creando los store procedures  para restaurar los datos

El siguiente paso es crear dos SP en el servidor de alterno base de datos master. Uno de ellos se utilizara para restaurar la base de datos y el otro el log de transacciones.

  • restore_database_backups
  • restore_log_backups

restore_database_backups

CREATE PROCEDURE restore_database_backups AS 

RESTORE DATABASE database_name
FROM DISK = 'e:\Program Files\Microsoft SQL Server\MSSQL\BACKUP\database_name_backup_device.bak'
WITH
DBO_ONLY,
REPLACE,
STANDBY = 'c:\Program Files\Microsoft SQL Server\MSSQL\BACKUP\undo_database_name.ldf',
MOVE 'logical_name' TO 'e:\Program Files\Microsoft SQL Server\MSSQL\data\database_name.mdf', 
MOVE 'logical_name' TO 'e:\Program Files\Microsoft SQL Server\MSSQL\log\database_name_log.ldf'

WAITFOR DELAY '00:00:05'

EXEC sp_dboption 'database_name', 'single user', true

Donde "database_name" se refiere al nombre de la base de datos

Es importante indicar el uso de STANDBY para que no se realice ningun rollback de las transacciones que no tienen commit, para poder realizar la carga de los transaccionales.

restore_log_backups

CREATE PROCEDURE restore_log_backups AS 

RESTORE LOG database_name
FROM DISK = 'e:\Program Files\Microsoft SQL Server\MSSQL\backup\log\database_name\database_name_log_backup_device.bak'
WITH 
DBO_ONLY,
STANDBY = ''e:\Program Files\Microsoft SQL Server\MSSQL\backup\log\database_name\undo_database_name.ldf'

WAITFOR DELAY '00:00:05'

EXEC sp_dboption 'database_name', 'single user', true

Creando los jobs

En este paso crearemos los jobs para respaldar las base de datos, moverlas de producción a alterno y ejecutar los SP's para cargalos.

Job para Base de datos

El job consiste de 4 pasos como se muestran en la siguiente tabla:

Step
ID
Step NameStep TypeOn SuccessOn Failure
1Truncate LogT-SQL ScriptGoto Next StepGoto Next Step
2Backup DatabaseT-SQL ScriptGoto Next StepQuit With Failure
3Copy BackupOperating System CommandGoto Next StepQuit With Failure
4Restore DatabaseT-SQL ScriptQuit With SuccessQuit With Failure

 

 

 

 

 

 

 

 

 

Paso 1

BACKUP LOG database_name WITH TRUNCATE_ONLY

WAITFOR DELAY '00:00:05'

Donde database_name es el  nombre de la base de datos

Paso 2

BACKUP DATABASE database_name TO database_name_backup_device WITH INIT

WAITFOR DELAY '00:00:05'

Paso 3

xcopy e:\Program Files\Microsoft SQL Server\MSSQL\backup\backup_device_name.bak   \\servidor_alterno\g$\mssql7\backup\ /c

Paso 4

EXEC servidor_alterno.master.dbo.restore_database_backups

Horario de ejecución del job

Este job debe de ejecutarse solo una vez al día. Recomiendo que sea antes de la operación para tener un respaldo completo.

Log de transacciones

Este job consiste de 3 pasos:

Step
ID
Step NameStep TypeOn SuccessOn Failure
1Backup LogT-SQL ScriptGoto Next StepQuit With Failure
2Copy LogOperating System CommandGoto Next StepQuit With Failure
3Restore LogT-SQL ScriptQuit With SuccessQuit With Failure

 

 

 

 

 

 

Paso 1

BACKUP LOG database_name TO log_backup_device WITH INIT, NO_TRUNCATE

WAITFOR DELAY '00:00:05'

Paso 2

xcopye:\Program Files\Microsoft SQL Server\MSSQL\backup\backup_device_name.bak   \\servidor_alterno\g$\mssql7\backup\ /c

Paso 3

EXEC standby_server_name.master.dbo.restore_log_backups

Horario de ejecución del job

En este paso se debe de tomar en cuenta que tan transaccional es la base de datos, ya que de ser muy transaccinoales podría causar que no terminara el proceso de carga de transaccionales provocando que fallara todo el proceso. Para esto se deben de hacer pruebas para seleccionar que tan amenudo se va a estar ejecutando. En lo personal recomiendo que sea de los 15 a 30 minutos.

Como implementar el cambio al servidor de alterno

Una vez que el Log Shipping se encuentra implementado, sera necesario que cree un script para poder hacer el cambio de un servidor a otro. Como no estoy familiarizado con su ambiente ya que cada uno de ellos es distinto no puedo generar un script, pero puedo nombrar algunas de las cosas que se deben de considerar.

  • Si es posible recuperar el log de transacciones de producción se puede ejecutar este script.

BACKUP LOG database_name TO database_name_log_backup_device WITH INIT,  NO_TRUNCATE

  • Si fue posible recuperar el log de transacciones de producción, debera restaurarlo en el servidor de alterno usando este script.

RESTORE LOG database_name 
FROM DISK = 'e:\Program Files\Microsoft SQL Server\MSSQL\log\database_name_log_backup_device.bak'
WITH 
DBO_ONLY,
STANDBY = 'e:\Program Files\Microsoft SQL Server\MSSQL\undo_database_name_log.ldf'

  • Si es o no posible restaurar el log de transacciones, se deberá de ejecutar el siguiente script para recuperar y poner en linea la base de datos de alterno.

RESTORE DATABASE database_name WITH RECOVERY
EXEC SP_DBOPTION 'database_name', 'read only', 'false'
EXEC SP_DBOPTION 'database_name', 'dbo use only', 'false'

 


Search

Tips BD