jueves, 9 de septiembre de 2021

SQL Server Conociendo sobre indices

Introducción

Siempre es importante conocer los tipos de índices que se manejan en el motor de base de datos de Microsoft, ya sea de Microsoft SQL Server o Azure SQL Database, de esta forma, en esta entrega hablare de los índices.

Es importante recordar que un índice de base de datos es una estructura de datos que mejora la velocidad de las operaciones de recuperación de datos en una tabla de base de datos a costa de escrituras adicionales y espacio de almacenamiento para mantener la estructura de datos del índice. Los índices se utilizan para ubicar datos rápidamente sin tener que escanear una tabla de la base de datos cada vez que se accede a una solicitud de consulta.

Actualmente se pueden catalogar en tres tipos:

  • Índices agrupados (clustered indexes)
  • Índices no-agrupados (non-clustered indexes)
  • Índices únicos (unique Index)

Índices Agrupados

Los índices agrupados permiten ordenar y almacenar las filas de datos en una tabla o vista en función de sus valores clave. Es necesario indicar que un índice agrupado es una estructura que se define como unida a la misma tabla, son columnas incluidas en la definición del índice.

Es preciso indicar que sólo puede haber un índice agrupado por tabla, porque las filas de datos en sí mismas se pueden almacenar en un solo orden. Para Microsoft SQL Server, un índice es una estructura en disco asociada con una tabla o vista que mejora la velocidad de recuperación de filas de una tabla o vista. Un índice se compone de claves creadas a partir de una o más columnas en una tabla o vista. A este tipo de índices también se denominan como índice de almacén de filas porque es un índice de árbol B.

Microsoft SQL Server Clustered Index Representation

Estas claves que componen el índice se almacenan en una estructura (árbol B) que permite a Microsoft SQL Server encontrar las filas asociadas con valores clave de manera rápida y eficiente. Un árbol B es un árbol de búsqueda binario equilibrado, es un árbol que automáticamente mantiene su altura pequeña para una secuencia de inserciones y eliminaciones.

Para crear un índice agrupado se declara dentro de la creación de la tabla, como ejemplo se indicará la creación de una tabla de un directorio, de la siguiente forma:

--- Crear una tabla incluyendo indice agrupado
CREATE TABLE Directorio
(
id int NOT NULL PRIMARY KEY CLUSTERED,
Name varchar(100)
);

Otra forma de crear la misma tabla sería

--- Crear tabla incluyendo indice agrupado al final de las columnas
CREATE TABLE Directorio
(
id int NOT NULL,
Name varchar(100),
CONSTRAINT PK_Directorio_Id PRIMARY KEY CLUSTERED(Id)
);

Finalmente, es posible crear la tabla sin declarar algún índice y crearlo posteriormente, como se muestra a continuación:

--- Crear tabla y posteriormente crear indice
CREATE TABLE Directorio
(
id int NOT NULL,
Name varchar(100)
);
--- Crear indice agrupado para la tabla anterior
CREATE CLUSTERED INDEX PK_Directorio_id 
ON Directorio (Id);

Cualquiera de estos tres ejemplos crea la tabla nombrada directorio indicando que el índice agrupado este asociado a la tabla a través de la columna Id.

Con la llegada de la versión Microsoft SQL Server 2012 y para el uso de almacenes de datos, es posible llevara a cabo la definición de índices agrupados con almacenamiento de columnas. El índice incluye todas las columnas de la tabla y almacena la tabla completa. Si la tabla existente es un índice agrupado o de pila, la tabla se convierte en un índice de almacén de columnas agrupado. Si la tabla ya está almacenada como un índice de almacén de columnas agrupado, el índice existente se elimina y éste se reconstruye.

Para crear un índice agrupado con almacenamiento de columnas se usa la siguiente sentencia:

--- Crear un indice agrupado con almacenamiento de columnas
CREATE CLUSTERED COLUMNSTORE IXCS_Directorio
ON Directorio (Id, Name);


Indices No-Agrupados

Un índice no agrupado es aquel que contiene los valores clave del índice y los localizadores de filas que apuntan a la ubicación de los datos de la tabla en el almacenamiento. Se pueden crear varios índices no agrupados para una tabla o vista indexada. Los índices no agrupados están diseñados para mejorar el rendimiento de las consultas de uso frecuente que no están cubiertas por el índice agrupado.

Es importante tener en cuenta que los índices no agrupados tienen una estructura separada de las filas de datos, por lo que un índice no agrupado contiene los valores clave del índice no agrupado, y cada entrada de valor clave tiene un puntero a la fila de datos que contiene dicho valor clave. El puntero a una fila de índice en un índice no agrupado a una fila de datos se llama localizador de filas. La estructura del llamado localizador de filas depende de cómo se almacenan las páginas de datos en un montón o en una tabla agrupada.

Los índices no agrupados también tienen una estructura de árbol B como los índices agrupados, considerando que las filas de datos de la tabla subyacente no se ordenan ni almacenan en orden de acuerdo con sus claves no agrupadas y que el nivel de hoja de un índice no agrupado está compuesto de páginas de índice en lugar de páginas de datos.

En los índices no agrupados también podemos identificar los siguientes subtipos:

  • Índice filtrado (filtered Index): se trata de un índice no agrupado optimizado, especialmente adecuado para admitir consultas que seleccionan de un subconjunto de datos bien definido. Un predicado de filtro se utiliza para indexar solo una parte de las filas de la tabla. Vale la pena señalar que un índice filtrado bien diseñado puede mejorar el rendimiento de la consulta, lo que ayuda a reducir los costos de mantenimiento del índice y a reducir los costos de almacenamiento del índice en comparación con los índices de tabla completa.
  • Índice de cobertura (covered index): este tipo de índice puede incluir columnas sin clave en un índice no agrupado y, al mismo tiempo, evita exceder las limitaciones actuales de tamaño de índice con un máximo de 16 columnas de clave y un tamaño máximo de clave de índice de 900 bytes. Generalmente, el Motor de base de datos no considera columnas sin una clave al calcular el número de columnas de clave de índice o el tamaño de la clave de índice. Las columnas sin clave se definen en la cláusula INCLUDE de la instrucción CREATE INDEX.
  • Índice de almacenamiento de columnas (columnstore index): una tecnología para almacenar, recuperar y administrar datos mediante el uso de un formato de datos en columnas, denominado almacenamiento de columnas. Cuando se habla de índices de almacenamiento de columnas, los términos almacenamiento de filas y almacenamiento de columnas se utilizan para enfatizar el formato para el almacenamiento de datos. Los índices de almacén de columnas utilizan ambos tipos de almacenamiento.

 

SQL Server Non-Clustered Index Representation

Para la creación de los índices no agrupados, se requiere usar la sentencia CREATE INDEX, a continuación, veremos un ejemplo para cada uno de los subtipos indicados.

--- Indice No Agrupado
CREATE NONCLUSTERED INDEX IX_Directorio_Name 
ON Directorio (Name);

--- Indice No-Agrupado Filtrado
CREATE NONCLUSTERED INDEX IXF_Directorio_Friend 
ON Directorio (Name) 
WHERE Friend = 1;

--- Indice No-Agrupado de Cobertura
CREATE NONCLUSTERED INDEX IXC_Directorio_NameFriend 
WITH (Friend);
ON Directorio (Name) 

--- Indice No-agrupado de almacenamiento de columna
CREATE NONCLUSTER COLUMNSTORE INDEX IXCS_Directorio
ON Directorio (id,name);


Índices únicos

Un índice único en una tabla o vista es aquel en el que no se permite que dos filas tengan el mismo valor de clave de índice. Es importante indicar que un índice agrupado en una vista debe ser único. No se permite la creación de un índice único en columnas que incluyen valores duplicados, independientemente de que la opción IGNORE_DUP_KEY esté establecido en ON o no. Es importante mencionar, si se intenta la creación en una tabla con duplicados en la columna seleccionada, se muestra un mensaje de error. Los valores duplicados deben eliminarse antes de que se pueda crear un índice único en la columna o columnas. Es requerido que las columnas que se utilizan en un índice único deben establecerse en NOT NULL, ya que varios valores nulos se consideran duplicados cuando se crea un índice único.

Es importante indicar que aunque se indica como un tipo diferente a los índices agrupados y no agrupados, este tipo puede ser asociado a los anteriores, en general si no se especifica alguno de los tipos anteriores, por omisión se considera un índice no-agrupado.

Para crear un índice único, se puede utilizar la siguiente sentencia:

--- Crear índice único al crear la tabla
CREATE TABLE Directorio
(
Id int PRIMARY KEY,
Name varchar(100) NOT NULL UNIQUE 
);

--- Crear un índice unico
CREATE UNIQUE INDEX IXU_Directorio_Name 
ON Directorio (Name);


Conclusión

A partir de Microsoft SQL Server 2005 se permitían hasta 249 índices no agrupados por tabla, mientras que a partir de Microsoft SQL Server 2008 se permite hasta 999 índices no agrupados por tabla.

Como se ha visto, los índices son estructuras que apoyan el desempeño de las consultas, la existencia de índices en una base de datos incrementa el tamaño de esta, así que, aunque el máximo numero de índices en una tabla es de 1000, se hace necesario llevar a cabo un análisis de la necesidad y relevancia de los índices que se utilizan. 

Es importante mencionar que existen otros aspectos a considerar cuando se crea un índice, como el factor de relleno, si se utilizara la base de datos tempdb para llevar a cabo el ordenamiento, o si debe ser creado para uso en un grupo de archivos, particiones o usar paralelismo, consideraciones que no se han indicado en esta ocasión. 


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.


miércoles, 27 de enero de 2021

SQL Server Propiedades de Base de Datos – Opciones (3)

Introducción

Ya he indicado previamente sobre las propiedades de las bases de datos y he indicado las paginas General, Archivos, Grupos de Archivos y la primera y segunda parte de la pagina Opciones, en previas entregas, ahora continuare con las opciones de configuración de las bases de datos. 

Pagina 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

En esta ocasión se hablará de las opciones de la categoría Varios. 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.




Varios

Esta sección mostrara varios valores de diversas opciones que afectan la forma en que la base de datos se puede comportar.

Permitir aislamiento de instantáneas – Se muestra si la opción esta habilitada, se debe recordar que cuando se encuentra habilitada, evita la mayoría de los bloqueos y bloqueos mediante el uso de versiones de filas. Cuando se modifican los datos, las versiones confirmadas de las filas afectadas se copian en tempdb y se proporcionan números de versión. Esta operación se denomina copiar al escribir y se utiliza para todas las inserciones, actualizaciones y eliminaciones que utilizan esta técnica. Cuando otra sesión lee los mismos datos, se devuelve la versión confirmada de los datos en el momento en que comenzó la transacción de lectura.

ANSI NULL predeterminado – Muestra si se permiten valores nulos para todos los tipos de datos o columnas definidos por el usuario que no estén explícitamente definidos como NOT NULL durante una instrucción CREATE TABLE o ALTER TABLE (el estado predeterminado). 

ANSI NULLS habilitado – Muestra si la opción esta habilitada, esto especifica el comportamiento de los operadores de comparación Igual (=) y No igual a (<>) cuando se utilizan con nulos,  cuando está habilitado, todas las comparaciones con un nulo se evalúan como DESCONOCIDO. Cuando está habilitado, las comparaciones de valores que no son UNICODE con un nulo se evalúan como Verdadero si ambos son NULL. 

ANSI Padding habilitado – Indica si la opción esta habilitada, lo que permite especificar si el relleno ANSI está activado o desactivado. 

ANSI Warnings habilitadas – Indica si la opción esta habilitada, lo que permite especificar el comportamiento estándar ISO para varias condiciones de error. Cuando está habilitado, se genera un mensaje de advertencia si aparecen valores nulos en funciones agregadas (como SUMA, PROMEDIO, MÁX, MÍN, DESVEST, DESVEST, VAR, VARP o CONTAR). En el caso contrario, no se emite ninguna advertencia. 

Aborto aritmético habilitado – Muestra si esta opción esta habilitada. Cuando está habilitada, un error de desbordamiento o división por cero hace que la consulta o el lote finalicen. Si el error ocurre en una transacción, la transacción se revierte. En caso contrario, se muestra un mensaje de advertencia, pero la consulta, el lote o la transacción continúa como si no hubiera ocurrido ningún error.

Concatenar Null Yields Null – Indica si esta opción esta habilitada, permitiendo especificar con ello el comportamiento cuando se concatenan nulos. Cuando el valor de la propiedad está habilitada, string + NULL devuelve NULL. En caso contrario, el resultado es una cadena.

Encadenamiento de propiedad entre bases de datos habilitado - Este valor de solo lectura indica si se ha habilitado el encadenamiento de propiedad entre bases de datos. Cuando está habilitado, la base de datos puede ser el origen o el destino de una cadena de propiedad entre bases de datos. 

Optimización de correlación de fechas habilitada – Muestra si la opción está habilitada, en caso afirmativo, Microsoft SQL Server mantiene estadísticas de correlación entre dos tablas cualesquiera en la base de datos que están vinculadas por una restricción FOREIGN KEY y tienen columnas de fecha y hora. En caso contrario, las estadísticas de correlación no se mantienen.

Durabilidad retardada – Muestra el valor de la opción, es una que se introdujo en la versión Microsoft SQL Server 2014. Esta opción simplemente permite que las transacciones de escritura continúen ejecutándose como si el registro se hubiera descargado en el disco; en realidad, las escrituras en disco se han agrupado y diferido, para ser manejadas en segundo plano. La transacción es optimista; asume que se producirá el vaciado del registro. Los valores posibles son; DISABLED, ALLOWED, FORCED.  El valor disabled, indica que esta opción no se utilizará. Establecer el valor en Allowed, significa que cualquier transacción individual puede usar la Durabilidad Retardada; El valor Forced significa que todas las transacciones pueden usar Durabilidad Retardada.

¿Está activada la instantánea de lectura confirmada? – Indica si la opción esta habilitada. El motor de Microsoft SQL Server utiliza el mecanismo que previene los cambios de lecturas sucias. De esta forma usa el control de versiones de filas en lugar de bloquear. Para hacerlo, se crea una instantánea coherente de transición de los datos (como estaba antes del inicio de la declaración) para cada declaración. Por lo tanto, al usar las instantáneas, no es necesario colocar bloqueos para leer los datos. El valor predeterminado de esta opción es deshabilitado.

Aborto redondeo numérico – Se indica si esta opción esta habilitada, lo que permite indicar cómo se maneja la base de datos los errores de redondeo. Cuando esta habilitada, se genera un error cuando se produce una pérdida de precisión en una expresión. En caso contrario, las pérdidas de precisión no generan mensajes de error y el resultado se redondea a la precisión de la columna o variable que almacena el resultado. 

Parametrización – Muestra el valor asociado a esta opción, los valores permitidos son SIMPLE y FORZADO. De forma predeterminada el valor es SIMPLE, indicando que las consultas se parametrizan según el comportamiento predeterminado de la base de datos. Cuando el valor es FORZADO, Se indica que Microsoft SQL Server parametriza todas las consultas en la base de datos.

Identificadores entre comillas habilitados – Indica si la opción esta habilitada, los que permite especificar si las palabras clave de Microsoft SQL Server se pueden utilizar como identificadores (un objeto o nombre de variable) si están entre comillas. 

Activadores recursivos habilitados – Indica si esta opción esta habilitada, lo cual permite especificar si otros disparadores pueden disparar disparadores. Cuando se establece en habilitado, esto permite la activación recursiva de disparadores. En caso contrario, solo se evita la recursividad directa. Para deshabilitar la recursividad indirecta, establezca la opción del servidor de disparadores anidados en 0 en las opciones de configuración de servidor. 

Digno de confianza – Muestra si la opción esta habilitada, esta opción de solo lectura indica que si Microsoft SQL Server permite el acceso a recursos fuera de la base de datos en un contexto de suplantación establecido dentro de la base de datos. Los contextos de suplantación se pueden establecer dentro de la base de datos utilizando la declaración de usuario EXECUTE AS o la cláusula EXECUTE AS en los módulos de la base de datos.  Para tener acceso, el propietario de la base de datos también necesita tener el permiso AUTHENTICATE SERVER a nivel de servidor. Esta propiedad también permite la creación y ejecución de ensamblados de acceso externo y no seguros dentro de la base de datos. Además de habilitar esta propiedad, el propietario de la base de datos debe contar con el permiso EXTERNAL ACCESS ASSEMBLY o UNSAFE ASSEMBLY en el nivel del servidor.  De forma predeterminada, todas las bases de datos de usuario y todas las bases de datos del sistema (con la excepción de MSDB) tienen esta propiedad deshabilitada. El valor no se puede cambiar para las bases de datos modelo y tempdb. Es importante indicar que TRUSTWORTHY se establece como deshabilitado siempre que se adjunta una base de datos al servidor. Se recomienda que para acceder a recursos fuera de la base de datos, un enfoque en un contexto de suplantación utilizando certificados y firmas en oposición a la opción Confiable

Formato de almacenamiento VarDecimal habilitado- Muestra el valor de esta opción que es de solo lectura a partir de Microsoft SQL Server 2008. Cuando esta habilitado, esta base de datos permite el formato de almacenamiento vardecimal. El formato de almacenamiento vardecimal no se puede deshabilitar mientras las tablas de la base de datos lo estén usando. A partir de Microsoft SQL Server 2008, todas las bases de datos están habilitadas para el formato de almacenamiento vardecimal. 

Conclusión

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 3 
-- Author : Julio J Bueyes
-- julio.bueyes@outlook.com
--
-- Description : This script helps to get a detailed view of the database properties – Options page – part 3.
--
-- 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

--- Miscellaneous
SELECT CASE snapshot_isolation_state WHEN 1 THEN 'True' ELSE 'False' END AS [Allow Snapshot Isolation], 
    CASE is_ansi_null_default_on WHEN 1 THEN 'True' ELSE 'False' END AS [ANSI NULL Default], 
    CASE is_ansi_nulls_on WHEN 1 THEN 'True' ELSE 'False' END AS [ANSI NULLS Enabled], 
    CASE is_ansi_padding_on WHEN 1 THEN 'True' ELSE 'False' END AS [ANSI Padding Enabled], 
    CASE is_ansi_warnings_on WHEN 1 THEN 'True' ELSE 'False' END AS [ANSI Warning Enabled], 
    CASE is_arithabort_on WHEN 1 THEN 'True' ELSE 'False' END AS [Arithmetic Abort Enabled], 
    CASE is_concat_null_yields_null_on WHEN 1 THEN 'True' ELSE 'False' END AS [Concatenate Null Yields Null], 
    CASE is_db_chaining_on WHEN 1 THEN 'True' ELSE 'False' END AS [Cross-database Ownership Chaining Enabled],
    CASE is_date_correlation_on WHEN 1 THEN 'True' ELSE 'False' END AS [Date Correlation Optimization Enabled], 
    delayed_durability_desc AS [Delayed Durability], 
    CASE is_read_committed_snapshot_on WHEN 1 THEN 'True' ELSE 'False' END AS [Is Read Committed Snapshot On], 
    CASE is_numeric_roundabort_on WHEN 1 THEN 'True' ELSE 'False' END AS [Numeric Round-Abort], 
    CASE is_parameterization_forced WHEN 1 THEN 'Forced' ELSE 'Simple' END AS [Parameterization], 
    CASE is_quoted_identifier_on WHEN 1 THEN 'True' ELSE 'False' END AS [Quoted Identifiers Enabled], 
    CASE is_recursive_triggers_on WHEN 1 THEN 'True' ELSE 'False' END AS [Recursive Triggers Enabled], 
    CASE is_trustworthy_on WHEN 1 THEN 'True' ELSE 'False' END AS [Trustworthy]
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.


jueves, 21 de enero de 2021

SQL Server Propiedades de Base de Datos – Opciones (2)

Introducción

Ya he indicado previamente sobre las propiedades de las bases de datos y he indicado las paginas General, Archivos, Grupos de Archivos y la primera parte de la pagina Opciones, en previas entregas, ahora continuare con 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. Sin embargo, es necesario tener en cuenta que puede usar las declaraciones de Transact-SQL ALTER DATABASE SET OPTIONS o ALTER DATABASE SCOPED CONFIGURATION, para modificar los valores si se prefiere.

En esta ocasión, se presentarán las opciones de las categorías Database Scope Configuration y FILESTREAM.

 


Configuraciones con ámbito de base de datos

A partir de la versión de Microsoft SQL Server 2016 y en las bases de datos definidas en Azure SQL Database, se encuentran estas propiedades de configuración que pueden ajustarse al nivel de la base de datos. Esto es, son configuraciones de nivel base de datos que afectan el comportamiento del código de aplicación en el nivel de base de datos. Anteriormente no teníamos estas opciones que eran aplicables para toda la instancia, no de forma individual de base de datos. A partir de Microsoft SQL Server 2016, si se requiere una variedad de necesidades de configuración en las bases de datos, ahora es fácil llevarlo a cabo. Se debe tener cuidado de realizar modificaciones a estos valores. 

Se debe tener en cuenta que se manejan opciones Para Secundarias, estas opciones son compatibles con el uso de los grupos de disponibilidad AlwaysOn ya que se pueden configurar diferentes opciones para las bases de datos primaria y secundaria.

Estimación de cardinalidad heredada – indica el modelo de estimación de cardinalidad usado por el optimizador de consultas independiente del nivel de compatibilidad de la base de datos. Esto es equivalente al uso del Trace Flag 9481.

Estimación de cardinalidad heredada para secundaria – indica el modelo de estimación de cardinalidad del optimizador de consultas para los secundarios, si los hay, independientemente del nivel de compatibilidad de la base de datos. 

MAX DOP – indica la configuración predeterminada de grado máximo de paralelismo para la base de datos, en el primario que debe usarse para las declaraciones, los ser valores permitidos son 0, 1, 2, etc.

MAX DOP para secundaria – indica la configuración predeterminada de grado máximo de paralelismo para la base de datos en los secundarios, si los hay, que se debe usar para las declaraciones, los valores permitidos son 0, 1, 2, etc.

Rastreo de parámetros – indica si el rastreo de parámetros en el primario esta habilitada. Es posible configurar el comportamiento para que el optimizador de consultas use o no el rastreo de parámetros. En versiones anteriores, era posible deshabilitar esta función usando el Trace Flag 4136, pero ahora es posible controlarlo a nivel de la base de datos.

Rastreo de parámetros para secundaria – indica si el rastreo de parámetros en los secundarios, si los hay, esta habilitada. Al igual que para el primario, anteriormente el equivalente de Trace Flag 4136.

Correcciones del optimizador de consultas – indica si están habilitadas las revisiones de optimización de consultas para la base de datos en el primario independientemente del nivel de Esto es equivalente al uso de Trace Flag 4199. 

Correcciones del optimizador de consultas para secundaria – indica si están habilitadas las revisiones de optimización de consultas en la base de datos, para las secundarias, si las hay, independientemente del nivel de compatibilidad. 

FILESTREAM

Esta sección se habilitará y mostrará información, si el uso de FILESTREAM está habilitado en el servidor.

Nombre de directorio de FILESTREAM – Indica el nombre del directorio para los datos de FILESTREAM asociados con la base de datos seleccionada.

Acceso sin transacciones de FILESTREAM – Indica una de las siguientes opciones para el acceso no transaccional a través del sistema de archivos a los datos de FILESTREAM almacenados en FileTables: OFF, READ_ONLY o FULL. Si FILESTREAM no está habilitado en el servidor, este valor se establece en OFF y está deshabilitado. 

Conclusión

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. Es importante recordar, que las opciones que en esta ocasión se presentan, tienen la particularidad siguiente; en el primer caso solo se encontraran las opciones cuando se tenga una base de datos en una instancia de Microsoft SQL Server 2016 con el SP 2 o superior, en el segundo caso, si el servidor de base de datos se ha configurado para uso de FILESTREAM. Si se requiere usar T-SQL para obtener la información que se muestra en la pagina indicada, es posible usar las siguientes consultas.

/*******************************************************************************
-- Script : Get Database Options Properties Part 2 
-- Author : Julio J Bueyes
-- julio.bueyes@outlook.com
--
-- Description : This script helps to get a detailed view of the database properties – Options page – part 2.
--
-- 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

--- Database Scoped Configurations
SELECT name, CASE configuration_id WHEN 1 THEN value ELSE CASE value WHEN 1 THEN 'ON' ELSE 'OFF' END END AS [value]
FROM sys.database_scoped_configurations
WHERE configuration_id IN (2,1,3,4)
UNION
SELECT name + '_FOR_SECONDARY', CASE configuration_id WHEN 1 THEN value_for_secondary ELSE CASE ISNULL(value_for_secondary,0) WHEN 0 THEN 'PRIMARY' ELSE value_for_secondary END END
FROM sys.database_scoped_configurations
WHERE configuration_id IN (2,1,3,4);

-- FILESTREAM
SELECT directory_name AS [FILESTREAM Directory Name], 
    non_transacted_access_desc AS [FILESTREAM Non-transacted Access]
FROM sys.database_filestream_options
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.



jueves, 14 de enero de 2021

SQL Server Propiedades de Base de Datos – Opciones (1)

Introducción

Ya he indicado previamente sobre las propiedades de las bases de datos y he indicado las paginas General, Archivos y Grupos de Archivos en previas entregas, ahora iniciare con las distintas opciones de configuración de las bases de datos. 

Página Opciones

Es posible utilizar esta página para ver o modificar varias opciones de configuración para la base de datos seleccionada. Sin embargo, es necesario tener en cuenta que puede usar las declaraciones de Transact-SQL ALTER DATABASE SET OPTIONS o ALTER DATABASE SCOPED CONFIGURATION, para modificar los valores si se prefiere.

En esta página es posible obtener o modificar el valor de las opciones en las siguientes categorías:

  • Automático
  • Contención
  • Cursor
  • Configuraciones del alcance de la base de datos
  • FILESTREAM
  • Varios
  • Recuperación
  • Agente de servicios
  • Estado

En esta entrega comentaré las tres primeras categorías y las demás se indicarán en subsecuentes entregas.

La pagina opciones se muestra a continuación:

 


En la parte superior aparecen los siguientes valores de configuración de la base de datos: 

Colación - Indica la intercalación actual de la base de datos seleccionando, es posible cambiar este valor seleccionándolo de la lista. Debe recordarse que una base de datos que una base de datos que se mueve de un servidor a otro, ésta conserva la intercalación donde fue creada la base de datos. Es importante indicar que Microsoft recomienda que las bases de datos alojadas en el servidor mantengan la intercalación igual a la que se maneja en la base de datos master.

Modelo de recuperación - Indica el modelo de recuperación actual de la base de datos, asimismo es posible establecer un modelo diferente, seleccionando de la lista alguno de los siguientes valores; Completo, Registro-masivo o Simple. Debe recordarse que Microsoft recomienda que las bases de datos de ambiente productivo deben mantener el modelo de recuperación Completo.

Nivel de compatibilidad - Indica la versión de Microsoft SQL Server que admite actualmente la base de datos.  Debe recordarse que cuando se actualiza una base de datos en Microsoft SQL Server, el nivel de compatibilidad de esa base de datos se conserva, si es posible, o se cambia al nivel mínimo compatible con el nuevo Microsoft SQL Server.

Tipo de contención – muestra el valor actual de la base de datos. Se puede especificar uno de los siguientes valores Ninguno o Parcial, este ultimo sirve para designar que se trata de una base de datos contenida. Esta opción apareció por primera vez en Microsoft SQL Server 2012, y establece que una base de datos puede manejar su permiso de acceso a los usuarios que están contenidos en la base de datos, pero que no cuentan con un permiso de acceso en el servidor. Se requiere que la propiedad del servidor Habilitar bases de datos contenidas se establezca en TRUE antes de que una base de datos pueda configurarse como contenida.

La parte inferior muestra una cuadricula con las categorías de las opciones, a continuación, se indican cada una de ellas.

Automático

Esta categoría de opciones es usada para establecer acciones automáticas que se llevan a cabo, por parte del servicio, en la base de datos. Los valores posibles de estas opciones son Falso o Verdadero.

Auto cerrado – Indica si la base de datos se apaga y libera recursos después de que el último usuario cierra su sesión. Recuerde que esta opción debe mantenerse en falso, en ambientes productivos, además de que esta opción se recomienda en valor verdadero para bases de datos en ambientes móviles.

Crear automáticamente estadísticas incrementales - Indica el uso de la opción incremental cuando se crean estadísticas por partición..

Crear estadísticas automáticamente - Indica si se crean automáticamente las estadísticas de optimización faltantes que requieren alguna consulta, por lo que para la optimización se crean automáticamente.

Contracción automática – Indica si los archivos de la base de datos están disponibles para la reducción periódica. Es recomendable que en ambiente productivo se mantenga esta opción en falso.

Estadísticas de actualización automática – Indica si la base de datos actualiza automáticamente las estadísticas de optimización desactualizadas que necesita una consulta para la optimización.

Actualización automática de estadísticas de forma asincrónica – Indica si las consultas que inician una actualización automática de estadísticas desactualizadas no esperan a que se actualicen las estadísticas antes de compilar. Las consultas posteriores utilizan las estadísticas actualizadas cuando están disponibles. Si se establecer esta opción en Verdadero no tiene efecto a menos que la opción Estadísticas de actualización automática también se establezcan en Verdadero.

Contención

En una base de datos contenida o independiente, algunas opciones que se configuran normalmente en el nivel del servidor se pueden configurar en el nivel de la base de datos.

LCID de idioma de texto completo predeterminado - Muestra el idioma predeterminado para las columnas indexadas de texto completo. El análisis lingüístico de datos indexados de texto completo depende del idioma de los datos. El valor predeterminado de esta opción es el idioma del servidor. 

Idioma predeterminado – Muestra el idioma predeterminado para todos los nuevos usuarios de bases de datos contenidas, a menos que se especifique lo contrario.

Activadores anidados habilitados – Muestra si los disparadores activan otros disparadores. Los disparadores se pueden anidar hasta un máximo de 32 niveles. 

Transformar palabras ruidosas – Muestra si se suprime un mensaje de error si las palabras irrelevantes, es decir, palabras vacías, hacen que una operación booleana en una consulta de texto completo devuelva cero filas. 

Límite de año de dos dígitos – Indica el número de año más alto que se puede ingresar como un año de dos dígitos. El año indicado y los 99 años anteriores se pueden ingresar como un año de dos dígitos. Todos los demás años deben ingresarse como un año de cuatro dígitos. Por ejemplo, la configuración predeterminada de 2049 indica que una fecha ingresada como '14/3/49' se interpretará como 14 de marzo de 2049 y una fecha ingresada como '14/3/50' se interpretará como 14 de marzo de 1950. Para obtener más información, consulte Configurar la opción de configuración del servidor de corte de año de dos dígitos.

Cursor

Esta categoría de opciones tiene el alcance del uso de cursores de Transact-SQL. Los valores posibles de estas opciones son Falso o Verdadero.

Cerrar el cursor al confirmar habilitado - Indica si los cursores se cierran después de que la transacción que abre el cursor se ha confirmado. Con valor Verdadero, todos los cursores que están abiertos cuando se confirma o deshace una transacción se cierran. En contraste, si es Falso, estos cursores permanecen abiertos cuando se confirma una transacción. 

Cursor predeterminado - Indica el comportamiento predeterminado del cursor. Con un valor Verdadero, las declaraciones del cursor son por defecto LOCAL. Con un valor de Falso, los cursores se establecen de forma predeterminada en GLOBAL.

Conclusión

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, es posible usar las siguientes consultas.

/*******************************************************************************
-- Script : Get Database Options Properties Part 1 
-- Author : Julio J Bueyes
-- julio.bueyes@outlook.com
--
-- Description : This script helps to get a detailed view of the database properties – Options page – part 1.
--
-- 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

-- Header Page
SELECT collation_name AS [Collation],
    recovery_model_desc AS [Recovery model],
    CASE compatibility_level WHEN 80 THEN 'SQL Server 2000 (80)'
                            WHEN 90 THEN 'SQL Server 2005 (90)'
                            WHEN 100 THEN 'SQL Server 2008 (100)'
                            WHEN 110 THEN 'SQL Server 2012 (110)'
                            WHEN 120 THEN 'SQL Server 2014 (120)'
                            WHEN 130 THEN 'SQL Server 2016 (130)'
                            WHEN 140 THEN 'SQL Server 2017 (140)'
                            WHEN 150 THEN 'SQL Server 2019 / Azure SQL Database (150)'
                            ELSE 'SQL Server ' END AS [Compatibility level],
    containment_desc AS [Containment type]
FROM sys.databases
WHERE database_id = DB_ID();

--- Automatic Options
SELECT CASE is_auto_close_on WHEN 1 THEN 'True' ELSE 'False' END AS [Auto Close], 
    CASE is_auto_create_stats_incremental_on WHEN 1 THEN 'True' ELSE 'False' END AS [Auto Close Incremental Statistics],
    CASE is_auto_create_stats_on WHEN 1 THEN 'True' ELSE 'False' END AS [Auto Create Statistics], 
    CASE is_auto_shrink_on WHEN 1 THEN 'True' ELSE 'False' END AS [Auto Shrink], 
    CASE is_auto_update_stats_on WHEN 1 THEN 'True' ELSE 'False' END AS [Auto Update Statistics], 
    CASE is_auto_update_stats_async_on WHEN 1 THEN 'True' ELSE 'False' END AS [Auto Update Statistics Asyncronously]
FROM sys.databases
WHERE database_id = DB_ID();

--- Containment Options
SELECT CASE ISNULL(default_fulltext_language_lcid,0) WHEN 0 THEN (SELECT value_in_use FROM sys.configurations WHERE configuration_id = 1126) ELSE default_language_lcid END AS [Default Fulltext Language LCID], 
        CASE ISNULL(default_language_name,0) WHEN 0 THEN (SELECT CASE value_in_use WHEN 0 THEN 'English' END FROM sys.configurations WHERE configuration_id = 124) ELSE default_language_name END AS [Default Language], 
        CASE ISNULL(is_nested_triggers_on,0) WHEN 0 THEN (SELECT CASE value_in_use WHEN 1 THEN 'True' ELSE 'False' END FROM sys.configurations WHERE configuration_id = 115) ELSE CASE is_nested_triggers_on WHEN 1 THEN 'True' ELSE 'False' END END AS [Nested Triggers Enabled], 
        CASE ISNULL(is_transform_noise_words_on,0) WHEN 0 THEN (SELECT CASE value_in_use WHEN 1 THEN 'True' ELSE 'False' END FROM sys.configurations WHERE configuration_id = 1555) ELSE CASE is_transform_noise_words_on WHEN 1 THEN 'True' ELSE 'False' END END AS [Transform Noise Words], 
        CASE ISNULL(two_digit_year_cutoff,0) WHEN 0 THEN (SELECT value_in_use FROM sys.configurations WHERE configuration_id = 1127) ELSE two_digit_year_cutoff END AS [Two Digit Year Cutoff]
FROM sys.databases db
WHERE database_id = DB_ID();

--- Cursor Options
SELECT CASE is_cursor_close_on_commit_on WHEN 1 THEN 'True' ELSE 'False' END AS [Close Cursor on Commit Enabled], 
    CASE is_local_cursor_default WHEN 1 THEN 'LOCAL' ELSE 'GLOBAL' END AS [Default Cursor]
FROM sys.databases
WHERE database_id = DB_ID();

Como puede observarse es muy 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.