查看数据库元数据

更新日期: 2005 年 12 月 5 日

可以使用各种目录视图、系统函数和系统存储过程来查看数据库、文件、分区和文件组的属性。

下表列出了返回有关数据库、文件和文件组信息的目录视图、系统函数和系统存储过程。

视图 函数 存储过程和其他语句

sys.databases

DATABASE_PRINCIPAL_ID

sp_databases

sys.database_files

DATABASEPROPERTYEX

sp_helpdb

sys.data_spaces

DB_ID

sp_helpfile

sys.filegroups

DB_NAME

sp_helpfilegroup

sys.allocation_units

FILE_ID

sp_spaceused

sys.master_files

FILE_IDEX

DBCC SQLPERF

sys.partitions

FILE_NAME

 

sys.partition_functions

FILEGROUP_ID

 

sys.partition_parameters

FILEGROUP_NAME

 

sys.partition_range_values

FILEGROUPPROPERTY

 

sys.partition_schemes

FILEPROPERTY

 

sys.dm_db_partition_stats

fn_virtualfilestats

 

sys.dm_db_file_space_usage(仅 tempdb

 

 

sys.dm_db_session_space_usage(仅 tempdb

 

 

sys.dm_db_task_space_usage(仅 tempdb

 

 

如果指定数据库不可用,sys.databases 目录视图中的某些列和 DATABASEPROPERTYEX 函数中的属性可能返回 NULL 值。例如,若要返回数据库的排序规则名称,必须访问数据库。如果数据库不是联机的,或者 AUTO_CLOSE 选项设置为 ON,则无法返回排序规则名称。

示例

A. 使用系统目录视图返回数据库信息

以下示例使用目录视图 sys.partitionssys.allocation_unitssys.objectssys.indexes 返回数据库中每个表和索引所用的分区号和分配单元。

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. 使用系统目录视图返回数据库大小信息

下列示例使用目录视图 sys.database_files 和动态管理视图 sys.dm_db_file_space_usage 返回 tempdb 数据库的大小信息。视图 sys.dm_db_file_space_usage 仅适用于 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. 使用系统函数

以下示例使用系统函数 DATABASEPROPERTYEX 返回 AdventureWorks 数据库的默认排序规则的名称。

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

请参阅

概念

设置数据库选项
查询 SQL Server 系统目录常见问题
元数据可见性配置

其他资源

实现数据库

帮助和信息

获取 SQL Server 2005 帮助

更改历史记录

发布日期 历史记录

2005 年 12 月 5 日

新增内容:
  • 添加了“示例”部分。
  • 添加了 tempdb 的动态管理视图。
更新内容:
  • 更正了示例 B。