Recuperación rápida de backups y bases de datos virtuales con Idera SQL Safe Backup

Recuperación rápida de backups y bases de datos virtuales con Idera SQL Safe Backup

Cada vez más nos encontramos sistemas críticos, ERPs, etc. cuyas bases de datos tienen un tamaño elevado. Además, brillan por su ausencia las técnicas de particionado (nativo o no), la división en múltiples filegroups, etc. Una de las consecuencias de esto es que, en caso de desastre, los tiempos de restauración de la base de datos son muy elevados. Esto tiene un impacto directo en el RTO en caso de desastre, pero también en caso de tener que acceder a un backup para una recuperación parcial de datos, para ejecutar una consulta “en el pasado” para un auditor, etc.

(más…)

Python en SQL Server 2017

Python en SQL Server 2017

Con la llegada de SQL Server 2017 (aka vNext) junto con el hype del data science Microsoft está “abriendo la puerta” a otros los lenguajes dentro de SQL Server. Si nos remontamos a la época anterior a SQL Server 2005 las opciones disponibles resultaban complejas (código C nativo) y potencialmente peligrosas al basarse en la carga de DLLs sin limitaciones, sin sandboxing, etc. Con la llegada de SQL Server 2005 se abrió la puerta al uso de .NET con la integración CLR que aportaba una mayor sencillez a la hora de programar y mayor seguridad. A día de hoy el uso de la integración con CLR sigue siendo una herramienta muy potente e infravalorada en muchos escenarios.
(más…)

Cache Redis vs SQL Server In-Memory OLTP

Cache Redis vs SQL Server In-Memory OLTP

La llegada de SQL Server 2016 SP1 ha “democratizado” el acceso a la tecnología In-Memory OLTP pasando a estar disponible en la versión Standard y Express. Al facilitarse el acceso normalmente aumenta la cantidad de preguntas respecto a las posibilidades que ofrece una tecnología. Un posible caso de uso para In-Memory OLTP es utilizarla como caché de datos de forma que datos que son pesados de obtener/calcular puedan estar disponibles de forma más rápida. Además existen múltiples casos de éxito asociados a esta tecnología en empresas de renombre como bwin.

(más…)

Crear objetos temporales o no, esa es la cuestión

Crear objetos temporales o no, esa es la cuestión

Es relativamente habitual encontrarnos con cargas SQL que realizan un uso intensivo de objetos temporales. Esto normalmente no supone necesariamente un problema de rendimiento per se, pero debemos tener en cuenta que esta creación y destrucción de objetos no es gratuita. En este post vamos a analizar el rendimiento de distintas configuraciones orientadas a dicho escenario de uso de datos temporales. (más…)

Logs y auditoría en la nube con stretch tables en SQL Server 2016

Logs y auditoría en la nube con stretch tables en SQL Server 2016

Una de las nuevas funcionalidades que trae SQL Server 2016 es Stretch Databases. Esta funcionalidad lo que busca es poder tener bases de datos híbridas, donde parte de la información se encuentre on-premise y otra parte en la nube. Esta no es la única opción que Microsoft ofrece para tener este tipo de bases de datos híbridas, ya que desde SQL Server 2012 podemos tener ficheros y filegroups directamente en blobs en Azure. También tenemos la posibilidad de tener ficheros en rutas de red (UNC) que se encuentren en la nube (Azure File Storage). En definitiva, lo que normalmente buscamos con estas aproximaciones es poder utilizar el almacenamiento en la nube (económico e ilimitado) desde nuestras instancias on-premise.

(más…)

RESOURCE_SEMAPHORE y SQL Server 2014 SP2 / SQL Server 2016

RESOURCE_SEMAPHORE y SQL Server 2014 SP2 / SQL Server 2016

Al realizar optimizaciones de servidores uno de los análisis básicos que se realizan es el análisis de esperas (waitstats). Una de las esperas que nos puede traer más de cabeza para encontrar su origen es la espera RESOURCE_SEMAPHORE. En este post vamos a ver algunas situaciones que pueden causar este problema y también cómo con SQL Server 2014 SP2 y SQL Server 2016 podemos mucho más fácilmente identificar las operaciones que causan más contención.

(más…)

Mejoras AlwaysON con SQL Server 2016

Mejoras AlwaysON con SQL Server 2016

La tecnología AlwaysON fue una de las grandes novedades de SQL Server 2012. Debido a su facilidad de implementación, robustez y seguridad se ha vuelto una de las tecnologías de alta disponibilidad más extendidas junto con Failover Cluster Instances, con la que además se complementa a la perfección.En este post detallamos todas las novedades que vienen con SQL Server 2016 en materia de AlwaysON:

(más…)

Generación de código para proyectos de base de datos

Generación de código para proyectos de base de datos

En ingeniería de software, hace bastantes años que Microsoft nos hizo un gran aporte con las herramientas de gestion de proyectos de base de datos a través de Visual Studio. Gracias a ello, los administradores y desarrolladores de BBDD podemos utilizar Visual Studio para gestionar el ciclo de vida de las BBDD en entornos corporativos, permitiéndonos hacer el mismo seguimiento y evolución con nuestras BBDD al que están acostumbrados los equipos de desarrollo cuando hablamos de aplicaciones. Ya sabes…integración continua, despliegues con tests unitarios,….

Al hilo de esto, en un proyecto bastante grande en el que estoy metido últimamente ha surgido la necesidad de generar automáticamente ciertas partes de código, y dado que es un proyecto siguiendo una metodología de desarrollo Agil con Scrum y Visual Studio con proyectos de BBDD, he podido aprovechar una de las características que siempre me han gustado mas de Visual Studio…las plantillas de generación de código T4.

(más…)

Auditoria de operaciones personalizada con Temporal Tables

Auditoria de operaciones personalizada con Temporal Tables

En no raras ocasiones nos vemos en la necesidad de mantener una auditoría de seguridad personalizada ante operaciones INSERT, UPDATE y DELETE. Se nos presenta entonces la problemática de querer añadir a la detección de la operación, determinados artefactos lógicos para nuestra trazabilidad interna. Imaginemos por ejemplo que queremos añadir el usuario lógico de nuestra aplicación, que le pasamos en una propiedad del Application Name de la cadena de conexión, es decir…algo digamos que requiera de cierta lógica por nuestra parte a la hora de guardar el dato.

(más…)