Visualizzazione dei metadati dei database
Per visualizzare le proprietà dei database, dei file, delle partizioni e dei filegroup è possibile utilizzare una vasta gamma di viste del catalogo, funzioni di sistema e stored procedure di sistema.
Nella tabella seguente sono elencate le viste del catalogo, le funzioni di sistema e le stored procedure di sistema che restituiscono informazioni sui database, i file e i filegroup.
Viste |
Funzioni |
Stored procedure e altre istruzioni |
---|---|---|
|
||
|
||
|
||
|
||
|
||
|
||
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) |
|
|
È possibile che alcune colonne della vista del catalogo sys.databases e le proprietà della funzione DATABASEPROPERTYEX restituiscano un valore NULL se il database specificato non è disponibile. Ad esempio, per fare in modo che venga restituito il nome delle regole di confronto del database, è necessario accedere al database. Se il database non è online o se l'opzione AUTO_CLOSE è impostata su ON, il nome delle regole di confronto non verrà restituito.
Esempi
A. Utilizzo delle viste del catalogo di sistema per recuperare informazioni sul database
Nell'esempio seguente vengono utilizzate le viste del catalogo sys.partitions, sys.allocation_units, sys.objects e sys.indexes per recuperare i numeri di partizione e le unità di allocazione utilizzati in ogni tabella e indice del database.
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. Utilizzo delle viste del catalogo di sistema per recuperare informazioni sulle dimensioni del database
Negli esempi seguenti vengono utilizzate la vista del catalogo sys.database_files e la vista a gestione dinamica sys.dm_db_file_space_usage per restituire le informazioni sulle dimensioni del database tempdb. La vista sys.dm_db_file_space_usage è applicabile solo a 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. Utilizzo delle funzioni di sistema
Nell'esempio seguente viene utilizzata la funzione di sistema DATABASEPROPERTYEX per recuperare il nome delle regole di confronto predefinite per il database AdventureWorks2008R2.
SELECT DATABASEPROPERTYEX('AdventureWorks2008R2', 'Collation');