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.
Vistas |
Funciones |
Procedimientos almacenados y otros procedimientos |
---|---|---|
|
||
|
||
|
||
|
||
|
||
|
||
sys.dm_db_file_space_usage (Transact-SQL) (solo tempdb) |
|
|
sys.dm_db_session_space_usage (Transact-SQL) (solo tempdb) |
|
|
sys.dm_db_task_space_usage (Transact-SQL) (solo tempdb) |
|
|
Algunas columnas de la vista de catálogo sys.databases y propiedades de la función DATABASEPROPERTYEX pueden devolver un valor NULL 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.
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 ejemplos 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 de tamaño para la base de datos tempdb. La vista sys.dm_db_file_space_usage solo es aplicable para tempdb.
USE tempdb;
GO
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 AdventureWorks2008R2.
SELECT DATABASEPROPERTYEX('AdventureWorks2008R2', 'Collation');