SQLSERVER系统数据库概念
系统数据库
数据库管理员(DBA)的一项基本的技能是对SQL数据库引擎的系统数据库的深刻理解。数据库开发人员了解SQLSERVER自带的系统数据库也是十分有用的。下面就列出了其中的一些系统数据库。(注:如果你决定研究一下这些系统数据库,那么你需要有一个开发数据库。)
Master
Master数据库保存有放在SQLSERVER实体上的所有数据库,它还是将引擎固定起来的粘合剂。如果不使用主数据库,SQLSERVER就不能启动,所以你必须要小心地管理好这个数据库。对这个数据库进行常规备份是十分必要的。建议在数据库发生变更的时候备份master数据库。
这个数据库包括了诸如系统登录、配置设置、已连接的SERVER等信息,以及用于该实体的其他系统和用户数据库的一般信息。主数据库还存有扩展存储过程,它能够访问外部进程,从而让你能够与磁盘子系统和系统API调用等特性交互。这些过程一般都用像C++这样的现代编程语言。
如果不幸碰到系统崩溃而必须恢复主数据库的情况,你可以参看MCSE/MCDBA StevenWarren在TechRepublic上发表的文章。这篇文章讲得十分透彻,它解释了恢复这一重要数据库所需要的一些特殊步骤。
Model
Model是一个用来在实体上创建新用户数据库的模版数据库。你可以把任何存储过程、视图、用户等放在模型数据库里,这样在创建新数据库的时候,新数据库就会包含你放在模型数据库里的所有对象了。因此新建的数据库最小应该有model数据库那么大。我们在创建数据库的时候会指定数据库的大小,通常会大于model数据库的大小,这是因为里面填充了空的page。
Tempdb
正如其名字所提示的,tempdb存有临时对象,例如全局和本地临时表格和存储过程。 这个数据库在SQLSERVER每次重启的时候都会被重新创建,而其中包含的对象是依据模型数据库里定义的对象被创建的。除了这些对象,tempdb还存有其他对象,例如表格变量、来自表格值函数的结果集,以及临时表格变量。由于tempdb会保留SQLSERVER实体上所有数据库的这些对象类型,所以对数据库进行优化配置是非常重要的。
在SQL Server 2005里,tempdb数据库还有一项额外的任务;它还被用作一些特性的版本库,例如新的快照隔离层和在线索引操作等。关于新的隔离层的简要说明,请参考我关于SQLServer 2005高级特性的文章。
Distribution
当你的SQLSERVER实体被配置为复制分发SERVER时,这个数据库就会被添加到你的系统里。在默认情况下,数据库的名字就是distribution,但是你可以更改它的名字。这个数据库用来保存历史和快照、合并和事务复制等的元数据。
Msdb
Msdb数据库用来保存于数据库备份、SQL Agent信息、DTS程序包、SQLSERVER任务等信息,以及诸如日志转移这样的复制信息。
sql server系统表详细说明
下列这些系统表都是存放在master数据库下的Views中,而不是在Tables中。
系统表 |
数据库 |
功能 |
sysaltfiles |
主数据库 |
保存数据库的文件 |
syscharsets |
主数据库 |
字符集与排序顺序 |
sysconfigures |
主数据库 |
配置选项 |
syscurconfigs |
主数据库 |
当前配置选项 |
sysdatabases |
主数据库 |
服务器中的数据库 |
syslanguages |
主数据库 |
语言 |
syslogins |
主数据库 |
登陆帐号信息 |
sysoledbusers |
主数据库 |
链接服务器登陆信息 |
sysprocesses |
主数据库 |
进程 |
sysremotelogins |
主数据库 |
远程登录帐号 |
syscolumns |
每个数据库 |
列 |
sysconstrains |
每个数据库 |
限制 |
sysfilegroups |
每个数据库 |
文件组 |
sysfiles |
每个数据库 |
文件 |
sysforeignkeys |
每个数据库 |
外部关键字 |
sysindexs |
每个数据库 |
索引 |
sysmenbers |
每个数据库 |
角色成员 |
sysobjects |
每个数据库 |
所有数据库对象 |
syspermissions |
每个数据库 |
权限 |
systypes |
每个数据库 |
用户定义数据类型 |
sysusers |
每个数据库 |
用户 |
sysaltfiles
在特殊情况下,包含与数据库中的文件相对应的行。该表存储在 master 数据库中。
列名 |
数据类型 |
描述 |
fileid |
smallint |
每个数据库的唯一文件标识号。 |
groupid |
smallint |
文件组标识号。 |
size |
int |
文件大小(以 8 KB 页为单位)。 |
maxsize |
int |
最大文件大小(以 8 KB 页为单位)。0 值表示不增长,–1 值表示文件应一直增长到磁盘已满。 |
growth |
int |
数据库的增长大小。0 值表示不增长。根据状态的值,可以是页数或文件大小的百分比。如果 status 为 0x100000,则growth 是文件大小的百分比;否则是页数。 |
status |
int |
仅限内部使用。 |
perf |
int |
保留。 |
dbid |
smallint |
该文件所属数据库的数据库标识号。 |
name |
nchar(128) |
文件的逻辑名称。 |
filename |
nchar(260) |
物理设备的名称,包括文件的完整路径。 |
syscharsets
每个字符集在表中各占一行,表中还包含定义供 Microsoft? SQLServer? 使用的排序次序。排序次序中的一个在 sysconfigures 中标记为默认排序次序,该次序是实际使用的唯一次序。
列名 |
数据类型 |
描述 |
type |
smallint |
该行表示的实体类型。1001 是字符集;2001 是排序次序。 |
id |
tinyint |
字符集或排序次序的唯一 ID。注意排序次序和字符集不能共享相同的 ID 号。保留从 1 到 240 的 ID 范围供 SQL Server 使用。 |
csid |
tinyint |
如果该行表示字符集,则不使用该字段。如果该行表示排序次序,则该字段是在其上生成排序次序的字符集 ID。假设具有该 ID 的字符集行存在于该表中。 |
status |
smallint |
内部系统状态信息位。 |
name |
sysname |
字符集或排序次序的唯一名称。该字段必须只包含字母 A-Z 或 a-z、数字 0 – 9 和下划线 (_)。必须以字母开头。 |
description |
nvarchar(255) |
字符集或排序次序功能的可选描述。 |
binarydefinition |
varbinary(255) |
仅限内部使用。 |
definition |
image |
字符集或排序次序的内部定义。该字段中的数据结构取决于类型。 |
sysconfigures
用户设置的每个配置选项在表中各占一行。 sysconfigures 包含最近启动 Microsoft? SQL Server? 前定义的配置选项,还包含最近启动后设置的所有动态配置选项。该表只位于 master 数据库中。
列名 |
数据类型 |
描述 |
value |
int |
变量的用户可修改值(仅在已执行 RECONFIGURE 后由 SQL Server 使用)。 |
config |
smallint |
配置变量号。 |
comment |
nvarchar(255) |
对配置选项的解释。 |
status |
smallint |
表示选项状态的位图。可能的值包括: 0 = 静态(该设置在服务器重新启动时生效)。 |
syscurconfigs
每个当前配置选项各占一项。另外,该表还包含四个描述配置结构的项。 syscurconfigs 在由用户查询时动态生成。有关更多信息,请参见sysconfigures。
列名 |
数据类型 |
描述 |
value |
int |
用户可修改的变量值(仅在已执行 RECONFIGURE 的情况下由 Microsoft? SQL Server? 使用)。 |
config |
smallint |
配置变量号。 |
comment |
nvarchar(255) |
对配置选项的解释。 |
status |
smallint |
表示选项状态的位图。可能的值包括: 0 = 静态(该设置在服务器重新启动时生效)。 |
sysdatabases
Microsoft?SQL Server? 上的每个数据库在表中占一行。最初安装 SQLServer 时, sysdatabases 包含 master 、 model 、 msdb 、 mssqlweb和 tempdb 数据库的项。该表只存储在 master 数据库中。
列名 |
数据类型 |
描述 |
name |
sysname |
数据库的名称。 |
dbid |
smallint |
数据库 ID。 |
sid |
varbinary(85) |
数据库创建者的系统 ID。 |
mode |
smallint |
用于创建数据库时在内部锁定该数据库。 |
status |
int |
状态位,其中某些状态位可由用户使用sp_dboption ( read only 、 dbo use only 、 single user 等)进行设置: 1 = autoclose ;使用 sp_dboption 设置。 可以同时打开多个位。 |
status2 |
int |
16384 = ANSI null default ;使用sp_dboption 设置。 |
crdate |
datetime |
创建日期。 |
reserved |
datetime |
留作以后使用。 |
category |
int |
包含用于复制的信息位图: 1 = 已发布。 |
cmptlevel |
tinyint |
数据库的兼容级别。有关更多信息,请参见sp_dbcmptlevel。 |
filename |
nvarchar(260) |
数据库主文件的操作系统路径和名称。 |
version |
smallint |
创建数据库时使用的 SQL Server 代码内部版本号。仅供 SQL Server 工具在内部用于升级处理。 |
syslanguages
出现在 Microsoft? SQL Server? 中的每种语言在表中各占一行。虽然美国英语不在 syslanguages 内,但该表始终可由 SQL Server 使用。该表只存储在 master 数据库中。
列名 |
数据类型 |
描述 |
langid |
smallint |
唯一语言 ID。 |
dateformat |
nchar(3) |
日期顺序(如 DMY)。 |
datefirst |
tinyint |
一周的第一天:1 表示星期一,2 表示星期二,依此类推,直到 7 表示星期日。 |
upgrade |
int |
留作系统使用。 |
name |
sysname |
正式语言名称(例如,fran?ais)。 |
alias |
sysname |
备用语言名称(如 French)。 |
months |
nvarchar(372) |
按从一月到十二月的顺序排列的用逗号分隔的月份全称列表,每个名称最多包含 20 个字符。 |
shortmonths |
varchar(132) |
按从一月到十二月的顺序排列的用逗号分隔的缩写月份名称列表,每个名称最多包含 9 个字符。 |
days |
nvarchar(217) |
按从一月到十二月的顺序排列的用逗号分隔的天名称列表,每个名称最多包含 30 个字符。 |
lcid |
int |
此种语言的 Microsoft Windows NT? 区域设置 ID。 |
mslangid |
smallint |
SQL Server 消息组 ID。 |
安装了 SQLServer 提供的三十三种语言。下面是语言列表。
用英语表示的名称 |
NT LCID |
SQL Server 消息组 ID |
English |
1033 |
1033 |
German |
1031 |
1031 |
French |
1036 |
1036 |
Japanese |
1041 |
1041 |
Danish |
1030 |
1030 |
Spanish |
3082 |
3082 |
Italian |
1040 |
1040 |
Dutch |
1043 |
1043 |
Norwegian |
2068 |
2068 |
Portuguese |
2070 |
2070 |
Finnish |
1035 |
1035 |
Swedish |
1053 |
1053 |
Czech |
1029 |
1029 |
Hungarian |
1038 |
1038 |
Polish |
1045 |
1045 |
Romanian |
1048 |
1048 |
Croatian |
1050 |
1050 |
Slovak |
1051 |
1051 |
Slovene |
1060 |
1060 |
Greek |
1032 |
1032 |
Bulgarian |
1026 |
1026 |
Russian |
1049 |
1049 |
Turkish |
1055 |
1055 |
British English |
2057 |
1033 |
Estonian |
1061 |
1061 |
Latvian |
1062 |
1062 |
Lithuanian |
1063 |
1063 |
Brazilian |
1046 |
1046 |
Traditional Chinese |
1028 |
1028 |
Korean |
1042 |
1042 |
Simplified Chinese |
2052 |
2052 |
Arabic |
1025 |
1025 |
Thai |
1054 |
1054 |
syslogins
每个登录帐户在表中占一行。
列名 |
数据类型 |
描述 |
sid |
varbinary(85) |
安全标识符。 |
status |
smallint |
仅限内部使用。 |
createdate |
datetime |
添加登录的日期。 |
updatedate |
datetime |
更新登录的日期。 |
accdate |
datetime |
仅限内部使用。 |
totcpu |
int |
仅限内部使用。 |
totio |
int |
仅限内部使用。 |
spacelimit |
int |
仅限内部使用。 |
timelimit |
int |
仅限内部使用。 |
resultlimit |
int |
仅限内部使用。 |
name |
varchar(30) |
用户的登录 ID。 |
dbname |
nvarchar(128) |
建立连接时,用户的默认数据库名。 |
password |
nvarchar(128) |
用户的加密密码(可以是 NULL)。 |
language |
nvarchar(128) |
用户的默认语言。 |
denylogin |
int |
如果登录是 Microsoft? Windows NT? 用户或组且已被拒绝访问,则为 1。 |
hasaccess |
int |
如果已授权登录访问服务器,则为 1。 |
isntname |
int |
如果登录是 Windows NT 用户或组,则为 1;如果登录是 Microsoft SQL Server? 登录,则为 0。 |
isntgroup |
int |
如果登录是 Windows NT 组,则为 1。 |
isntuser |
int |
如果登录是 Windows NT 用户,则为 1。 |
sysadmin |
int |
如果登录是 sysadmin 服务器角色成员,则为 1。 |
securityadmin |
int |
如果登录是 securityadmin 服务器角色成员,则为 1。 |
serveradmin |
int |
如果登录是 serveradmin 固定服务器角色成员,则为 1。 |
setupadmin |
int |
如果登录是 setupadmin 固定服务器角色成员,则为 1。 |
processadmin |
int |
如果登录是 processadmin 固定服务器角色成员,则为 1。 |
diskadmin |
int |
如果登录是 diskadmin 固定服务器角色成员,则为 1。 |
dbcreator |
int |
如果登录是 dbcreator 固定服务器角色成员,则为 1。 |
loginname |
nvarchar(128) |
登录的实际名称,该名称可能不同于 SQL Server 所使用的登录名。 |
sysoledbusers
每个指定的链接服务器的用户和密码映射在表中占一行。该表存储在 master 数据库中。
列名 |
数据类型 |
描述 |
rmtsrvid |
smallint |
服务器的 SID(安全标识号)。 |
rmtloginame |
nvarchar(128) |
loginsid 映射到的链接 rmtservid 的远程登录名。 |
rmtpassword |
nvarchar(128) |
链接 rmtsrvid 内的指定远程登录的加密密码。 |
loginsid |
varbinary(85) |
要映射的本地登录 SID。 |
status |
smallint |
如果该值为 1,映射应使用用户自己的凭据。 |
changedate |
datetime |
上次更改映射信息的日期。 |
sysprocesses
sysprocesses 表中保存关于运行在 Microsoft? SQL Server? 上的进程的信息。这些进程可以是客户端进程或系统进程。 sysprocesses 只存储在master 数据库中。
列名 |
数据类型 |
描述 |
Spid |
smallint |
SQL Server 进程 ID。 |
Kpid |
smallint |
Microsoft Windows NT 4.0? 线程 ID。 |
blocked |
smallint |
分块进程的进程 ID ( spid )。 |
waittype |
binary(2) |
保留。 |
waittime |
int |
当前等待时间(以毫秒为单位)。当进程不处于等待时,为 0。 |
lastwaittype |
nchar(32) |
表示上次或当前等待类型名称的字符串。 |
waitresource |
nchar(32) |
锁资源的文本化表示法。 |
Dbid |
smallint |
当前正由进程使用的数据库 ID。 |
Uid |
smallint |
执行命令的用户 ID。 |
Cpu |
int |
进程的累计 CPU 时间。无论 SET STATISTICS TIME ON 选项是 ON 还是 OFF,都为所有进程更新该条目。 |
physical_io |
int |
进程的累计磁盘读取和写入。 |
memusage |
int |
当前分配给该进程的过程高速缓存中的页数。一个负数,表示进程正在释放由另一个进程分配的内存。 |
login_time |
datetime |
客户端进程登录到服务器的时间。对于系统进程,是存储 SQL Server 启动发生的时间。 |
last_batch |
datetime |
客户端进程上次执行远程存储过程调用或 EXECUTE 语句的时间。对于系统进程,是存储 SQL Server 启动发生的时间。 |
Ecid |
smallint |
用于唯一标识代表单个进程进行操作的子线程的执行上下文 ID。 |
open_tran |
smallint |
进程的打开事务数。 |
status |
nchar(30) |
进程 ID 状态(如运行、休眠等)。 |
Sid |
binary(85) |
用户的全局唯一标识符 (GUID)。 |
hostname |
nchar(128) |
工作站的名称。 |
program_name |
nchar(128) |
应用程序的名称。 |
hostprocess |
nchar(8) |
工作站进程 ID 号。 |
Cmd |
nchar(16) |
当前正在执行的命令。 |
nt_domain |
nchar(128) |
客户端的 Windows NT 4.0 域(如果使用 Windows 身份验证)或信任连接的 Windows NT 4.0 域。 |
nt_username |
nchar(128) |
进程的 Windows NT 4.0用户名(如果使用 Windows 身份验证)或信任连接的 Windows NT 4.0 用户名。 |
net_address |
nchar(12) |
指派给每个用户工作站上的网络接口卡唯一标识符。当用户登录时,该标识符插入net_address 列。 |
net_library |
nchar(12) |
用于存储客户端网络库的列。每个客户端进程都在网络连接上进入。网络连接有一个与这些进程关联的网络库,该网络库使得这些进程可以建立连接。有关更多信息,请参见客户端和服务器 Net-Library。 |
loginame |
nchar(128) |
登录名。 |
sysremotelogins
每个允许调用Microsoft? SQL Server? 上的远程存储过程的远程用户占一行。
列名 |
数据类型 |
描述 |
remoteserverid |
smallint |
远程服务器标识。 |
remoteusername |
nvarchar(128) |
远程服务器上的用户登录名。 |
status |
smallint |
选项的位图。 |
sid |
varbinary(85) |
Microsoft Windows NT? 用户安全 ID。 |
changedate |
datetime |
添加远程用户的日期和时间。 |
syscolumns
每个表和视图中的每列在表中占一行,存储过程中的每个参数在表中也占一行。该表位于每个数据库中。
列名 |
数据类型 |
描述 |
name |
sysname |
列名或过程参数的名称。 |
id |
int |
该列所属的表对象 ID,或与该参数关联的存储过程 ID。 |
xtype |
tinyint |
systypes 中的物理存储类型。 |
typestat |
tinyint |
仅限内部使用。 |
xusertype |
smallint |
扩展的用户定义数据类型 ID。 |
length |
smallint |
systypes 中的最大物理存储长度。 |
xprec |
tinyint |
仅限内部使用。 |
xscale |
tinyint |
仅限内部使用。 |
colid |
smallint |
列或参数 ID。 |
xoffset |
smallint |
仅限内部使用。 |
bitpos |
tinyint |
仅限内部使用。 |
reserved |
tinyint |
仅限内部使用。 |
colstat |
smallint |
仅限内部使用。 |
cdefault |
int |
该列的默认值 ID。 |
domain |
int |
该列的规则或 CHECK 约束 ID。 |
number |
smallint |
过程分组时(0 表示非过程项)的子过程号。 |
colorder |
smallint |
仅限内部使用。 |
autoval |
varbinary(255) |
仅限内部使用。 |
offset |
smallint |
该列所在行的偏移量;如果为负,表示可变长度行。 |
status |
tinyint |
用于描述列或参数属性的位图: 0x08 = 列允许空值。 |
type |
tinyint |
systypes 中的物理存储类型。 |
usertype |
smallint |
systypes 中的用户定义数据类型 ID。 |
printfmt |
varchar(255) |
仅限内部使用。 |
prec |
smallint |
该列的精度级别。 |
scale |
int |
该列的小数位数。 |
iscomputed |
int |
表示是否已计算该列的标志: 0 = 未计算。 |
isoutparam |
int |
表示该过程参数是否是输出参数: 1 = 真。 |
isnullable |
int |
表示该列是否允许空值: 1 = 真。 |
sysconstraints
包含约束映射,映射到拥有该约束的对象。该系统目录存储在每个数据库中。
列名 |
数据类型 |
描述 |
constid |
int |
约束号。 |
id |
int |
拥有该约束的表 ID。 |
colid |
smallint |
在其上定义约束的列 ID,如果是表约束则为 0。 |
spare1 |
tinyint |
保留。 |
status |
int |
位图指示状态。可能的值包括: 1 = PRIMARY KEY 约束。 |
actions |
int |
保留。 |
error |
int |
保留。 |
sysfilegroups
数据库中的每个文件组在表中占一行。该表存储在每个数据库中。在该表中至少有一项用于主文件组。
列名 |
数据类型 |
描述 |
groupid |
smallint |
每个数据库的唯一组标识号。 |
allocpolicy |
smallint |
保留。 |
status |
int |
0x8 = READ ONLY |
groupname |
sysname |
文件组的名称。 |
sysfiles
数据库中的每个文件在表中占一行。该系统表是虚拟表,不能直接更新或修改。
列名 |
数据类型 |
描述 |
fileid |
smallint |
每个数据库的唯一文件标识号。 |
groupid |
smallint |
文件组标识号。 |
size |
int |
文件大小(以 8 KB 页为单位)。 |
maxsize |
int |
最大文件大小(以 8 KB 页为单位)。0 值表示不增长,–1 值表示文件应一直增长到磁盘已满。 |
growth |
int |
数据库的增长大小。0 值表示不增长。根据状态的值,可以是页数或文件大小的百分比。如果 status 包含 0x100000,则 growth 是文件大小的百分比;否则,它是页数。 |
status |
int |
growth 值(以兆字节 (MB) 或千字节 (KB) 为单位)的状态位。 0x1 = 默认设备。 |
perf |
int |
保留。 |
name |
nchar(128) |
文件的逻辑名称。 |
filename |
nchar(260) |
物理设备的名称,包括文件的完整路径。 |
sysforeignkeys
包含关于表定义中的 FOREIGNKEY 约束的信息。该表存储在每个数据库中。
列名 |
数据类型 |
描述 |
constid |
int |
FOREIGN KEY 约束的 ID。 |
fkeyid |
int |
具有 FOREIGN KEY 约束的表对象 ID。 |
rkeyid |
int |
在 FOREIGN KEY 约束中引用的表对象 ID。 |
fkey |
smallint |
正在引用的列 ID。 |
rkey |
smallint |
已引用的列 ID。 |
keyno |
smallint |
该列在引用列列表中的位置。 |
sysindexes
数据库中的每个索引和表在表中各占一行。该表存储在每个数据库中。
列名 |
数据类型 |
描述 |
id |
int |
表 ID(如果 indid = 0 或 255)。否则为索引所属表的 ID。 |
status |
int |
内部系统状态信息。 |
first |
binary(6) |
指向第一页或根页的指针。 |
indid |
smallint |
索引 ID: 1 = 聚集索引 |
root |
binary(6) |
如果 indid >= 1 和 < 255, root 是指向根页的指针。如果 indid = 0 或 indid = 255, root 是指向最后一页的指针。 |
minlen |
smallint |
最小行大小。 |
keycnt |
smallint |
键的数目。 |
groupid |
smallint |
在其上创建对象的文件组 ID。 |
dpages |
int |
如果 indid = 0 或 indid = 1, dpages 是已用数据页的计数。如果 indid = 255,其设置为 0。否则是已用索引页的计数。 |
reserved |
赞 (0)
打赏
微信扫一扫
相关文章:
版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。 |
发表评论