《数据库基础及实践技术——SQL Server 2008》一3.1 SQL Server数据库概述

本文涉及的产品
RDS SQL Server Serverless,2-4RCU 50GB 3个月
推荐场景:
云数据库 RDS SQL Server,基础系列 2核4GB
日志服务 SLS,月写入数据量 50GB 1个月
简介: 本节书摘来自华章出版社《 数据库基础及实践技术——SQL Server 2008》一 书中的第3章,第3.1节,作者:何玉洁,更多章节内容可以访问云栖社区“华章计算机”公众号查看。

3.1 SQL Server数据库概述

SQL Server 2008中的数据库由包含数据的表集合以及其他对象(如视图、索引、存储过程等)组成,目的是为执行与数据有关的活动提供支持。SQL Server支持在一个实例中创建多个数据库,每个数据库在物理和逻辑上都是独立的,相互之间没有影响。每个数据库存储相关的数据。例如,可以用一个数据库存储商品及销售信息,用另一个数据库存储人事信息。
从数据库的应用和管理角度来看,SQL Server将数据库分为两大类:系统数据库和用户数据库。系统数据库是SQL Server数据库管理系统自动创建和维护的,这些数据库用于保存维护系统正常运行的信息,如一个SQL Server实例上共建有多少个用户数据库,每个数据库的创建日期、占用空间大小、包含的文件个数,以及每个数据库包含的对象等。用户数据库保存的是与用户的业务有关的数据,我们通常所说的建立数据库都是指的创建用户数据库,对数据库的维护也指的是对用户数据库的维护。一般用户对系统数据库只有查询权。

3.1.1 系统数据库

安装好SQL Server 2008后,系统会自动安装5个用于维护系统正常运行的系统数据库,分别是:master、msdb、model、tempdb和Resource。下面简单介绍这几个系统数据库的作用。
master:它是SQL Server 2008中最重要的数据库,记录SQL Server实例的所有系统级信息,包括实例范围的元数据(如登录账户)、端点、链接服务器和系统配置设置。此外,master数据库还记录了所有其他数据库的存在、数据库文件的位置以及 SQL Server的初始化信息。因此,如果master 数据库不可用,则SQL Server将无法启动。
msdb:供SQL Server代理服务调度报警和作业以及记录操作员时使用,保存关于调度报警、作业、操作员等信息,作业是在SQL Server中定义的自动执行的一系列操作的集合,作业的执行不需要任何人工干预。
model:它用做SQL Server实例上创建的所有数据库的模板。对model数据库进行的修改(如数据库大小、排序规则、恢复模式和其他数据库选项)将应用于以后创建的所有用户数据库。当用户创建一个数据库时,系统自动将model数据库中的全部内容复制到新建数据库中。因此,用户创建的数据库不能小于model数据库的大小。
tempdb:临时数据库,用于保存临时对象或中间结果集,并为数据的排序等操作提供一个临时工作空间。每次启动SQL Server时都会重新创建tempdb数据库。
Resource:它是一个只读数据库,包含了SQL Server中的所有系统对象。SQL Server系统对象(如sys.objects)在物理上保留在Resource数据库中,但在逻辑上却显示在每个数据库的sys架构中。因此,在SQL Server Management Studio的对象资源管理器中,在“系统数据库”下看不到这个数据库。

3.1.2 数据库的组成

SQL Server数据库由一组操作系统文件组成,这些文件被划分为两类:数据文件和日志文件。数据文件包含数据和对象,如表、索引、存储过程和视图。日志文件记录了用户对数据库所进行的更改操作。数据和日志信息绝不会混合在同一个文件中,而且一个文件只由一个数据库使用。

  1. 数据文件
    数据文件用于存放数据库数据。数据文件又分为:主要数据文件和次要数据文件。

主要数据文件:主要数据文件的推荐扩展名是.mdf,它包含数据库的系统信息,也可存放用户数据。每个数据库都有且只能有一个主要数据文件。主要数据文件是为数据库创建的第一个数据文件。SQL Server 2008要求主要数据文件的大小不能小于3MB。
次要数据文件:次要数据文件的推荐扩展名是.ndf。一个数据库可以不包含次要数据文件,也可以包含多个次要数据文件,而且这些次要数据文件可以建立在一个磁盘上,也可以分别建立在不同的磁盘上。
当某个数据库包含的数据量非常大,需要占用比较大的磁盘空间时,有可能造成计算机上的任何一个磁盘都不能满足数据库对空间的要求。这种情况下,就可以为数据库创建多个次要数据文件,让每个文件建立在不同的磁盘上。在主要数据文件之后建立的所有数据文件都是次要数据文件。
次要数据文件的使用和主要数据文件的使用对用户来说是没有区别的,而且对用户也是透明的,用户不需要关心自己的数据是存放在主要数据文件上,还是存放在次要数据文件上。
让一个数据库包含多个数据文件,并且让这些数据文件分别建立在不同的磁盘上,不仅有利于充分利用多个磁盘上的存储空间,而且可以提高数据的存取效率。

  1. 日志文件
    日志文件的推荐扩展名为.ldf,用于存放恢复数据库的所有日志信息。每个数据库必须至少有一个日志文件,也可以有多个日志文件。

说明:
1)SQL Server是将数据库映射为一组操作系统文件。数据和日志信息绝不会混合在同一个文件中,而且一个文件只由一个数据库使用。
2)SQL Server 2008不强制使用.mdf、.ndf 和 .ldf 文件扩展名,但建议使用这些扩展名以利于标识文件的用途。

  1. 关于数据的存储分配
    在SQL Server中创建数据库时,了解SQL Server如何为数据分配空间是很有必要的,这样可以比较准确地估算出数据库需占用空间的大小以及如何为数据文件和日志文件分配磁盘空间。

在考虑数据库的空间分配时,需了解如下规则:
所有数据库都包含一个主要数据文件与一个或多个日志文件,此外,还可以包含零个或多个次要数据文件。实际的文件都有两个名称:操作系统管理的物理文件名和数据库管理系统管理的逻辑文件名(在数据库管理系统中使用的、用在Transact-SQL语句中的名字)。SQL Server 2008数据文件和日志文件的默认存放位置为:Program FilesMicrosoft SQL Server MSSQL.1MSSQLData文件夹。
在创建用户数据库时, model数据库自动被复制到新建用户数据库中,而且是复制到主要数据文件中。因此,用户新建数据库的大小不能小于model数据库的大小。
在SQL Server 2008中,数据的存储分配单位是数据页(Page,也简称为页)。一页是一块8KB(8×1024字节,其中用8060字节存放数据,另外的132字节存放系统信息)的连续磁盘空间。页是存储数据的最小空间分配单位,页的大小决定了数据库表中一行数据的最大大小。
不允许表中的一行数据存储在不同页上(varchar(max)、nvarchar(max)、text、ntext、varbinary(max)和image数据类型除外),即行不能跨页存储。因此,表中一行数据的大小(即各列所占空间之和)不能超过8060字节。
一般的大型数据库管理系统都不允许行跨页存储,当一页中剩余的空间不够存储一行数据时,系统将舍弃页内的这块空间,并分配一个新的数据页,将这行数据完整地存储在新的数据页上。根据一行数据不能跨页存储的规则,再根据一个表中包含的数据行数以及每行占用的字节数,就可以估算出一个数据表所需占用的大致空间。例如,假设某数据表有10 000行数据,每行3000字节,则每个数据页可存放两行数据(如图3-1所示),此表需要的空间就为:(10 000/2)×8KB = 40MB。其中,每页中有6000字节用于存储数据,有2060字节是浪费的。因此,该数据表的空间浪费情况大约为25%。

screenshot

因此,在设计关系表时应考虑表中每行数据的大小,使一个数据页尽可能存储更多的数据行,以减少空间浪费。

3.1.3 数据库文件组

  1. 文件组基本概念
    SQL Server为了便于分配和管理数据文件,将相关的数据文件组织起来,放置到一个文件组中。在数据库中文件组的概念类似于操作系统中的文件夹,在操作系统中,为便于对文件进行管理,可以定义一些文件夹,然后将不同的文件放置到不同的文件夹中。在数据库中,可以定义多个文件组,然后将数据文件放置到不同的文件组中。

SQL Server有两种类型的文件组:主文件组和用户定义的文件组。
(1)主文件组
主文件组(PRIMARY)是系统定义好的一个文件组,它包含主要数据文件和任何没有明确分配给其他文件组的其他数据文件。系统表的所有页均分配在主文件组中。
(2)用户定义的文件组
用户可以创建自己的文件组,以将相关数据文件组织起来,便于管理和数据分配。
例如,可以分别在3个磁盘驱动器上创建3个数据文件:Data1.ndf、Data2.ndf 和Data3.ndf,然后将它们分配到文件组fgroup1上,之后就可以明确地在文件组fgroup1上创建新表,而对表中数据的查询操作将被分散到3个磁盘上,从而提高数据查询性能。
用户定义文件组是通过在CREATE DATABASE或ALTER DATABASE语句中使用FILEGROUP 关键字指定的任何文件组。
说明:
1)日志文件不包括在文件组内,日志空间与数据空间是分开管理的。
2)一个文件不可以是多个文件组的成员。
3)如果文件组中有多个文件,则它们在所有文件被填满之前不会自动增长。填满后,这些文件会循环增长。
如果在数据库中创建对象时没有指定对象所属的文件组,则新建对象将被分配到默认文件组。任何时候,只能将一个文件组指定为默认文件组。如果用户没有显式地使用ALTER DATABASE语句修改默认文件组,则SQL Server的默认文件组是PRIMARY。

  1. 创建文件组
    在SQL Server 2008中,可以在首次创建数据库时创建文件组,也可以在以后向数据库中添加更多文件时创建文件组。但是,一旦将文件放置到某个文件组中,就不能再将这些文件移到其他文件组中。

注意:文件组不能独立于数据库文件创建,文件组是在数据库中组织文件的一种管理机制。
我们将在后续章节中介绍如何在创建及修改数据库时创建文件组。

3.1.4 数据库文件的属性

在定义数据库时,除了指定数据库的名字外,其余要做的工作就是定义数据库的数据文件和日志文件,定义这些文件需要指定的信息包括:
1)文件名及其位置。
数据库的每个数据文件和日志文件都具有一个逻辑文件名和一个物理文件名。逻辑文件名是在所有Transact-SQL语句中引用物理文件时所使用的名称,该文件名必须符合SQL Server标识符规则,而且在一个数据库中,逻辑文件名必须是唯一的。物理文件名包括存储文件的路径以及物理文件名,该文件名必须符合操作系统文件命名规则。一般情况下,如果有多个数据文件的话,为了获得更好的性能,建议将文件分散存储在多个物理磁盘上。
2)初始大小。
可以指定每个数据文件和日志文件的初始大小。在指定主要数据文件的初始大小时,其大小不能小于model数据库中主要数据文件的大小,因为系统是将model数据库的主要数据文件内容复制到用户数据库的主要数据文件上。
3)增长方式。
如果需要的话,可以指定文件是否自动增长。该选项的默认设置为自动增长,即当数据库的空间用完后,系统自动扩大数据库的空间,这样可以防止由于数据库空间用完而造成的不能插入新数据或不能进行数据操作的错误。
4)最大大小。
文件的最大大小指的是文件增长的最大空间限制。默认设置是无限制。建议用户设定允许文件增长的最大空间大小,因为如果不设置文件的最大空间大小,但设置了文件自动增长,则文件将会无限制增长直到磁盘空间用完为止。

相关实践学习
使用SQL语句管理索引
本次实验主要介绍如何在RDS-SQLServer数据库中,使用SQL语句管理索引。
SQL Server on Linux入门教程
SQL Server数据库一直只提供Windows下的版本。2016年微软宣布推出可运行在Linux系统下的SQL Server数据库,该版本目前还是早期预览版本。本课程主要介绍SQLServer On Linux的基本知识。 相关的阿里云产品:云数据库RDS SQL Server版 RDS SQL Server不仅拥有高可用架构和任意时间点的数据恢复功能,强力支撑各种企业应用,同时也包含了微软的License费用,减少额外支出。 了解产品详情: https://www.aliyun.com/product/rds/sqlserver
相关文章
|
11天前
|
SQL 缓存 监控
大厂面试高频:4 大性能优化策略(数据库、SQL、JVM等)
本文详细解析了数据库、缓存、异步处理和Web性能优化四大策略,系统性能优化必知必备,大厂面试高频。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
大厂面试高频:4 大性能优化策略(数据库、SQL、JVM等)
|
11天前
|
SQL 存储 Linux
从配置源到数据库初始化一步步教你在CentOS 7.9上安装SQL Server 2019
【11月更文挑战第8天】本文介绍了在 CentOS 7.9 上安装 SQL Server 2019 的详细步骤,包括系统准备、配置安装源、安装 SQL Server 软件包、运行安装程序、初始化数据库以及配置远程连接。通过这些步骤,您可以顺利地在 CentOS 系统上部署和使用 SQL Server 2019。
|
12天前
|
SQL 存储 Linux
从配置源到数据库初始化一步步教你在CentOS 7.9上安装SQL Server 2019
【11月更文挑战第7天】本文介绍了在 CentOS 7.9 上安装 SQL Server 2019 的详细步骤,包括系统要求检查与准备、配置安装源、安装 SQL Server 2019、配置 SQL Server 以及数据库初始化(可选)。通过这些步骤,你可以成功安装并初步配置 SQL Server 2019,进行简单的数据库操作。
|
22天前
|
SQL 数据采集 监控
局域网监控电脑屏幕软件:PL/SQL 实现的数据库关联监控
在当今网络环境中,基于PL/SQL的局域网监控系统对于企业和机构的信息安全至关重要。该系统包括屏幕数据采集、数据处理与分析、数据库关联与存储三个核心模块,能够提供全面而准确的监控信息,帮助管理者有效监督局域网内的电脑使用情况。
16 2
|
26天前
|
存储 数据挖掘 数据库
数据库数据恢复—SQLserver数据库ndf文件大小变为0KB的数据恢复案例
一个运行在存储上的SQLServer数据库,有1000多个文件,大小几十TB。数据库每10天生成一个NDF文件,每个NDF几百GB大小。数据库包含两个LDF文件。 存储损坏,数据库不可用。管理员试图恢复数据库,发现有数个ndf文件大小变为0KB。 虽然NDF文件大小变为0KB,但是NDF文件在磁盘上还可能存在。可以尝试通过扫描&拼接数据库碎片来恢复NDF文件,然后修复数据库。
|
27天前
|
SQL JSON Java
没有数据库也能用 SQL
SPL(Structured Process Language)是一款开源软件,允许用户直接对CSV、XLS等文件进行SQL查询,无需将数据导入数据库。它提供了标准的JDBC驱动,支持复杂的SQL操作,如JOIN、子查询和WITH语句,还能处理非标准格式的文件和JSON数据。SPL不仅简化了数据查询,还提供了强大的计算能力和友好的IDE,适用于多种数据源的混合计算。
|
29天前
|
SQL 数据库
SQL数据库基础语法入门
[link](http://www.vvo.net.cn/post/082935.html)
|
11天前
|
SQL 关系型数据库 MySQL
12 PHP配置数据库MySQL
路老师分享了PHP操作MySQL数据库的方法,包括安装并连接MySQL服务器、选择数据库、执行SQL语句(如插入、更新、删除和查询),以及将结果集返回到数组。通过具体示例代码,详细介绍了每一步的操作流程,帮助读者快速入门PHP与MySQL的交互。
26 1
|
13天前
|
SQL 关系型数据库 MySQL
go语言数据库中mysql驱动安装
【11月更文挑战第2天】
29 4
|
20天前
|
监控 关系型数据库 MySQL
数据库优化:MySQL索引策略与查询性能调优实战
【10月更文挑战第27天】本文深入探讨了MySQL的索引策略和查询性能调优技巧。通过介绍B-Tree索引、哈希索引和全文索引等不同类型,以及如何创建和维护索引,结合实战案例分析查询执行计划,帮助读者掌握提升查询性能的方法。定期优化索引和调整查询语句是提高数据库性能的关键。
97 1
下一篇
无影云桌面