Eric Gustavo Coronel Castillo

gcoronelc.blogspot.com

gcoronelc@gmail.com


SQL SERVER 2012

COPIAS DE SEGURIDAD

Preparar el Ambiente de Trabajo

Base de datos

Modo de recuperación de la base de datos

Cambiar el modo de recuperación de la base de datos

Estrategia de Copia de Seguridad

Crear el Dispositivo de Almacenamiento

Crear Tabla de Prueba

Backup Completo de la Base de Datos

Primer Backup Diferencial

Segundo Backup Diferencial

Error en la Base de Datos

Restauración de bases de datos

Restauración de Base de Datos y Primer Diferencial

Restauración de Base de Datos y Segundo Diferencial

Restauración de Base de Datos y Log


Preparar el Ambiente de Trabajo

Base de datos

Para esta práctica de laboratorio crearemos una base de datos a la que llamaremos EGCC_DB, en la cual crearemos una tabla y sobre ella haremos la demostración.

USE MASTER;
GO

CREATE DATABASE EGCC_DB;
GO

Modo de recuperación de la base de datos

La base de datos debe estar en modo de recuperación completa o de registro masivo.

Para verificar el modo de recuperación de la base de datos tenemos 4 opciones, se asume que se esta trabajando con SQL Server Management Studio.

Método 1:

  1. En Object Explorer, hacer click con el botón derecho del mouse sobre la base de datos.
  2. Ejecutar la opción Properties.
  3. En el panel izquierdo seleccionar la página Options.
  4. En el lado derecho debe buscar la propiedad Recovery model.

Método 2:

  1. En Object Explorer, hacer click en el nodo Database.
  2. En la vista Object Explorer Details, la columna Recovery Model indica el modo de recuperación de cada una de las bases de datos.

Método 3:

Ejecutar el siguiente script:

SELECT name AS [Database Name],

recovery_model_desc AS [Recovery Model]

FROM sys.databases;

GO

Se obtiene información de todas las bases de datos, el resultado es el siguiente:

Database Name             Recovery Model

------------------------- ------------------

master                    SIMPLE

tempdb                    SIMPLE

model                     FULL

msdb                      SIMPLE

ReportServer              FULL

ReportServerTempDB        SIMPLE

Gestion                   FULL

EduTec                    FULL

Northwind                 SIMPLE

EGCC_DB                   FULL

Método 4:

Ejecutar el siguiente script:

SELECT 'EGCC_DB' AS [Database Name],

DATABASEPROPERTYEX('EGCC_DB', 'RECOVERY')

AS [Recovery Model];

GO

Se obtiene información sólo de la base de datos EGCC_DB, el resultado es el siguiente:

Database Name Recovery Model

------------- -----------------

EGCC_DB       FULL

Cambiar el modo de recuperación de la base de datos

Haciendo uso del comando ALTER DATABASE se puede cambiar el modo de recuperación de una base de datos, la sintaxis es la siguiente:

ALTER DATABASE { database_name  | CURRENT }

SET RECOVERY { FULL | BULK_LOGGED | SIMPLE };

GO

Estrategia de Copia de Seguridad

La estrategia es la siguiente:

Crear el Dispositivo de Almacenamiento

Crear el dispositivo:

EXEC SP_ADDUMPDEVICE 'DISK', 'EGCC_DEVICE',

        'D:\BACKUP\EGCC_DEVICE.BAK';

GO

Verificar el dispositivo:

SELECT * FROM MASTER.DBO.SYSDEVICES;

GO

Crear Tabla de Prueba

Creación de tabla test:

CREATE TABLE EGCC_DB..TEST(

  ID INT IDENTITY PRIMARY KEY,

  DATA VARCHAR(100)

);

GO

Cargar datos a tabla test:

DECLARE @K INT;

SET @K = 0;

WHILE (@K < 100)

BEGIN

        BEGIN TRAN;

        INSERT INTO EGCC_DB..TEST(DATA)

                VALUES('BACKUP DE BASE DE DATOS');

        COMMIT TRAN;

        SET @K = @K + 1;

END;

GO

SELECT * FROM EGCC_DB..TEST;

GO

Backup Completo de la Base de Datos

Supongamos que este backup se realiza el día domingo por la noche.

Realizar el backup de la base de datos:

BACKUP DATABASE EGCC_DB

TO EGCC_DEVICE

WITH

  FORMAT,

  NAME = 'BAKBD',

  DESCRIPTION = 'BACKUP COMPLETO DE LA BASE DE DATOS';

GO

Verificar el backup:

RESTORE HEADERONLY FROM EGCC_DEVICE;

GO

Primer Backup Diferencial

Supongamos que esto se realiza a las 10 pm del día lunes.

Primero se cargan nuevos datos:

DECLARE @K INT;

SET @K = 0;

WHILE (@K < 100)

BEGIN

  BEGIN TRAN;

  INSERT INTO EGCC_DB..TEST(DATA)

    VALUES('SQL SERVER ES PODEROSO');

  COMMIT TRAN;

  SET @K = @K + 1;

END;

GO

SELECT * FROM EGCC_DB..TEST;

GO

Realizar el backup:

BACKUP DATABASE EGCC_DB

TO EGCC_DEVICE

WITH

  DIFFERENTIAL,

  NAME = 'BAKDIF01',

  DESCRIPTION = 'PRIMER BACKUP DIFERENCIAL DE LA BASE DE DATOS';

GO

Verificar el backup:

RESTORE HEADERONLY FROM EGCC_DEVICE;

GO

Segundo Backup Diferencial

Supongamos que esto se realiza a las 10 pm del día martes.

Primero se cargan nuevos datos:

DECLARE @K INT;

SET @K = 0;

WHILE (@K < 100)

BEGIN

  BEGIN TRAN;

  INSERT INTO EGCC_DB..TEST(DATA) VALUES('2DO. BACKUP DIFERENCIAL');

  COMMIT TRAN;

  SET @K = @K + 1;

END;

GO

SELECT * FROM EGCC_DB..TEST;

GO

Realizar el backup:

BACKUP DATABASE EGCC_DB

  TO EGCC_DEVICE

  WITH

    DIFFERENTIAL,

    NAME = 'BAKDIF02',

    DESCRIPTION = 'SEGUNDO BACKUP DIFERENCIAL DE LA BASE DE DATOS'

GO

Verificar el backup:

RESTORE HEADERONLY FROM EGCC_DEVICE;

GO

Error en la Base de Datos

Supongamos que se produce un error en la base de datos a las 11 am del día miércoles.

Simularemos actividad antes de las 11 am:

DECLARE @K INT;

SET @K = 0;

WHILE (@K < 100)

BEGIN

  BEGIN TRAN;

  INSERT INTO EGCC_DB..TEST(DATA) VALUES('QUE PASA CON MIS DATOS');

  COMMIT TRAN;

  SET @K = @K + 1;

END;

GO

SELECT * FROM EGCC_DB..TEST;

GO

En el momento que se produce un error en la base de datos, debemos hacer una copia de seguridad del log:

BACKUP LOG EGCC_DB

  TO EGCC_DEVICE

  WITH

    NO_TRUNCATE,

    NAME = 'BAKLOG',

    DESCRIPTION = 'BACKUP DEL LOG.'

GO

Verificar el backup:

RESTORE HEADERONLY FROM EGCC_DEVICE;

GO

Restauración de bases de datos

Verificar archivo a restaurar:

USE master;

GO

DROP DATABASE EGCC_DB;

GO

RESTORE HEADERONLY FROM EGCC_DEVICE

GO

Restaurar la base de datos:

RESTORE DATABASE EGCC_DB

FROM EGCC_DEVICE

WITH FILE = 1, RECOVERY;

GO

Verificar los datos restaurados:

SELECT * FROM EGCC_DB..TEST;

GO

Se deben haber restaurado solamente 100 filas.

Restauración de Base de Datos y Primer Diferencial

Verificar archivos a restaurar:

USE master;

GO

DROP DATABASE EGCC_DB;

GO

RESTORE HEADERONLY FROM EGCC_DEVICE

GO

Restaurar base de datos:

RESTORE DATABASE EGCC_DB

FROM EGCC_DEVICE

WITH FILE = 1, NORECOVERY;

GO

La base de datos aun no es accesible.

Restaurar la primera copia diferencial:

RESTORE DATABASE EGCC_DB

FROM EGCC_DEVICE

WITH FILE = 2, RECOVERY;

GO

Verificar datos restaurados:

SELECT * FROM EGCC_DB..TEST;

GO

Se recuperan 200 filas.

Restauración de Base de Datos y Segundo Diferencial

Verificar archivos a restaurar:

USE master;

GO

DROP DATABASE EGCC_DB;

GO

RESTORE HEADERONLY FROM EGCC_DEVICE

GO

Restaurar base de datos:

RESTORE DATABASE EGCC_DB

FROM EGCC_DEVICE

WITH FILE = 1, NORECOVERY;

GO

La base de datos aun no es accesible.

Restaurar la primera copia diferencial:

RESTORE DATABASE EGCC_DB

FROM EGCC_DEVICE

WITH FILE = 3, RECOVERY;

GO

Verificar datos restaurados:

SELECT * FROM EGCC_DB..TEST;

GO

Se recuperan 300 filas.

Restauración de Base de Datos y Log

Verificar archivos a restaurar:

USE master;

GO

DROP DATABASE EGCC_DB;

GO

RESTORE HEADERONLY FROM EGCC_DEVICE

GO

Restaurar base de datos:

RESTORE DATABASE EGCC_DB

FROM EGCC_DEVICE

WITH FILE = 1, NORECOVERY;

GO

La base de datos aun no es accesible.

Restaurar la primera copia diferencial:

RESTORE DATABASE EGCC_DB

FROM EGCC_DEVICE

WITH FILE = 3, NORECOVERY;

GO

La base de datos sigue sin ser accesible.

Recuperación del log:

RESTORE LOG EGCC_DB

FROM EGCC_DEVICE

WITH FILE = 4, RECOVERY;

GO

Verificar datos restaurados:

SELECT * FROM EGCC_DB..TEST;

GO

Se recuperan 400 filas.