que son Procedimientos Almacenados Temporales sql

Procedimientos Almacenados Temporales en SQL Server

En el mundo de SQL Server, es común hablar de tablas temporales, pero también existen procedimientos almacenados temporales que son menos conocidos pero igualmente útiles. Estos procedimientos almacenados temporales tienen una vida limitada a la sesión que los crea, lo cual ofrece diversas ventajas. En este artículo, exploraremos cómo crear estos procedimientos y las razones para usarlos en tus proyectos.

Creación de Procedimientos Almacenados Temporales SQL

Procedimientos Almacenados Temporales Locales

Para crear un procedimiento almacenado temporal local, se antepone un numeral # al nombre del procedimiento. Este procedimiento estará disponible solo en la sesión donde se creó. Aquí hay un ejemplo práctico que muestra cómo obtener una lista de tablas y su número de columnas:

CREATE PROCEDURE #spu_ObtenerTablasColumnas
AS
SELECT t.TABLE_SCHEMA, t.TABLE_NAME, COUNT(c.COLUMN_NAME) AS NUMERO_COLUMNAS
FROM INFORMATION_SCHEMA.TABLES t
INNER JOIN INFORMATION_SCHEMA.COLUMNS c
ON t.TABLE_SCHEMA = c.TABLE_SCHEMA
AND t.TABLE_NAME = c.TABLE_NAME
GROUP BY t.TABLE_SCHEMA, t.TABLE_NAME
ORDER BY t.TABLE_SCHEMA, t.TABLE_NAME

Procedimientos Almacenados Temporales Globales

Si necesitas que el procedimiento almacenado temporal sea accesible desde múltiples sesiones, puedes crear un procedimiento almacenado temporal global utilizando dos numerales ## antes del nombre. Esto permite que el procedimiento esté disponible para todas las sesiones mientras la sesión que lo creó siga activa.

CREATE PROCEDURE ##spu_ObtenerTablasColumnasGlobal
AS
SELECT t.TABLE_SCHEMA, t.TABLE_NAME, COUNT(c.COLUMN_NAME) AS NUMERO_COLUMNAS
FROM INFORMATION_SCHEMA.TABLES t
INNER JOIN INFORMATION_SCHEMA.COLUMNS c
ON t.TABLE_SCHEMA = c.TABLE_SCHEMA
AND t.TABLE_NAME = c.TABLE_NAME
GROUP BY t.TABLE_SCHEMA, t.TABLE_NAME
ORDER BY t.TABLE_SCHEMA, t.TABLE_NAME

Ventajas de Usar Procedimientos Almacenados Temporales

Facilidad de Pruebas

Una de las principales ventajas de los procedimientos almacenados temporales es la facilidad para realizar pruebas. Puedes crear una copia temporal de un procedimiento almacenado existente y modificarlo sin afectar el procedimiento original. Esto es especialmente útil cuando necesitas probar cambios en el código o evaluar el impacto de nuevas optimizaciones.

Sin Necesidad de Permisos Especiales

La creación de procedimientos almacenados temporales no requiere permisos especiales en la base de datos. Esto simplifica el proceso de prueba y desarrollo, permitiendo a los desarrolladores realizar ajustes y pruebas sin necesidad de esperar la aprobación de permisos adicionales.

Optimización del Plan de Ejecución

SQL Server optimiza los planes de ejecución de los procedimientos almacenados basándose en los valores conocidos de los parámetros al momento de la compilación. Al utilizar procedimientos almacenados temporales, puedes aprovechar esta optimización, obteniendo planes de ejecución más eficientes en comparación con la ejecución de consultas con variables cuyos valores no son conocidos hasta el tiempo de ejecución.

Aislamiento de Sesión

Los procedimientos almacenados temporales locales aseguran que las modificaciones y pruebas realizadas no afecten a otros usuarios o sesiones en la base de datos. Esto proporciona un entorno seguro y aislado para realizar experimentos y ajustes sin riesgo de interferir con el trabajo de otros.

Casos de Uso Comunes

Desarrollo y Pruebas

Durante el desarrollo de nuevas funcionalidades o la optimización de procedimientos existentes, los procedimientos almacenados temporales son una herramienta valiosa. Permiten a los desarrolladores iterar rápidamente sobre diferentes versiones de código y realizar pruebas en un entorno controlado.

Solución de Problemas

En situaciones de emergencia donde se necesita aplicar una solución rápida, los procedimientos almacenados temporales permiten implementar cambios temporales sin necesidad de modificar el código fuente de los procedimientos almacenados principales. Esto es útil para aplicar parches rápidos mientras se trabaja en una solución permanente.

Migraciones y Actualizaciones

Durante las migraciones de bases de datos o actualizaciones de sistemas, los procedimientos almacenados temporales pueden ser utilizados para probar nuevas estructuras y datos sin comprometer la integridad de la base de datos actual. Esto facilita la validación de cambios y asegura una transición suave.

Conclusión

Los procedimientos almacenados temporales en SQL Server son una herramienta poderosa y versátil para desarrolladores y administradores de bases de datos. Ofrecen una manera eficiente de realizar pruebas, optimizar código y asegurar que los cambios se implementen de manera controlada y segura. Considera utilizar procedimientos almacenados temporales en tus próximos proyectos para aprovechar sus múltiples beneficios.

Generando Script de creación de Usuarios en SQL Server

Script para saber el histórico de queries ejecutados SQL

Script Creación de Roles en SQL Server

Qué es la tempb en sql y queries para monitoreo

Qué es la temp-db en sql

Tempdb, en el mundo de la gestión de bases de datos relacionales, SQL Server de Microsoft es una de las plataformas más utilizadas. Entre sus componentes fundamentales se encuentra tempdb, una base de datos especial que desempeña un papel crucial en el rendimiento y la gestión de SQL Server. En este artículo, exploraremos en profundidad qué es tempdb, su propósito, cómo se utiliza y algunos consejos prácticos para optimizar su rendimiento.

¿Qué es tempdb?

En SQL Server que se utiliza para almacenar datos temporales, tablas temporales, variables de tabla y otros objetos temporales. A diferencia de otras bases de datos que almacenan datos permanentes, tempdb se crea cada vez que se inicia SQL Server y se elimina cuando se apaga el servidor. Esto significa que su contenido no es persistente y se utiliza principalmente para operaciones temporales durante la ejecución de consultas, procedimientos almacenados, índices y operaciones de clasificación.

Propósito de tempdb

El propósito principal de tempdb es proporcionar un espacio de trabajo temporal para almacenar datos y objetos temporales mientras se ejecutan operaciones dentro de SQL Server. Algunas de las funciones clave de tempdb incluyen:

  • Tablas temporales: Utilizadas para almacenar datos temporales que solo son necesarios durante la sesión de conexión.
  • Variables de tabla: Actúan como variables que almacenan conjuntos de datos temporales que pueden ser utilizados en varias operaciones dentro de una conexión.
  • Almacenamiento de resultados intermedios: Durante la ejecución de consultas complejas, tempdb puede almacenar resultados intermedios y operaciones de clasificación que requieren espacio adicional.
Qué es la tempb en sql y queries para monitoreo

Uso de tempdb en operaciones cotidianas

1. Creación de tablas temporales: Las tablas temporales se crean dentro de tempdb utilizando la sintaxis especial CREATE TABLE #NombreTabla. Estas tablas son visibles solo para la sesión de conexión actual y se eliminan automáticamente cuando la conexión se cierra o se elimina explícitamente.

2. Variables de tabla: Las variables de tabla permiten almacenar conjuntos de datos temporales que pueden ser utilizados en múltiples consultas o procedimientos almacenados dentro de la misma conexión. Se declaran utilizando DECLARE @NombreVariable TABLE.

3. Resultados intermedios y almacenamiento temporal: Durante la ejecución de consultas complejas que requieren operaciones de clasificación o agrupación, tempdb actúa como un espacio de almacenamiento temporal para almacenar resultados parciales antes de devolver el conjunto de resultados final al usuario.

Gestión y optimización de tempdb

Para garantizar un rendimiento óptimo de SQL Server, es crucial gestionar adecuadamente tempdb y optimizar su configuración. A continuación se presentan algunas estrategias clave para optimizar tempdb:

1. Tamaño y crecimiento automático: Configurar el tamaño inicial de tempdb según las necesidades del entorno y habilitar el crecimiento automático para garantizar que tempdb tenga suficiente espacio para manejar operaciones temporales sin interrupciones.

2. Colocación de archivos: Distribuir los archivos de tempdb en múltiples discos físicos para distribuir la carga de E/S y mejorar el rendimiento. Esto puede lograrse mediante la creación de múltiples archivos de datos para tempdb y asignándolos a diferentes unidades de disco.

3. Monitoreo de la actividad: Utilizar herramientas de monitoreo de SQL Server para supervisar la actividad de tempdb y identificar patrones de uso, cuellos de botella o problemas de rendimiento que puedan surgir debido a operaciones temporales intensivas.

4. Uso de instantáneas de base de datos (Database Snapshots): Al implementar instantáneas de base de datos, se puede reducir la carga de tempdb durante operaciones de copia de seguridad y restauración, ya que estas operaciones pueden ser intensivas en términos de recursos temporales.

5. Mantenimiento regular: Realizar mantenimientos regulares en tempdb, como la eliminación de objetos temporales no utilizados, la limpieza de tablas temporales y la revisión de configuraciones de almacenamiento, para mantener un rendimiento óptimo del servidor SQL.

Script 1: Obtener información general sobre tempdb

Este script te ayudará a obtener información básica sobre tempdb, incluyendo el tamaño de los archivos y el espacio utilizado.

USE tempdb;
GO

-- Obtener el tamaño actual de tempdb y espacio utilizado
SELECT
DB_NAME(database_id) AS [Database Name],
type_desc AS [File Type],
name AS [Logical Name],
size * 8 / 1024 AS [Size MB],
used_space_pages * 8 / 1024 AS [Used Space MB],
(size - used_space_pages) * 8 / 1024 AS [Free Space MB]
FROM
sys.dm_db_file_space_usage;
GO

Script 2: Monitorear actividad actual en tempdb

Este script te permite ver las sesiones y las tareas que están utilizando tempdb en el momento actual.

USE tempdb;
GO

-- Monitorear la actividad actual en tempdb
SELECT
session_id,
request_id,
user_objects_alloc_page_count,
user_objects_dealloc_page_count,
internal_objects_alloc_page_count,
internal_objects_dealloc_page_count
FROM
sys.dm_db_task_space_usage
WHERE
session_id > 50; -- Filtrar sesiones de usuario (generalmente las sesiones de sistema tienen IDs menores a 50)
GO

Script 3: Identificar objetos temporales y su uso

Este script te muestra los objetos temporales actuales en tempdb y su tamaño estimado.

USE tempdb;
GO

-- Identificar objetos temporales en tempdb
SELECT
OBJECT_NAME(object_id) AS [Object Name],
user_object_id,
type_desc AS [Type],
total_pages * 8 / 1024 AS [Size MB]
FROM
sys.dm_db_session_space_usage
WHERE
database_id = DB_ID('tempdb');
GO

Script 4: Monitorear el crecimiento de archivos de tempdb

Este script te permite verificar el crecimiento de los archivos de tempdb durante un intervalo de tiempo específico.

USE tempdb;
GO

-- Monitorear el crecimiento de archivos de tempdb
SELECT
DB_NAME(database_id) AS [Database Name],
type_desc AS [File Type],
name AS [Logical Name],
size_change_kb / 1024 AS [Size Change MB],
duration_seconds
FROM
sys.dm_io_virtual_file_stats(DB_ID('tempdb'), NULL) AS divfs
CROSS APPLY
sys.dm_io_virtual_file_stats(DB_ID('tempdb'), file_id) AS divfs2
WHERE
file_id IN (1, 2); -- Archivos de datos y de registro de tempdb respectivamente
GO

Consideraciones adicionales:

  • Programación de tareas: Puedes programar estos scripts para ejecutarse periódicamente (por ejemplo, cada hora) utilizando un trabajo de SQL Server Agent para mantener un monitoreo constante.
  • Análisis de tendencias: Utiliza los resultados de estos scripts para analizar las tendencias de uso de tempdb y tomar decisiones informadas sobre la capacidad y la optimización.
  • Ajustes según el entorno: Asegúrate de ajustar los scripts según las configuraciones específicas de tu entorno de SQL Server.

Conclusiones

En resumen, tempdb es un componente esencial en SQL Server que proporciona un espacio de trabajo temporal para almacenar datos y objetos temporales durante la ejecución de consultas y procedimientos almacenados. Su correcta gestión y optimización son fundamentales para garantizar el rendimiento y la estabilidad de SQL Server en entornos de producción. Al comprender su propósito y aplicaciones, así como al implementar prácticas recomendadas para su configuración y mantenimiento, los administradores de bases de datos pueden maximizar la eficiencia operativa de sus sistemas SQL Server.

Cambiar el collation en un servidor sql server 2019

Descarga de SQL Server Management Studio (SSMS)

Script Creación de Roles en SQL Server

Generando Script de creación de Usuarios en SQL Server

script para ver el historico de queries hechos en sql server

Script para saber el histórico de queries ejecutados SQL

En el mundo del desarrollo de bases de datos, la gestión y optimización de consultas SQL es una tarea fundamental para garantizar el rendimiento y la integridad de los datos. Una práctica recomendada es mantener un script histórico de las queries ejecutadas en SQL. En este artículo, exploraremos las razones por las cuales es necesario conservar este historial y cómo puede beneficiar a tu organización.

1. Auditoría y Cumplimiento

Uno de los motivos más importantes para mantener un historial de consultas SQL es la auditoría. En muchas industrias, existen regulaciones estrictas que requieren un seguimiento detallado de quién accede a la base de datos y qué acciones realizan. Un script histórico proporciona una pista de auditoría completa que puede ser invaluable durante auditorías internas y externas.

2. Resolución de Problemas

Cuando se presenta un problema en la base de datos, ya sea un error o un rendimiento lento, tener un historial de consultas ejecutadas puede ayudar a identificar rápidamente la causa. Los administradores de bases de datos pueden revisar las consultas previas para ver si hubo algún cambio significativo o una consulta ineficiente que esté afectando el rendimiento.

3. Optimización del Rendimiento

El análisis de las consultas históricas permite a los administradores identificar patrones y tendencias en el uso de la base de datos. Con esta información, pueden optimizar las consultas y mejorar el rendimiento general del sistema. Por ejemplo, si una consulta específica se ejecuta frecuentemente y tarda mucho tiempo, se pueden tomar medidas para optimizarla o ajustar los índices de la base de datos.

4. Recuperación de Datos

En situaciones donde se ha producido una pérdida de datos accidental, el historial de consultas puede ser crucial para la recuperación. Al revisar las consultas ejecutadas, es posible identificar qué datos se vieron afectados y restaurarlos a su estado original.

5. Capacitación y Mejora Continua

Para equipos de desarrollo y administración de bases de datos, el historial de consultas es una herramienta de aprendizaje. Los nuevos miembros del equipo pueden estudiar las consultas previas para entender las mejores prácticas y los estándares de la organización. Además, permite una revisión continua y mejoras en las prácticas de escritura de consultas SQL.

6. Documentación

Mantener un historial de consultas ejecutadas también sirve como documentación viva del uso de la base de datos. Esto puede ser útil no solo para los administradores, sino también para otros stakeholders que necesiten entender cómo se está utilizando la base de datos.

Script para ver el histórico de queries lanzados en sql (Insert)

select  top(100)
        creation_time,
        last_execution_time,
        execution_count,
        total_worker_time/1000 as CPU,
        convert(money, (total_worker_time))/(execution_count*1000)as [AvgCPUTime],
        qs.total_elapsed_time/1000 as TotDuration,
        convert(money, (qs.total_elapsed_time))/(execution_count*1000)as [AvgDur],
        total_logical_reads as [Reads],
        total_logical_writes as [Writes],
        total_logical_reads+total_logical_writes as [AggIO],
        convert(money, (total_logical_reads+total_logical_writes)/(execution_count + 0.0)) as [AvgIO],
        [sql_handle],
        plan_handle,
        statement_start_offset,
        statement_end_offset,
        plan_generation_num,
        total_physical_reads,
        convert(money, total_physical_reads/(execution_count + 0.0)) as [AvgIOPhysicalReads],
        convert(money, total_logical_reads/(execution_count + 0.0)) as [AvgIOLogicalReads],
        convert(money, total_logical_writes/(execution_count + 0.0)) as [AvgIOLogicalWrites],
        query_hash,
        query_plan_hash,
        total_rows,
        convert(money, total_rows/(execution_count + 0.0)) as [AvgRows],
        total_dop,
        convert(money, total_dop/(execution_count + 0.0)) as [AvgDop],
        total_grant_kb,
        convert(money, total_grant_kb/(execution_count + 0.0)) as [AvgGrantKb],
        total_used_grant_kb,
        convert(money, total_used_grant_kb/(execution_count + 0.0)) as [AvgUsedGrantKb],
        total_ideal_grant_kb,
        convert(money, total_ideal_grant_kb/(execution_count + 0.0)) as [AvgIdealGrantKb],
        total_reserved_threads,
        convert(money, total_reserved_threads/(execution_count + 0.0)) as [AvgReservedThreads],
        total_used_threads,
        convert(money, total_used_threads/(execution_count + 0.0)) as [AvgUsedThreads],
        case 
            when sql_handle IS NULL then ' '
            else(substring(st.text,(qs.statement_start_offset+2)/2,(
                case
                    when qs.statement_end_offset =-1 then len(convert(nvarchar(MAX),st.text))*2      
                    else qs.statement_end_offset    
                end - qs.statement_start_offset)/2  ))
        end as query_text,
        db_name(st.dbid) as database_name,
        object_schema_name(st.objectid, st.dbid)+'.'+object_name(st.objectid, st.dbid) as [object_name],
        sp.[query_plan]
from sys.dm_exec_query_stats as qs with(readuncommitted)
cross apply sys.dm_exec_sql_text(qs.[sql_handle]) as st
cross apply sys.dm_exec_query_plan(qs.[plan_handle]) as sp
WHERE st.[text] LIKE '%insert%'
order by creation_time desc

Explicación de la Consulta anterior que muestra el histórico de queries en SQL

Consulta SQL que sirve para monitorizar y obtener estadísticas detalladas sobre consultas que contienen la palabra «INSERT«. Este tipo de análisis es fundamental para identificar y optimizar el rendimiento de las operaciones de inserción en una base de datos.

script para ver el historico de queries hechos en sql server
Script para ver el historico de queries hechos en sql server

Desglose de la Consulta

Selección de los Primeros 100 Registros

TOP(100)

La consulta selecciona los primeros 100 registros de los datos que cumple con las condiciones especificadas.

Campos y Cálculos

A continuación, se seleccionan varios campos y se realizan ciertos cálculos para proporcionar métricas detalladas sobre el rendimiento de las consultas:

creation_time,
last_execution_time,
execution_count,
total_worker_time / 1000 AS CPU,
CONVERT(money, (total_worker_time)) / (execution_count * 1000) AS [AvgCPUTime],
qs.total_elapsed_time / 1000 AS TotDuration,
CONVERT(money, (qs.total_elapsed_time)) / (execution_count * 1000) AS [AvgDur],
total_logical_reads AS [Reads],
total_logical_writes AS [Writes],
total_logical_reads + total_logical_writes AS [AggIO],
CONVERT(money, (total_logical_reads + total_logical_writes) / (execution_count + 0.0)) AS [AvgIO],
[sql_handle],
plan_handle,
statement_start_offset,
statement_end_offset,
plan_generation_num,
total_physical_reads,
CONVERT(money, total_physical_reads / (execution_count + 0.0)) AS [AvgIOPhysicalReads],
CONVERT(money, total_logical_reads / (execution_count + 0.0)) AS [AvgIOLogicalReads],
CONVERT(money, total_logical_writes / (execution_count + 0.0)) AS [AvgIOLogicalWrites],
query_hash,
query_plan_hash,
total_rows,
CONVERT(money, total_rows / (execution_count + 0.0)) AS [AvgRows],
total_dop,
CONVERT(money, total_dop / (execution_count + 0.0)) AS [AvgDop],
total_grant_kb,
CONVERT(money, total_grant_kb / (execution_count + 0.0)) AS [AvgGrantKb],
total_used_grant_kb,
CONVERT(money, total_used_grant_kb / (execution_count + 0.0)) AS [AvgUsedGrantKb],
total_ideal_grant_kb,
CONVERT(money, total_ideal_grant_kb / (execution_count + 0.0)) AS [AvgIdealGrantKb],
total_reserved_threads,
CONVERT(money, total_reserved_threads / (execution_count + 0.0)) AS [AvgReservedThreads],
total_used_threads,
CONVERT(money, total_used_threads / (execution_count + 0.0)) AS [AvgUsedThreads],

Explicación de Campos Seleccionados

  • creation_time: Tiempo de creación de la consulta.
  • last_execution_time: Última vez que se ejecutó la consulta.
  • execution_count: Número de veces que se ha ejecutado la consulta.
  • total_worker_time / 1000 AS CPU: Tiempo total de CPU utilizado, convertido a segundos.
  • AvgCPUTime: Tiempo promedio de CPU por ejecución.
  • TotDuration: Duración total de la consulta en milisegundos.
  • AvgDur: Duración promedio por ejecución.
  • Reads: Lecturas lógicas totales.
  • Writes: Escrituras lógicas totales.
  • AggIO: I/O agregado (lecturas + escrituras).
  • AvgIO: I/O promedio por ejecución.
  • sql_handle, plan_handle: Identificadores de la consulta y del plan de ejecución.
  • statement_start_offset, statement_end_offset: Posiciones de inicio y fin de la consulta dentro del batch.
  • plan_generation_num: Número de veces que se ha generado el plan de ejecución.
  • total_physical_reads: Lecturas físicas totales.
  • AvgIOPhysicalReads: Lecturas físicas promedio por ejecución.
  • AvgIOLogicalReads: Lecturas lógicas promedio por ejecución.
  • AvgIOLogicalWrites: Escrituras lógicas promedio por ejecución.
  • query_hash, query_plan_hash: Hash de la consulta y del plan de ejecución.
  • total_rows: Número total de filas afectadas.
  • AvgRows: Número promedio de filas por ejecución.
  • total_dop: Grado total de paralelismo.
  • AvgDop: Grado promedio de paralelismo.
  • total_grant_kb, total_used_grant_kb, total_ideal_grant_kb: Memoria total concedida, usada e ideal en KB.
  • AvgGrantKb, AvgUsedGrantKb, AvgIdealGrantKb: Promedio de memoria concedida, usada e ideal en KB por ejecución.
  • total_reserved_threads, total_used_threads: Hilos totales reservados y usados.
  • AvgReservedThreads, AvgUsedThreads: Hilos promedio reservados y usados por ejecución.

Texto de la Consulta y Plan de Ejecución

CASE 
    WHEN sql_handle IS NULL THEN ' '
    ELSE SUBSTRING(st.text, (qs.statement_start_offset + 2) / 2, 
        (CASE
            WHEN qs.statement_end_offset = -1 THEN LEN(CONVERT(nvarchar(MAX), st.text)) * 2      
            ELSE qs.statement_end_offset    
        END - qs.statement_start_offset) / 2)
END AS query_text,
DB_NAME(st.dbid) AS database_name,
OBJECT_SCHEMA_NAME(st.objectid, st.dbid) + '.' + OBJECT_NAME(st.objectid, st.dbid) AS [object_name],
sp.[query_plan]
  • query_text: Extrae el texto de la consulta SQL.
  • database_name: Nombre de la base de datos donde se ejecutó la consulta.
  • object_name: Nombre del objeto (tabla, vista, etc.) relacionado con la consulta.
  • query_plan: Plan de ejecución de la consulta.

Tablas y Funciones del Sistema

CASE 
    WHEN sql_handle IS NULL THEN ' '
    ELSE SUBSTRING(st.text, (qs.statement_start_offset + 2) / 2, 
        (CASE
            WHEN qs.statement_end_offset = -1 THEN LEN(CONVERT(nvarchar(MAX), st.text)) * 2      
            ELSE qs.statement_end_offset    
        END - qs.statement_start_offset) / 2)
END AS query_text,
DB_NAME(st.dbid) AS database_name,
OBJECT_SCHEMA_NAME(st.objectid, st.dbid) + '.' + OBJECT_NAME(st.objectid, st.dbid) AS [object_name],
sp.[query_plan]
  • sys.dm_exec_query_stats: Vista de estadísticas de ejecución de consultas.
  • sys.dm_exec_sql_text: Función que devuelve el texto completo de la consulta SQL.
  • sys.dm_exec_query_plan: Función que devuelve el plan de ejecución de la consulta.

Filtrado y Orden

WHERE st.[text] LIKE '%insert%'
ORDER BY creation_time DESC;
  • Filtro: Se filtran las consultas cuyo texto contiene la palabra «insert».
  • Orden: Los resultados se ordenan por el tiempo de creación en orden descendente.

Esta consulta es una herramienta útil para analizar el rendimiento y el uso de recursos de las consultas SQL que contienen la palabra «insert» en su texto. Proporciona una visión detallada de cómo se comportan estas consultas en términos de CPU, duración, lecturas/escrituras y otros recursos, ayudando a los administradores de bases de datos a optimizar y solucionar problemas de rendimiento.

¿Qué hace DBCC CHECKDB?

Script Creación de Roles en SQL Server

Generando Script de creación de Usuarios en SQL Server

Eliminar usuarios huérfanos SQL server

Eliminar usuarios huérfanos en SQL

Eliminar usuarios huérfanos SQL server

Eliminar usuarios huérfanos en SQL Server, puedes seguir estos pasos detallados y hacer uso de un script SQL que te ayudará a identificar y eliminar dichos usuarios de una manera ordenada. Aquí te dejo una guía detallada, que también podría ser útil como entrada de blog:

¿Por qué borrar usuarios huérfanos en SQL después de una migración?

Las migraciones de bases de datos son procesos complejos que, a menudo, pueden generar datos residuales no deseados, como usuarios huérfanos. Estos usuarios son cuentas que ya no están asociadas a ningún inicio de sesión válido y pueden suponer diversos riesgos para la seguridad y el rendimiento de la base de datos.

En este artículo, exploraremos las razones principales por las que es crucial eliminar los usuarios huérfanos en SQL después de una migración:

1. Mejorar la seguridad:

Los usuarios huérfanos representan una brecha de seguridad potencial, ya que podrían ser utilizados por actores maliciosos para acceder a la base de datos sin autorización. Al eliminarlos, se elimina este punto de entrada vulnerable y se protege la integridad de los datos.

2. Optimizar el rendimiento:

Las bases de datos con un gran número de usuarios huérfanos pueden experimentar un rendimiento más lento, especialmente durante las consultas que involucran permisos y roles. Eliminar estos usuarios innecesarios libera recursos del sistema y mejora la eficiencia general de la base de datos.

3. Simplificar la administración:

La presencia de usuarios huérfanos dificulta la administración de la base de datos, ya que aumenta la complejidad de tareas como la concesión de permisos y la auditoría de acceso. Eliminar estos usuarios simplifica el entorno y facilita la gestión de la base de datos.

4. Mejorar la calidad de los datos:

Los usuarios huérfanos pueden generar entradas de registro y datos de auditoría incorrectos, lo que dificulta la identificación de patrones y la comprensión del uso real de la base de datos. Eliminar estos usuarios garantiza que los datos de la base de datos sean precisos y confiables.

5. Cumplimiento normativo:

En algunos sectores, las regulaciones de cumplimiento de datos, como GDPR y HIPAA, exigen la eliminación de datos personales no utilizados. Eliminar usuarios huérfanos ayuda a garantizar el cumplimiento de estas regulaciones y protege la privacidad de la información sensible.

Script para borrar usuarios huérfanos y sus esquemas

---------------------------------------------------------------------------------------
-- ELIMINAR usuarios huérfanos y sus eschemas  
---------------------------------------------------------------------------------------

-- www.sql-ninja.com

set nocount on

declare @cadena varchar(4000)
declare @usuario sysname
declare @nombre_usuario sysname
declare @principal_id int
declare @usuario2 sysname

---- coge los usuarios huérfanos (que no tiene un login con mismo nombre ni mismo codigo (SID)
select name, principal_id 
into #usuarios    --- tabla temporal con los usuarios
from sys.database_principals
where type in ('S','U','G')
and (sid is not null and sid <> 0x0)
and name not in (select name from sys.server_principals)  -- no existe con mismo nombre
and sid not in (select sid from sys.server_principals)    -- no existe con mismo sid
and principal_id > 1
and db_id() > 4 
order by name

declare cur_usuarios cursor 
  for  select name,principal_id from #usuarios
  order by name

  Open cur_usuarios

  FETCH NEXT FROM cur_usuarios 
  INTO @nombre_usuario, @principal_id

  WHILE @@FETCH_STATUS = 0
  BEGIN
    select @usuario= @nombre_usuario
	select @usuario2='[' + @nombre_usuario +']'
	
    declare @schema_name sysname , @cant_schemas int
	set @schema_name = null
	set @cant_schemas = 0
	--- verifica la cantidad de schemas que tiene
	select @cant_schemas = count(*) from sys.schemas where  principal_id = @principal_id

	print '*********   USUARIO ---> ' + @nombre_usuario
	if @cant_schemas > 0
	begin
	    While @cant_schemas > 0
		begin
			select top(@cant_schemas) @schema_name = '[' + name +']' from sys.schemas where  principal_id = @principal_id
			print ' --- Se procedera a borrar el SCHEMA: ' + @schema_name
			set @cadena='   drop schema ' + @schema_name + ''
			print @cadena
			exec ( @cadena )   ----- ELIMINA schema
			set @cant_schemas = @cant_schemas - 1
		end
	end
	---- select schema_name(s.schema_id),user_name(s.principal_id),*
	print ' --- Se procedera a borrar el USUARIO: ' + @usuario
	set @cadena='   drop user ' + @usuario2 + ''
	print @cadena
	exec ( @cadena )     ----- ELIMINA usuario
	  
  FETCH NEXT FROM cur_usuarios 
  INTO @nombre_usuario,@principal_id
END
CLOSE cur_usuarios
DEALLOCATE cur_usuarios

set nocount off

drop table #usuarios
go

Explicación del código para borrar usuarios huerfános en SQL

Este script de SQL está diseñado para eliminar usuarios huérfanos y sus esquemas asociados en una base de datos. Los usuarios huérfanos son aquellos que no tienen un login correspondiente con el mismo nombre o el mismo SID (Security Identifier). Aquí está el desglose del script:

Parte Superior: Comentarios y Configuración Inicial

sqlCopiar código---------------------------------------------------------------------------------------
-- ELIMINAR usuarios huérfanos y sus esquemas  --- Usuario que NO EXISTE LOGIN CON MISMO NOMBRE NI CON MISMO SID
---------------------------------------------------------------------------------------

-- www.sql-ninja.com

set nocount on
  • Comentarios: Explica el propósito del script.
  • set nocount on: Previene que SQL Server devuelva mensajes de cuenta de filas afectadas, lo que hace que el script sea más limpio en términos de salida.

Declaración de Variables

declare @cadena varchar(4000)
declare @usuario sysname
declare @nombre_usuario sysname
declare @principal_id int
declare @usuario2 sysname
  • Declaración de variables: Estas variables se utilizarán para almacenar información temporal durante la ejecución del script.

Selección de Usuarios Huérfanos

select name, principal_id 
into #usuarios --- tabla temporal con los usuarios
from sys.database_principals
where type in ('S','U','G')
and (sid is not null and sid <> 0x0)
and name not in (select name from sys.server_principals) -- no existe con mismo nombre
and sid not in (select sid from sys.server_principals) -- no existe con mismo sid
and principal_id > 1
and db_id() > 4
order by name
  • select: Selecciona los usuarios que no tienen un login correspondiente con el mismo nombre o SID y los almacena en una tabla temporal #usuarios.

Cursor para Iterar sobre los Usuarios Huérfanos

declare cur_usuarios cursor 
for select name,principal_id from #usuarios
order by name

Open cur_usuarios

FETCH NEXT FROM cur_usuarios
INTO @nombre_usuario, @principal_id
  • Cursor: Define un cursor cur_usuarios para iterar sobre los usuarios huérfanos seleccionados anteriormente.

Bucle para Procesar Cada Usuario Huérfano

WHILE @@FETCH_STATUS = 0
BEGIN
select @usuario= @nombre_usuario
select @usuario2='[' + @nombre_usuario +']'

declare @schema_name sysname , @cant_schemas int
set @schema_name = null
set @cant_schemas = 0
--- verifica la cantidad de schemas que tiene
select @cant_schemas = count(*) from sys.schemas where principal_id = @principal_id

print '********* USUARIO ---> ' + @nombre_usuario
if @cant_schemas > 0
begin
While @cant_schemas > 0
begin
select top(@cant_schemas) @schema_name = '[' + name +']' from sys.schemas where principal_id = @principal_id
print ' --- Se procedera a borrar el SCHEMA: ' + @schema_name
set @cadena=' drop schema ' + @schema_name + ''
print @cadena
exec ( @cadena ) ----- ELIMINA schema
set @cant_schemas = @cant_schemas - 1
end
end
---- select schema_name(s.schema_id),user_name(s.principal_id),*
print ' --- Se procedera a borrar el USUARIO: ' + @usuario
set @cadena=' drop user ' + @usuario2 + ''
print @cadena
exec ( @cadena ) ----- ELIMINA usuario

FETCH NEXT FROM cur_usuarios
INTO @nombre_usuario,@principal_id
END
  • Bucle WHILE: Itera sobre cada usuario huérfano.
    • Variables y Preparación: Asigna el nombre del usuario a las variables @usuario y @usuario2 (con corchetes para manejar nombres con espacios o caracteres especiales).
    • Verificación de Esquemas: Cuenta la cantidad de esquemas asociados con el usuario.
    • Eliminación de Esquemas: Si hay esquemas asociados, los elimina uno por uno.
    • Eliminación de Usuario: Después de eliminar los esquemas, elimina el usuario.

Cierre y Liberación de Recursos

CLOSE cur_usuarios
DEALLOCATE cur_usuarios

set nocount off

drop table #usuarios
go
  • Cierre del Cursor: Cierra y libera el cursor.
  • Restauración de nocount: Vuelve a permitir que SQL Server devuelva mensajes de cuenta de filas.
  • Eliminación de Tabla Temporal: Elimina la tabla temporal #usuarios.

Este script es útil para mantener la base de datos limpia al eliminar usuarios huérfanos y sus esquemas asociados, evitando así posibles problemas de seguridad y administración.

La importancia eliminar usuarios huérfanos en SQL después de una migración.

Más allá de las razones generales mencionadas en la entrada anterior, eliminar usuarios huérfanos en SQL después de una migración reviste especial importancia por las siguientes razones:

1. Complejidad de la migración:

Las migraciones de bases de datos, por su naturaleza compleja, pueden generar un mayor número de usuarios huérfanos debido a diversos factores, como:

  • Eliminación incompleta de usuarios: Si la migración no elimina correctamente las cuentas de usuario asociadas a objetos de la base de datos origen, pueden quedar usuarios huérfanos en el destino.
  • Cambios en la estructura de la base de datos: Si la estructura de la base de datos destino difiere de la origen, es posible que algunos usuarios ya no tengan permisos para acceder a los objetos relevantes, quedando huérfanos.
  • Migración de datos incompleta: Si la migración no transfiere completamente los datos de permisos y roles, puede haber usuarios huérfanos en el destino que no estén asociados a ningún objeto o rol.

2. Mayor impacto en el rendimiento:

En el contexto de una migración, el impacto en el rendimiento causado por usuarios huérfanos puede ser más significativo, ya que:

  • La base de datos destino es un nuevo entorno: Es posible que la base de datos destino no esté optimizada para manejar un gran número de usuarios huérfanos, lo que puede amplificar la degradación del rendimiento.
  • Los recursos del sistema se encuentran en fase de adaptación: Tras la migración, la base de datos destino se encuentra en un proceso de adaptación a la nueva carga de trabajo. La presencia de usuarios huérfanos puede sobrecargar aún más el sistema durante esta fase crucial.

3. Riesgos de seguridad amplificados:

En el contexto posterior a una migración, los riesgos de seguridad asociados a usuarios huérfanos se intensifican:

  • Entorno menos familiar: Los administradores del sistema pueden estar menos familiarizados con la nueva base de datos destino, lo que aumenta la probabilidad de pasar por alto usuarios huérfanos durante las revisiones de seguridad.
  • Mayor superficie de ataque: Una migración puede ampliar la superficie de ataque de la base de datos, ya que los actores maliciosos pueden explorar los nuevos usuarios huérfanos como puntos de entrada vulnerables.

4. Mayor dificultad para la resolución de problemas:

La presencia de usuarios huérfanos puede dificultar la resolución de problemas después de una migración:

  • Diagnóstico confuso: Los errores o fallos de funcionamiento pueden tener su origen en usuarios huérfanos, lo que dificulta la identificación precisa de la causa raíz del problema.
  • Soluciones más complejas: La resolución de problemas relacionados con usuarios huérfanos puede requerir soluciones más complejas y que consumen más tiempo, desviando recursos de otras tareas importantes.

Cambiar el collation en un servidor sql server 2019

Creación de Roles en SQL Server

Descarga de SQL Server Management Studio (SSMS)

Generando Script de creación de Usuarios en SQL Server

Scripts de Creación de Usuarios en SQL Server

Generando Script de creación de Usuarios en SQL Server

En el entorno de administración de bases de datos, es común encontrarnos con la necesidad de generar scripts automatizados para tareas repetitivas como la creación de usuarios. En SQL Server, este proceso se simplifica utilizando consultas SQL que extraen información de metadatos del sistema para construir declaraciones CREATE USER personalizadas. A continuación, exploraremos cómo puedes generar estos scripts de manera eficiente.

Consulta SQL

La consulta SQL proporcionada tiene como objetivo generar comandos CREATE USER para todos los usuarios relevantes en una base de datos específica. Vamos a desglosar cada parte de la consulta para entender cómo funciona:

sqlCopiar 
SELECT
'CREATE USER ['+ dbU.[name] + '] FOR LOGIN [' + dbU.[name] + '] WITH DEFAULT_SCHEMA = [' +dbU.default_schema_name +'];'
FROM
sys.database_principals AS dbU
WHERE (TYPE='S' or TYPE='U' or TYPE='G') aND dbU.default_schema_name is not null
GO

Este script recorre los usuarios de la base de datos que tienen un esquema predeterminado asignado y crea usuarios de SQL Server correspondientes con inicios de sesión asociados. Si se proporciona un esquema predeterminado, también se asigna al usuario recién creado.

Desglose del script para sacar todos los usuarios de una base de datos

  1. Consulta de la base de datos:
    • sys.database_principals AS dbU: sys.database_principals es una vista del sistema que contiene información sobre los principios de seguridad en la base de datos actual (dbU es un alias para esta tabla).
    • WHERE (TYPE = 'S' OR TYPE = 'U' OR TYPE = 'G'): Filtra los resultados para incluir solo usuarios ('S'), usuarios de Windows ('U') y grupos ('G').
    • AND dbU.default_schema_name IS NOT NULL: Asegura que solo se seleccionen aquellos principios de base de datos que tienen un esquema predeterminado definido.
  2. Resultado de la consulta: La consulta devuelve una lista de comandos CREATE USER para cada usuario encontrado en sys.database_principals que cumpla con los criterios especificados. El comando CREATE USER crea un usuario en la base de datos para un login específico, asignando el esquema predeterminado indicado por dbU.default_schema_name.
  3. Ejecución del script:
    • Una vez obtenidos los comandos CREATE USER, generalmente se ejecutan en el contexto de la base de datos para crear los usuarios con los esquemas predeterminados correspondientes.

En resumen, este script automatiza la creación de usuarios en una base de datos SQL Server para los logins relevantes, asegurándose de asignarles un esquema predeterminado válido si está definido en la base de datos.

Beneficios y Aplicaciones Prácticas

  • Automatización: Esta consulta puede ser integrada en scripts más grandes de administración de base de datos para automatizar la creación de usuarios durante el despliegue de una aplicación o la configuración inicial de un entorno.
  • Seguridad y Gestión: Al automatizar la creación de usuarios, se asegura la consistencia y la seguridad, evitando errores humanos y garantizando que todos los usuarios tengan configuraciones adecuadas.
  • Escalabilidad: A medida que crece el número de usuarios y bases de datos, el uso de scripts SQL como este facilita la gestión y reduce la carga administrativa.

Conclución

El uso de consultas SQL como la presentada no solo simplifica tareas administrativas complejas, sino que también mejora la eficiencia operativa y reduce el riesgo de errores. Al integrar estas prácticas en tu flujo de trabajo de administración de bases de datos, puedes optimizar significativamente la gestión y la seguridad de tus entornos SQL Server.

Descarga de SQL Server Management Studio (SSMS)

Cambiar el collation en un servidor sql server 2019

Creación de Roles en SQL Server

Roles en SQL Server

Script Creación de Roles en SQL Server

¿Qué es un Rol en SQL Server?

Un rol en SQL Server es una entidad de seguridad que agrupa a usuarios u otros roles y les otorga permisos para realizar determinadas operaciones en la base de datos. Esto facilita la administración de permisos, ya que en lugar de asignar permisos a usuarios individuales, se pueden asignar a roles y luego agregar o quitar usuarios de esos roles según sea necesario.

Script para sacar la Creación de Roles

Para automatizar la creación de roles personalizados, podemos utilizar Transact-SQL (T-SQL) para generar comandos específicos. A continuación, mostramos un script que genera comandos CREATE ROLE para todos los roles personalizados en una base de datos:

En SQL Server, los roles son entidades que permiten agrupar permisos y otorgarlos de manera eficiente a usuarios y otros roles dentro de una base de datos. Crear roles personalizados es una práctica común para administrar de manera más granular los accesos y la seguridad de los datos.

A continuación, te mostramos cómo puedes generar scripts para crear roles personalizados en tu base de datos utilizando Transact-SQL (T-SQL):

-- Script para generar comandos de creación de roles en SQL Server

-- Seleccionar comandos de creación de roles
SELECT 'CREATE ROLE [' + dbU.[name] + '];'
FROM sys.database_principals AS dbU
WHERE TYPE = 'R' AND is_fixed_role = 0;
GO

Explicación del Script

  1. SELECT Statement: Utilizamos una consulta SELECT para generar dinámicamente comandos de creación de roles en SQL Server.
  2. ‘CREATE ROLE’: La cadena 'CREATE ROLE [' + dbU.[name] + '];' construye el comando CREATE ROLE para cada rol que cumpla con los criterios especificados en la cláusula WHERE.
  3. sys.database_principals: Es una vista del sistema que contiene información sobre los usuarios y roles de la base de datos actual.
  4. Filtrado por Tipo y Fixed Role: TYPE = 'R' asegura que solo se seleccionen roles (y no usuarios). is_fixed_role = 0 excluye roles fijos del sistema, ya que generalmente no se pueden modificar ni eliminar.
  5. GO Statement: Separador de lotes en T-SQL que indica el final de un lote de comandos. Se utiliza aquí para finalizar la generación de scripts.

Uso Práctico del Script

  1. Copiar y Pegar: Los comandos generados por el script se pueden copiar directamente desde el resultado y pegar en una ventana de consulta en SQL Server Management Studio (SSMS) o cualquier otra herramienta de administración de bases de datos compatible.
  2. Personalización: Si deseas personalizar los roles creados, puedes modificar la consulta SELECT para incluir filtros adicionales o ajustar el formato del comando CREATE ROLE.

Consideraciones Adicionales

  • Seguridad y Privilegios: Es fundamental revisar y ajustar los permisos asignados a cada rol creado según los requisitos específicos de seguridad de tu aplicación.
  • Documentación y Automatización: Este script no solo sirve para crear roles, sino también como base para la automatización de tareas administrativas recurrentes, como la gestión de roles en múltiples bases de datos o entornos.

Este script es útil para administradores de bases de datos que necesitan documentar o automatizar la creación de roles personalizados en entornos SQL Server. Asegúrate de revisar y ajustar los nombres y permisos de los roles según los requisitos específicos de tu aplicación y política de seguridad.

Cambiar el collation en un servidor sql server 2019

Descarga de SQL Server Management Studio (SSMS)

cambiar-el-collation-de-la-instancia-sql-server.

Cambiar el collation en un servidor sql server 2019

Collation SQL Server es un conjunto de reglas que determina cómo se comparan, almacenan y ordenan los datos de caracteres en la base de datos. Estas reglas afectan a la sensibilidad de los datos respecto a aspectos como mayúsculas y minúsculas, acentos, y otros caracteres específicos del lenguaje.

Componentes del collation

  1. Sensibilidad a Mayúsculas y Minúsculas (Case Sensitivity):
    • CS (Case Sensitive): abc se considera diferente de ABC.
    • CI (Case Insensitive): abc se considera igual a ABC.
  2. Sensibilidad a Acentos (Accent Sensitivity):
    • AS (Accent Sensitive): e se considera diferente de é.
    • AI (Accent Insensitive): e se considera igual a é.
  3. Sensibilidad a Kana (Kana Sensitivity):
    • KS (Kana Sensitive): Diferencia entre los caracteres Kana japoneses Hiragana y Katakana.
    • KI (Kana Insensitive): No diferencia entre los caracteres Kana japoneses Hiragana y Katakana.
  4. Sensibilidad a Tipos de Caracteres Ampliados (Width Sensitivity):
    • WS (Width Sensitive): Diferencia entre caracteres de ancho completo y ancho medio (usado en algunos idiomas asiáticos).
    • WI (Width Insensitive): No diferencia entre caracteres de ancho completo y ancho medio.

Ejemplos de Collations

  • Latin1_General_CS_AS: Sensible a mayúsculas y minúsculas, y sensible a acentos.
  • SQL_Latin1_General_CP1_CI_AS: Insensible a mayúsculas y minúsculas, e insensible a acentos (este es uno de los collations predeterminados más comunes en instalaciones de SQL Server).

1. SQL_Latin1_General_CP1_CI_AS

Definición: Es una collation que utiliza el conjunto de caracteres de la página de códigos 1252 (Windows Latin-1) y es case-insensitive (CI), accent-sensitive (AS).

Ejemplo de uso:-- Crear una tabla con una collation específica CREATE TABLE EjemploCollation ( Nombre VARCHAR(100) COLLATE SQL_Latin1_General_CP1_CI_AS ); -- Insertar datos INSERT INTO EjemploCollation (Nombre) VALUES ('Hola'), ('hola'), ('Hóla'); -- Consultar datos SELECT * FROM EjemploCollation WHERE Nombre = 'hola';

Resultado:Nombre ------ Hola hola

2. Latin1_General_BIN

Definición: Es una collation que utiliza el conjunto de caracteres Latin1 y es case-sensitive, accent-sensitive y ordena los datos en base a los valores binarios de los caracteres.

Ejemplo de uso:-- Crear una tabla con una collation específica CREATE TABLE EjemploCollation_BIN ( Nombre VARCHAR(100) COLLATE Latin1_General_BIN ); -- Insertar datos INSERT INTO EjemploCollation_BIN (Nombre) VALUES ('Hola'), ('hola'), ('Hóla'); -- Consultar datos SELECT * FROM EjemploCollation_BIN WHERE Nombre = 'hola';

Resultado:Nombre ------ hola

3. Modern_Spanish_CI_AI

Definición: Es una collation que utiliza el conjunto de caracteres Modern Spanish y es case-insensitive (CI), accent-insensitive (AI).

Ejemplo de uso:-- Crear una tabla con una collation específica CREATE TABLE EjemploCollation_ES ( Nombre VARCHAR(100) COLLATE Modern_Spanish_CI_AI ); -- Insertar datos INSERT INTO EjemploCollation_ES (Nombre) VALUES ('Hola'), ('hola'), ('Hóla'); -- Consultar datos SELECT * FROM EjemploCollation_ES WHERE Nombre = 'hola';

Resultado:Nombre ------ Hola hola Hóla

4. Japanese_CI_AS

Definición: Es una collation que utiliza el conjunto de caracteres Japanese y es case-insensitive (CI), accent-sensitive (AS).

Ejemplo de uso:-- Crear una tabla con una collation específica CREATE TABLE EjemploCollation_JP ( Nombre VARCHAR(100) COLLATE Japanese_CI_AS ); -- Insertar datos INSERT INTO EjemploCollation_JP (Nombre) VALUES ('こんにちは'), ('コンニチハ'); -- Consultar datos SELECT * FROM EjemploCollation_JP WHERE Nombre = 'こんにちは';

Resultado: Nombre ------ こんにちは

5. Chinese_PRC_BIN

Definición: Es una collation que utiliza el conjunto de caracteres Simplified Chinese y es case-sensitive, accent-sensitive y ordena los datos en base a los valores binarios de los caracteres.

Ejemplo de uso:

-- Crear una tabla con una collation específica CREATE TABLE EjemploCollation_CN ( Nombre VARCHAR(100) COLLATE Chinese_PRC_BIN ); -- Insertar datos INSERT INTO EjemploCollation_CN (Nombre) VALUES ('你好'), ('您好'); -- Consultar datos SELECT * FROM EjemploCollation_CN WHERE Nombre = '你好';

Resultado: Nombre ------ 你好

Configuración del Collation

  1. Durante la Instalación del Servidor: Puedes establecer el collation predeterminado del servidor al instalar SQL Server. Este collation se aplicará a todas las bases de datos que se creen después de la instalación, a menos que se especifique un collation diferente para ellas.
  2. Para una Base de Datos Específica: Puedes establecer el collation de una base de datos específica al crearla o modificarla más tarde.

Para cambiar el collation en un servidor SQL Server 2019

cambiar-el-collation-de-la-base-de-datos-en-una-instancia-de-sql

Cambiar el collation en una base de datos SQL Server puede ser necesario por diversas razones, como garantizar la compatibilidad de datos o mejorar el rendimiento de consultas. A continuación, se detallan los pasos necesarios para realizar este cambio de manera segura y efectiva.

1. Identifica la Base de Datos que Deseas Modificar

Primero, asegúrate de saber en qué base de datos deseas cambiar el collation. Este es el primer paso para evitar modificar accidentalmente la base de datos incorrecta.

2. Haz una Copia de Seguridad de la Base de Datos

Antes de realizar cambios importantes en la configuración de la base de datos, siempre es recomendable hacer una copia de seguridad completa para evitar pérdida de datos.

3. Conéctate al Servidor

Usa SQL Server Management Studio (SSMS) u otra herramienta similar para conectarte al servidor donde se encuentra la base de datos que deseas modificar.

4. Consulta el Collation Actual

Ejecuta la siguiente consulta para ver el collation actual de la base de datos:

SELECT DATABASEPROPERTYEX(‘NombreDeTuBaseDeDatos’, ‘Collation’) AS ‘CollationActual’;

5. Deshabilita las Conexiones a la Base de Datos

Si hay usuarios conectados a la base de datos que estás a punto de modificar, deberías deshabilitar las conexiones para evitar conflictos durante el cambio de collation.

Puedes hacerlo ejecutando:

ALTER DATABASE NombreDeTuBaseDeDatos SET SINGLE_USER WITH ROLLBACK IMMEDIATE;

6. Cambia el Collation

Utiliza la siguiente sintaxis para cambiar el collation de la base de datos:

ALTER DATABASE NombreDeTuBaseDeDatos COLLATE NuevoCollation;

Asegúrate de reemplazar NombreDeTuBaseDeDatos con el nombre real de tu base de datos y NuevoCollation con el nuevo collation que deseas aplicar.

7. Vuelve a Habilitar las Conexiones a la Base de Datos (Opcional)

Si deshabilitaste las conexiones en el paso 5, recuerda habilitarlas nuevamente después de realizar el cambio de collation:

ALTER DATABASE NombreDeTuBaseDeDatos SET MULTI_USER;

8. Verifica el Cambio

Finalmente, ejecuta la consulta del paso 4 nuevamente para asegurarte de que el collation se haya cambiado correctamente.

SELECT DATABASEPROPERTYEX(‘NombreDeTuBaseDeDatos’, ‘Collation’) AS ‘CollationActual’;

Siguiendo estos pasos, puedes cambiar el collation de tu base de datos en SQL Server 2019 de manera segura y efectiva. Asegúrate de realizar una planificación adecuada y probar exhaustivamente después de realizar cualquier cambio importante en la configuración del servidor.

Como sería el rebuild del collation en la instancia de sql server 2019

cambiar-el-collation-de-la-instancia-sql-server.

Rebuild es un término que normalmente se asocia con la reconstrucción de índices en SQL Server, pero para cambiar el collation de la instancia de SQL Server 2019 no hay un proceso directo de «rebuild» como tal. En su lugar, necesitarás reinstalar SQL Server con el collation deseado.

Aquí tienes los pasos generales para reconstruir la instancia de SQL Server con un nuevo collation:

  1. Preparación:
    • Asegúrate de tener una copia de seguridad completa de todas tus bases de datos.
    • Detén todos los servicios de SQL Server y cualquier otra aplicación que pueda estar utilizando SQL Server.
  2. Desinstalación de SQL Server:
    • Desde el Panel de Control de Windows, selecciona «Desinstalar un programa».
    • Encuentra tu instancia de SQL Server en la lista de programas instalados y selecciónala para desinstalarla.
  3. Reinstalación de SQL Server:
    • Descarga el instalador de SQL Server 2019 con el collation deseado.
    • Ejecuta el instalador y sigue las instrucciones.
    • Durante la instalación, asegúrate de seleccionar el collation que deseas para la instancia de SQL Server.
  4. Configuración:
    • Después de completar la instalación, configura las opciones adicionales de SQL Server según sea necesario, como la autenticación, las carpetas de datos, etc.
  5. Restauración de bases de datos:
    • Si hiciste una copia de seguridad de tus bases de datos antes de realizar la reinstalación, ahora es el momento de restaurarlas en la nueva instancia de SQL Server.
  6. Pruebas:
    • Después de restaurar tus bases de datos, realiza pruebas exhaustivas para asegurarte de que todo funcione como se espera.
    • Verifica que todas las aplicaciones y consultas funcionen correctamente con el nuevo collation.

Recuerda que este proceso es bastante invasivo y puede tener un impacto significativo en tus aplicaciones y usuarios. Asegúrate de realizar una planificación adecuada y probar exhaustivamente después de realizar cualquier cambio importante en la configuración de SQL Server.

Conclusión

Las collations en SQL Server son fundamentales para definir cómo se comparan y ordenan los datos en columnas de texto. Cada collation puede tener diferentes sensibilidades a mayúsculas, acentos y otros factores, lo que influye directamente en el comportamiento de las consultas y operaciones de la base de datos. Al elegir la collation adecuada, puedes asegurar que tu base de datos maneje los datos de texto de la forma más apropiada para tu aplicación y tus usuarios.

Enlaces de interés:

¿Qué hace DBCC CHECKDB?

DBCC CHECKDB

¿Qué hace DBCC CHECKDB?

DBCC CHECKDB en SQL Server se utiliza para verificar la integridad física y lógica de todos los objetos en una base de datos. A continuación, se detallan sus principales funciones y lo que hace exactamente:

Funciones Principales de DBCC CHECKDB

  1. Comprobación de Consistencia de Datos:
    • Verifica la consistencia física y lógica de las páginas de datos y las estructuras dentro de la base de datos.
    • Comprueba la integridad de los índices, las claves primarias y las claves externas.
  2. Verificación de Asignación:
    • Comprueba que todas las páginas de datos estén correctamente asignadas y que no haya páginas no asignadas que estén siendo utilizadas.
  3. Validación de la Estructura de Árbol de Índices:
    • Asegura que las estructuras de los índices (tanto clúster como no clúster) estén correctamente organizadas y enlazadas.
  4. Comprobación de Consistencia de Catálogo:
    • Verifica la coherencia entre los metadatos del sistema y los datos del usuario.
  5. Verificación de Relaciones de Claves:
    • Comprueba que las relaciones de las claves externas sean válidas y consistentes.

Sintaxis Básica

DBCC CHECKDB (‘nombre_de_la_base_de_datos’)

Opciones Comunes de DBCC CHECKDB

Claro, aquí están los comandos DBCC CHECKDB en SQL Server con sus respectivas explicaciones para cada opción:

WITH NO_INFOMSGS:

  • Suprime todos los mensajes informativos. Solo se mostrarán los errores.
DBCC CHECKDB ('nombre_de_la_base_de_datos') WITH NO_INFOMSGS;

WITH ALL_ERRORMSGS:

  • Muestra todos los mensajes de error. Por defecto, solo se muestran los primeros 200 mensajes de error de cada tipo.
DBCC CHECKDB ('nombre_de_la_base_de_datos') WITH ALL_ERRORMSGS;

WITH TABLOCK:

  • Utiliza bloqueos de tabla en lugar del método de bloqueo predeterminado. Esto puede reducir el espacio requerido en tempdb pero también puede reducir la concurrencia.
DBCC CHECKDB ('nombre_de_la_base_de_datos') WITH TABLOCK;

WITH PHYSICAL_ONLY:

  • Limita la verificación a la integridad de la estructura física de la base de datos, reduciendo el tiempo de ejecución para bases de datos grandes. Esta verificación incluye la integridad de los encabezados físicos de página y registro, y la consistencia de la asignación.
DBCC CHECKDB ('nombre_de_la_base_de_datos') WITH PHYSICAL_ONLY;

REPAIR_ALLOW_DATA_LOSS, REPAIR_FAST, REPAIR_REBUILD:

Estas opciones se utilizan para reparar la base de datos. Ten en cuenta que utilizar REPAIR_ALLOW_DATA_LOSS puede resultar en pérdida de datos, por lo que se debe usar con precaución y como último recurso.

REPAIR_ALLOW_DATA_LOSS:

  • Repara la base de datos y permite la pérdida de datos.
DBCC CHECKDB ('nombre_de_la_base_de_datos', REPAIR_ALLOW_DATA_LOSS);

REPAIR_FAST:

  • Mantenido por compatibilidad hacia atrás y no realiza ninguna acción de reparación.
DBCC CHECKDB ('nombre_de_la_base_de_datos', REPAIR_FAST);

REPAIR_REBUILD:

  • Realiza reparaciones que no tienen riesgo de pérdida de datos, como reparar filas faltantes en índices no agrupados.
códigoDBCC CHECKDB ('nombre_de_la_base_de_datos', REPAIR_REBUILD);

Nota: Utilizar opciones de reparación, especialmente REPAIR_ALLOW_DATA_LOSS, puede resultar en pérdida de datos y debe usarse solo cuando sea necesario. Siempre asegúrate de tener una copia de seguridad reciente de tu base de datos antes de realizar cualquier operación de reparación.

Ejemplo de Uso

Para verificar la base de datos llamada MiBaseDeDatos y suprimir los mensajes informativos:


DBCC CHECKDB ('MiBaseDeDatos') WITH NO_INFOMSGS;

Resultados de DBCC CHECKDB

  • Mensajes de Informativos:
    • Detalles sobre la verificación realizada.
  • Mensajes de Error:
    • Informan de cualquier inconsistencia o problema encontrado.
  • Sugerencias de Reparación:
    • Si se encuentran errores, se proporcionan sugerencias sobre cómo repararlos, incluyendo las opciones de reparación posibles.

Consideraciones

  • Impacto en el Rendimiento:
    • DBCC CHECKDB puede ser intensivo en recursos y afectar el rendimiento del servidor, especialmente en bases de datos grandes. Es recomendable ejecutarlo durante períodos de baja actividad.
  • Reparación de Errores:
    • La opción de reparación con pérdida de datos (REPAIR_ALLOW_DATA_LOSS) debe utilizarse con precaución y solo después de realizar una copia de seguridad completa.

DBCC CHECKDB es una herramienta esencial para el mantenimiento y la salud de las bases de datos en SQL Server, permitiendo detectar y, en algunos casos, reparar problemas de integridad en la base de datos.

DBCC CHECKDB verifica tanto la consistencia física como la lógica de las páginas de datos y las estructuras dentro de una base de datos en SQL Server. Aquí hay una explicación más detallada de cómo se realiza esta verificación:

Verificación de Consistencia Física cuando usas DBCC CHECKDB

La consistencia física se refiere a la integridad de las páginas de datos en el disco. DBCC CHECKDB realiza las siguientes comprobaciones físicas:

  1. Integridad de Página:
    • Verifica que cada página de datos en la base de datos esté correctamente estructurada y no esté dañada.
    • Comprueba los encabezados de página, sumas de comprobación y otras características físicas para asegurarse de que no hay corrupción física.
  2. Asignación de Páginas:
    • Asegura que todas las páginas de datos estén asignadas correctamente y que no haya páginas no asignadas que se estén utilizando indebidamente.
    • Verifica las estructuras de asignación de páginas como el Global Allocation Map (GAM), Shared Global Allocation Map (SGAM), Page Free Space (PFS), etc.

Verificación de Consistencia Lógica cuando usas DBCC CHECKDB

La consistencia lógica se refiere a la integridad de las relaciones y estructuras lógicas dentro de la base de datos. DBCC CHECKDB realiza las siguientes comprobaciones lógicas:

  1. Estructuras de Índice:
    • Verifica que todos los índices, tanto clúster como no clúster, estén correctamente construidos y enlazados.
    • Asegura que la estructura de los índices B-tree esté intacta.
  2. Relaciones de Datos:
    • Comprueba las relaciones entre tablas, incluyendo claves primarias y externas, para asegurarse de que no haya datos huérfanos ni referencias rotas.
  3. Metadatos:
    • Verifica la coherencia entre los metadatos del sistema (como el catálogo de base de datos) y los datos de usuario.
    • Asegura que las definiciones de objetos en el catálogo coincidan con las estructuras reales en la base de datos.
  4. Restricciones de Claves:
    • Asegura que todas las restricciones de claves (primarias, externas y únicas) se mantengan y que los datos respeten estas restricciones.

Proceso de DBCC CHECKDB

El proceso típico de DBCC CHECKDB incluye las siguientes etapas:

  1. Comprobación de Asignación:
    • Verifica la asignación de páginas y extents en la base de datos.
  2. Comprobación de Índices:
    • Examina todos los índices en la base de datos para asegurarse de que estén en buen estado.
  3. Comprobación de Consistencia de Tablas:
    • Verifica que todas las tablas y vistas estén lógicamente consistentes.
  4. Comprobación de Catálogo:
    • Asegura que los metadatos del sistema sean coherentes y correctos.

Ejemplo de Uso

Aquí hay un ejemplo de cómo ejecutar DBCC CHECKDB en una base de datos llamada MiBaseDeDatos y suprimir los mensajes informativos:

DBCC CHECKDB (‘MiBaseDeDatos’) WITH NO_INFOMSGS;

Enlaces de interés:

Descarga de SQL Server Management Studio (SSMS)

Descarga de SQL Server Management Studio (SSMS)

Descarga de SQL Server Management Studio (SSMS)

SQL Server Management Studio (SSMS) es una herramienta esencial para los profesionales de bases de datos. Ofrece un entorno gráfico integrado para gestionar las bases de datos SQL Server, y es utilizada tanto por desarrolladores como por administradores de bases de datos. En esta guía, te explicaremos paso a paso cómo descargar e instalar SQL Server Management Studio.

¿Qué es SQL Server Management Studio (SSMS)?

SQL Server Management Studio es una aplicación gratuita proporcionada por Microsoft que permite gestionar SQL Server y bases de datos en Azure SQL. Con SSMS, puedes diseñar, implementar y gestionar todos los componentes de SQL Server, desde las instancias hasta los servicios de integración, informes y análisis.

Características de SSMS

  • Interfaz de usuario intuitiva: Facilita la gestión de las bases de datos con una interfaz gráfica.
  • Gestión integral: Permite la administración completa de bases de datos, tanto locales como en la nube.
  • Herramientas avanzadas de desarrollo: Incluye editores de scripts y herramientas de depuración.
  • Compatibilidad con Azure: Soporte para administrar bases de datos en Azure SQL y otros servicios de Azure.

Requisitos del Sistema

Antes de proceder con la descarga de SSMS, es importante asegurarse de que tu sistema cumple con los requisitos mínimos necesarios:

  • Sistema operativo: Windows 8, Windows 8.1, Windows 10, Windows Server 2012 (y versiones posteriores).
  • Memoria: Al menos 2 GB de RAM (4 GB recomendados).
  • Espacio en disco: Mínimo 1 GB de espacio libre.
  • Procesador: Procesador compatible con x86 o x64 de 1.8 GHz o superior.

Cómo Descargar SQL Server Management Studio

Paso 1: Acceder al Sitio Oficial de Microsoft

Para descargar SSMS, primero debes visitar el sitio oficial de Microsoft. Puedes hacerlo buscando «Descargar SQL Server Management Studio» en tu motor de búsqueda favorito o directamente visitando la página de descarga de SSMS en Microsoft.

Paso 2: Seleccionar la Versión

En la página de descarga, encontrarás la versión más reciente de SSMS disponible. Asegúrate de descargar la versión más actual para aprovechar las últimas características y mejoras de seguridad.

Paso 3: Iniciar la Descarga

Haz clic en el botón de descarga para iniciar la descarga del instalador de SSMS. El archivo será un ejecutable (.exe).

Instalación de SQL Server Management Studio

Paso 1: Ejecutar el Instalador

Una vez que el archivo se haya descargado, haz doble clic en el instalador para comenzar el proceso de instalación. Es posible que necesites permisos de administrador para ejecutar el instalador.

Paso 2: Configuración Inicial

El asistente de instalación te guiará a través de varios pasos. Acepta los términos de la licencia y selecciona la ubicación donde deseas instalar SSMS. La ruta por defecto suele ser adecuada para la mayoría de los usuarios.

Paso 3: Completar la Instalación

Después de configurar las opciones iniciales, haz clic en «Instalar» para comenzar la instalación. Este proceso puede tardar varios minutos. Una vez completada la instalación, podrás iniciar SSMS desde el menú de inicio o el escritorio.

Primeros Pasos con SQL Server Management Studio

Conexión a una Instancia de SQL Server

Al abrir SSMS por primera vez, se te pedirá que te conectes a una instancia de SQL Server. Introduce el nombre del servidor y las credenciales de acceso. Puedes conectarte a instancias locales o remotas.

Exploración del Entorno

SSMS tiene varias ventanas y paneles que puedes utilizar para navegar y gestionar tus bases de datos:

  • Explorador de Objetos: Permite ver y gestionar todos los objetos de las bases de datos.
  • Editor de Consultas: Para escribir y ejecutar scripts SQL.
  • Registro de Actividades: Monitorea el rendimiento y la actividad del servidor.

Conclusión

SQL Server Management Studio es una herramienta poderosa y versátil que facilita la gestión de bases de datos SQL Server. Siguiendo esta guía, podrás descargar e instalar SSMS rápidamente y comenzar a aprovechar sus numerosas funcionalidades. Asegúrate de explorar todas las opciones que ofrece para sacar el máximo provecho de tu experiencia en gestión de bases de datos.

FAQs

1. ¿Es SQL Server Management Studio gratuito?

Sí, SSMS es una herramienta gratuita proporcionada por Microsoft.

2. ¿Puedo usar SSMS en macOS o Linux?

SSMS está diseñado específicamente para sistemas operativos Windows. Para macOS o Linux, puedes usar herramientas alternativas como Azure Data Studio.

3. ¿Necesito una instancia de SQL Server para usar SSMS?

Sí, necesitas una instancia de SQL Server (local o remota) para conectar y gestionar bases de datos con SSMS.

Para más información y guías detalladas, visita la documentación oficial de SSMS en Microsoft.