Exibindo metadados do banco de dados

Você pode exibir as propriedades de banco de dados, arquivo, partição e grupo de arquivos usando uma variedade de exibições do catálogo, funções do sistema e procedimentos armazenados do sistema.

A tabela a seguir lista as exibições do catálogo, funções do sistema e procedimentos armazenados do sistema que retornam informações sobre bancos de dados, arquivos e grupos de arquivos.

Algumas colunas na exibição do catálogo sys.databases e propriedades na função DATABASEPROPERTYEX poderão retornar um valor NULL se o banco de dados especificado não estiver disponível. Por exemplo, para retornar o nome de agrupamento de um banco de dados, o banco de dados deve ser acessado. Se o banco de dados não estiver online ou a opção AUTO_CLOSE estiver definida como ON, o nome do agrupamento poderá não ser retornado.

Exemplos

A. Usando exibições do catalogo do sistema para retornar informações de banco de dados

O exemplo a seguir usa exibições do catálogo sys.partitions, sys.allocation_units, sys.indexes e sys.objects para retornar os números de partição e unidades de alocação usadas por cada tabela e índice no banco de dados.

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. Usando exibições do catalogo do sistema para retornar informações de tamanho de banco de dados

Os exemplos a seguir usam a exibição do catálogo sys.database_files e a exibição de gerenciamento dinâmico sys.dm_db_file_space_usage para retornar informações sobre tamanho do banco de dados tempdb. A exibição sys.dm_db_file_space_usage só é aplicável 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. Usando funções do sistema

O exemplo a seguir usa a função do sistema DATABASEPROPERTYEX para retornar o nome do agrupamento padrão para o banco de dados AdventureWorks.

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