SQL Server 2016 – Stretch Databases

Imagen de kenneth

Votar: 

Average: 4.9 (20 votes)

Ya pasados unos meses de que se liberó SQL Server 2016, muchos comenzamos a preguntarnos ¿Cómo puedo utilizar las nuevas funcionalidades que brinda esta nueva versión de SQL Server para mejorar los procesos de bases de datos de mie empresa? Uno de las funcionalidades que se decidió sacar en esta versión de SQL Server fue para comenzar a converger esas bases de datos “on premises” con la Nube. Y así es como Stretch Database entro al juego.

En el siguiente artículo vamos a cubrir los siguientes puntos:

 ¿Qué es SQL Server Stretch Database?

SQL Server Stretch es una tecnología incluida en SQL Server 2016 que le permite seleccionar una o más tablas (especialmente en tablas muy grandes) y decidir que parte de los datos se almacenan localmente, y que otra parte se almacenan en la nube. Por lo tanto, es el inicio de una tecnología hibrida 100% integrada.

Por lo tanto, la idea que persigue esta tecnología es mantener los “datos frios” en la nube y los “datos calientes” en el local.

¿Son todas las tablas de mi base de datos elegibles para stretch?

 Al ser la primer entrega de esta tecnología, esta ha nacido con bastantes restricciones, por lo que mi recomendación es bajar Microsoft SQL Server 2016 Upgrade advisor, y seguir los siguientes pasos:

  1. Abrir el stretch Database Advisor
  2. Elegir la base de datos a analizar
  3. Leer el reporte del análisis

Como puede notarse en el paso 3, la tabla sales no es candidato a ser migrado a stretch databases, pero una de las funcionalidades interesantes que brinda el wizard es que provee buena información de que se necesita hacer para que la tabla pueda ser stretch. En este caso específico es remover una dependencia.

Una vez que tengo una tabla elegible para stretch, ¿Cómo puedo comenzar a utilizar esta funcionalidad?

En la instalación por defecto, SQL Server 2016 no viene con stretch database active, entonces, para poder activar esta funcionalidad, se necesitan seguir estos pasos:

  1. Activar Stretch database a nivel de instancia, No se preocupe, esto lo único que va a hacer es decirle a la instancia de SQL Server que es probable que en algun future se le active stretch a algunas de las bases de datos
    1. USE master
    2. -- Enable stretch database at the instance level exec sp_configure 'remote data archive', '1'
    3. GO
    4. RECONFIGURE
  2. Seleccionar la base de datos a la que se le va a activar la funcionalidad de stretch
  3. Seleccionar las tablas que se le va a activar stretch
  4. Una vez la tabla ha sido seleccionada, se puede escoger aplicarlo a la tabla complete (Entire Table) o definir el criterio de datos fríos (choose Rows)
  5. Ingrese a la cuenta de azure que va a contener los datos fríos. 
  6. Cree un nuevo servidor, o use uno existente en azure.
  7. Cree la llave maestra(Database Master key) para la base de datos. 
  8. Seleccione la dirección desde donde la base de datos va a ser accesada (en caso de acceso público). 
  9. Revise el resumen de lo que se va a hacer, especialmente la parte de precio
  10. Finalmente, la relación de stretch database se establece satisfactoriamente.

Una vez que se ha configurado stretch, ¿Cómo se puede monitorear, agregar tablas o pausar la migración de datos?

  1. Usando t-SQL
    1. -- monitor syncronization status
    2. SELECT * FROM sys.dm_db_rda_migration_status
  2. Por SSMS, Seleccione la opción de monitoreo, en el menú de stretch

 

Modificar el estado de una tabla stretch

Esto se puede hacer mediante la alteración del migrate_state a outbound o paused, de la siguiente forma:
ALTER TABLE T1 SET (REMOTE_DATA_ARCHIVE = ON(MIGRATION_STATE=OUTBOUND));

Restaurar una base de datos que tiene tablas stretched

La base de datos local debe de ser restaurada los procedimientos normales de respaldo/restauración, pero como muchos de los datos residen en la nube, al final de la restauración de la base de datos local, se debe de restablecer el enlace con la base de datos Azure que almacena la información de datos fríos, tal y como sigue:

  1. --Asegurese de tener el nombre de las credenciales, ese lo puede obtener con este tsql en el servidor original
  2. SELECT name FROM sys.database_scoped_credentials
  3. --Restablezca el enlace
  4. EXEC sp_rda_reauthorize_db @credential = 'credential', @with_copy = 0

¿Cómo determinar que tablas y/o bases de datos tiene stretch activado?

  1. --Bases de datos
  2. SELECT name FROM sys.databases WHERE is_remote_data_archive_enabled = 1
  3. --Tablas
  4. SELECT OBJECT_ID, name , is_remote_data_archive_enabled
  5. FROM sys.tables WHERE is_remote_data_archive_enabled = 1

Conclusiones

  1. Es una excelente manera de disminuir el tiempo de recuperación de una base de datos muy grande, cuando este está basado en una estrategia de respaldo/restauración
  2. Es una gran forma de disminuir la factura de almacenamiento de datos históricos en la base de datos.
  3. Al ser la primera entrega de la tecnología, esta viene con varias restricciones, tales como:
    1. Actualizaciones de tuplas no son permitidas, una vez que el dato es marcado como frio.
    2. Los deletes no son permitidos.
    3. Etc, la lista es larga.
  4. Crear un ambiente de stage o pre-produccion es complicado ya que no hay formar de restaurar la base de datos local y enlazarla con una base de datos en azure diferente.
  5. Alter en tablas stretched no son permitidos, entonces en caso a modificaciones de la estructura el dato tiene que ser migrado a una nueva tabla.

Espero este artículo le fuera de utilidad, pero es muy interesante ver la hacia donde microsoft esta enfocando las bases de datos.

Tags: