Ver los metadatos de una base de datos

Puede ver las propiedades de una base de datos, un archivo, una partición y un grupo de archivos mediante una gran variedad de vistas de catálogo, funciones de sistema y procedimientos almacenados de sistema.

En la siguiente tabla se enumeran las vistas de catálogo, las funciones de sistema y los procedimientos almacenados de sistema que devuelven información acerca de las bases de datos, los archivos y los grupos de archivos.

Algunas columnas de la vista de catálogo sys.databases y propiedades de la función DATABASEPROPERTYEX pueden devolver un valor NULO si la base de datos no está disponible. Por ejemplo, para devolver el nombre de intercalación de una base de datos, es preciso obtener acceso a la base de datos. Si la base de datos no está en línea, o la opción AUTO_CLOSE está establecida en ON, el nombre de la intercalación no se puede devolver.

Ejemplos

A. Usar vistas de catálogo del sistema para devolver información de la base de datos

En el siguiente ejemplo se utilizan las vistas de catálogo sys.partitions, sys.allocation_units, sys.objects y sys.indexes para devolver los números de partición y las unidades de asignación que ha utilizado cada tabla e índice de la base de datos.

USE AdventureWorks;
GO
SELECT SCHEMA_NAME(o.schema_id) AS schema_name,
    o.name AS table_name, 
    i.name AS index_name, 
    au.type_desc AS allocation_type, 
    au.data_pages AS pages_per_allocation_unit, 
    partition_number
FROM sys.allocation_units AS au
    JOIN sys.partitions AS p ON au.container_id = p.partition_id
    JOIN sys.objects AS o ON p.object_id = o.object_id
    JOIN sys.indexes AS i ON p.index_id = i.index_id 
        AND i.object_id = p.object_id
WHERE o.type_desc <> N'SYSTEM_TABLE'
ORDER BY table_name, p.index_id;

B. Usar vistas de catálogo del sistema para devolver información sobre el tamaño de la base de datos

En los ejemplo siguientes se usa la vista de catálogo sys.database_files y la vista de administración dinámica sys.dm_db_file_space_usage para devolver información sobre el tamaño para la base de datos tempdb. La vista sys.dm_db_file_space_usage sólo se aplica a tempdb.

SELECT 
name AS FileName, 
size*1.0/128 AS FileSizeinMB,
'MaximumSizeinMB' = 
    CASE max_size 
       WHEN 0 THEN 'No growth is allowed.'
       WHEN -1 THEN 'Autogrowth is on.'
       WHEN 268435456 
          THEN 'Log file will grow to a maximum size of 2 TB.'
       ELSE CAST (max_size*1.0/128 AS nvarchar(30))
    END,
growth AS 'GrowthValue',
'GrowthIncrement' = 
    CASE 
       WHEN growth = 0 THEN 'File size is fixed and will not grow.'
       WHEN growth > 0 AND is_percent_growth = 0 
          THEN 'Growth value is in units of 8-KB pages.'
       ELSE 'Growth value is a percentage.'
    END
FROM tempdb.sys.database_files;
GO
USE tempdb;
GO
SELECT (SUM(unallocated_extent_page_count)*1.0/128) AS free_space_in_MB,
(SUM(version_store_reserved_page_count + 
    user_object_reserved_page_count +internal_object_reserved_page_count + 
    mixed_extent_page_count)*1.0/128) AS used_space_in_MB
FROM sys.dm_db_file_space_usage;

C. Usar funciones del sistema

En el siguiente ejemplo se utiliza la función del sistema DATABASEPROPERTYEX para devolver el nombre de la intercalación predeterminada de la base de datos AdventureWorks.

SELECT DATABASEPROPERTYEX('AdventureWorks', 'Collation');