Categoría: Monitoreo y mantenimiento SQL
Cómo Obtener el tamaño de los archivos de Datos en SQL Server
Tamaño de los archivos de Datos en SQL Server, en la gestión de bases de datos SQL Server, es crucial para los DBAs conocer el tamaño y la ubicación de los archivos de datos de las bases de datos. Tener esta información no solo ayuda en la planificación del almacenamiento, sino que también facilita tareas de mantenimiento y mejora el rendimiento general de la base de datos. A continuación, te explico cómo un sencillo script SQL puede proporcionarte toda la información que necesitas sobre los archivos de datos en una base de datos específica.
¿Por qué es importante conocer el tamaño de los archivos de datos?
Los archivos de datos en SQL Server son fundamentales para el funcionamiento de la base de datos. Conocer su tamaño y ubicación te permite:
- Planificar y gestionar el almacenamiento de manera eficiente: Al entender cuánto espacio ocupan los archivos de datos, puedes asegurarte de que tienes suficiente capacidad en tu sistema de almacenamiento.
- Optimizar el rendimiento: Evitarás problemas de rendimiento asociados con el crecimiento descontrolado de los archivos.
- Facilitar la recuperación ante desastres: Sabrás exactamente qué archivos necesitas respaldar y restaurar en caso de una falla.
Desglose del Script SQL
El siguiente script SQL te proporcionará información detallada sobre los archivos de datos de una base de datos específica, excluyendo los archivos de log:
SELECT
name AS LogicalFileName,
physical_name AS PhysicalFileName,
size * 8 / 1024 AS SizeMB,
CASE type_desc
WHEN 'ROWS' THEN 'Data File (.mdf or .ndf)'
WHEN 'LOG' THEN 'Log File (.ldf)'
END AS FileType
FROM
sys.master_files
WHERE
type_desc = 'ROWS' -- Solo archivos de datos, excluye los logs
AND database_id = DB_ID('Nombre_De_Tu_Base_De_Datos'); -- Asegúrate de que el nombre de la base de datos sea correcto
Este script es sencillo pero poderoso. Extrae información relevante de la vista del sistema sys.master_files
, que contiene detalles sobre todos los archivos asociados con las bases de datos en el servidor SQL.

¿Qué información proporciona el script?
Al ejecutar el script, obtendrás una tabla con los siguientes datos:
- LogicalFileName: El nombre lógico del archivo tal como lo reconoce SQL Server. Este es el nombre que usarás en tus consultas y scripts.
- PhysicalFileName: La ruta completa y el nombre del archivo en el sistema operativo. Esta información es esencial para identificar la ubicación física de los datos.
- SizeMB: El tamaño del archivo en megabytes. Este dato es calculado multiplicando el tamaño del archivo en páginas de 8 KB por 8, y luego dividiéndolo por 1024 para convertirlo a MB.
- FileType: El tipo de archivo, que te indica si se trata de un archivo de datos (
mdf
ondf
) o de log. En este caso, el script está configurado para mostrar solo archivos de datos.
¿Cómo aplicar este script en tu día a día?
Este script es una herramienta versátil que puedes usar en diversas situaciones:
- Antes de realizar una migración de base de datos: Verifica el tamaño y la ubicación de los archivos de datos para planificar la migración de manera efectiva.
- Para la gestión de almacenamiento: Evalúa el espacio que ocupan tus archivos de datos y ajusta la configuración de autogrowth si es necesario para prevenir el crecimiento descontrolado.
- Durante auditorías de seguridad: Mantén un registro preciso de los archivos de datos para garantizar que se cumplan las políticas de seguridad y recuperación.
Consideraciones finales
Conocer el tamaño y la ubicación de los archivos de datos en SQL Server es una de las mejores prácticas en la administración de bases de datos. Este script es una herramienta esencial que te permite obtener esta información de manera rápida y precisa. Implementarlo en tu rutina diaria te ayudará a mantener un entorno de base de datos organizado, seguro y optimizado para el rendimiento.
Asegúrate de adaptar el script a la base de datos que estás utilizando cambiando el nombre de la base de datos en la línea DB_ID('Nombre_De_Tu_Base_De_Datos')
para que coincida con la base de datos que deseas analizar.
La Seguridad en SQL Server: Identificar Roles de Administrador a Nivel de Servidor
Extracción de las Vistas en SQL Server
Generando Script de creación de Usuarios en SQL Server
Monitorización del Espacio Utilizado en Tablas SQL: Un Script Esencial para DBAs
Monitorización del Espacio Utilizado en Tablas SQL: Un Script Esencial para DBAs
Monitorización del Espacio Utilizado en Tablas SQL, en la administración de bases de datos, uno de los aspectos más críticos es la gestión eficiente del espacio de almacenamiento. El script SQL que exploraremos en este blog es una herramienta poderosa para los DBAs, permitiendo obtener una visión detallada del uso del espacio en las tablas de una base de datos. Este script no solo proporciona información sobre el espacio reservado y utilizado, sino que también desglosa estos datos en componentes clave como el tamaño de los índices y el espacio no utilizado. Vamos a desglosar su estructura, funcionamiento y la importancia de cada componente.
sql:
SELECT a3.name + '.' + a2.name AS [name],
a1.rows AS [rows],
(a1.reserved + ISNULL(a4.reserved, 0)) * 8 AS [Reserved KB],
a1.data * 8 AS [Data KB],
(CASE
WHEN(a1.used + ISNULL(a4.used, 0)) > a1.data
THEN(a1.used + ISNULL(a4.used, 0)) - a1.data
ELSE 0
END) * 8 AS [Index_size KB],
(CASE
WHEN(a1.reserved + ISNULL(a4.reserved, 0)) > a1.used
THEN(a1.reserved + ISNULL(a4.reserved, 0)) - a1.used
ELSE 0
END) * 8 AS [unused KB],
CONVERT(DECIMAL(18, 2), (((a1.reserved + ISNULL(a4.reserved, 0)) * 8) - ((CASE
WHEN(a1.reserved + ISNULL(a4.reserved, 0)) > a1.used
THEN(a1.reserved + ISNULL(a4.reserved, 0)) - a1.used
ELSE 0
END) * 8)) / 1024.0 / 1024.0) AS [Table_used_Space GB]
FROM
(
SELECT ps.object_id,
SUM(CASE
WHEN(ps.index_id < 2)
THEN row_count
ELSE 0
END) AS [rows],
SUM(ps.reserved_page_count) AS reserved,
SUM(CASE
WHEN(ps.index_id < 2)
THEN(ps.in_row_data_page_count + ps.lob_used_page_count + ps.row_overflow_used_page_count)
ELSE(ps.lob_used_page_count + ps.row_overflow_used_page_count)
END) AS data,
SUM(ps.used_page_count) AS used
FROM sys.dm_db_partition_stats ps
GROUP BY ps.object_id
) AS a1
LEFT OUTER JOIN
(
SELECT it.parent_id,
SUM(ps.reserved_page_count) AS reserved,
SUM(ps.used_page_count) AS used
FROM sys.dm_db_partition_stats ps
INNER JOIN sys.internal_tables it ON(it.object_id = ps.object_id)
WHERE it.internal_type IN(202, 204)
GROUP BY it.parent_id
) AS a4 ON(a4.parent_id = a1.object_id)
INNER JOIN sys.all_objects a2 ON(a1.object_id = a2.object_id)
INNER JOIN sys.schemas a3 ON(a2.schema_id = a3.schema_id)
WHERE a2.type != N'S'
AND a2.type != N'IT'
ORDER BY [Table_used_Space GB] DESC, [rows] desc ;

1. Descripción del Script y su Funcionalidad
El script en cuestión realiza una consulta a las vistas de sistema de SQL Server para obtener información detallada sobre el uso del espacio en las tablas de la base de datos. La consulta principal utiliza las vistas sys.dm_db_partition_stats
, sys.all_objects
y sys.schemas
para recoger datos esenciales como:
- Nombre completo de la tabla: Incluyendo el esquema.
- Número de filas: Contando las filas presentes en cada tabla.
- Espacio reservado: Cantidad de espacio reservado para cada tabla, en KB.
- Espacio utilizado para datos: Espacio real utilizado por los datos.
- Tamaño de los índices: Espacio ocupado por los índices de las tablas.
- Espacio no utilizado: Espacio reservado pero no utilizado.
- Espacio total utilizado por la tabla en GB: Una conversión del espacio total reservado menos el espacio no utilizado.
2. Importancia del Script para un DBA
Este script es una herramienta indispensable para cualquier DBA por varias razones:
- Optimización del Almacenamiento: Permite identificar tablas que están utilizando más espacio del necesario. Esto es crucial en entornos donde el almacenamiento es costoso o limitado.
- Monitoreo de Crecimiento de Tablas: Ayuda a monitorear el crecimiento de las tablas a lo largo del tiempo, permitiendo prever cuándo será necesario realizar tareas de mantenimiento, como la reorganización de índices o la limpieza de datos no utilizados.
- Identificación de Ineficiencias: Al separar el espacio ocupado por índices del espacio ocupado por datos, los DBAs pueden identificar si ciertos índices están consumiendo más espacio de lo que deberían, lo que puede indicar la necesidad de reevaluar la estrategia de indexación.
- Mantenimiento Proactivo: El script facilita la identificación de tablas con grandes cantidades de espacio no utilizado, lo que puede ser un signo de ineficiencias que necesitan ser abordadas a través de la reorganización de tablas o la actualización de estadísticas.
3. Desglose de la Consulta SQL
Selección y Agregación de Datos
La consulta comienza con dos subconsultas que agregan datos a nivel de particiones y tablas internas:
- Primera Subconsulta: Se agrupan los datos por
object_id
para obtener el número de filas, el espacio reservado y utilizado, y el espacio ocupado por los datos en las tablas. - Segunda Subconsulta: Se enfoca en tablas internas específicas, identificando el espacio reservado y utilizado por ellas.
Combinación y Filtrado de Resultados
Los resultados de estas subconsultas se combinan usando una unión externa (LEFT JOIN) y se integran con las tablas de objetos (sys.all_objects
) y esquemas (sys.schemas
) para obtener los nombres de las tablas completos.
Cálculos de Espacio
El script realiza cálculos clave, incluyendo:
- Espacio Total Reservado en KB: Considera tanto el espacio reservado por la tabla como por las estructuras internas asociadas.
- Tamaño de los Índices: Calculado como la diferencia entre el espacio total utilizado y el espacio utilizado por los datos.
- Espacio No Utilizado: Calculado como la diferencia entre el espacio reservado y el espacio utilizado.
Ordenamiento de los Resultados
Finalmente, los resultados se ordenan por el espacio total utilizado en GB, seguido por el número de filas, lo que permite identificar rápidamente las tablas que están utilizando más espacio.
4. Conclusión
El uso eficiente del almacenamiento es un componente clave de la administración de bases de datos. El script SQL presentado aquí es una herramienta poderosa que permite a los DBAs obtener una visión completa del uso del espacio en sus bases de datos. Al proporcionar detalles granulares sobre cómo se utiliza el espacio en cada tabla, los DBAs pueden tomar decisiones informadas para optimizar el rendimiento y la eficiencia de la base de datos.
Conociendo las Trazas Habilitadas en SQL Server: Guía DBAs
SQL login failed for user ‘NT AUTHORITY \ ANONYMOUS LOGIN’
Conociendo las Trazas Habilitadas en SQL Server: Guía DBAs
Trazas Habilitadas en SQL Server, como Administrador de Bases de Datos (DBA), es fundamental conocer todos los aspectos que influyen en el comportamiento de tu servidor SQL. Uno de esos aspectos clave son las trazas habilitadas. Las trazas en SQL Server son configuraciones que alteran o mejoran el comportamiento del servidor para tareas específicas, como el diagnóstico o la depuración. En este blog, te mostraré cómo identificar todas las trazas que están activas en tu servidor SQL, utilizando comandos T-SQL.
¿Qué son las Trazas en SQL Server?
Las trazas en SQL Server, comúnmente conocidas como «trace flags», son configuraciones que permiten al DBA modificar temporalmente el comportamiento del servidor. Estas trazas son útiles para diagnosticar problemas, optimizar el rendimiento o cambiar la forma en que ciertas operaciones son manejadas por el motor de SQL Server.
Las trazas pueden estar habilitadas de manera global (afectando a todo el servidor) o solo para una sesión específica. Saber qué trazas están activas es crucial para entender el estado de tu servidor y evitar problemas inesperados.

¿Cómo Listar las Trazas Habilitadas en SQL Server?
Para conocer qué trace flags están habilitadas globalmente en tu servidor SQL, puedes utilizar el siguiente comando T-SQL:
DBCC TRACESTATUS(-1);
Desglose del Comando
- DBCC TRACESTATUS(-1): Este comando devuelve el estado de todas las trace flags que están habilitadas globalmente en el servidor. El parámetro
-1
indica que quieres revisar todas las trazas activas a nivel global.
¿Qué Información Proporciona?
Al ejecutar este comando, obtendrás una lista que incluye:
- TraceFlag: El número de la traza que está habilitada.
- Status: Indica si la traza está habilitada o deshabilitada.
- Global: Un valor que indica si la traza está habilitada globalmente en el servidor.
- Session: Un valor que indica si la traza está habilitada solo para la sesión actual.
Esta información es invaluable para cualquier DBA que necesite un control detallado sobre las configuraciones y optimizaciones aplicadas al servidor.
Cómo Listar las Trazas Habilitadas en la Conexión Actual
Además de conocer las trazas habilitadas globalmente, es posible que necesites saber cuáles están activas en tu conexión actual. Para ello, puedes utilizar el siguiente comando:
DBCC TRACESTATUS;
Desglose del Comando
- DBCC TRACESTATUS: A diferencia del comando anterior, este no incluye un parámetro específico. Esto significa que devolverá el estado de las trace flags que están habilitadas en la conexión actual que estás utilizando para ejecutar el comando.
¿Qué Información Proporciona?
El resultado te mostrará las trace flags activas solo en tu sesión actual. Esta información es útil para entender cómo tu conexión específica puede estar siendo influenciada por determinadas configuraciones temporales.
Buenas Prácticas en la Gestión de Trace Flags
El uso de trace flags es una herramienta poderosa, pero debe ser manejada con cuidado. Aquí algunas buenas prácticas para los DBAs:
- Documenta Todas las Trazas Activas: Mantén un registro detallado de las trace flags que habilitas, junto con la razón y el impacto esperado. Esto te ayudará a recordar por qué se aplicaron ciertas configuraciones y a revertir cambios si es necesario.
- Evalúa el Impacto Antes de Habilitar Trazas: Algunas trace flags pueden alterar significativamente el comportamiento del servidor. Asegúrate de probarlas en un entorno de desarrollo o prueba antes de aplicarlas en producción.
- Monitorea el Rendimiento: Después de habilitar una traza, monitorea el rendimiento del servidor para asegurarte de que no está causando problemas inesperados.
- Revisa Regularmente las Trazas Activas: Las necesidades de tu servidor pueden cambiar con el tiempo. Es una buena práctica revisar periódicamente las trace flags activas para asegurarte de que aún son necesarias.
Conclusión
La gestión adecuada de las trace flags es esencial para mantener un entorno SQL Server optimizado y seguro. Como DBA, es tu responsabilidad conocer qué trazas están habilitadas, tanto a nivel global como en sesiones específicas, y entender su impacto en el servidor. Utilizando los comandos DBCC TRACESTATUS(-1)
y DBCC TRACESTATUS
, puedes obtener una visión clara de estas configuraciones y tomar decisiones informadas para gestionar tu entorno SQL.
No subestimes el poder de las trace flags, pero manéjalas con cuidado y siempre con una comprensión clara de lo que están haciendo en tu servidor. ¡Mantente al tanto de nuestras futuras publicaciones para más consejos y trucos sobre la administración de SQL Server!
Convertir una Fecha y Hora a Solo Fecha en SQL
La Seguridad en SQL Server: Identificar Roles de Administrador a Nivel de Servidor
Procedimientos Almacenados Temporales en SQL Server
Error 15025 SQL Server. The server principal already exists
Sacar permisos de Base de Datos SQL scripts
La Seguridad en SQL Server: Identificar Roles de Administrador a Nivel de Servidor
La Seguridad en SQL Server es uno de los aspectos más críticos que un Administrador de Bases de Datos (DBA) debe dominar. Mantener un entorno seguro no solo protege los datos sensibles, sino que también garantiza la integridad y disponibilidad del sistema. Una de las tareas esenciales de un DBA es conocer qué cuentas de inicio de sesión (login) tienen asignados los roles de administrador del sistema (sysadmin) o administrador de seguridad (security admin) a nivel de servidor. En este blog, te mostraré cómo identificar estos roles utilizando una simple consulta SQL.
La Seguridad en SQL Server, conocer los Roles de Seguridad
En un entorno de SQL Server, los roles de servidor determinan qué tipo de acceso y privilegios tiene un usuario sobre el servidor. Dos de los roles más poderosos son:
- Sysadmin: Este rol otorga control total sobre el servidor SQL. Un usuario con este rol puede realizar cualquier tarea, incluyendo la administración de bases de datos, seguridad, y configuración del servidor.
- Securityadmin: Este rol permite a un usuario gestionar la seguridad del servidor. Un usuario con este rol puede crear y gestionar cuentas de inicio de sesión, asignar permisos, y cambiar contraseñas.
Conocer quién tiene estos roles es fundamental para mantener la seguridad y el control sobre el entorno de SQL Server. Una mala gestión de estos roles podría llevar a accesos no autorizados, lo que comprometería la seguridad de la base de datos.
¿Cómo Identificar Usuarios con Roles de Sysadmin o Security Admin?
Para identificar qué cuentas de inicio de sesión tienen asignados los roles de sysadmin o securityadmin, puedes utilizar la siguiente consulta SQL:
SELECT l.name, l.denylogin, l.isntname, l.isntgroup, l.isntuser
FROM master.dbo.syslogins l
WHERE l.sysadmin = 1 OR l.securityadmin = 1;

Desglose de la Consulta
Esta consulta accede a la tabla syslogins
en la base de datos master
, la cual contiene información sobre todas las cuentas de inicio de sesión configuradas en el servidor SQL. Aquí te explico lo que hace cada parte de la consulta:
- SELECT l.name, l.denylogin, l.isntname, l.isntgroup, l.isntuser: Este comando selecciona varias columnas de la tabla
syslogins
.l.name
: Muestra el nombre de la cuenta de inicio de sesión.l.denylogin
: Indica si el inicio de sesión está denegado.l.isntname
,l.isntgroup
,l.isntuser
: Estos campos muestran si el inicio de sesión es una cuenta de Windows NT, un grupo de Windows NT, o un usuario de Windows NT, respectivamente.
- FROM master.dbo.syslogins l: Especifica la tabla
syslogins
en la base de datosmaster
como la fuente de datos. - WHERE l.sysadmin = 1 OR l.securityadmin = 1: Este filtro asegura que solo se muestren las cuentas de inicio de sesión que tienen asignado el rol de sysadmin o securityadmin.
¿Qué Información Proporciona la Consulta?
Al ejecutar esta consulta, obtendrás una lista de todos los usuarios que tienen un control significativo sobre el servidor SQL, ya sea total (sysadmin) o sobre aspectos de seguridad (securityadmin). Esta información es crucial para auditar quién tiene privilegios elevados y garantizar que solo los usuarios adecuados tienen acceso a estas funciones críticas.
Buenas Prácticas de Seguridad
Identificar estos roles es solo el primer paso. Aquí te dejo algunas buenas prácticas para gestionar la seguridad en SQL Server:
- Auditorías Regulares: Realiza auditorías periódicas para revisar qué usuarios tienen asignados roles críticos. Esto ayuda a detectar y corregir posibles problemas de seguridad.
- Principio de Menor Privilegio: Asegúrate de que cada usuario tenga solo los permisos necesarios para realizar su trabajo. Evita otorgar roles como sysadmin o securityadmin a menos que sea absolutamente necesario.
- Revisión de Cuentas Inactivas: Elimina o desactiva cuentas que ya no se utilizan para reducir el riesgo de acceso no autorizado.
- Monitoreo Continuo: Utiliza herramientas de monitoreo para rastrear cualquier cambio en los permisos o en la configuración de seguridad.
Conclusión
La seguridad en SQL Server es un aspecto esencial que no se debe tomar a la ligera. Identificar qué cuentas de inicio de sesión tienen los roles de sysadmin o securityadmin te permite mantener un control adecuado sobre tu servidor y prevenir accesos no autorizados. Con la consulta SQL que te mostré, puedes obtener esta información de manera rápida y eficiente, asegurando así que solo los usuarios correctos tengan acceso a las funciones críticas del servidor.
Cuentos de miedo para influencers
Para que una tabla tenga FULLTEXT SQL
Guía Completa para Implementar FULLTEXT en SQL
Dependencia de Usuarios en SQL: Guía Completa
Conociendo la Configuración a Nivel de Servidor en SQL Server
Como administradores de bases de datos (DBA), una de nuestras responsabilidades clave es comprender y manejar la configuración a nivel de servidor de SQL Server. Estas configuraciones no solo controlan varias características del servidor, sino que también pueden influir significativamente en su rendimiento y seguridad. En esta entrada, exploraremos cómo obtener toda la información relacionada con la configuración del servidor utilizando una simple consulta SQL.
¿Por Qué Es Importante la Configuración a Nivel de Servidor?
La configuración a nivel de servidor define cómo se comporta SQL Server en su totalidad, afectando aspectos como la memoria, la seguridad, la ejecución de consultas y más. Conocer estos parámetros permite a los DBAs ajustar el servidor para optimizar el rendimiento, asegurar la integridad de los datos y cumplir con los requisitos de seguridad.
Recuperando Información de Configuración del Servidor
Para obtener un listado completo de las configuraciones del servidor, puedes ejecutar la siguiente consulta T-SQL:
SELECT * FROM sys.configurations ORDER BY name;

¿Qué Hace Esta Consulta?
La consulta selecciona todas las filas de la vista del sistema sys.configurations
, que contiene información detallada sobre cada configuración del servidor. Al ordenar los resultados por el nombre de la configuración (ORDER BY name
), se facilita la búsqueda y análisis de parámetros específicos.
Desglose de la Vista sys.configurations
La vista sys.configurations
proporciona una variedad de columnas que contienen información valiosa sobre cada configuración. Aquí se describen algunas de las columnas más importantes:
- Name: El nombre de la opción de configuración.
- Value: El valor actual de la configuración.
- Minimum y Maximum: Los valores mínimo y máximo permitidos para la configuración.
- Description: Una descripción breve de lo que hace la configuración.
- Is_dynamic: Indica si la configuración puede cambiarse sin reiniciar el servidor.
- Is_advanced: Señala si es una opción avanzada.
Ejemplo de Uso Práctico
Supongamos que necesitas verificar las configuraciones relacionadas con la memoria. Al ejecutar la consulta, puedes buscar parámetros como ‘max server memory’ o ‘min server memory’ en los resultados ordenados, permitiéndote ajustar estos valores para optimizar el uso de memoria del servidor.
Ajustando Configuraciones del Servidor
Una vez que has identificado las configuraciones que necesitan ajustes, puedes modificarlas usando el comando sp_configure
. Aquí tienes un ejemplo de cómo cambiar la configuración de memoria máxima del servidor:
EXEC sp_configure 'show advanced options', 1;
RECONFIGURE;
EXEC sp_configure 'max server memory', 4096;
RECONFIGURE;
Explicación del Ejemplo
- Habilitar Opciones Avanzadas:sqlCopiar código
EXEC sp_configure 'show advanced options', 1; RECONFIGURE;
Esto permite cambiar configuraciones avanzadas que no están disponibles por defecto. - Modificar la Configuración:sqlCopiar código
EXEC sp_configure 'max server memory', 4096; RECONFIGURE;
Aquí estamos configurando la memoria máxima del servidor a 4096 MB. Después de ejecutar el comandosp_configure
, usamosRECONFIGURE
para aplicar el cambio.
Importancia de Documentar y Monitorear
Es crucial documentar cualquier cambio en la configuración del servidor para futuras referencias y auditorías. Además, monitorear regularmente estas configuraciones ayuda a identificar problemas potenciales y mantener el servidor funcionando de manera óptima.
Herramientas de Monitoreo
SQL Server ofrece varias herramientas y vistas dinámicas de gestión (DMV) para monitorear el estado y el rendimiento del servidor. Utilizar estas herramientas junto con sys.configurations
puede proporcionar una visión completa del entorno de tu SQL Server.
Conclusión
Comprender y gestionar la configuración a nivel de servidor en SQL Server es esencial para cualquier DBA. La consulta SELECT * FROM sys.configurations ORDER BY name
te proporciona una vista completa de todos los parámetros configurables, permitiéndote ajustar y optimizar el servidor según las necesidades de tu entorno.
Descarga de SQL Server Management Studio (SSMS)
¿Qué son las vistas SQL Server? Una Guía Completa
Información del Servidor SQL Server con T-SQL
Información del Servidor SQL Server, en la administración de bases de datos SQL Server, es fundamental conocer los detalles del entorno en el que estás trabajando. Esto incluye información sobre el nombre del host, la instancia actual, la edición, el tipo de servidor, el nivel del producto y el número de versión. En este blog, te mostraré cómo usar una simple consulta T-SQL para obtener toda esta información de una conexión actual a SQL Server.
¿Qué Información Puedes Obtener del Servidor SQL Server?
La consulta T-SQL que presentaremos recupera los siguientes datos clave del servidor SQL actual:
- Hostname: El nombre de la máquina que hospeda el servidor SQL.
- Instance Name: El nombre de la instancia SQL Server.
- Edition: Indica si la arquitectura es de 32 bits o 64 bits.
- Product Level: Muestra el nivel del producto, como RTM o el Service Pack.
- Server Type: Indica si el servidor SQL es un servidor agrupado (clustered) o independiente (standalone).
- Version Number: El número de versión del servidor SQL.
La Consulta T-SQL
A continuación, te presento la consulta T-SQL que puedes ejecutar para obtener esta valiosa información:
SELECT
SERVERPROPERTY('MachineName') as Host,
SERVERPROPERTY('InstanceName') as Instance,
SERVERPROPERTY('Edition') as Edition, /* muestra 32 bits o 64 bits */
SERVERPROPERTY('ProductLevel') as ProductLevel, /* RTM o SP1, etc. */
CASE SERVERPROPERTY('IsClustered') WHEN 1 THEN 'CLUSTERED' ELSE 'STANDALONE' END as ServerType,
@@VERSION as VersionNumber

Desglose de la Consulta
- Hostname y Instance Name:sqlCopiar código
SERVERPROPERTY('MachineName') as Host, SERVERPROPERTY('InstanceName') as Instance,
Estas propiedades devuelven el nombre del host y de la instancia de SQL Server actual. - Edition:sqlCopiar código
SERVERPROPERTY('Edition') as Edition,
La propiedad ‘Edition’ te muestra si el servidor es de 32 bits o 64 bits, además de otros detalles sobre la edición de SQL Server. - Product Level:sqlCopiar código
SERVERPROPERTY('ProductLevel') as ProductLevel,
La propiedad ‘ProductLevel’ indica el nivel del producto, como la versión RTM (Release to Manufacturing) o un Service Pack específico. - Server Type:sqlCopiar código
CASE SERVERPROPERTY('IsClustered') WHEN 1 THEN 'CLUSTERED' ELSE 'STANDALONE' END as ServerType,
Este caso condicional verifica si el servidor SQL es parte de un clúster. Si ‘IsClustered’ devuelve 1, el servidor es agrupado; de lo contrario, es independiente. - Version Number:sqlCopiar código
@@VERSION as VersionNumber
Finalmente, @@VERSION devuelve la versión completa de SQL Server, incluyendo el número de versión, la fecha de compilación y la arquitectura del sistema operativo.
Ejecución de la Consulta
Para ejecutar esta consulta, simplemente abre SQL Server Management Studio (SSMS), conecta a tu servidor SQL y pega la consulta en una nueva ventana de consulta. Al ejecutar la consulta, recibirás un conjunto de resultados con toda la información detallada.
Conclusión
Conocer los detalles de tu entorno SQL Server es esencial para la administración y el mantenimiento eficientes de tus bases de datos. Esta sencilla consulta T-SQL te proporciona una visión rápida y completa de los aspectos clave de tu servidor SQL, ayudándote a tomar decisiones informadas y a resolver problemas de manera más efectiva.
Script para saber el histórico de queries ejecutados SQL
Guía Completa para Implementar FULLTEXT en SQL
Fragmentación FULLTEXT, es una actividad y característica poderosa de SQL que permite realizar búsquedas eficientes y relevantes en grandes volúmenes de datos textuales. A continuación, te presentamos ejemplos detallados y explicados sobre cómo crear y gestionar catálogos e índices FULLTEXT en SQL Server.
Creación de un Catálogo FULLTEXT
Un catálogo FULLTEXT es un contenedor lógico que organiza los índices FULLTEXT. El primer paso para utilizar FULLTEXT es crear un catálogo.
Crear un Catálogo FULLTEXT
La sintaxis para crear un catálogo FULLTEXT es la siguiente:
CREATE FULLTEXT CATALOG [catalog_name] WITH ACCENT_SENSITIVITY = OFF
AUTHORIZATION [dbo];
GO
- [catalog_name]: Nombre del catálogo FULLTEXT.
- ACCENT_SENSITIVITY: Define si el catálogo es sensible a acentos. En este caso, está desactivado (
OFF
). - AUTHORIZATION [dbo]: Define el propietario del catálogo. El propietario por defecto es
dbo
.
Ejemplo de Creación de Catálogo FULLTEXT
CREATE FULLTEXT CATALOG [t1_texto] WITH ACCENT_SENSITIVITY = OFF
AUTHORIZATION [dbo];
GO
En este ejemplo, creamos un catálogo llamado t1_texto
con sensibilidad a acentos desactivada y dbo
como propietario.
Creación de un Índice FULLTEXT
Una vez creado el catálogo, el siguiente paso es crear un índice FULLTEXT en una tabla específica.
Crear un Índice FULLTEXT
La sintaxis para crear un índice FULLTEXT es la siguiente:
CREATE FULLTEXT INDEX ON [schema_name].[table_name]
KEY INDEX [PK_name]
ON ([catalog_name])
WITH (CHANGE_TRACKING AUTO);
GO
USE [database_name];
GO
ALTER FULLTEXT INDEX ON [schema_name].[table_name] ADD ([column_name]);
GO
ALTER FULLTEXT INDEX ON [schema_name].[table_name] ENABLE;
GO
- [schema_name].[table_name]: Esquema y nombre de la tabla.
- KEY INDEX [PK_name]: Nombre de la clave primaria utilizada como clave única para el índice FULLTEXT.
- [catalog_name]: Nombre del catálogo FULLTEXT donde se almacenará el índice.
- CHANGE_TRACKING AUTO: Habilita el seguimiento automático de cambios para mantener actualizado el índice FULLTEXT.
- [database_name]: Nombre de la base de datos.
- [column_name]: Nombre de la columna a añadir al índice FULLTEXT.
Ejemplo de Creación de Índice FULLTEXT
CREATE FULLTEXT INDEX ON [dbo].[t1]
KEY INDEX [PK_c1]
ON ([t1_texto])
WITH (CHANGE_TRACKING AUTO);
GO
USE [BBDD_donde_se_creo];
GO
ALTER FULLTEXT INDEX ON [dbo].[t1] ADD ([c2]);
GO
ALTER FULLTEXT INDEX ON [dbo].[t1] ENABLE;
GO
En este ejemplo, creamos un índice FULLTEXT en la tabla t1
del esquema dbo
utilizando la clave primaria PK_c1
. El índice se almacenará en el catálogo t1_texto
y tendrá seguimiento automático de cambios. Luego, añadimos la columna c2
al índice y lo habilitamos.
Mantenimiento de Índices FULLTEXT
Con el tiempo, los índices FULLTEXT pueden fragmentarse, lo que puede afectar el rendimiento de las consultas. SQL Server proporciona comandos para reorganizar y reconstruir índices FULLTEXT.
Reorganizar y Recrear Índices FULLTEXT
Para reorganizar y reconstruir índices FULLTEXT, utiliza las siguientes consultas:
Reorganizar el Catálogo
La reorganización de un catálogo FULLTEXT compacta el índice y mejora su rendimiento.
ALTER FULLTEXT CATALOG [catalog_name] REORGANIZE;
GO
- [catalog_name]: Nombre del catálogo FULLTEXT.
Reconstruir el Catálogo
La reconstrucción de un catálogo FULLTEXT recrea completamente el índice, eliminando la fragmentación.
ALTER FULLTEXT CATALOG [catalog_name] REBUILD;
GO
- [catalog_name]: Nombre del catálogo FULLTEXT.
Ejemplo de Reorganización y Recreación
Para identificar los fragmentos en los índices FULLTEXT, puedes ejecutar la siguiente consulta:
SELECT t.name, f.*
FROM sys.fulltext_index_fragments f, sys.tables t
WHERE t.object_id = f.table_id;
GO
Luego, para reorganizar y reconstruir el catálogo t1_texto
, ejecuta:
ALTER FULLTEXT CATALOG [t1_texto] REORGANIZE;
GO
ALTER FULLTEXT CATALOG [t1_texto] REBUILD;
GO
Comprobación de la Fragmentación en Índices FULLTEXT en SQL Server
La fragmentación en los índices FULLTEXT puede afectar significativamente el rendimiento de las consultas. Por eso, es importante monitorear y gestionar la fragmentación de estos índices. A continuación, presentamos una consulta detallada para comprobar la fragmentación de todos los índices FULLTEXT en una base de datos.
Consulta para Comprobar la Fragmentación FULLTEXT
La siguiente consulta recupera información sobre la fragmentación de todos los índices FULLTEXT en la base de datos, incluyendo el ID del catálogo, el nombre del catálogo, el estado de seguimiento de cambios, el ID del objeto, el nombre del objeto, el número de fragmentos, el tamaño total del índice en MB, el tamaño del fragmento más grande en MB y el porcentaje de fragmentación.
SELECT
c.fulltext_catalog_id,
c.name AS fulltext_catalog_name,
i.change_tracking_state,
i.object_id,
OBJECT_SCHEMA_NAME(i.object_id) + '.' + OBJECT_NAME(i.object_id) AS object_name,
f.num_fragments,
f.fulltext_mb,
f.largest_fragment_mb,
100.0 * (f.fulltext_mb - f.largest_fragment_mb) / NULLIF(f.fulltext_mb, 0) AS fulltext_fragmentation_in_percent
--INTO #fulltextFragmentationDetails
FROM
sys.fulltext_catalogs c
JOIN
sys.fulltext_indexes i ON i.fulltext_catalog_id = c.fulltext_catalog_id
JOIN (
-- Computa los datos de fragmentación para cada tabla con un índice FULLTEXT
SELECT
table_id,
COUNT(*) AS num_fragments,
CONVERT(DECIMAL(9,2), SUM(data_size / (1024.0 * 1024.0))) AS fulltext_mb,
CONVERT(DECIMAL(9,2), MAX(data_size / (1024.0 * 1024.0))) AS largest_fragment_mb
FROM
sys.fulltext_index_fragments
GROUP BY
table_id
) f ON f.table_id = i.object_id;
Explicación de la Consulta
- sys.fulltext_catalogs: Esta tabla del sistema contiene información sobre los catálogos FULLTEXT en la base de datos.
- sys.fulltext_indexes: Esta tabla del sistema contiene información sobre los índices FULLTEXT en la base de datos.
- sys.fulltext_index_fragments: Esta tabla del sistema contiene información sobre los fragmentos de los índices FULLTEXT.
La consulta realiza los siguientes pasos:
- Selecciona el ID del catálogo, el nombre del catálogo y el estado de seguimiento de cambios desde
sys.fulltext_catalogs
ysys.fulltext_indexes
. - Realiza una unión con una subconsulta que calcula el número de fragmentos, el tamaño total del índice en MB y el tamaño del fragmento más grande en MB para cada tabla con un índice.
- Calcula el porcentaje de fragmentación utilizando la fórmula:
100.0 * (f.fulltext_mb - f.largest_fragment_mb) / NULLIF(f.fulltext_mb, 0)
. Esta fórmula determina qué tan fragmentado está el índice al comparar el tamaño total del índice con el tamaño del fragmento más grande.
Uso de la Información
La información obtenida de esta consulta puede ayudarte a identificar los índices FULLTEXT que necesitan ser reorganizados o reconstruidos.
- Número de Fragmentos (num_fragments): Un alto número de fragmentos puede indicar que el índice está fragmentado y necesita mantenimiento.
- Tamaño Total del Índice (fulltext_mb): Indica el tamaño total del índice en megabytes.
- Tamaño del Fragmento Más Grande (largest_fragment_mb): Indica el tamaño del fragmento más grande en el índice.
- Porcentaje de Fragmentación (fulltext_fragmentation_in_percent): Un alto porcentaje de fragmentación indica que el índice está desfragmentado y puede beneficiarse de una reorganización o reconstrucción.
Ejemplo de Mantenimiento de Índices, Fragmentación FULLTEXT
Basado en la información de fragmentación, puedes decidir reorganizar o reconstruir los catálogos FULLTEXT. A continuación se muestran ejemplos de cómo realizar estas operaciones:
Reorganizar un Catálogo
ALTER FULLTEXT CATALOG [nombre_del_catalogo] REORGANIZE;
GO
Reconstruir un Catálogo
ALTER FULLTEXT CATALOG [nombre_del_catalogo] REBUILD;
GO
Estos comandos ayudan a mantener los índices FULLTEXT optimizados, mejorando el rendimiento de las consultas de texto completo.
Conclusión
FULLTEXT es una herramienta poderosa para mejorar la búsqueda y gestión de grandes volúmenes de datos textuales en SQL. Al seguir estos pasos y ejemplos, puedes crear, gestionar y mantener eficientemente tus catálogos e índices. Mantén tus índices optimizados y actualizados para garantizar un rendimiento óptimo y resultados de búsqueda precisos.
Monitorear y gestionar la fragmentación de los índices es crucial para mantener el rendimiento óptimo de tus consultas SQL. Utiliza la consulta proporcionada para obtener una visión detallada de la fragmentación y aplica las acciones necesarias para reorganizar o reconstruir los índices según sea necesario.
Procedimientos Almacenados Temporales en SQL Server
Generando Script de creación de Usuarios en SQL Server
Descarga de SQL Server Management Studio (SSMS)
Sacar permisos de Base de Datos SQL scripts
Identificar Objetos No Utilizados en su Base de Datos SQL Server
La gestión eficiente de una base de datos SQL Server incluye la identificación y eliminación de objetos no utilizados. Estos objetos pueden ser tablas, vistas, procedimientos almacenados, funciones, índices, entre otros. Mantener una base de datos limpia y eficiente no solo mejora el rendimiento, sino que también reduce el riesgo de errores y facilita el mantenimiento. A continuación, exploraremos diversas técnicas para identificar estos objetos no utilizados en SQL Server.
Métodos para Identificar Objetos No Utilizados
1. Uso de SQL Server Profiler
SQL Server Profiler es una herramienta poderosa para capturar y analizar eventos en SQL Server. Se puede utilizar para monitorear la actividad de la base de datos y determinar qué objetos están siendo utilizados.
Pasos para usar SQL Server Profiler:
- Configuración del Profiler:
- Abre SQL Server Profiler y crea una nueva traza.
- Configura los eventos que deseas capturar, como RPC, SQL, y SP, que rastrean la ejecución de procedimientos almacenados, lotes SQL y procedimientos de almacenamiento.
- Ejecución de la traza:
- Ejecuta la traza durante un período de tiempo representativo, asegurándote de que todas las funcionalidades de la aplicación que se conecta a la base de datos se utilicen.
- Análisis de los resultados:
- Analiza los resultados capturados para identificar qué objetos han sido utilizados y cuáles no. Si un objeto no aparece en los resultados, es posible que no esté en uso.
2. Método de Cambio de Nombre y Observación
Otra técnica consiste en cambiar el nombre de los objetos que se sospecha no están en uso y observar si esto provoca errores en la aplicación.
Pasos para implementar este método:
- Identificación y renombramiento:
- Cambia el nombre de un objeto, como un procedimiento almacenado o una tabla, añadiendo un prefijo o sufijo (por ejemplo,
_old
).
- Cambia el nombre de un objeto, como un procedimiento almacenado o una tabla, añadiendo un prefijo o sufijo (por ejemplo,
- Monitoreo de errores:
- Observa la base de datos y la aplicación durante un período de tiempo para ver si el cambio de nombre provoca errores o fallos.
- Restauración o eliminación:
- Si no se producen errores después de un tiempo razonable, es probable que el objeto no se esté utilizando. Puedes proceder a eliminarlo o archivarlo.
3. Uso de Consultas SQL para Monitoreo
Una alternativa más técnica es usar consultas SQL para monitorear el uso de los objetos a través de las vistas dinámicas de gestión (DMVs).
Ejemplo de consulta SQL:
SELECT source_code, last_execution_time
FROM sys.dm_exec_query_stats as stats
CROSS APPLY (
SELECT text as source_code
FROM sys.dm_exec_sql_text(sql_handle)
) AS query_text
ORDER BY last_execution_time DESC;
Explicación de la consulta:
- Esta consulta obtiene el código fuente de las consultas ejecutadas y la última vez que se ejecutaron.
- Analiza los resultados para ver qué objetos han sido utilizados recientemente.
- Al monitorear los resultados durante un período, puedes identificar objetos que no se utilizan, ya que no aparecerán en los resultados.
Otros Scripts Útiles para Identificar Objetos No Utilizados
1. Identificar Tablas No Utilizadas
SELECT t.name AS table_name,
ius.user_seeks,
ius.user_scans,
ius.user_lookups,
ius.user_updates
FROM sys.tables AS t
LEFT JOIN sys.dm_db_index_usage_stats AS ius
ON t.[object_id] = ius.[object_id]
WHERE ius.[object_id] IS NULL
OR (ius.user_seeks = 0
AND ius.user_scans = 0
AND ius.user_lookups = 0
AND ius.user_updates = 0);
Explicación:
- Esta consulta busca tablas que no tienen actividad registrada en la vista
sys.dm_db_index_usage_stats
, lo que indica que no han sido leídas o modificadas.
2. Identificar Procedimientos Almacenados No Utilizados
SELECT p.name AS proc_name,
ps.last_execution_time
FROM sys.procedures AS p
LEFT JOIN sys.dm_exec_procedure_stats AS ps
ON p.[object_id] = ps.[object_id]
WHERE ps.[object_id] IS NULL
OR ps.last_execution_time IS NULL;
Explicación:
- Esta consulta lista los procedimientos almacenados que no tienen un registro de ejecución reciente en
sys.dm_exec_procedure_stats
.
3. Identificar Vistas No Utilizadas
SELECT v.name AS view_name,
SUM(ius.user_seeks + ius.user_scans + ius.user_lookups + ius.user_updates) AS total_usage
FROM sys.views AS v
LEFT JOIN sys.dm_db_index_usage_stats AS ius
ON v.[object_id] = ius.[object_id]
GROUP BY v.name
HAVING SUM(ius.user_seeks + ius.user_scans + ius.user_lookups + ius.user_updates) = 0;
Explicación:
- Esta consulta identifica vistas que no han sido utilizadas para búsquedas, escaneos, consultas o actualizaciones.
Ejemplos Prácticos
Ejemplo 1: Uso del SQL Server Profiler
Imagina que tienes una base de datos para una aplicación de gestión de inventarios. Quieres saber si un procedimiento almacenado llamado sp_UpdateInventory
todavía se utiliza.
- Configura el Profiler para capturar la ejecución de
sp_UpdateInventory
. - Ejecuta la aplicación y utiliza todas las funcionalidades relacionadas con el inventario.
- Analiza los resultados: Si
sp_UpdateInventory
no aparece en la traza, es posible que ya no se esté utilizando.
Ejemplo 2: Método de Cambio de Nombre
Tienes una tabla llamada TemporaryData
que sospechas que ya no se usa.
- Renombra la tabla a
TemporaryData_old
. - Monitorea la aplicación durante un mes.
- Observa los errores: Si no hay errores relacionados con
TemporaryData
, puedes eliminarla de manera segura.
Ejemplo 3: Consulta SQL
Quieres saber si la función fn_CalculateDiscount
se está utilizando.
- Ejecuta la consulta SQL proporcionada anteriormente.
- Revisa los resultados para buscar
fn_CalculateDiscount
. - Si no aparece en los resultados después de un período de monitoreo, probablemente no se esté utilizando.
Conclusión
Identificar y eliminar objetos no utilizados en SQL Server es esencial para mantener una base de datos eficiente y libre de desorden. Ya sea que utilices SQL Server Profiler, métodos de cambio de nombre o consultas SQL, cada técnica tiene sus ventajas y puede ser adecuada dependiendo del contexto y los recursos disponibles.
Error 15025 SQL Server. The server principal already exists
Comando Read Linux: Cómo Hacer Peticiones al Usuario en Scripting
UPDATE JOIN en SQL para Actualizar Tablas Relacionadas
Extracción de las Vistas en SQL Server
Extracción de Vistas en SQL Server, la administración de bases de datos no es solo cuestión de almacenar y recuperar datos de manera eficiente. También es fundamental garantizar que la información esté protegida y que solo las personas autorizadas puedan acceder a ella. Una de las formas más efectivas de controlar el acceso es a través de la gestión de vistas y el uso de comandos GRANT
en SQL Server. En este artículo, exploraremos cómo extraer vistas y conceder permisos de manera segura y eficiente.
¿Qué es una Vista en SQL Server?
Una vista es una consulta almacenada que proporciona una manera de ver y trabajar con los datos sin necesidad de interactuar directamente con las tablas subyacentes. Las vistas pueden simplificar las consultas complejas, proteger la información sensible y facilitar la administración de permisos.
Ejemplo de una Vista
Imaginemos que tenemos una tabla llamada empleados
con las columnas nombre
, salario
y departamento
. Podemos crear una vista para ver solo los nombres y departamentos de los empleados:
CREATE VIEW vista_empleados
AS
SELECT nombre, departamento
FROM empleados;
Extracción de las Vistas en SQL Server
A medida que nuestra base de datos crece, puede ser necesario listar todas las vistas creadas a partir de una fecha específica. Esto es útil para auditar cambios recientes o para asegurarse de que todas las vistas tengan los permisos adecuados.
Consulta para Extraer Vistas
El siguiente script permite extraer todas las vistas creadas después del 20 de septiembre de 2021, que no son vistas internas de Microsoft, y ordenarlas por fecha de creación de manera descendente:
SELECT *, 'GRANT VIEW DEFINITION ON [' + s.name + '].[' + o.name + '] TO [db_view]'
FROM sys.objects o
JOIN sys.schemas s ON o.schema_id = s.schema_id
WHERE type = 'V' -- objeto vista
AND create_date > '2021-09-20' -- fecha aproximada a partir de cuando se crean las nuevas vistas
AND is_ms_shipped = 0 -- que NO son vistas internas de Microsoft
ORDER BY create_date DESC;
Este script no solo extrae la información de las vistas, sino que también genera el comando GRANT
correspondiente para otorgar permisos de definición de vista.

Otorgar Permisos con el Comando GRANT
En SQL Server, los permisos se gestionan mediante el uso del comando GRANT
. Este comando permite conceder varios tipos de permisos, como SELECT
, INSERT
, UPDATE
, DELETE
, y más. En el contexto de las vistas, uno de los permisos más relevantes es VIEW DEFINITION
.
¿Qué es VIEW DEFINITION
?
El permiso VIEW DEFINITION
permite a un usuario ver la definición de una vista, es decir, ver el código SQL que la compone. Esto es particularmente útil para desarrolladores y administradores que necesitan entender la estructura de las vistas sin modificar los datos subyacentes.
Ejemplo de Comando GRANT
Supongamos que queremos otorgar permisos de definición de vista a un usuario llamado db_view
para la vista vista_empleados
. El comando sería:
GRANT VIEW DEFINITION ON dbo.vista_empleados TO db_view;
Este comando es sencillo, pero cuando se tiene una base de datos con muchas vistas, automatizar la generación de estos comandos puede ahorrar mucho tiempo y reducir errores.
Automatización de la Gestión de Permisos
El script proporcionado al inicio genera automáticamente los comandos GRANT
para cada vista que cumple con los criterios especificados. Esto facilita enormemente la gestión de permisos, especialmente en entornos de desarrollo y pruebas donde las vistas pueden cambiar con frecuencia.
Ejemplo Completo
A continuación, se muestra un ejemplo completo que combina la extracción de vistas y la generación de comandos GRANT
:
SELECT *, 'GRANT VIEW DEFINITION ON [' + s.name + '].[' + o.name + '] TO [db_view]'
FROM sys.objects o
JOIN sys.schemas s ON o.schema_id = s.schema_id
WHERE type = 'V'
AND create_date > '2021-09-20'
AND is_ms_shipped = 0
ORDER BY create_date DESC;
Este script proporciona una lista de todas las vistas junto con los comandos necesarios para otorgar permisos. Solo necesita copiar y ejecutar los comandos generados.
object_id | name | schema_id | parent_object_id | type | type_desc | create_date | modify_date | is_ms_shipped | is_published | is_schema_published | schema_id | schema_name | GRANT_VIEW_COMMAND |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
545673010 | vista_ventas | 1 | 0 | V | VIEW | 2022-03-15 10:30:45 | 2022-03-15 10:30:45 | 0 | 0 | 0 | 1 | dbo | GRANT VIEW DEFINITION ON [dbo].[vista_ventas] TO [db_view] |
678945321 | vista_clientes | 1 | 0 | V | VIEW | 2022-01-10 14:20:22 | 2022-01-10 14:20:22 | 0 | 0 | 0 | 1 | dbo | GRANT VIEW DEFINITION ON [dbo].[vista_clientes] TO [db_view] |
784512369 | vista_productos | 1 | 0 | V | VIEW | 2021-11-05 09:15:33 | 2021-11-05 09:15:33 | 0 | 0 | 0 | 1 | dbo | GRANT VIEW DEFINITION ON [dbo].[vista_productos] TO [db_view] |
Descripción de los Campos
object_id
: Identificador único del objeto en la base de datos.name
: Nombre de la vista.schema_id
: Identificador del esquema al que pertenece la vista.parent_object_id
: Identificador del objeto padre (en el caso de las vistas, este valor suele ser 0).type
: Tipo de objeto (V
indica que es una vista).type_desc
: Descripción del tipo de objeto.create_date
: Fecha de creación de la vista.modify_date
: Fecha de última modificación de la vista.is_ms_shipped
: Indica si es una vista interna de Microsoft (0
significa que no lo es).is_published
: Indica si la vista está publicada.is_schema_published
: Indica si el esquema está publicado.schema_name
: Nombre del esquema al que pertenece la vista.GRANT_VIEW_COMMAND
: ComandoGRANT
generado automáticamente para otorgar permisos de definición de vista.
Resultado de la Extracción de las Vistas en SQL Server
Cada fila incluye una columna GRANT_VIEW_COMMAND
, que contiene el comando SQL necesario para otorgar permisos VIEW DEFINITION
a un usuario llamado db_view
para la vista correspondiente. Por ejemplo:
- Para la vista
vista_ventas
, el comando es:GRANT VIEW DEFINITION ON [dbo].[vista_ventas] TO [db_view];
Este enfoque automatiza la generación de comandos GRANT
, facilitando la tarea de administrar permisos en múltiples vistas dentro de una base de datos.
Beneficios de Usar Vistas y GRANT
en SQL Server
Seguridad
Las vistas permiten ocultar columnas sensibles y controlar el acceso a los datos. Al usar vistas, podemos asegurarnos de que los usuarios solo vean la información que necesitan.
Simplicidad
Las vistas simplifican las consultas complejas. En lugar de escribir consultas largas y complicadas, podemos crear una vista y referenciarla como si fuera una tabla.
Mantenimiento
Las vistas hacen que el mantenimiento de las bases de datos sea más manejable. Si la estructura subyacente de las tablas cambia, solo necesitamos actualizar la vista en lugar de cambiar todas las consultas que la utilizan.
Control de Accesos
El uso del comando GRANT
facilita la administración de permisos, asegurando que solo los usuarios autorizados puedan ver o modificar la definición de las vistas.
Conclusión
La gestión de vistas y permisos en SQL Server es una práctica esencial para mantener la seguridad y la eficiencia en la administración de bases de datos. Al automatizar la extracción de vistas y la generación de comandos GRANT
, podemos ahorrar tiempo, reducir errores y asegurarnos de que nuestras bases de datos estén bien protegidas.
Implementar estas prácticas en tu trabajo diario no solo mejorará la seguridad de tus datos, sino que también te ayudará a mantener un control más preciso sobre quién puede acceder y modificar la información en tu base de datos. ¡Empieza hoy mismo y optimiza la seguridad de tu SQL Server!
Eliminar usuarios huérfanos SQL server
Script para saber el histórico de queries ejecutados SQL
Script Creación de Roles en SQL Server
dm_exec_requests en SQL Server
Introducción
Si trabajas con SQL Server, es probable que alguna vez hayas necesitado monitorear las solicitudes en curso en tu base de datos. Para este propósito, la vista del sistema sys.dm_exec_requests
es una herramienta esencial. En este blog, te mostraremos cómo usar SELECT * FROM sys.dm_exec_requests
para obtener información valiosa sobre las solicitudes actuales en tu servidor de bases de datos. Aprenderás qué es, cómo funciona, y cómo puedes aprovecharlo para optimizar el rendimiento de tu base de datos.
¿Qué es dm_exec_requests
?
La vista de administración dinámica sys.dm_exec_requests
en SQL Server proporciona información detallada sobre las solicitudes que están siendo ejecutadas en el momento en que se consulta. Cada fila en esta vista representa una solicitud en curso, mostrando detalles como el estado de la solicitud, el tiempo que lleva ejecutándose, y el comando SQL actual.
¿Por Qué es Importante?
Monitorear las solicitudes actuales en tu servidor SQL es crucial para identificar problemas de rendimiento, diagnosticar bloqueos, y entender cómo se están utilizando los recursos del servidor. Con sys.dm_exec_requests
, puedes obtener una visión clara de lo que está ocurriendo en tiempo real y tomar decisiones informadas para optimizar tus operaciones.
Cómo Utilizar dm_exec_requests
Para comenzar, simplemente ejecuta la siguiente consulta en tu servidor SQL:
SELECT * FROM sys.dm_exec_requests;
Esta consulta te devolverá una lista de todas las solicitudes actualmente en ejecución. Ahora, veamos algunas de las columnas más útiles que puedes encontrar en esta vista.
Columnas Clave en sys.dm_exec_requests
session_id
Cada solicitud está asociada con una sesión específica. La columna session_id
te permite identificar la sesión que originó la solicitud.
request_id
La request_id
es un identificador único para cada solicitud dentro de una sesión. Esto es útil para distinguir entre múltiples solicitudes de la misma sesión.
start_time
La columna start_time
indica cuándo comenzó la solicitud. Puedes usar esta información para identificar solicitudes que han estado ejecutándose por un tiempo inusualmente largo.
status
El status
de una solicitud puede ser running
, suspended
, runnable
, entre otros. Esto te ayuda a entender el estado actual de la solicitud.
command
La columna command
muestra el comando SQL que se está ejecutando actualmente. Esto es especialmente útil para diagnosticar consultas problemáticas.
Ejemplos Prácticos
Identificar Solicitudes Largas
Para encontrar solicitudes que han estado ejecutándose por más de un minuto, puedes usar la siguiente consulta:
SELECT session_id, request_id, start_time, status, command
FROM sys.dm_exec_requests
WHERE DATEDIFF(SECOND, start_time, GETDATE()) > 60;
Verificar Bloqueos
Los bloqueos pueden causar serios problemas de rendimiento. Para identificar solicitudes que están bloqueando o están siendo bloqueadas, puedes utilizar la columna blocking_session_id
:
SELECT session_id, request_id, blocking_session_id, status, command
FROM sys.dm_exec_requests
WHERE blocking_session_id <> 0;
Monitorear Consultas Específicas
Si estás investigando un problema específico, es posible que desees ver todas las solicitudes ejecutadas por una sesión en particular. Aquí tienes un ejemplo de cómo hacerlo:
SELECT session_id, request_id, start_time, status, command
FROM sys.dm_exec_requests
WHERE session_id = <tu_session_id>;
Reemplaza <tu_session_id>
con el ID de la sesión que estás investigando.
Consejos para Optimizar el Uso de sys.dm_exec_requests
Filtra las Columnas Necesarias
Para mejorar el rendimiento de tus consultas y hacer que los resultados sean más manejables, selecciona solo las columnas que realmente necesitas:
SELECT session_id, request_id, start_time, status, command
FROM sys.dm_exec_requests;
Usa Índices y Particiones
Aunque no puedes cambiar la estructura de la vista sys.dm_exec_requests
, asegúrate de que tus propias tablas y consultas estén optimizadas con índices y particiones adecuados. Esto reducirá la carga en el servidor y hará que las consultas a sys.dm_exec_requests
sean más eficientes.
Automatiza el Monitoreo
Considera crear scripts automatizados que ejecuten consultas en sys.dm_exec_requests
en intervalos regulares y almacenen los resultados en una tabla para análisis posterior. Esto puede ayudarte a identificar patrones y tendencias en el uso de tu base de datos.
Conclusión
sys.dm_exec_requests
es una herramienta poderosa para cualquier administrador de bases de datos o desarrollador que trabaje con SQL Server. Te permite monitorear las solicitudes en tiempo real, identificar problemas de rendimiento y diagnosticar bloqueos. Al utilizar las consultas y técnicas descritas en este blog, puedes obtener una comprensión profunda de lo que está ocurriendo en tu servidor y tomar medidas proactivas para optimizar su rendimiento.
Recuerda, la clave para un servidor SQL eficiente es la monitorización constante y el ajuste continuo basado en los datos que recopilas. ¡Empieza a usar sys.dm_exec_requests
hoy mismo y lleva el rendimiento de tu base de datos al siguiente nivel!
Recursos Adicionales
- Documentación Oficial de Microsoft sobre
sys.dm_exec_requests
- Mejores Prácticas para Optimización de Consultas en SQL Server
Comentarios
¿Tienes alguna pregunta o comentario sobre el uso de sys.dm_exec_requests
? ¡Déjanos tus pensamientos en la sección de comentarios a continuación! Tu experiencia y preguntas pueden ayudar a otros lectores a aprender más sobre esta valiosa herramienta.
SQL: ¿Configurar los Archivos LDF y MDF en Unidades Distintas es Importante?
Restaurar una Base de Datos en SQL usando ATTACH
¿Qué es un SGBDR SQL Server? Todo lo que Necesitas Saber
¿Qué es el Transaction Log? La Importancia en SQL Server
Guía Completa para Formatear Fechas en SQL FORMAT Server 2022