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.

È 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 è in linea 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.

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. 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.

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 AdventureWorks.

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