viernes, 12 de febrero de 2021

SQL Server Propiedades de Base de Datos – Seguimiento de Cambios, Permisos y Propiedades Extendidas

Introducción

Hasta este punto, se han visto las propiedades mas comunes de las bases de datos, archivos que son utilizados, grupos de archivos que son usados y a los que los archivos se asocian, las categorías de opciones que permiten establecer la forma en que la base de datos se comporta. Ahora es el turno de la página de seguimiento de cambios, que se utiliza principalmente para llevar un rastreo de cambios en la información de la base de datos, asimismo se hablara sobre la página de permisos. Cabe mencionar que existe también una pagina denominada Propiedades Extendidas, que permite colocar información sobre la base de datos, por ejemplo, la descripción de la base de datos, alguna liga a un sitio web al que soporta, etc. 

Página de seguimiento de cambios

Esta página es utilizada para ver o modificar la configuración de seguimiento de cambios para la base de datos seleccionada.  Pero, ¿por qué usar el seguimiento de cambios? Esta facilidad se utiliza principalmente para llevar a cabo la extracción de los datos que son utilizados para la actualización de una base de datos que sirve en un almacén de datos. De tal forma, que los procesos de Extracción solo tomaran los datos que han cambiado y no tener que desechar los datos previos y cargar nuevamente toda la información requerida.



Seguimiento de cambios

Esta página puede ser usada para habilitar o deshabilitar el seguimiento de cambios para la base de datos. También puede configurarse el seguimiento de cambios mediante el uso de la instrucción ALTER DATABASE. 
Se muestran las siguientes propiedades asociadas:
Seguimiento de cambios – Indica si la propiedad esta habilitada. El valor Verdadero permite habilitar el seguimiento de cambios en tablas individuales. Cuando esta en Falso, las propiedades a continuación se presentan en solo lectura.
Periodo de retención – Indica el período mínimo para mantener la información de seguimiento de cambios en la base de datos. Los datos se eliminan solo si el valor de Limpieza automática es Verdadero. El valor predeterminado es 2. El período mínimo de retención es de 1 minuto. No hay un período máximo de retención.
Unidades del período de retención - Indica las unidades para el valor del período de retención. Se puede seleccionar entre Días, Horas o Minutos. El valor predeterminado es Días
Limpieza automática - Indica sí la información de seguimiento de cambios se elimina automáticamente después del período de retención especificado. 

Pagina Permisos

En esta página se pueden ver y establecer los permisos de los objetos que son protegibles en la base de datos.



La parte superior muestra, en forma de solo lectura
Nombre del servidor – Servidor donde se encuentra el servicio de administración de la base de datos
Nombre de Base de Datos – Indicando el nombre de la base de datos.
En la parte media, aparece una cuadricula con los nombres de Usuario o Roles que utilizan la base de datos, con las siguientes columnas
Nombre – Nombre del usuario o rol
Tipo – indica el tipo asociado
La parte inferior muestra dos pestañas, relacionadas con los permisos asociados con el usuario o rol seleccionado en la parte inmediata anterior. La primera pestaña es la denominada Explicita y la segunda pestaña se denomina Efectiva. En ambas se presentan las siguientes columnas.
Permiso – indica el nombre del permiso
Cedente – Indica el nombre del que otorgante del permiso al usuario o rol
Concedido – Indica si se cuenta con el permiso al usuario o rol
Con Subvención – indica si el permiso puede ser concedido a otros por el usuario o rol.
Negado – Indicara si el permiso está negado al usuario o rol

Página Propiedades Extendidas

Las propiedades extendidas es una característica única de Microsoft SQL Server que permite almacenar información adicional sobre los objetos de la base de datos.

Las propiedades extendidas requieren definir el nombre y el valor asociado a esa propiedad, por ejemplo, supóngase que se  tiene una base de datos que debe seguirse a lo largo de un desarrollo, de tal forma que se debe identificar la version entre valores Desarrollo, Pruebas, Producción. Así, se puede generar una nueva propiedad extendida con esas características.

Conclusión

Hasta este momento, se han visto las propiedades de las bases de datos que son comunes, se han indicado en esta entrega tres tipos de propiedades que son muy dispares. Ya se ha indicado que en estas mismas paginas se pueden establecer los valores requeridos, asimismo, se ha indicado que muchas las propiedades se pueden modificar usando la sentencia ALTER DATABASE. Si se requiere usar T-SQL para obtener la información que se muestra en la pagina indicada, para la categoría varios, es posible usar las siguientes consultas:

/*******************************************************************************
-- Script : Get Database Properties Change-Tracking, Permission, Extended
-- Author : Julio J Bueyes
-- julio.bueyes@outlook.com
--
-- Description : This script helps to get a detailed view of the database properties – Change Tracking, Permission and Extended pages.
--
-- DISCLAIMER. This Code is provided for the purpose of illustration only and is not intended to be used in a production environment. 
--
-- THIS CODE AND ANY RELATED INFORMATION ARE PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, 
-- INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A PARTICULAR PURPOSE.
**********************************************************************************/
-- Set the Database Name required
USE model;
GO

---- Now the information over Change Tracking
SELECT CASE is_db_chaining_on WHEN 1 THEN 'True' ELSE 'False' END AS [Change Tracking],  
    retention_period AS [Retention Period], 
    retention_period_units_desc AS [Retention Period Units],
    CASE ISNULL(is_auto_cleanup_on,0) WHEN 0 THEN '' ELSE  CASE is_auto_cleanup_on WHEN 1 THEN 'True' ELSE 'False' END END AS [Auto Cleanup]
FROM sys.databases DB 
    LEFT OUTER JOIN sys.change_tracking_databases CTD ON DB.database_id = CTD.database_id
WHERE DB.database_id = DB_ID();

--- Get the User or Roles on Database
SELECT name as Name, type_desc AS Type
FROM sys.database_principals dp 
WHERE type = 'R' AND name NOT LIKE 'db_%'

-- Get the Effective Permissions to User or Role on Database
SELECT dp.permission_name AS [Permission], dbp.name AS [Grantor], 
        CASE dp.state WHEN 'G' THEN 1 ELSE 0 END AS [Grant], 
        CASE dp.state WHEN 'W' THEN 1 ELSE 0 END AS [With Grant],
        CASE dp.state WHEN 'D' THEN 1 ELSE 0 END AS [Deny]
FROM sys.database_permissions dp 
    LEFT OUTER JOIN sys.database_principals dbp 
        ON dp.grantor_principal_id = dbp.principal_id AND dbp.type='R'
WHERE dp.class = 0
AND dp.grantee_principal_id = 1

--- Get Extended Properties
SELECT p.name AS [Name],
   p.value AS [Value]
FROM sys.extended_properties AS p
WHERE p.major_id=0 
   AND p.minor_id=0 
   AND p.class=0
ORDER BY [Name] ASC


Como se ha indicado previamente, puede fácilmente obtener los datos directamente de la ventana de propiedades de la base de datos, en las páginas indicadas, no obstante, el script funciona para obtener los mismos valores proporcionados por las páginas.

miércoles, 3 de febrero de 2021

SQL Server Propiedades de Base de Datos – Opciones 4

Introducción

Ya se ha indicado previamente sobre las propiedades de las bases de datos y he indicado las paginas General, Archivos, Grupos de Archivos y las primeras tres partes de la pagina Opciones, en previas entregas, ahora continuare con la última parte de las opciones de configuración de las bases de datos. 

Página Opciones

Ya se ha indicado previamente que es posible utilizar esta página para ver o modificar varias opciones de configuración para la base de datos seleccionada. Se han establecido las categorías de opciones:

Automático

Contención

Cursor

Configuraciones del ámbito de la base de datos

FILESTREAM

Varios

En esta ocasión se hablará de las opciones restantes. Sin embargo, es necesario tener en cuenta que puede usar las declaraciones de Transact-SQL ALTER DATABASE SET OPTIONS para modificar los valores si así se prefiere.

Recuperación

Esta categoría esta relacionada con la forma en que se lleva a cabo la recuperación de la base de datos en disco.

Verificar página – Aquí se indica la opción que se utiliza para descubrir y notificar transacciones incompletas de E / S causadas por errores de lectura / escritura de disco. Los valores permitidos son None (no se lleva a cabo alguna verificación), TornPageDetection ( se llevan a cabo las siguientes acciones, al escribir una página en disco, se toman los primeros 2 bits de cada sector de 512 bytes en cada página y se almacenan en el encabezado de la página, posteriormente, cuando la página se lee desde el disco, Microsoft SQL Server compara los bits del encabezado con los bits del sector, para asegurarse de que sigan siendo los mismos) y Checksum (al realizar la escritura en disco se crea un valor de suma de comprobación utilizando el contenido de toda la página y guarda ese valor en el encabezado, cuando se lleva a cabo la lectura de una página del disco, se crea de nuevo una suma de comprobación y se compara con la suma de comprobación guardada). Cabe mencionar que el valor recomendado por Microsoft es Checksum.

Tiempo de recuperación objetivo (segundos) – Presenta el valor del límite máximo de tiempo, expresado en segundos, para recuperar la base de datos especificada en caso de un bloqueo. 

Agente de servicio

Esta categoría aplica como se funciona el agente de servicio 

Agente habilitado – Indica si el agente de servicio se encuentra habilitado.

Prioridad de Honor del Servicio – Muestra el valor de Propiedad de Service Broker de solo lectura.

Identificador de corredor de servicios – Muestra el valor del identificador, este valor es de lectura.

Estado

Esta categoría muestra las opciones del estado operativo de la base de datos.

Base de datos de solo lectura - Indica si la base de datos es de solo lectura. Cuando es verdadero, los usuarios solo pueden leer datos en la base de datos, pero no pueden modificar los datos ni los objetos de la base de datos. Es importante indicar que la base de datos se puede eliminarse utilizando DROP DATABASE. 

Estado de la base de datos – Muestra el estado actual de la base de datos. Este valor no es editable. Por lo general, una base de datos mantiene el valor NORMAL, en caso de que este estado se presente con algún valor diferente deberá indagarse que ha pasado con la base de datos.

Cifrado habilitado – Muestra si la base de datos está habilitada para el cifrado de datos. Es necesario contar con una clave de cifrado. 

Acceso restringido - Muestra que usuarios pueden acceder a la base de datos. Los posibles valores son:  Múltiple ( con el estado normal de producción permite que varios usuarios accedan a la base de datos),  Único (usado principalmente para acciones de mantenimiento, solo un usuario puede acceder a la base de datos),  Restringido (solo los miembros de los roles db_owner, dbcreator o sysadmin pueden usar la base de datos).

Conclusión

A lo largo de 4 entregas se han mencionado los valores de las distintas opciones en las categorías indicadas, es necesario indicar que muchos de los valores de las opciones establecidos por defecto, definidos desde la base de datos de sistema denominada model, son los que se utilizan cuando se crea una base de datos, no obstante, cada base de datos puede utilizar y establecer valores diferentes entre las opciones.

Una de las opciones que se sugiere sea el mismo en todas las bases de datos del servidor es el de la del nivel de compatibilidad, ya que esto permite que la base de datos pueda efectivamente utilizar las facilidades de la versión de Microsoft SQL Server. Otro de las opciones que se sugiere que se mantenga como la del servidor es la intercalación (collation), dado que cuando es diferente del que se tiene en las bases de datos de sistema, puede provocar errores y bajo desempeño en el uso.

Ya se ha indicado que esta página de propiedades de la base de datos brinda información de las opciones de la base de datos. Si se requiere usar T-SQL para obtener la información que se muestra en la pagina indicada, para la categoría varios, es posible usar la siguiente consulta.

/*******************************************************************************
-- Script : Get Database Options Properties Part 4 
-- Author : Julio J Bueyes
-- julio.bueyes@outlook.com
--
-- Description : This script helps to get a detailed view of the database properties – Options page – part 4.
--
-- DISCLAIMER. This Code is provided for the purpose of illustration only and is not intended to be used in a production environment. 
--
-- THIS CODE AND ANY RELATED INFORMATION ARE PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, 
-- INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A PARTICULAR PURPOSE.
**********************************************************************************/
-- Set the Database Name required
USE model;
GO
--- Recovery
SELECT page_verify_option_desc AS [Page Verify], 
    target_recovery_time_in_seconds AS [Target Recovery Time (Seconds)]
FROM sys.databases
WHERE database_id = db_id()
--- Service Broker
SELECT CASE is_broker_enabled WHEN 1 THEN 'True' ELSE 'False' END AS [Broker Enabled], 
    CASE is_honor_broker_priority_on WHEN 1 THEN 'True' ELSE 'False' END AS [Honor Broker Priority], 
    service_broker_guid AS [Service Broker Identifier]
FROM sys.databases
WHERE database_id = db_id()
-- State
SELECT CASE is_read_only WHEN 1 THEN 'True' ELSE 'False' END AS [Database Read Only], 
    CASE state_desc WHEN 'ONLINE' THEN 'NORMAL' ELSE state_desc END AS [Database State], 
    CASE is_encrypted WHEN 1 THEN 'True' ELSE 'False' END AS [Encryption Enabled],
    user_access_desc AS [Restrict Access]
FROM sys.databases
WHERE database_id = db_id()

Como se ha establecido previamente, pueden observarse de forma fácil obtener los datos directamente de la ventana de propiedades de la base de datos, en la página Opciones, no obstante, el script funciona para obtener los mismos valores proporcionados por la página.