
3.1 SQL Server 2012数据库概述
数据库是用来存储数据和数据库对象的逻辑实体,是数据库管理系统的核心内容。若要更好地理解数据库的含义,应该首先了解数据库文件、文件组、数据库对象、数据库的物理空间、数据库状态、数据库快照等基本概念。
3.1.1 数据库文件
在SQL Server 2012系统中,一个数据库在磁盘上可以保存为一个或多个文件,我们把这些文件称为数据库文件。数据库文件分成3类:主数据文件、次数据文件、事务日志文件。一个数据库至少有一个数据文件和一个事务日志文件。当然,一个数据库也可以有多个数据文件和多个事务日志文件。
1.主数据文件
每个数据库有且仅有一个主数据文件。它用于存放数据和数据库的启动信息等,其默认扩展名为.mdf。
2.次数据文件
如果数据库中的数据量很大,除了将数据存储在主数据文件中以外,还可以将一部分数据存储在次数据文件中,这样,有了次数据文件就可以将数据存在不同的磁盘中,便于操作管理。次数据文件是可选的,一个数据库可以没有次数据文件,也可以有多个次数据文件,它的默认扩展名为.ndf。
3.事务日志文件
SQL Server 2012系统具有事务功能,可以保证数据库操作的一致性和完整性,它使用事务日志文件来记录所有事务及每个事务对数据库所作的操作。如果数据库被损坏了,数据库管理人员可以利用事务日志文件恢复数据库。一个数据库至少有一个事务日志文件,它的默认扩展名为.ldf。
数据库文件在操作系统中存储的文件名称为物理文件名。每个物理文件名都具有明确的存储位置,其文件名称会比较长,由于在SQL Server系统内部要访问它们非常不方便,因此,每个数据库又有逻辑文件名,每一个物理文件名都对应一个逻辑文件名,逻辑文件名简单,引用起来非常方便。
说明:在SQL Server 2012中,默认的主数据文件的扩展名为.mdf、次数据文件的扩展名为.ndf、日志文件的扩展名为.ldf,但并不对扩展名强制要求。
3.1.2 数据库文件组
为了方便管理,可以将多个数据文件组织成为一组,我们称为文件组,每个文件组对应一个组名。用户可以将文件组中的文件存放在不同磁盘,以便提高数据库的访问性能。例如,在某个数据库中,创建了3个次数据文件,它们存储在3个不同的磁盘上,并将它们指定为同一个文件组f1,当在文件组f1上创建了一个表,并对表中数据进行访问时,系统可以在不同的磁盘上实现并行访问,这样就能大大提高系统的性能。
在SQL Server 2012中,文件组有以下两种类型。
1.主文件组
主数据文件所在的组称为主文件组。在创建数据库时,如果用户没有定义文件组,系统会自动建立主文件组。当数据文件没有指定文件组时,默认都在主文件组中。
2.次文件组
用户定义的文件组称为次文件组。如果次文件组中的文件被填满,那么只有该文件组中的用户表会受到影响。
在创建表时,不能指定将表放在某个文件中,只能指定将表放在某个文件组中。因此,如果希望将某个表放在特定的文件中,则必须通过创建文件组来实现。
数据库文件和文件组必须遵循以下的规则:
①一个文件或文件组只能被一个数据库使用。
②一个数据文件只能属于一个文件组。
③事务日志文件不能属于文件组。
3.1.3 数据库对象
1.数据库对象的含义
SQL Server数据库中的数据在逻辑上被组织成一系列对象,当一个用户连接到数据库后,他所看到的是逻辑对象,而不是物理的数据库文件。数据库对象就是存储、管理和使用数据的不同结构形式,包括数据表、视图、存储过程、触发器、类型、规则、默认值、索引等。
在如图3-1所示的窗口中,可看到SQL Server将服务器的数据库组织成一个逻辑结构,在该结构中有若干的节点,每个节点又包括很多子节点,它们代表与该特定数据库有关的不同类型的对象。
图3-1 SQL Server 2012的数据库对象
2.对象标识符
在SQL Server中的所有对象都需要命名。表3-1中列出的是已经命名的部分数据库对象。
表3-1 部分命名对象
3.对象标识符的命名规则
在SQL Server 2012中,主要的命名规则如下:
●名称长度不能超过128个字符,本地临时表的名称不能超过116个字符。
●名称的第一个字符必须是英文字母、下画线、中文、@、#等符号;除第一个字符之外的其他字符,还可以包括数字、$。
●与SQL Server关键字相同或包含内嵌空格的名称必须使用双引号(“”)或方括号([])。
说明:在T-SQL中,“@”开头的变量表示局部变量;以“@@”开头的变量表示全局变量;以“#”开头的表示局部临时对象;以“##”开头的表示全局临时对象;所以,用户在命名数据库时不要以这些字符开头,以免引起混乱。
另外,SQL Server可以在命名中嵌入空格,甚至有时可以使用关键字来命名,但建议避免这种命名方式,因为这可能带来混淆,甚至引起其他严重后果。
3.1.4 系统数据库
在SQL Server系统中,数据库可分为“系统数据库”和“用户数据库”两大类。用户数据库是用户自行创建的数据库,系统数据库则是SQL Server内置的,它们主要是用于系统管理。SQL Server 2012中包括以下的系统数据库。
1.Master数据库
Master数据库用来追踪与记录SQL Server的相关系统级信息。这些信息包括:
●SQL Server的初始化信息。
●所有的登录账户信息。
●所有的系统配置设置。
●其他数据库的相关信息。
由此可见,Master数据库在系统中是非常重要的,如果Master数据库不可用,则SQL Server也将无法启动。因此,在使用Master数据库时,比如进行了数据库的创建、修改或删除操作,更改了服务器或数据库的配置值,修改或添加了登录账户等操作时,应随时对Master数据库进行最新备份。
2.Model数据库
Model数据库是所有新建数据库的模板,即新建的数据库中的所有内容都是从模板数据库中复制过来的。如果Model数据库被修改了,那么以后创建的所有数据库都将继承这些修改。
3.Msdb数据库
Msdb数据库是代理服务数据库,也是由SQL Server系统使用的数据库,通常由SQL Server代理用来计划警报和作业,也可以由如Service Broker和数据库邮件等功能来使用。另外,有关数据库备份和还原的记录也会写在该数据库里。
4.Tempdb数据库
Tempdb数据库用于为所有临时表、临时存储过程提供存储空间,也为所有其他临时存储要求提供空间。Tempdb是一个全局资源,所有连接到SQL Server实例的用户都可以使用。
每次启动SQL Server时,系统都要重新创建Tempdb,以保证该数据库为空。当SQL Server停止运行时,Tempdb中的临时数据会自动删除。
5.Resource数据库
Resource数据库用来存储SQL Server所有的系统对象(如以sp_开头的存储过程)。该库是只读数据库,它不会存储用户数据或者用户的元数据。它与Master数据库的区别,在于Master数据库存放的是系统级的信息,不是所有系统对象。