miércoles, 25 de noviembre de 2020

SQL Server Propiedades de Base de Datos – General

Introducción

La principal razón de ser de Microsoft SQL Server es la de administrar las bases de datos de los usuarios, ya sea individuos o empresas, que requieren almacenar y manejar sus datos, la cual, se convertirá en la información esencial para los efectos requeridos.
Ya se ha indicado y expuesto las propiedades y configuración de los servicios de servidor de Microsoft SQL Server, en este post iniciaré con las propiedades de las bases de datos, un aspecto importante, que se manejará en estas entregas, es que la visión será la que se observe con el uso de SQL Server Management Studio, existirá una diferencia con la que se obtenga con otras herramientas, o con las características que se presentan en Azure.
Debe tenerse en cuenta que la ventana de Propiedades de Base de Datos presentara las siguientes páginas, las cuales se pueden ver en la parte izquierda de la ventana:
  • General – Presenta las propiedades generales de la base de datos
  • Archivos – Presenta las propiedades de los archivos conteniendo la base de datos
  • Grupo de Archivos – Presenta las propiedades de los grupos de archivos que se han definido para los archivos que contienen la base de datos
  • Opciones – Presenta los valores establecidos para distintas opciones de configuración de operación de la base de datos
  • Seguimiento de Cambios – Presenta los valores establecidos para llevar a cabo el seguimiento de los cambios realizados en la base de datos.
  • Permisos – Presenta los permisos otorgados a para la base de datos
  • Propiedades Extendidas – Presenta las propiedades establecidas por los usuarios para la base de datos
  • Reflejo – Presenta los valores establecidos para llevar a cabo las actividades de reflejo de las bases de datos
  • Envío de registro – Presenta los valores establecidos para llevar a cabo las actividades de envío de registro de la base de datos
  • Almacén de consultas – Presenta el comportamiento de las consultas llevadas a cabo en la base de datos.
Las últimas tres páginas de la lista anterior no están presentes en todas las bases de datos, las bases de datos de sistema no cuentan con ellas, dado que no puede establecerse una arquitectura de reflejo o de envío de registros. El uso de un almacén de consultas es una propiedad que fue aparece en Microsoft SQL Server 2016, por lo que esta propiedad no se encontrara en versiones previas.

Página General 

En esta ocasión, se presenta la pagina correspondiente a los aspectos generales de la base de datos, en esta página no es posible modificar los valores. Únicamente se presentarán los valores generales, como se observa a continuación:


Se puede apreciar que las propiedades mostradas están divididas en tres grupos, cabe mencionar que ningún valor de esta página puede ser modificado en ella, lo cual indica que los valores son de solo lectura. A continuación se explicarán cada una de las propiedades que se muestran en esta página.

Copias de seguridad

En esta sección se incluyen dos propiedades relacionadas a la base de datos, debe recordarse que una copia de seguridad es parte integral de la base de datos:

Propiedad
Descripción
Última copia de seguridad de la base de datos
En este espacio se muestra la fecha de la última copia de seguridad de la base de datos, obviamente una base de datos de reciente creación no mostrará algún dato en este espacio. Es importante indicar que es independiente del modelo de recuperación que se haya establecido a la base de datos.
Última copia de seguridad del registro de la base de datos
En este espacio se muestra la fecha en la que se realizó la última copia de seguridad del registro de transacciones de la base de datos. En este espacio se mostrará una fecha siempre que el modelo de recuperación sea completo o registro masivo, ya que el modelo de recuperación simple no permite realizar este tipo de copia de seguridad de registro de transacciones.

Base de Datos

Se refiere a propiedades directamente relacionadas a la base de datos:

Propiedad
Descripción
Nombre
En este espacio de muestra el nombre de la base de datos, este debe ser un nombre único dentro del servidor de Microsoft SQL Server. En muchas ocasiones se genera o define una base de datos se le asigna un nombre único, posteriormente se lleva a cabo una copia de seguridad y se restaura con un nombre diferente, de esta forma se tendrán dos bases de datos estructuralmente iguales con nombre diferente.
Estado
En este espacio se muestra el estado de la base de datos, es decir, el estado operacional de la base de datos, por defecto el estado es normal indicando que la base de datos está en linea, sin embargo, es posible obtener un estado diferente, dependiendo de las circunstancias operativas. Se indicarán los diferentes estados de la base de datos en la página Opciones. 
Propietario
Muestra el nombre del propietario de la base de datos.  El propietario se puede cambiar en la página Archivos.
Fecha de Creación
Muestra la fecha y hora en que se creó la base de datos, en el servidor. Cabe mencionar que muchas veces una base de datos es creada en un servidor diferente y al realizar la restauración desde una copia de seguridad, la fecha de la restauración se convierte en la fecha de creación de la base de datos.
Tamaño
Muestra el tamaño actual de la base de datos en megabytes.
Espacio Disponible
Muestra la cantidad de espacio disponible en la base de datos en megabytes.
Número de Usuarios
Muestra el número de usuarios configurados para la base de datos.

En la imagen se pueden apreciar dos propiedades adicionales, que están relacionadas con el uso de objetos optimizados en memoria, estableciendo los valores corrrespondientes a la cantidad de memoria asignada para esos objetos y la cantidad de memoria usada por esos objetos. Cabe mencionar que a partir de la version de Microsoft SQL Server 2014 se puede hacer uso de objetos optimizados en memoria.

Mantenimiento

Relacionado con el servicio de la base de datos. 

Propiedad
Descripción
Intercalación
Muestra la intercalación utilizada por la base de datos.  El tipo de intercalación se puede cambiar en la página Opciones de esta misma ventana.

Conclusión

Esta página inicial de las propiedades de la base de datos brinda información general de la base de datos, en caso de que se requiera más información de la base de datos, se deben acceder a las páginas correspondientes. Una forma alternativa de obtener la información de esta página a través del uso de T-SQL es utilizando el siguiente script para obtener los datos referidos en la página General:

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

-- Declare a table variable to temporary store values 
DECLARE @DBSize TABLE
(
DBName sysname,
dbSize nvarchar(20),
dbUnaloc nvarchar(20),
reserved nvarchar(20),
datasize nvarchar(20),
idxSize nvarchar(20),
unused nvarchar(20)
)

-- Get the Space Used for database into table variable
INSERT INTO @DBSize
exec sp_spaceused   @oneresultset=1;

-- Generate Common Table expressions to generate query 
WITH LastFullBackup (database_name, LastBackupDate)
AS (
SELECT database_name, Max(backup_start_date) 
FROM msdb..backupset
WHERE type = 'D'
GROUP BY database_name
)
,
LastLogBackup (database_name, LastLogDate)
AS
(
SELECT database_name, Max(backup_start_date)
FROM msdb..backupset
WHERE type = 'L'
GROUP BY database_name
)
,
TotUsers (database_name, totUsers)
AS
(
SELECT DB_NAME(), COUNT(1) 
FROM sys.database_principals
WHERE type in ('S','U')
)
SELECT b.LastBackupDate AS [Last Database Backup], 
l.LastLogDate AS [Last Database Log Backup], 
d.name, state_desc as [Status], sl.name AS [Owner], 
d.create_date AS [Date Created], ds.dbSize AS [Size], 
ds.dbUnaloc AS [Space Available], 
t.totUsers as [Number of Users], d.collation_name AS [Collation]
FROM sys.databases d
INNER JOIN sys.syslogins sl ON d.owner_sid = sl.sid
INNER JOIN @DBSize ds ON d.name = ds.DBName COLLATE DATABASE_DEFAULT
LEFT OUTER JOIN LastFullBackup b ON d.name = b.database_name
LEFT OUTER JOIN LastLogBackup l ON d.name = l.database_name
INNER JOIN TotUsers t ON d.name = t.database_name
WHERE d.name = DB_Name() COLLATE DATABASE_DEFAULT;

Como puede observarse es mas fácil obtener los datos directamente de la ventana de propiedades de la base de datos, en la página General, sin embargo, el script funciona para obtener los mismos valores proporcionados, solo que en esta ocasión en un solo renglón.