SQL SERVER中sys.databases视图介绍

目录

(一)前言

(二)sys.databases简介

1. sys.databases 概览

2. sys.databases 字段说明

3. 权限

(三)实战范例

1. 查询 sys.databases 视图

2. 检查 SQL 数据库中的复制状态

3. 检查 SQL 数据库中的时态保留策略状态


(一)前言

       作为数据库相关工作人员,对于当前数据库服务器上所存在的各个数据库都必须有所了解,所以此时sysdatabases视图对于我们来说,就显得十分重要了。

(二)sys.databases简介

       它只是一个只读表,里面包含所有数据库信息。

1. sys.databases 概览

Microsoft SQL Server 上的每个数据库在表中占一行。安装 SQLServer 时, sys.databases 包含 master 、 model 、 msdb 、 mssqlweb 和 tempdb 数据库的项。该表只存储在 master 数据库中。

2. sys.databases 字段说明

       情查看如下主要字段说明:

列名称数据类型说明
namesysname数据库名称,在 SQL Server 实例中或在 Azure SQL 数据库服务器中是唯一的。
database_idint数据库的 ID,在 SQL Server 实例中或在 Azure SQL 数据库服务器中是唯一的。
source_database_idintNon-NULL = 该数据库快照的源数据库 ID。
NULL = 非数据库快照。
owner_sidvarbinary(85)注册到服务器的数据库外部所有者的 SID(安全标识符)。 有关谁可以拥有数据库的信息,请参阅 ALTER AUTHORIZATION 的“数据库的 ALTER AUTHORIZATION”部分。
create_datedatetime数据库的创建或重命名日期。 对于 tempdb,该值在每次重新启动服务器时都会发生更改。
compatibility_leveltinyint对应于兼容行为的 SQL Server 版本的整数:
 
适用于
70SQL Server 7.0 - SQL Server 2008
80SQL Server 2000 (8.x) - SQL Server 2008 R2
90SQL Server 2008 - SQL Server 2012 (11.x)
100SQL Server(从 SQL Server 2008 开始)和 Azure SQL 数据库
110SQL Server(从 SQL Server 2012 (11.x) 开始)和 Azure SQL 数据库
120SQL Server(从 SQL Server 2014 (12.x) 开始)和 Azure SQL 数据库
130SQL Server(从 SQL Server 2016 (13.x) 开始)和 Azure SQL 数据库
140SQL Server(从 SQL Server 2017 (14.x) 开始)和 Azure SQL 数据库
150SQL Server(从 SQL Server 2019 (15.x) 开始)和 Azure SQL 数据库
collation_namesysname数据库的排序规则。 作为数据库中的默认排序规则。
NULL = 数据库没有联机,或 AUTO_CLOSE 设置为 ON 且数据库已关闭。
user_accesstinyint用户访问设置:
0 = 已指定 MULTI_USER
1 = 已指定 SINGLE_USER
2 = 已指定 RESTRICTED_USER
user_access_descnvarchar(60)用户访问设置的说明。
is_read_onlybit1 = 数据库为 READ_ONLY
0 = 数据库为 READ_WRITE
is_auto_close_onbit1 = AUTO_CLOSE 为 ON
0 = AUTO_CLOSE 为 OFF
is_auto_shrink_onbit1 = AUTO_SHRINK 为 ON
0 = AUTO_SHRINK 为 OFF
Statetinyint
0 = ONLINE
1 = RESTORING
2 = RECOVERING 1
3 = RECOVERY_PENDING 1
4 = SUSPECT
5 = EMERGENCY 1
6 = OFFLINE 1
7 = COPYING 2
10 = OFFLINE_SECONDARY 2

注意:对于 Always On 数据库,可以查询 sys.dm_hadr_database_replica_states 的 database_state 或 database_state_desc 列。

1适用于:SQL Server(从 SQL Server 2008 开始)和 Azure SQL 数据库
2适用于:Azure SQL 数据库和活动异地复制
state_descnvarchar(60)数据库状态的说明。 请参阅状态。
is_in_standbybit对于还原日志而言,数据库是只读的。
is_cleanly_shutdownbit1 = 数据库完全关闭;在启动时不需要恢复
0 = 数据库并未完全关闭;在启动时需要恢复
is_supplemental_logging_enabledbit1 = SUPPLEMENTAL_LOGGING 为 ON
0 = SUPPLEMENTAL_LOGGING 为 OFF
snapshot_isolation_statetinyint允许的快照隔离事务状态,如 ALLOW_SNAPSHOT_ISOLATION 选项所设置:
0 = 快照隔离状态为 OFF(默认值)。 不允许使用快照隔离。
1 = 快照隔离状态为 ON。 允许使用快照隔离。
2 = 快照隔离状态正在转换到 OFF 状态。 所有事务都将其修改版本化。 无法使用快照隔离启动新的事务。 数据库仍保持向 OFF 状态转换,直到所有在执行 ALTER DATABASE 时处于活动状态的事务完成。
3 = 快照隔离状态正在转换到 ON 状态。 新事务都将其修改版本化。 在快照隔离状态变为 1 (ON) 之前,事务无法使用快照隔离。 数据库仍保持向 ON 状态转换,直到所有在执行 ALTER DATABASE 时处于活动状态的更新事务完成。
snapshot_isolation_state_descnvarchar(60)允许的快照隔离事务状态的说明,它由 ALLOW_SNAPSHOT_ISOLATION 选项设置。
is_read_committed_snapshot_onbit1 = READ_COMMITTED_SNAPSHOT 选项为 ON。 read-committed 隔离级别下的读操作基于快照扫描,没有获取锁。
0 = READ_COMMITTED_SNAPSHOT 选项为 OFF(默认)。 read-committed 隔离级别下的读操作使用共享锁。
recovery_modeltinyint选定的恢复模式:
1 = FULL
2 = BULK_LOGGED
3 = SIMPLE
recovery_model_descnvarchar(60)选定的恢复模式的说明。
page_verify_optiontinyintPAGE_VERIFY 选项的设置:
0 = NONE
1 = TORN_PAGE_DETECTION
2 = CHECKSUM
page_verify_option_descnvarchar(60)PAGE_VERIFY 选项设置的说明。
is_auto_create_stats_onbit1 = AUTO_CREATE_STATISTICS 为 ON
0 = AUTO_CREATE_STATISTICS 为 OFF
is_auto_create_stats_incremental_onbit指示自动统计信息的增量选项的默认设置。
0 = 自动创建统计信息不是增量统计信息
1 = 如果可能,自动创建统计信息是增量统计信息
适用范围:SQL Server(从 SQL Server 2014 (12.x) 开始)。
is_auto_update_stats_onbit1 = AUTO_UPDATE_STATISTICS 为 ON
0 = AUTO_UPDATE_STATISTICS 为 OFF
is_auto_update_stats_async_onbit1 = AUTO_UPDATE_STATISTICS_ASYNC 为 ON
0 = AUTO_UPDATE_STATISTICS_ASYNC 为 OFF
is_ansi_null_default_onbit1 = ANSI_NULL_DEFAULT 为 ON
0 = ANSI_NULL_DEFAULT 为 OFF
is_ansi_nulls_onbit1 = ANSI_NULLS 为 ON
0 = ANSI_NULLS 为 OFF
is_ansi_padding_onbit1 = ANSI_PADDING 为 ON
0 = ANSI_PADDING 为 OFF
is_ansi_warnings_onbit1 = ANSI_WARNINGS 为 ON
0 = ANSI_WARNINGS 为 OFF
is_arithabort_onbit1 = ARITHABORT 为 ON
0 = ARITHABORT 为 OFF
is_concat_null_yields_null_onbit1 = CONCAT_NULL_YIELDS_NULL 为 ON
0 = CONCAT_NULL_YIELDS_NULL 为 OFF
is_numeric_roundabort_onbit1 = NUMERIC_ROUNDABORT 为 ON
0 = NUMERIC_ROUNDABORT 为 OFF
is_quoted_identifier_onbit1 = QUOTED_IDENTIFIER 为 ON
0 = QUOTED_IDENTIFIER 为 OFF
is_recursive_triggers_onbit1 = RECURSIVE_TRIGGERS 为 ON
0 = RECURSIVE_TRIGGERS 为 OFF
is_cursor_close_on_commit_onbit1 = CURSOR_CLOSE_ON_COMMIT 为 ON
0 = CURSOR_CLOSE_ON_COMMIT 为 OFF
is_local_cursor_defaultbit1 = CURSOR_DEFAULT 为局部默认值
0 = CURSOR_DEFAULT 为全局默认值
is_fulltext_enabledbit1 = 针对数据库启用全文
0 = 针对数据库禁用全文
is_trustworthy_onbit1 = 数据库已标记为可信
0 = 数据库尚未标记为可信
默认情况下,还原的数据库或附加的数据库都未启用可信。
is_db_chaining_onbit1 = 跨数据库所有权链接为 ON
0 = 跨数据库所有权链接为 OFF
is_parameterization_forcedbit1 = 参数化为 FORCED
0 = 参数化为 SIMPLE
is_master_key_encrypted_by_serverbit1 = 数据库具有加密的主密钥
0 = 数据库没有加密的主密钥
is_query_store_onbit1 = 针对此数据库启用查询存储。 查看 sys.database_query_store_options 以查看查询存储状态。
0 = 未启用查询存储
适用范围:SQL Server(从 SQL Server 2016 (13.x) 开始)。
is_publishedbit1 = 数据库为事务复制拓扑或快照复制拓扑中的发布数据库
0 = 不是发布数据库
is_subscribedbit未使用此列。 它将始终返回 0,而与数据库的订阅服务器状态无关。
is_merge_publishedbit1 = 数据库为合并复制拓扑中的发布数据库
0 = 不是合并复制拓扑中的发布数据库
is_distributorbit1 = 数据库为复制拓扑的分发数据库
0 = 不是复制拓扑的分发数据库
is_sync_with_backupbit1 = 数据库标记为与备份进行复制同步
0 = 没有标记为与备份进行复制同步
service_broker_guiduniqueidentifier该数据库的服务代理标识符。 用作路由表中目标的 broker_instance
is_broker_enabledbit1 = 该数据库中的代理当前正在发送和接收消息。
0 = 所有已发送的消息都会停留在传输队列中,已接收的消息不会置于该数据库的队列中。
默认情况下,还原的数据库或附加的数据库都禁用了代理。 与此相关的例外是数据库镜像,其中 Broker 在故障转移后启用。
log_reuse_waittinyint事务日志空间重复使用正在等待最后一个检查点之前的下列各项之一。 有关这些值更详细的说明,请参阅事务日志

0 = 无
1 = 检查点(当数据库具有内存优化的数据文件组时,应看到 log_reuse_wait 列指示 checkpoint 或 xtp_checkpoint)1
2 = 日志备份 1
3 = 主动备份或还原 1
4 = 活动事务 1
5 = 数据库镜像 1
6 = 复制 1
7 = 数据库快照创建 1
8 = 日志扫描
9 = AlwaysOn 可用性组辅助副本正将此数据库的事务日志记录应用到相应的辅助数据库。 2
9 = 其他(暂时)3
10 = 仅供内部使用 2
11 = 仅供内部使用 2
12 = 仅供内部使用 2
13 = 最早的页面 2
14 = 其他 2
16 = XTP_CHECKPOINT(当数据库具有内存优化的数据文件组时,应看到 log_reuse_wait 列指示 checkpoint 或 xtp_checkpoint)4
17 = 使用加速数据库恢复时的 sLog 扫描 5

1适用于:SQL Server(从 SQL Server 2008 开始)
2适用于:SQL Server(从 SQL Server 2012 (11.x) 开始)
3适用于:SQL Server(最高并包括 SQL Server 2008 R2)
4适用于:SQL Server(从 SQL Server 2014 (12.x) 开始)
5适用于:SQL Server(从 SQL Server 2019 (15.x) 开始)
log_reuse_wait_descnvarchar(60)日志空间的重复使用正在等待最后一个检查点的描述。 可能的值:
NOTHING
CHECKPOINT
LOG_BACKUP
ACTIVE_BACKUP_OR_RESTORE
ACTIVE_TRANSACTION
DATABASE_MIRRORING
复制
DATABASE_SNAPSHOT_CREATION
LOG_SCAN
AVAILABILITY_REPLICA
OLDEST_PAGE
XTP_CHECKPOINT
SLOG_SCAN
is_date_correlation_onbit1 = DATE_CORRELATION_OPTIMIZATION 为 ON
0 = DATE_CORRELATION_OPTIMIZATION 为 OFF
is_cdc_enabledbit1 = 对数据库启用变更数据捕获。 有关详细信息,请参阅 sys.sp_cdc_enable_db (Transact-SQL)
is_encryptedbit指示数据库是否加密(反映使用 ALTER DATABASE SET ENCRYPTION 子句最后设置的状态)。 可以是以下其中一个值:
1 = 已加密
0 = 未加密
有关数据库加密的详细信息,请参阅透明数据加密 (TDE)
如果数据库正在解密过程中,is_encrypted 会显示值 0。 可以使用 sys.dm_database_encryption_keys 动态管理视图来查看加密过程的状态。
is_honor_broker_priority_onbit指示数据库是否遵守会话优先级(反映使用 ALTER DATABASE SET HONOR_BROKER_PRIORITY 子句最后设置的状态)。 可以是以下其中一个值:
1 = HONOR_BROKER_PRIORITY 为 ON
0 = HONOR_BROKER_PRIORITY 为 OFF
默认情况下,还原的数据库或附加的数据库都会关闭代理优先级。
replica_iduniqueidentifier数据库参与的可用性组(如果有)的本地 AlwaysOn 可用性组可用性副本的唯一标识符。
NULL = 数据库不是可用性组中的可用性副本的一部分。
适用于:SQL Server(SQL Server 2012 (11.x) 及更高版本)和 Azure SQL 数据库
group_database_iduniqueidentifier数据库在其参与的 AlwaysOn 可用性组(如果有)中的唯一标识符。 在主副本上以及在所有辅助副本上(数据库在这些辅助副本上加入可用性组),该数据库的 group_database_id 都是相同的。
NULL = 数据库不是任何可用性组中的可用性副本的一部分。
适用于:SQL Server(从 SQL Server 2012 (11.x) 开始)和 Azure SQL 数据库
resource_pool_idint映射到此数据库的资源池的 ID。 此资源池控制对该数据库中的内存优化表可用的总内存。
适用于:SQL Server(从 SQL Server 2014 (12.x) 开始)
default_language_lcidsmallint指示包含数据库的默认语言的本地 ID (lcid)。
注意:用作配置默认语言服务器配置选项的 sp_configure。 对于非包含数据库,此值为 NULL。
适用于:SQL Server(从 SQL Server 2012 (11.x) 开始)和 Azure SQL 数据库
default_language_namenvarchar(128)指示包含数据库的默认语言。
对于非包含数据库,此值为 NULL。
适用于:SQL Server(SQL Server 2012 (11.x) 及更高版本)和 Azure SQL 数据库
default_fulltext_language_lcidint指示包含的数据库的默认全文语言的本地 ID (lcid)。
注意:用作默认配置默认全文语言服务器配置选项的 sp_configure。 对于非包含数据库,此值为 NULL。
适用于:SQL Server(从 SQL Server 2012 (11.x) 开始)和 Azure SQL 数据库
default_fulltext_language_namenvarchar(128)指示包含数据库的默认全文语言。
对于非包含数据库,此值为 NULL。
适用于:SQL Server(从 SQL Server 2012 (11.x) 开始)和 Azure SQL 数据库
is_nested_triggers_onbit指示包含数据库中是否允许使用嵌套触发器。
0 = 不允许使用嵌套触发器
1 = 允许使用嵌套触发器
注意:用作配置嵌套触发器的服务器配置选项的 sp_configure。 对于非包含数据库,此值为 NULL。 有关详细信息,请参阅 sys.configurations (Transact-SQL)
适用于:SQL Server(从 SQL Server 2012 (11.x) 开始)和 Azure SQL 数据库
is_transform_noise_words_onbit指示是否应在包含数据库中转换干扰词。
0 = 不应转换干扰词。
1 = 应转换干扰词。
注意:用作转换干扰词服务器配置选项的 sp_configure。 对于非包含数据库,此值为 NULL。 有关详细信息,请参阅 sys.configurations (Transact-SQL)
适用于:SQL Server(从 SQL Server 2012 (11.x) 开始)
two_digit_year_cutoffsmallint指示 1753 到 9999 之间的数字值,以表示将两位数的年份解释为四位数的年份的截止年份。
注意:用作配置两位数年份截止服务器配置选项的 sp_configure。 对于非包含数据库,此值为 NULL。 有关详细信息,请参阅 sys.configurations (Transact-SQL)
适用于:SQL Server(从 SQL Server 2012 (11.x) 开始)和 Azure SQL 数据库
containmenttinyint(非 NULL)指示数据库的包含状态。
0 = 数据库包含状态为 OFF。 适用于:SQL Server(从 SQL Server 2012 (11.x) 开始)和 Azure SQL 数据库
1 = 数据库处于部分包含状态 适用于:SQL Server(从 SQL Server 2012 (11.x) 开始)
containment_descnvarchar(60)(非 NULL)指示数据库的包含状态。
NONE = 早期数据库(零包含)
PARTIAL = 部分包含的数据库
适用于:SQL Server(SQL Server 2012 (11.x) 及更高版本)和 Azure SQL 数据库
target_recovery_time_in_secondsint恢复数据库的估计时间(秒)。 可以为 NULL。
适用于:SQL Server(从 SQL Server 2012 (11.x) 开始)和 Azure SQL 数据库
delayed_durabilityint延迟持续性设置:
0 = DISABLED
1 = ALLOWED
2 = FORCED
有关详细信息,请参阅控制事务持续性
适用范围:SQL Server(从 SQL Server 2014 (12.x) 开始)和 Azure SQL 数据库。
delayed_durability_descnvarchar(60)延迟持续性设置:
DISABLED
ALLOWED
FORCED
适用范围:SQL Server(从 SQL Server 2014 (12.x) 开始)和 Azure SQL 数据库。
is_memory_optimized_elevate_to_snapshot_onbit在会话设置 TRANSACTION ISOLATION LEVEL 设置为较低的隔离级别、READ COMMITTED 或 READ UNCOMMITTED 时,使用 SNAPSHOT 隔离访问内存优化表。
1 = 最低隔离级别为 SNAPSHOT。
0 = 隔离级别未进行提升。
is_federation_memberbit指示该数据库是否为联合的成员。
适用于:Azure SQL 数据库
is_remote_data_archive_enabledbit指示数据库是否可拉伸。
0 = 数据库未启用拉伸。
1 = 数据库已启用拉伸。
适用于:SQL Server(从 SQL Server 2016 (13.x) 开始)
有关详细信息,请参阅 Stretch Database
is_mixed_page_allocation_onbit指示数据库中的表和索引是否可以从混合分片分配初始页。
0 = 数据库中的表和索引始终可以从单一分片分配初始页。
1 = 数据库中的表和索引可以从混合分片分配初始页。
有关详细信息,请参阅 ALTER DATABASE SET Options (Transact-SQL) 的 SET MIXED_PAGE_ALLOCATION 选项。
适用于:SQL Server(从 SQL Server 2016 (13.x) 开始)
is_temporal_history_retention_enabledbit指示是否启用临时保留策略清理任务。

1 = 已启用临时保留
0 = 已禁用临时保留
适用范围:SQL Server(从 SQL Server 2017 (14.x) 开始)和 Azure SQL 数据库
catalog_collation_typeint目录排序规则设置:
0 = DATABASE_DEFAULT
2 = SQL_Latin_1_General_CP1_CI_AS
适用于:Azure SQL 数据库
catalog_collation_type_descnvarchar(60)目录排序规则设置:
COLLATE
SQL_Latin_1_General_CP1_CI_AS
适用于:Azure SQL 数据库
physical_database_namenvarchar(128)对于 SQL Server,数据库的物理名称。 对于 Azure SQL 数据库,服务器上数据库的公用 ID。
适用范围:SQL Server(从 SQL Server 2019 (15.x) 开始)和 Azure SQL 数据库
is_result_set_caching_onbit指示是否启用结果集缓存。
1 = 已启用结果集缓存
0 = 已禁用结果集缓存
适用于:Azure Synapse Analytics Gen2。 虽然此功能正在推广到所有区域,但请检查部署到实例的版本以及最新的 Azure Synapse 发行说明和 Gen2 升级计划以了解功能可用性。
is_accelerated_database_recovery_onbit指明是否启用了加速数据库恢复 (ADR)。
1 = 已启用 ADR
0 = 已禁用 ADR
适用范围:SQL Server(从 SQL Server 2019 (15.x) 开始)和 Azure SQL 数据库
is_tempdb_spill_to_remote_storebit指示是否启用 tempdb 溢出到远程存储。
1 = 已启用
0 = 已禁用
适用于:Azure Synapse Analytics Gen2。 虽然此功能正在推广到所有区域,但请检查部署到实例的版本以及最新的 Azure Synapse 发行说明和 Gen2 升级计划以了解功能可用性。
is_stale_page_detection_onbit指示是否启用过时页面检测。
1 = 已启用过时页面检测
0 = 已禁用过时页面检测
适用于:Azure Synapse Analytics Gen2。 虽然此功能正在推广到所有区域,但请检查部署到实例的版本以及最新的 Azure Synapse 发行说明和 Gen2 升级计划以了解功能可用性。
is_memory_optimized_enabledbit指示是否为数据库启用某些内存中功能,例如混合缓冲池。 不反映内存中 OLTP 的可用性或配置状态。
1 = 已启用内存优化功能
0 = 已禁用内存优化功能
适用范围:SQL Server(从 SQL Server 2019 (15.x) 开始)和 Azure SQL 数据库
is_ledger_onbit指示账本数据库,其中所有用户表都是账本表(所有客户数据库都是防篡改的)。

适用于:从 SQL Server 2022 开始、Azure SQL 数据库

3. 权限

       如果 sys.databases 的调用方不是数据库的所有者,并且数据库不是 master 或 tempdb,则查看对应行所需的最低权限为 ALTER ANY DATABASE 或 VIEW ANY DATABASE 服务器级权限,或者为 master 数据库中的 CREATE DATABASE 权限。 始终可在 sys.databases 中查看调用方连接的数据库。 

重要

默认情况下,公共角色具有 VIEW ANY DATABASE 权限,允许所有登录名查看数据库信息。 要阻止登录名检测数据库,请 REVOKEpublic 中的 VIEW ANY DATABASE 权限或 DENY 单个登录名的 VIEW ANY DATABASE 权限。

(三)实战范例

1. 查询 sys.databases 视图

       下面的示例返回 sys.databases 视图中提供的一些列。


   
   
  1. SELECT name, user_access_desc, is_read_only, state_desc, recovery_model_desc
  2. FROM sys.databases;

2. 检查 SQL 数据库中的复制状态

       下面的示例查询 sys.databases 视图和 sys.dm_database_copies 视图,以返回有关数据库复制操作的信息。

适用于:Azure SQL DB(常规SQL SERVER版本以及Azure SQL MI都不可以用)


   
   
  1. -- Execute from the master database.
  2. SELECT a.name, a.state_desc, b.start_date, b.modify_date, b.percent_complete
  3. FROM sys.databases AS a
  4. INNER JOIN sys.dm_database_copies AS b ON a.database_id = b.database_id
  5. WHERE a.state = 7;

 

3. 检查 SQL 数据库中的时态保留策略状态

       以下示例查询 sys.databases 是否启用时态保留清理任务的信息。 请注意,还原操作时态保留默认处于禁用状态。 使用 ALTER DATABASE 显式启用它。

适用于:Azure SQL DB/MI(常规SQL SERVER版本不可以用)


   
   
  1. -- Execute from the master database.
  2. SELECT a.name, a.is_temporal_history_retention_enabled
  3. FROM sys.databases AS a;

 

 

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值