SQL Server

Aquí encontraras todos nuestros post relacionados con SQL Server desde cero hasta un nivel avanzado. Desde infraestructura hasta modelado de datos.

Mover BBDD de sistema

A lo largo de nuestra experiencia como administradores de bases de datos, en ocasiones nos vamos a  encontrar con la necesidad de mover las bases de datos de sistema en SQL Server. Ya sea por motivos de rendimiento, capacidad, o mantenimiento, saber realizar esta tarea de manera segura y eficiente es crucial para garantizar la integridad y disponibilidad del sistema tras el cambio. En este artículo quiero detallaros el proceso de reubicación de las bases de datos de sistema master, model, msdb, tempdb, distribution, y SSISDB, desde las consideraciones previas, pasando por los pasos detallados, hasta las mejores prácticas para minimizar riesgos.

Consideraciones Previas al Mover las Bases de Datos de Sistema

Estamos hablando de un gran cambio y tenemos que actuar como tal. Antes de proceder con el movimiento de las bases de datos de sistema, es fundamental entender que estos componentes son críticos para el funcionamiento de SQL Server, no es una intervención sin importancia. Un error en este proceso puede dejar el servidor de base de datos como un caro pisapapeles incapaz de arrancar o llevarnos a una pérdida de datos. Por lo tanto, debemos asegurarnos de tener una copia de seguridad completa y actualizada de todas las bases de datos de sistema y de usuario. Además, es recomendable realizar este tipo de operaciones en periodos sin actividad o durante ventanas de mantenimiento planificadas ya que van a requerir de paradas del servicio.

Requisitos Previos

Como acabamos de ver, un cambio de esta índole requiere de mucha preparación, a continuación os dejo una lista de pasos que para mi son imprescindibles antes de acometer este tipo de intervenciones:

  1. Notificar de la parada: Debemos asegurarnos de que todos los usuarios están informados de que el servicio de bases de datos no va a estar disponible durante el tiempo que dure la intervención y de que deben parar sus aplicaciones.
  2. Detener la monitorización: Es crucial detener la monitorización sobre el servidor durante la intervención para evitar la saturación por falsas alarmas. 
  3. Copia de Seguridad Completa: Como en toda intervención, debemos asegurarnos de disponer de una copia de seguridad completa tanto de los datos de usuario como de las bases de datos de sistema para poder volver atrás en caso de problemas.
  4. Plan de Recuperación: Muy ligado con el anterior punto, de nada nos sirve tener las copias sin un plan de recuperación bien documentado y probado en caso de que algo salga mal.
  5. Documentación del Sistema: Durante el proceso tan crítico que vamos a llevar a cabo no hay lugar para la duda, es mejor dedicar unos minutos antes de empezar a anotar la ubicación actual de los archivos de base de datos y logs de transacciones así como sus nombres que luego nos van a hacer falta.

Mover la Base de Datos master

La base de datos master es el corazón del sistema de SQL Server, ya que contiene información sobre la configuración del servidor, inicios de sesión, y otros metadatos críticos. Para mover esta base de datos, seguiremos estos pasos:

  1. Modificar la Ruta del Archivo de la Base de Datos: Utilizaremos el comando ALTER DATABASE para cambiar la ruta de los archivos de datos (MDF) y de registro (LDF).

    2. Detener el Servicio de SQL Server: Deteneremos el servicio de SQL Server desde el Administrador de Servicios o mediante una línea de comandos con el comando net

      3. Mover los Archivos: C1opiaremos los archivos MDF y LDF a la nueva ubicación especificada.

      4. Modificar los Parámetros de Inicio del Servicio: Actualizaremos los parámetros de inicio del servicio SQL Server para reflejar la nueva ubicación de los archivos master y mastlog.

      5. Iniciar el Servicio de SQL Server: Finalmente, reiniciamos el servicio y verificaremos que SQL Server se inicia correctamente.

         

        Mover Otras Bases de Datos de Sistema

        Mover las base de datos Model y msdb

        El procedimiento para mover las bases de datos model y msdb es similar al de la base de datos master, pero con algunas diferencias clave ya que no será necesario configurar ningún parámetro del servicio. En ambos casos, usaremos ALTER DATABASE para modificar la ubicación de los archivos de datos y log, luego detendremos el servicio de SQL Server, moveremos los archivos manualmente y finalmente reiniciaremos el servicio.

        Mover la tempdb

        La base de datos tempdb es una base de datos de sistema especial utilizada para operaciones temporales y almacenamiento de datos de trabajo. A diferencia de las otras bases de datos, tempdb se reconstruye cada vez que SQL Server se reinicia, lo que hace que su reubicación sea más simple. Aquí están los pasos:

        1. Modificar la Ruta de los Archivos: Utilizamos ALTER DATABASE para modificar la ruta de los archivos de datos y registro.

        2. Reiniciar el Servicio de SQL Server: Al reiniciar SQL Server, los archivos de tempdb serán recreados en la nueva ubicación.

        3. Borrar los antiguos archivos de tempdb de la ruta original.

          Mover las bases de datos Distribution y SSISDB

          Estas bases de datos son específicas para ciertas características como la replicación y la integración de servicios. Los pasos para mover estas bases de datos son generalmente similares a los descritos anteriormente, pero es crucial entender las dependencias y servicios asociados, ya que esto puede afectar la replicación y la ejecución de paquetes SSIS.

          Conclusión

          Mover las bases de datos de sistema en SQL Server es una tarea que requiere precaución y planificación. Asegurarse de tener copias de seguridad actualizadas, seguir los pasos cuidadosamente, y verificar cada cambio es esencial para el éxito de la operación. Si tenéis alguna duda o sugerencia, podéis dejarla en Twitter, por mail o dejarnos un mensaje en los comentarios. Y recuerda que también tenemos un grupo de Telegram y un canal de YouTube a los que te puede unir. ¡Hasta la próxima!

          Publicado por Roberto Carrancio en SQL Server, 0 comentarios

          Bases de datos de sistema en SQL Server

          Todos los que en algún momento hemos decidido profundizar en SQL Server nos hemos llegado a sentir abrumados por la cantidad de componentes internos y su complejidad de funcionamiento que tiene este motor de base de datos. A esto hay que sumar, que muchos de estos objetos de sistema carecen de documentación oficial en muchas ocasiones lo que los hace aún más opacos para el DBA novel. Entre estos componentes, las bases de datos del sistema juegan un papel fundamental. Estas bases de datos no solo son esenciales para el funcionamiento del servidor, sino que cuanto más conoces sus componentes más te facilitan la administración, la seguridad y la optimización del rendimiento de las bases de datos de usuario. En este artículo, vamos a hablar justo de eso, de las bases de datos del sistema en SQL Server, desglosando su propósito y funciones clave.

          ¿Qué son las Bases de Datos del Sistema en SQL Server?

          Las bases de datos del sistema en SQL Server son un conjunto de bases de datos predefinidas que almacenan información interna sobre la configuración del servidor, los metadatos de las bases de datos de usuario y otros aspectos críticos de la operación del sistema. Estas bases de datos son fundamentales para el funcionamiento del servidor y la gestión de los datos que este contiene. 

          SQL Server necesita varias bases de datos del sistema, entre las que vamos a encontrar a las conocidas master, msdb, model, tempdb pero también alguna oculta como Resource Database y otras que solo aparecen si usamos características concretas como la SSISDB o la base de datos distribution. Cada una de estas bases de datos tiene una función específica que desempeñar y, en conjunto, permiten el correcto funcionamiento del servidor.

          Base de datos master: El Corazón del Sistema

          La base de datos master es la más crítica de todas. Almacena información crucial sobre el servidor SQL en sí mismo, incluyendo la configuración del servidor, los detalles de las bases de datos de usuario, y la información de inicio de sesión y permisos. En resumen, master actúa como el catálogo central de SQL Server.

          Cualquier pérdida o corrupción de la base de datos master puede tener consecuencias graves, haciendo esencial contar con copias de seguridad regulares y verificadas de esta base de datos. Además, la restauración de master es un proceso delicado que debe realizarse con precaución para evitar daños adicionales al sistema.

          msdb: La Base de Datos de sistema de los Jobs

          La base de datos msdb es otra pieza clave en SQL Server. Esta base de datos almacena información sobre trabajos de SQL Server Agent, operaciones de respaldo y restauración, alertas, y operadores. También almacena los paquetes de los planes de mantenimiento nativos de SQL Server. En resumen, msdb es la base de datos encargada de la automatización y planificación de tareas dentro del servidor.

          Para los DBAs es importantísima pues conocer sus objetos internos nos abre la puerta hacia la automatización, permitiéndonos programar y supervisar tareas que faciliten la administración diaria del sistema. Esto incluye desde respaldos automáticos hasta el envío de alertas cuando se detectan problemas. No debemos tampoco descuidar su mantenimiento pues es propensa a crecer en exceso al almacenar todo el historial de copias de seguridad, restauración, jobs, etc…

          model: La Bases de Datos de sistema modelo

          La base de datos model es el modelo de referencia que usa SQL Server para la creación de nuevas bases de datos. Cada vez que creamos una nueva base de datos, el motor de SQL se basa en la estructura y las configuraciones definidas en model. Esto incluye configuraciones de tamaño inicial, collation, y otros aspectos fundamentales.

          Como DBAs tenemos la opción de modificar la configuración de la base de datos model para establecer configuraciones predeterminadas para nuevas bases de datos. Esto, que puede parecer trivial, es muy importante ya que puede ahorrarnos tiempo y asegurar la consistencia en entornos donde se crean bases de datos con frecuencia.

          tempdb: Espacio Temporal para la Ejecución de Consultas

          La base de datos tempdb es de uso temporal y es donde SQL Server maneja operaciones de procesamiento intermedio, como ordenaciones y operaciones de hash que no caben en memoria. Además sirve de almacenamiento de tablas temporales. Debido a la naturaleza volátil de sus datos, la base de datos tempdb se recrea cada vez que el servidor SQL Server se reinicia.

          La gestión efectiva de tempdb es crucial para el rendimiento general del sistema. Esto incluye la configuración adecuada de su tamaño, el número de archivos de datos, y la ubicación física de los archivos para evitar cuellos de botella en el I/O. Una de nuestras responsabilidades como DBAs es asegurarnos de que nunca se llene, pues en ese momento nuestra instancia dejará de admitir transacciones nuevas. En este post hablamos más sobre este tema.

          Resource Database: De sistema pero escondida

          La base de datos de recursos es una base de datos oculta que contiene todas las definiciones de sistema para objetos incluidos en SQL Server. Aunque no es directamente accesible, Resource Database juega un rol crucial en las actualizaciones y en la recuperación del sistema, al permitir la actualización de objetos del sistema sin afectar las bases de datos de usuario. Al no ser accesible no nos tenemos que preocupar por ella, de nada serviría.Aunque esta base de datos tiene su página dedicada de Microsoft, tampoco existe mucha documentación al respecto.

          Bases de datos de sistema especiales

          Como hemos comentado en la introducción, además de las bases de datos de sistema que podemos encontrar en todas las instalaciones de SQL Server, existen otras que siendo bases de datos de sistema solo se crean si activamos la característica que las requiere. Estas son la SSISDB y la distribution.

          SSISDB: Base de datos interna de SSIS

          La base de datos SSISDB, también conocida como la base de datos del Catálogo de SSIS, es crucial para la gestión de paquetes de SQL Server Integration Services (SSIS). Esta base de datos almacena los paquetes, configuraciones y datos de ejecución para las tareas de ETL (Extract, Transform, Load). Nos permite un control centralizado de los procesos de integración de datos, lo cual es esencial para mantener la consistencia y fiabilidad en los entornos de datos empresariales.

          Para los DBAs, SSISDB ofrece herramientas avanzadas de gestión y monitorización, incluyendo la capacidad de gestionar versiones de paquetes, programar ejecuciones y revisar logs de errores de SSIS. Además, SSISDB es fundamental para garantizar la seguridad y la auditoría de los procesos de integración de datos. Si quieres profundizar en la administración de la base de datos SSISDB te recomiendo este artículo que publiqué hace tiempo.

          distribution: Administración de la Replicación

          La base de datos distribution es esencial para la característica de replicación en SQL Server. Esta base de datos se utiliza para almacenar metadatos y datos de cola que se requieren durante la replicación transaccional y de mezcla. Se crea en el servidor distribuidor y actúa como un intermediario entre el publicador y los suscriptores, ayudando a garantizar que los cambios en los datos se distribuyan de manera eficiente y coherente.

          Para los DBAs, conocer internatemente la base de datos distribution nos va a ayudar con la monitorización y resolución de problemas de replicación. Una administración adecuada de esta base de datos es fundamental para evitar cuellos de botella y asegurar la sincronización continua de los datos entre las distintas instancias.

          Conclusión

          En resumen, las bases de datos del sistema en SQL Server son esenciales para el funcionamiento y la administración efectiva del servidor. Cada una cumple un rol específico, desde la administración centralizada y la configuración del servidor en master, hasta el manejo de automatización y tareas en msdb, la gestión de espacio temporal en tempdb, y la supervisión de procesos de integración y replicación en SSISDB y distribution.

          Para los DBAs, comprender y manejar adecuadamente estas bases de datos es crucial. No solo nos permite mantener la estabilidad y el rendimiento del servidor, sino que también asegura que estemos preparados para recuperarnos rápidamente en caso de fallos o desastres. Por si esto fuera poco, conocer sus objetos (tablas, vistas, procedimientos y funciones) nos van a permitir automatizar gran parte de nuestro trabajo.

          Mantenerse al día con las mejores prácticas para la gestión de estas bases de datos, así como entender sus interacciones y dependencias, es una tarea continua y vital en nuestro rol como administradores de bases de datos. Con el conocimiento adecuado, podemos no solo mantener nuestros sistemas funcionando sin problemas, sino también optimizar el rendimiento y la seguridad en nuestros entornos de SQL Server. Si tenéis alguna duda o sugerencia, podéis dejarla en Twitter, por mail o dejarnos un mensaje en los comentarios. Y recuerda que también tenemos un grupo de Telegram y un canal de YouTube a los que te puede unir. ¡Hasta la próxima!

           

          Publicado por Roberto Carrancio en Cloud, SQL Server, 1 comentario

          Logins y Users: Seguridad en SQL

          Una de las principales labores que tenemos como administradores de bases de datos es la gestión de su seguridad y, para eso, es imprescindible la gestión de inicios de sesión (Logins) y usuarios (Users). Puede parecer que son lo mismo pero no lo son y, entender sus particularidades y diferencias va a ser clave para nuestra labor. Además, a estos conceptos tenemos que sumarle uno nuevo, los usuarios independientes, que se han implementado en las soluciones SQL en Azure y que harán que cambiemos nuestra forma de actuar en muchos casos.

          Logins o Inicios de Sesión, primera capa de seguridad

          Los inicios de sesión en SQL Server son entidades de seguridad a nivel de servidor que permite a los usuarios autenticarse y acceder al servidor SQL. Los inicios de sesión pueden ser de dos tipos: inicios de sesión basados en Windows y inicios de sesión de SQL Server.

          Los logins de Windows aprovechan las cuentas de usuario o grupos de seguridad definidos en Active Directory o en el equipo local, permitiendo una autenticación integrada y centralizada. Por otro lado, los logins de SQL Server son gestionados directamente por SQL Server y, para crearlos, tendremos que proporcionar un nombre de inicio de sesión y una contraseña específicos para SQL Server.

          Creación de logins

          Para crear logins usaremos la sintaxis CREATE LOGIN de la siguiente manera:

          a) Para un login de Windows usaremos:

          b) Para un login de SQL usaremos:

          Usuarios en SQL Server, segunda capa de seguridad

          A diferencia de los inicios de sesión, los usuarios en SQL Server existen a nivel de base de datos. Mientras que el inicio de sesión proporciona acceso a la instancia del servidor, el usuario define qué recursos dentro de una base de datos específica puede acceder ese inicio de sesión.

          Los usuarios se utilizan para gestionar permisos dentro de una base de datos, controlando el acceso a tablas, procedimientos almacenados y otros objetos. Cada usuario de base de datos puede estar asociado a un inicio de sesión o no, pero un inicio de sesión puede estar asociado a múltiples usuarios en diferentes bases de datos. Cuando un usuario no está asociado a un inicio de sesión decimos que está huérfano

          Creación de users

          Crear un usuario en SQL Server se hace, posicionado en la base de datos, con la sintaxis CREATE USER y obligatoriamente implica especificar el inicio de sesión al que estará asociado. Por ejemplo:

          El Concepto de SID ¿Qué es y por qué es clave para la seguridad?

          El SID (Security Identifier) es un identificador único que SQL Server asigna a cada inicio de sesión y usuario. Este identificador es crucial porque es lo que realmente utiliza SQL Server para vincular inicios de sesión con usuarios y para gestionar los permisos. Aunque los nombres de los inicios de sesión y usuarios pueden ser los mismos en diferentes bases de datos o instancias, el SID es lo que realmente distingue a cada entidad de seguridad.

          Cuando estamos usando logins de windows siempre usaremos el SID que tenga ese usuario en el Directorio Activo (lo sé es lioso pero es que a nivel windows si se llama usuario y nosotros en SQL lo usamos como login).

          Problemas conocidos con los SID

          Como habrás imaginado, cada SID es único para cada inicio de sesión y, aunque en dos servidores tengamos un login con el mismo nombre, al mover las bases de datos de uno a otro no van a coincidir esos SID y se quedará huérfano el usuario en la base de datos. Lo explico más en detalle, los permisos a nivel de base de datos asignados a un usuario o a nivel de instancia a un login, están realmente vinculados a su SID, no a su nombre. Esto hace que, durante migraciones o en configuraciones de alta disponibilidad, como los Grupos de Disponibilidad (AG) en SQL Server, sea fundamental que los SIDs de los inicios de sesión y usuarios coincidan entre las diferentes instancias y bases de datos.

          Si los SIDs no coinciden, los usuarios no podrán acceder a los recursos correspondientes porque SQL Server no los reconocerá correctamente. Por suerte eso se puede solucionar copiando el SID del login en uno de los servidores y recreando el login en el resto con ese mismo SID como te expliqué aquí en un artículo o aquí en video

          Usuarios Independientes o Contenidos, simplificando la seguridad

          Tanto en SQL Server a partir de SQL 2012 como en las soluciones SQL en Azure existe un modelo de entidades de seguridad que se basa en usuarios sin necesidad de login. A esto se le llama usuarios de base de datos independientes o contenidos. Estos usuarios no están vinculados a un inicio de sesión a nivel de servidor, sino que existen exclusivamente dentro de una base de datos.

          Tiene ciertos inconvenientes como que en la conexión siempre se debe especificar a qué base de datos te quieres conectar y si quieres cambiar de base de datos tienes que cerrar tu conexión actual y volver a conectar. Sin embargo en Azure SQL Database, donde “no hay servidor” y esto no es un problema, los usuarios independientes cobran relevancia. Si nos olvidamos de esta limitación, si no es importante para nosotros, las ventajas son indiscutibles, cada base de datos puede tener su propio conjunto de usuarios y permisos, independiente de otros recursos lo que hace que las bases de datos pueden moverse entre servidores o instancias sin necesidad de volver a crear o ajustar inicios de sesión a nivel de servidor.

          Ventajas en Entornos de Replicación y Alta Disponibilidad

          Los usuarios independientes son particularmente ventajosos en entornos con replicación y alta disponibilidad (HA). En configuraciones tradicionales, cada vez que replicamos o movemos una base de datos a otra instancia, debemos asegurarnos de que los inicios de sesión y sus SIDs coincidan en todas las instancias involucradas. Esto puede ser complicado y propenso a errores.

          En entornos de Grupos de Disponibilidad (AG), se requiere un cuidadoso manejo de los inicios de sesión para asegurar que los usuarios puedan acceder a las bases de datos replicadas en diferentes nodos del AG. Debemos crear cada inicio de sesión manualmente en cada réplica secundaria, asegurando que los SIDs coincidan. Con usuarios independientes, este problema se simplifica enormemente. Dado que estos usuarios existen únicamente dentro de la base de datos y no dependen de un inicio de sesión a nivel de servidor, las preocupaciones sobre la coincidencia de SIDs se eliminan. Esto hace que la administración de permisos y accesos en entornos distribuidos sea más sencilla y menos propensa a errores.

          Comparación con el Paradigma Tradicional

          Comparado con el enfoque tradicional de SQL Server, los usuarios independientes proporcionan una mayor flexibilidad y facilidad de gestión en entornos distribuidos. En cambio, la capacidad de gestionar usuarios directamente dentro de cada base de datos, reduce la complejidad administrativa. 

          Por ejemplo, un usuario independiente se crea así:

          Mientras que según el enfoque tradicional sería:

          Seguridad y buenas prácticas

          Para asegurar nuestras instancias de SQL Server y las bases de datos asociadas, debemos seguir varias buenas prácticas. Lo primero y fundamental es seguir el principio de privilegios mínimos otorgando solo los permisos necesarios a cada usuario. Otra recomendación es seguir una política de contraseñas que asegure contraseñas fuertes y políticas de expiración y complejidad. Por último, os recomendaría crear auditorías para rastrear el acceso y las acciones de los usuarios.

          Seguridad en Azure

          En Azure, además de las prácticas anteriores, debemos considerar las herramientas y servicios adicionales que ofrece la plataforma.La integración con Microsoft Entra (antes llamado Azure Active Directory) para una gestión centralizada de identidades será un gran aliado. Al usar Microsoft Entra podremos implementar requisitos de segundo factor de autenticación (MFA) como por ejemplo requerir un código temporal enviado por SMS, llamada o una aplicación de autenticación además de la contraseña del usuario. También disponemos de servicios como Azure Key Vault para la gestión de claves y certificados. Y por supuesto, las alertas y monitorización avanzada utilizando Azure Security Center, Azure Monitor y Azure Insights para detectar y responder a amenazas de seguridad.

          Conclusión

          La gestión de inicios de sesión y usuarios en SQL Server es un aspecto fundamental de la administración de bases de datos, que garantiza la seguridad y el control de acceso a nuestros datos. Mientras que los inicios de sesión proporcionan acceso a la instancia del servidor, los usuarios dentro de las bases de datos gestionan el acceso a los recursos específicos. Con la evolución hacia entornos cloud, los usuarios independientes en Azure SQL Database ofrecen una mayor flexibilidad y facilitan la administración en escenarios distribuidos. Aprovechar las ventajas de los usuarios independientes en entornos de replicación y HA nos permite reducir la complejidad y mejorar la eficiencia administrativa.

          Comprender estas diferencias y aplicar las mejores prácticas de seguridad nos permite aprovechar al máximo nuestras bases de datos SQL Server, ya sea en implementaciones tradicionales o en la nube. 

           Si tenéis alguna duda o sugerencia, podéis dejarla en Twitter, por mail o dejarnos un mensaje en los comentarios. Y recuerda que también tenemos un grupo de Telegram y un canal de YouTube a los que te puede unir. ¡Hasta la próxima!

          Publicado por Roberto Carrancio en Cloud, SQL Server, 0 comentarios

          Diferencias Instancia, BBDD y Esquema en SQL Server

          Cuando hablamos de bases de datos, términos como instancia, base de datos (BBDD) y esquema son fundamentales, pero no en todos los sistemas tienen los mismos significados, lo que genera confusión entre los desarrolladores y administradores de bases de datos principiantes. En este artículo, voy a explicarte lo que significan en SQL Server así como las diferencias y relaciones entre estos conceptos tan clave que son el pilar de nuestro RDBMS. 

          Cuando trabajamos con SQL Server o Azure SQL, es crucial entender cómo están organizados los datos y las estructuras que los contienen. A menudo, los términos «instancia», «base de datos» y «esquema» se utilizan indistintamente, pero cada uno tiene un significado específico y una función distinta. Veamoslo.

          ¿Qué es una Instancia en SQL Server?

          Una instancia de SQL Server es una “copia” del motor de base de datos que se ejecuta como un servicio del sistema operativo. Es la aplicación del servidor SQL instalada en nuestro equipo y podemos tener una o varias instaladas y ejecutándose a la vez. Cada instancia puede contener varias bases de datos y tiene su propia gestión de la memoria, los procesos y su propia configuración.

          Tipos de Instancias

          Existen dos tipos principales de instancias en SQL Server:

          • Instancia predeterminada: Por defecto es la primera instancia instalada en el servidor y no tiene nombre específico. Se accede a ella utilizando sólo el nombre del servidor. 
          • Instancia con nombre: Se pueden instalar múltiples instancias con nombre en un mismo servidor, y se accede a ellas utilizando el formato Nombre_Servidor\Nombre_Instancia.

          Esto no es siempre así, puedes poner un nombre a todas tus instancias o instalar primero una instancia con nombre y después la predeterminada. Lo que sí es importante es que solo puede haber una instancia predeterminada en el servidor y eso se configura al momento de la instalación.

          Ventajas y desventajas de Múltiples Instancias

          Las múltiples instancias tienen ciertas ventajas, por ejemplo, permiten un mayor aislamiento ya que se pueden separar las cargas de trabajo críticas en diferentes instancias. Esto nos permite una configuración independiente donde cada instancia puede tener su propia configuración de seguridad, memoria y opciones de rendimiento. Además es más sencillo gestionar actualizaciones y parches sin afectar a todas las bases de datos.

          Esto no quiere decir que tengamos que tener un solo servidor de SQL con todas las instancias, aunque es una opción válida, todo lo que hemos visto como ventajas es aún mayor cuando tenemos servidores independientes cada uno con una instancia, aunque sean servidores virtuales. Aunque esta solución tiene un mayor coste, a mi es la que más me gusta.

          Base de Datos (BBDD)

          Una base de datos (BBDD) es una colección organizada de datos que se puede acceder, gestionar y actualizar fácilmente. En SQL Server, cada base de datos es una entidad autónoma que contiene sus propios conjuntos de archivos.Cada base de datos en SQL Server consta de tres tipos principales de archivos: Los archivos de datos primarios (.mdf) que contienen los datos de la base de datos y su estructura, los archivos de datos secundarios (.ndf) utilizados para distribuir datos en diferentes discos y mejorar el rendimiento y los archivos de registro o log de transacciones (.ldf) que almacenan todas las transacciones y cambios a la base de datos, cruciales para la recuperación ante fallos.

          Esquemas en SQL Server

          Un esquema es un contenedor lógico dentro de una base de datos que agrupa objetos como tablas, vistas, procedimientos almacenados, etc. Ayuda a organizar los objetos y facilita la gestión de permisos y la segmentación de datos.

          Los esquemas son extremadamente útiles para la segregación de datos permitiéndonos separar datos y objetos por departamentos o aplicaciones y mejorando así la gestión de la seguridad al aplicar permisos a nivel de esquema en lugar de a nivel de objeto. También son un gran aliado para la organización ya que nos va a permitir mantener un orden lógico y estructurado dentro de una base de datos.

          Diferencias Clave entre Instancia, BBDD y Esquema en SQL Server

          Para recapitular, y a modo resumen, vamos a destacar las diferencias esenciales entre estos tres conceptos:

          • Instancia: Es el entorno de ejecución del motor de base de datos que puede contener múltiples bases de datos. Proporciona aislamiento y configuración independiente.
          • Base de Datos (BBDD): Es una colección autónoma de datos y objetos dentro de una instancia. Cada base de datos tiene su propio conjunto de archivos de datos y registro.
          • Esquema: Es un contenedor lógico dentro de una base de datos que organiza y agrupa objetos. Facilita la gestión de permisos y la segregación de datos.

          Conclusión

          Entender las diferencias y relaciones entre instancia, base de datos y esquema es fundamental para cualquier profesional que trabaje con SQL Server o Azure SQL. Desde la gestión de múltiples instancias hasta la organización de datos en esquemas, cada componente tiene su lugar y función específica. Al aprovechar estas herramientas de manera efectiva, podemos garantizar que nuestras bases de datos sean robustas, seguras y escalables, tanto en entornos locales como en la nube. 

          Si tenéis alguna duda o sugerencia, podéis dejarla en Twitter, por mail o dejarnos un mensaje en los comentarios. Y recuerda que también tenemos un grupo de Telegram y un canal de YouTube a los que te puede unir. ¡Hasta la próxima!

          No te vayas aun. Hemos creado una página donde estamos recopilando todos estos artículos que dan respuesta a estas preguntas frecuentes de SQL Server. Pásate por aquí a echar un vistazo.

          Publicado por Roberto Carrancio en Cloud, SQL Server, 0 comentarios

          Auditoría en SQL Server: ¿Cómo configurarlas?

          En nuestro anterior post hablamos sobre SQL Server Profiler y sus trazas y comentábamos que uno de sus usos puede ser el de auditoría ya que registra todos los eventos sobre nuestros servidores SQL Server. Sin embargo su elevado consumo de recursos no lo hace la solución más ideal para esta función. Y es que, SQL Server implementa una auditoría nativa mucho más potente con menor coste de recursos que la hacen la herramienta ideal. Configurar auditorías en SQL Server no solo nos va a ayudar a supervisar la actividad y los cambios, sino que también es un proceso clave en nuestra estrategia de protección de datos y cumplimiento normativo. En este artículo, voy a tratar de explicarte cómo puedes configurar eficazmente estas auditorías, optimizando cada aspecto para obtener el máximo beneficio.

          ¿Qué es la Auditoría de SQL Server?

          La auditoría de SQL Server es un mecanismo que permite registrar y rastrear actividades y eventos dentro de nuestras instancias de SQL Server. La auditoría puede ser configurada para capturar una variedad de eventos, desde inicios de sesión hasta cambios en la configuración del servidor. Con estos registros, podemos realizar un seguimiento detallado de quién hizo qué y cuándo, lo que es vital para la seguridad y el cumplimiento normativo.

          Tipos de Auditoría de SQL Server

          SQL Server proporciona dos enfoques principales para la auditoría: la auditoría de instancia y la auditoría de base de datos. Cada uno tiene sus características específicas y se aplica en diferentes contextos según los requisitos de seguridad y cumplimiento por lo que no son excluyentes.

          La auditoría de instancia se enfoca en eventos que afectan a toda la instancia de SQL Server, no solo a bases de datos individuales. Es ideal para capturar eventos que tienen un impacto global en el servidor y para mantener una vista general sobre la actividad de toda la instancia. Su uso principal es registrar el cumplimiento de políticas de seguridad como la gestión de accesos y el control de cambios en la configuración del servidor o de la instancia. Para ello, captura eventos que afectan a toda la instancia, como inicios de sesión, cambios en la configuración del servidor, y operaciones de mantenimiento. También permite registrar eventos de alto nivel que impactan el funcionamiento de la instancia.

          La auditoría de base de datos se centra en eventos que ocurren dentro de una base de datos específica. Es ideal para capturar eventos relacionados con las operaciones de datos y la estructura de la base de datos, proporcionando un nivel de detalle más granular. Como hemos dicho, captura eventos a nivel de base de datos, como modificaciones en los datos, cambios en los objetos, y accesos a datos y nos permite definir qué operaciones se auditan en tablas, esquemas o procedimientos almacenados específicos. Se usa principalmente para registrar operaciones como inserciones, actualizaciones y eliminaciones, es decir, control de cambios y para monitorizar y registrar el acceso a datos sensibles o críticos dentro de una base de datos.

          Auditoría de Instancia en SQL Server

          Ya hemos visto que la auditoría a nivel de instancia nos permite capturar eventos que afectan a toda la instancia de SQL Server, independientemente de las bases de datos individuales. Este enfoque es útil para registrar eventos que ocurren a nivel de servidor, como cambios en la configuración del servidor o inicios de sesión.

          Pasos para Configurar una Auditoría de Instancia

          Primero, debemos definir una auditoría que especificará qué eventos se registrarán y cómo se almacenarán los resultados. Esto se hace mediante el SQL Server Management Studio (SSMS) o mediante Transact-SQL (T-SQL).

          Usando SSMS:

          En SSMS, navegamos a Seguridad > Auditorías.

          Hacemos clic derecho en Auditorías y seleccionamos Nueva Auditoría.

          En la ventana de propiedades, configuramos la ubicación del archivo de auditoría, que puede ser un archivo de registro, un archivo de eventos o un registro de la aplicación.

          Establecemos las opciones necesarias, como el tamaño máximo del archivo y la política de retención.

          Auditoria-1

          Usando T-SQL:

          Una vez creada la auditoría, debemos definir qué eventos específicos deseamos capturar. Esto se hace mediante la creación de especificaciones de auditoría.

          Usando SSMS:

          Navegamos a Seguridad > Especificaciones de Auditoría.

          Hacemos clic derecho en Especificaciones de Auditoría y seleccionamos Nueva Especificación de Auditoría.

          Seleccionamos la auditoría previamente creada y definimos los eventos que deseamos capturar, como Inicios de sesión o Cambios en la configuración.

          Auditoria-2

          Usando T-SQL:

          Finalmente, habilitamos tanto la auditoría como las especificaciones para comenzar a capturar los eventos configurados desde SSMS con clic derecho del ratón sobre los objetos y habilitar.

          Usando T-SQL:

          Auditoría de Base de Datos en SQL Server

          A diferencia de la anterior, la auditoría a nivel de base de datos se centra en registrar eventos que ocurren dentro de una base de datos específica. Este nivel de detalle es fundamental para monitorear actividades relacionadas con el contenido y los objetos de la base de datos.

          Pasos para Configurar una Auditoría de Base de Datos

          Al igual que con la auditoría a nivel de instancia, primero debemos crear una auditoría que especifique dónde se almacenarán los registros. Esta auditoría se crea a nivel de instancia y podemos usar la misma que teníamos antes, en la base de datos solo vamos a crear las especificaciones.

          Usando SSMS:

          Navegamos a la base de datos en Seguridad > Especificaciones de Auditoría.

          Hacemos clic derecho en Especificaciones de Auditoría y seleccionamos Nueva Especificación de Auditoría.

          Configuramos los eventos específicos, como operaciones de datos o cambios en los objetos.

          Auditoria-3

          Usando T-SQL:

          Igual que antes, activamos la auditoría y las especificaciones para comenzar a registrar los eventos.

          Usando T-SQL:

          Auditoría vs SQL Server Profiler

          Como vimos en el pasado post, SQL Server Profiler es otra herramienta que, aunque no se usa para auditorías a largo plazo, sigue siendo relevante para capturar eventos en tiempo real y para el análisis detallado de sesiones y transacciones. Vamos a comparar esta herramienta con las auditorías de SQL Server en términos de capacidades y usos.

          Alcance y propósito

          SQL Server Profiler captura eventos en tiempo real para el análisis detallado de sesiones y transacciones. Es ideal para depurar problemas y monitorear el rendimiento en tiempo real ya que proporciona una vista instantánea de la actividad de la base de datos. Por el contrario, las auditorías de SQL Server registran eventos a lo largo del tiempo, permitiendo un seguimiento extensivo y cumplimiento normativo. Son más adecuadas para el cumplimiento de regulaciones y para proporcionar informes detallados sobre eventos históricos ya que capturan eventos críticos y permiten su almacenamiento en archivos o registros para un análisis posterior.

          Persistencia

          Los datos capturados por Profiler son temporales y se almacenan en memoria mientras se realiza el seguimiento. Aunque se puede salvar un archivo de traza, este no está diseñado para almacenamiento a largo plazo o para el cumplimiento normativo. Las auditorías de SQL Server sin embargo si almacenan los eventos en archivos o registros, lo que permite un almacenamiento prolongado y una revisión a largo plazo. Además facilitan la conservación de datos históricos necesarios para el cumplimiento regulatorio.

          Rendimiento

          Como ya vimos también, SQL Server Profiler puede impactar el rendimiento del servidor durante la captura de eventos debido a la sobrecarga de recursos. lo que no lo hace la herramienta ideal para sesiones largas y poco específicas donde el rendimiento es crítico. En este sentido, las auditorías de SQL Server tienen un menor impacto en el rendimiento, especialmente cuando se configuran para capturar solo eventos esenciales. Además nos permiten ajustar la granularidad de la auditoría para minimizar la sobrecarga.

          Usabilidad

          SQL Server Profiler nos ofrece una interfaz gráfica para configurar y visualizar eventos en tiempo real pero requiere de una comprensión avanzada para interpretar los eventos capturados. Las auditorías de SQL Server que configuramos a través de SSMS o T-SQL, proporcionan una forma estructurada y más amigable de registrar eventos para que puedan ser consumidos por auditores y técnicos de ciberseguridad. Las especificaciones de auditoría permiten un control preciso sobre qué eventos se registran y cómo se almacenan.

          Conclusión

          Configurar auditorías en SQL Server, tanto a nivel de instancia como de base de datos, es fundamental para mantener un control exhaustivo sobre nuestras bases de datos y garantizar la seguridad y el cumplimiento. A través de la correcta configuración de auditorías y especificaciones, podemos registrar eventos críticos y analizar el acceso y las modificaciones a nuestros datos. Aunque el proceso puede parecer complejo, seguir estos pasos nos permite implementar una estrategia de auditoría efectiva que proporciona una visión detallada y precisa de la actividad en nuestras instancias y bases de datos. Al final, una auditoría bien configurada es una herramienta poderosa que fortalece nuestra postura de seguridad y facilita el cumplimiento normativo.

            Si tenéis alguna duda o sugerencia, podéis dejarla en Twitter, por mail o dejarnos un mensaje en los comentarios. Y recuerda que también tenemos un grupo de Telegram y un canal de YouTube a los que te puede unir. ¡Hasta 

          Publicado por Roberto Carrancio en Cloud, SQL Server, 0 comentarios

          SQL Server Profiler

          Hoy os quiero hablar de SQL Server Profiler. Aunque su soporte está discontinuado y en un futuro será eliminado de las características de SQL Server en favor de otras herramientas como xEvents, sigue siendo una de las herramientas más poderosas y versátiles a nuestra disposición cuando estamos depurando un problema con consultas SQL.

          Durante las próximas líneas, veremos en profundidad el uso del SQL Server Profiler, sus funcionalidades avanzadas, su impacto en los recursos del sistema y cómo puede ayudarnos a mantener nuestros sistemas SQL Server funcionando de manera eficiente.

          ¿Qué es el SQL Server Profiler?

          El SQL Server Profiler es una herramienta nativa de SQL Server que nos permite crear trazas para capturar y analizar eventos que ocurren principalmente en instancias de SQL Server. Aunque su uso principal es para capturar eventos de SQL Server, también es posible conectarlo a una instancia de SQL Server Analysis Services y, por tanto, a un modelo de Power BI. Los eventos que vamos a poder capturar pueden ser consultas T-SQL, procedimientos almacenados, transacciones y mucho más, dependerá de a qué tipo de servidor estemos conectados. Como habrás imaginado ya, poder monitorizar y registrar estos eventos es crucial para ayudarnos en la resolución de problemas, la optimización del rendimiento y la auditoría de actividades en nuestras bases de datos.

          Principales Características del SQL Server Profiler

          SQL Server Profiler, como hemos visto, nos puede ser de gran utilidad para descubrir qué es lo que está pasando en nuestro SQL Server. Esto lo hace una herramienta ideal para cualquier DBA que persiga un problema de rendimiento o para un desarrollador que necesite depurar una aplicación. Para ello, podemos destacar estas características principales de la herramienta:

          • Monitorización en Tiempo Real y más: SQL Server Profiler nos permite observar la actividad sobre la base de datos a medida que ocurre, lo cual es esencial para identificar y solucionar problemas de rendimiento de manera inmediata. Pero no solo eso, también nos permite guardar esos archivos para analizarlos en detalle más adelante.
          • Filtrado de Eventos: Como el resultado de registrar toda la actividad puede ser un fichero tan grande que sea casi imposible de consumir, SQL Server Profiler implementa una serie de filtros específicos para centrarnos en eventos particulares, evitando así la sobrecarga de información y facilitando la identificación de problemas concretos.
          • Reproducción de Trazas: Como ya os comentaba antes, podemos guardar los archivos de trazas pero, no solo para su visualización. SQL Server Profiler nos da la capacidad de abrir esas trazas conectados en un entorno de prueba, por ejemplo, y reproducir paso a paso, todos los eventos de la traza. Esto es increíblemente útil para el análisis de problemas y depuración de código sin afectar el sistema de producción.

          Configuración y Uso del SQL Server Profiler

          Cuando queremos usar SQL Server Profiler primero debemos iniciar una nueva sesión de traza. Al hacerlo, se nos presentará una serie de opciones de configuración que nos permitirán personalizar la traza según nuestras necesidades. Veamos los pasos.

          Pasos Básicos para Iniciar una Nueva Trazabilidad

          1. Abrir SQL Server Profiler: Lo encontramos en el menú de herramientas de SQL Server Management Studio (SSMS) o como aplicación instalada en tu sistema operativo.
          2. Crear Nueva Traza: Seleccionamos «File» > «New Trace» y nos conectamos a la instancia que queremos monitorizar. Recuerda que puede ser SQL Server (on premise o Azure), SSAS o un modelo de Power BI.
          3. Seleccionar Plantilla: Podremos elegir una de las plantillas predefinidas, si es que se ajustan a nuestras necesidades, o configurar una nueva.
          4. Configurar Eventos y Columnas: En esta pestaña podremos personalizar los eventos y columnas que queremos capturar y mostrar. Abajo a la derecha encontrarás unos checks para mostrar todos los eventos y columnas, recuerda activarlos para ver todas las opciones disponibles.
          5. Aplicar Filtros: Podremos configurar filtros específicos para reducir la cantidad de datos capturados y enfocarnos en eventos relevantes. Es interesante por ejemplo el filtro por base de datos o por usuario si es que tenemos claro donde está más o menos localizado el problema.
          6. Iniciar la Traza: Una vez configurada, iniciamos la traza y comenzamos a monitorizar los eventos en tiempo real.
          7. Una vez con la traza iniciada la podremos pausar y reanudar a nuestro gusto. También detener definitivamente la captura de eventos. Una vez finalizado podremos guardar el fichero para analizarlo o reproducirlo más tarde.

          Análisis de Datos Capturados

          Una vez que hemos capturado una traza, el siguiente paso es analizar los datos para identificar posibles problemas de rendimiento o errores en la aplicación.

          Uno de los usos más comunes del SQL Server Profiler es identificar consultas lentas que pueden estar afectando el rendimiento de la base de datos. Podemos buscar eventos específicos como «SQL» o «RPC» y revisar las métricas de tiempo de ejecución, CPU y lecturas/escrituras de disco para cada consulta.

          Los bloqueos y deadlocks también pueden ser un gran problema que queramos analizar, sobre todo en sistemas con alta concurrencia (y sin un nivel de aislamiento Read Committed Snapshot). Utilizando eventos como «Lock» y «Lock Chain», podemos identificar las transacciones involucradas en deadlocks y tomar medidas para resolverlos, ya sea optimizando las consultas o ajustando la configuración de bloqueo.

          Impacto de SQL Server Profiler en el rendimiento

          Como puedes imaginar todo esto tiene una gran contrapartida y es su impacto en el rendimiento. El SQL Server Profiler puede generar una cantidad significativa de datos, especialmente en sistemas con alta actividad. Cada evento capturado se guarda en un archivo de traza, lo que puede resultar en un uso considerable del espacio en disco. Si no tenemos cuidado podemos llegar a llenar el disco. 

          Para evitar este problema de consumo excesivo de disco debemos tomar precauciones y aplicar filtros para capturar solo los eventos necesarios, de esta manera reduciremos la cantidad de datos registrados. También es importante configurar límites de tamaño para los archivos de traza y habilitar la opción de sobrescribir los archivos más antiguos. Por último debemos asegurarnos de que las trazas se almacenan en volúmenes con suficiente capacidad para evitar problemas de espacio en disco.

          Otro de los problemas principales que podemos encontrar durante el proceso de captura y registro de eventos por parte del SQL Server Profiler es que puede afectar el rendimiento del servidor. El impacto varía según la cantidad de eventos capturados y la configuración de la traza. A mayor frecuencia de eventos capturados, mayor será el impacto en el rendimiento. Capturar una gran cantidad de eventos y columnas innecesarias aumenta la carga en el sistema, como es obvio.

          Trata de acotar tus trazas en el tiempo y de capturar los eventos mínimos imprescindibles para evitar saturar la CPU y RAM de tu servidor, utilizar plantillas predefinidas optimizadas para tareas específicas puede ayudarte en este sentido. Es vital en este sentido programar la captura de trazas durante periodos de baja actividad del sistema o solo durante el tiempo que tengas localizado que se produce el error que tratas de depurar en lugar de mantenerlas activas por tiempo prolongado.

          Casos de Uso Avanzados del SQL Server Profiler

          Como has podido ver en lo que llevamos de artículo, SQL Server Profiler es una herramienta muy útil para depurar código o localizar problemas de rendimiento. Pero, no solo nos va a servir para eso, a continuación os presento otros escenarios en los que nos puede ser de utilidad.

          Auditoría de Seguridad

          Aunque no es lo ideal, SQL Server Profiler también puede ser utilizado para auditorías de seguridad. Podemos capturar eventos relacionados con el acceso a datos sensibles, cambios en la configuración del servidor y actividades de inicio de sesión. Esto nos permite mantener un registro detallado de las acciones realizadas en la base de datos, lo cual es esencial para cumplir con normativas de seguridad y auditoría. Sin embargo, sus especificaciones y consumo de recursos hacen que no sea la herramienta ideal. En este sentido podremos usar mejor los eventos extendidos o la auditoría nativa de SQL Server.

          Optimización de Procedimientos Almacenados

          La optimización de procedimientos almacenados es una tarea crítica. Muchas aplicaciones usan estos objetos para sus procesos en lugar de ejecutar código Ad Hoc. Utilizando el Profiler, podemos capturar la ejecución de procedimientos y analizar su rendimiento. Esto nos va a permitir identificar procedimientos que requieren optimización, ya sea mediante la revisión del código T-SQL, la reestructuración de índices y estadísticas o la modificación de la lógica de las consultas.

          Diagnóstico de Problemas de Red

          En entornos distribuidos, los problemas de red pueden afectar significativamente al rendimiento de SQL Server. El Profiler nos permite capturar eventos relacionados con conexiones y desconexiones, así como latencias en la comunicación. Con esta información, podemos trabajar junto con los administradores de red para resolver problemas de conectividad y mejorar el rendimiento general del sistema.

          Uso del SQL Server Profiler para Monitorizar Power BI

          Aunque es un proceso no documentado, podemos usar el Profiler para capturar las consultas DAX de Power BI. Yo esto lo he visto funcionando en una charla de Francisco Gutierrez en los Power BI Days de Bilbao y me dejó sorprendido. No esperaba que una herramienta discontinuada por Microsoft tuviera la capacidad de interactuar con Power BI. 

          Conclusión

          El SQL Server Profiler es una herramienta muy potente para cualquier DBA que busque mantener el rendimiento de sus bases de datos SQL Server. Desde la identificación de consultas lentas hasta la auditoría de actividades y la resolución de problemas de red, el Profiler nos proporciona una visión detallada y en tiempo real del comportamiento de nuestro sistema. Su capacidad para personalizar la captura de eventos y analizar datos detallados lo convierte en una herramienta versátil y poderosa. Sin embargo, es importante ser conscientes del impacto que el Profiler puede tener en los recursos del sistema y aplicar estrategias adecuadas para minimizar su uso de disco y su impacto en el rendimiento. Además, siempre que podamos, deberemos usar los eventos extendidos y familiarizarnos con ellos ya que al SQL Server Profiler no le queda mucho entre nosotros.

           Si tenéis alguna duda o sugerencia, podéis dejarla en Twitter, por mail o dejarnos un mensaje en los comentarios. Y recuerda que también tenemos un grupo de Telegram y un canal de YouTube a los que te puede unir. ¡Hasta la próxima!

          Publicado por Roberto Carrancio en Cloud, Rendimiento, SQL Server, 2 comentarios

          DATETRUNC: Una novedad de SQL Server 2022

          Aunque ya ha pasado un tiempo desde la llegada de SQL Server 2022 no es raro encontrarse con gente que está empezando a adoptarlo o, con gente que aun llevando tiempo trabajando en esta versión no conoce todas sus novedades. Entre estas nuevas funcionalidades, una de las más destacadas es la función DATETRUNC. Esta nueva función integrada de fecha y hora simplifica enormemente el trabajo con fechas, permitiendo a los desarrolladores y administradores de bases de datos realizar tareas comunes de manera más eficiente y con menos código.

          Hasta ahora, manipular fechas en SQL Server requería el uso de múltiples funciones y a menudo resultaba en código complicado y difícil de leer. Aunque si has visto nuestro video sobre el tema ya serás un experto. Con la llegada de DATETRUNC, estas tareas se simplifican significativamente. La función DATETRUNC nos permite truncar una fecha a una parte específica, como año, mes, día, hora, minuto, etc., eliminando la necesidad de combinaciones complejas de funciones de fecha.

          ¿Qué es DATETRUNC?

          La función DATETRUNC recibe como parámetro una fecha que le pasemos y la trunca al nivel de precisión que hayamos especificado. Esto es especialmente útil cuando necesitamos agrupar datos por períodos específicos, como meses o trimestres, o simplemente cuando queremos estandarizar las fechas a un nivel común para comparaciones más precisas.

          Sintaxis de DATETRUNC

          La sintaxis de la función DATETRUNC es sencilla y directa, solo tendremos que pasar el nivel de precisión al que queremos truncar y un valor tipo fecha o fecha y hora:

          1. datepart: Especifica la parte de la fecha a la que queremos truncar. Puede ser año, trimestre, mes, día, hora, minuto, segundo, etc.
          2. date: La fecha que queremos truncar.

          Ejemplos Prácticos de DATETRUNC

          Por si han quedado dudas, y como a caminar se aprende caminando vamos con algunos ejemplos prácticos:

          Truncar a Año

          Imaginemos que tenemos una fecha y queremos truncarla al inicio del año:

          Este código devolverá: 2023-01-01 00:00:00.000. Hemos truncado la fecha al primer día del año 2023.

          DATETRUNC-1

          Truncar a Mes

          Si queremos truncar una fecha al inicio del mes seguiremos la misma lógica:

          El resultado será: 2023-07-01 00:00:00.000. La fecha se trunca al primer día del mes de julio de 2023.

          DATETRUNC-2

          Truncar a Día

          Para truncar una fecha al inicio del día:

          El resultado será: 2023-07-15 00:00:00.000. En este caso, la hora, los minutos y los segundos se eliminan, dejando solo la fecha.

          DATETRUNC-3

          Aplicaciones Prácticas en el Mundo Real

          Todo esto es muy bonito pero, lo importante es cómo usarlo y cuando. Ahora te voy a contar algunos ejemplos útiles que se me ocurren para DATETRUNC. Seguro que a nuestros amigos de BI que siempre están jugando con dimensiones de fechas se le ocurren un montón más de ejemplos.

          Agrupación de Datos

          Una de las aplicaciones más comunes de DATETRUNC es en la agrupación de datos. Por ejemplo, podemos querer agrupar ventas por mes:

          Este ejemplo agrupa las ventas por mes, facilitando la generación de reportes mensuales.

          DATETRUNC-4

          Comparaciones de Fechas

          Otra aplicación que nos va a ser muy útil es en las comparaciones de fechas. Si queremos comparar sólo la parte de la fecha sin considerar la hora, podemos utilizar DATETRUNC:

          Aquí, estamos comparando solo la parte de la fecha de EventDate con el 15 de julio de 2023, ignorando la hora.

          Ventajas de Usar DATETRUNC

          Como podrás imaginar, si le he dedicado un tiempo a este artículo es porque creo que DATETRUNC tiene alguna ventaja para ti. Como ya hemos comentado una de sus grandes bazas es la sencillez del código, que simplifica su escritura y comprensión, pero no es solo eso, también vamos a notar mejoras en el rendimiento.

          Código Más Limpio y Legible

          Antes de la introducción de DATETRUNC, truncar fechas requería el uso de funciones como DATEADD y DATEDIFF en combinaciones complejas. Con DATETRUNC, el código es mucho más limpio y fácil de entender.

          ¿Mejor Rendimiento?

          La función DATETRUNC, en teoría, está optimizada para el rendimiento, reduciendo la sobrecarga de cómputo comparado con las versiones anteriores que implicaban múltiples ejecuciones de funciónes. Aunque como siempre, sigue siendo mejor no usar funciones.

          DATETRUNC-5

          En este ejemplo vemos como con la función DATETRUNC el coste de la consulta es un 1% menor pero no se acerca en absoluto a los resultados cuando no usamos funciones de fecha. Es curioso porque Microsoft asegura que ha optimizado el rendimiento pero el comportamiento sigue siendo el mismo. 

          El motor de SQL dice: “No tengo ni idea de cuál es la primera fecha que produciría YEAR(2017) y es imposible que pueda adivinarlo por mi mismo. Mejor leeré todas las fechas desde los inicios de los tiempos hasta ahora.” Esto es absurdo, lo sé, pero es así, y es una de las razones por las que siempre se dice que evitemos usar funciones en la cláusula WHERE. Como ves con DATETRUNC en SQL Server 2022 no es diferente.

          Conclusión

          SQL Server 2022 introdujo innovaciones y mejoras en nuestra capacidad para gestionar y manipular datos de manera eficiente. La función DATETRUNC es una adición bienvenida, simplificando la manipulación de fechas y mejorando la legibilidad y el rendimiento del código. Al empezar a usar esta nueva función, podremos escribir consultas más claras y un poco más eficientes, facilitando nuestro trabajo diario. Sin embargo no es oro todo lo que reluce y, como toda función, debemos evitar su uso en los filtros. 

          Si tenéis alguna duda o sugerencia, podéis dejarla en Twitter, por mail o dejarnos un mensaje en los comentarios. Y recuerda que también tenemos un grupo de Telegram y un canal de YouTube a los que te puede unir. ¡Hasta la próxima!

          Publicado por Roberto Carrancio en Cloud, Rendimiento, SQL Server, 0 comentarios