SQL Server2008 学习笔记(三) 数据库管理
数据库管理的核心任务是创建和维护数据库。
一、SQL Server数据库的组成
1、系统数据库
系统数据库主要有master、model、tempdb、msdb四个数据库,下面是这四个数据库的简单介绍;
master:是SQL Server2008的核心数据库,这个数据库如果损坏,那么SQL Server将没法正常的运行。这个家伙什么这么重要呢?呵呵,因为这个家伙手中掌握着如下重要的机密数据:
a、所有的用户登录名及用户ID所属的角色
b、数据库的存储路径
c、服务器中数据库的名称及相关信息
d、所有的系统配置设置,包括数据排序的信息、安全实现、恢复模式
e、SQL Server的初始化信息
既然这货很重要所以在日常的维护中对master数据库进行定期的备份就显得非常的重要了。
model:创建数据库的一套模板,同时也是tempdb的基础,所以对model进行操作的时候应该多多的考虑一下。
temdb:是一个临时工。既然是临时工,那肯定是不能肩负核心重任的。仅存在于SQL Server 的会话期间,一旦会话结束,则关闭该数据库,当下一次打开的时候会建立一个全新的、空的tempdb数据库;主要的作用是存储用户建立的临时表和临时的存储过程,存储用户定的全局变量。
msdb:其重要性不亚于master数据库;对该数据库的操作有一定的局限。
a、不能删除该数据库
b、不能从该数据库中删除guest用户
c、不能删除主文件组、主数据文件或者是日志文件
d、不能重命名主文件组或者是主数据文件
e、不能更改排序规则
f、不能将数据库设置为OFFLINE
g、将主文件组设置为READ_OLNY
2、数据库存储文件
在SQL Server2008中每个数据库至少要包含两个相关联的存储文件:数据文件和事务日志文件。并且数据文件和事务日志文件包含在独立的数据文件中。
主数据文件
主数据文件主要存放一些数据库的启动信息,并指向其他数据文件、用户数据、用户对象;另外一个数据库只能有一个主数据文件,默认的拓展名是.mdf
辅助数据文件
辅助数据文件主要存放用户数据,它可以将数据分散到不同的磁盘当中。其拓展名是.ndf
注:当数据库超过了单个Windows文件的限制,可以使用辅助数据文件,这样可以保证数据库可以继续的增长
事务日志文件
事务日志文件主要用于恢复数据库日志信息,每个数据库至少应该包括一个事务日志文件。默认的拓展名是.log
数据库元素
数据库中主要包含五种元素,分别是表、视图、索引、存储过程和触发器、用户和角色。后面会详细介绍这五个元素,在这里就不在赘述了。
二、数据库快照
这个概念其实灰常好理解哈。数据库在生产过程中变化是迅速的,最典型也是最应该知道就是数据库容量的变化。那数据库快照就是数据库在某一个时间点的状态。呵呵,有点抽象了。其实这货好比是一张照片。就是这么简单。当然了,给数据库搞这么一张照片也不是拿来炫耀的哈。数据库快照的功能是:提供了一种恢复数据库的手段,当数据库损坏的时候(当然这种情况不是很多哈,要不那估计你得回家了),通过数据库快照可以将数据库还原到一个快照前的一个状态。
1、使用数据库快照的时候的一些限制
a、不允许删除、还原和分离源数据库
b、不允许从源数据库或者是快照中删除任何数据文件
c、源数据库的性能会降低
d、源数据库中必须处在在线状态
2、创建数据库快照
1 create database test_kuaizhao
2 on
3 (
4 name = test,
5 filename = 'E:\SQL Server\test_kuaizhao.mdf'
6 )
7 as snapshot of test
3、使用数据库快照
1 restore database test
2 from database_snapshot = test_kuaizhao
3 go
4、删除数据库快照
1 drop database test_kuaizhao
2 go
三、创建数据库
1、使用SQL语句创建一个简单的数据库
1 create database test
2 on
3 (
4 name = test_data,
5 filename = 'E:\sql server \ test_data.mdf',
6 size = 10MB,
7 maxsize = 15MB,
8 filegrowth = 10%
9 )
10 log on
11 (
12 name = test_log,
13 filename = 'E:\sql server\test_log.ldf',
14 size = 3MB,
15 maxsize = 8MB,
16 filegrowth = 5%
17 )
2、指定多个数据文件创建数据库
1 create database test
2 on
3 primary
4 (
5 name = test_data,
6 filename = 'E:\sql server\test_data.mdf',
7 size = 10MB,
8 maxsize = 15MB,
9 filegrowth = 10%
10 ),
11 (
12 name = test_data1,
13 filename = 'E:\sql server\test_data1.ndf',
14 size = 8MB,
15 maxsize = 10MB,
16 filegrowth = 10%
17 )
18 log on
19 (
20 name = test_log,
21 filename = 'E:\sql server\test_log.ldf',
22 size = 3MB,
23 maxsize = 8MB,
24 filegrowth = 5%
25 )
3、创建指定多个文件组的数据库
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 create database test
2 on
3 primary
4 (
5 name = test_data,
6 filename = 'E:\sql server \test_data.mdf',
7 size = 10MB,
8 maxsize = 15MB,
9 filegrowth = 10%
10 ),
11 (
12 name = test_data1,
13 filename = 'E:\sql server \test_data1.ndf',
14 size = 8MB,
15 maxsize = 10MB,
16 filegrowth = 10%
17 ),
18 (
19 name = test_data2,
20 filename = 'E:\sql server \test_data2.ndf',
21 size = 8MB,
22 maxsize = 10MB,
23 filegrowth = 10%
24 ),
25 filegroup dbgroup1
26 (
27 name = test_data1_group1,
28 filename = 'E:\sql server \test_data1_group1.ndf',
29 size = 8MB,
30 maxsize = 10MB,
31 filegrowth = 10%
32 ),
33 (
34 name = test_data2_group1,
35 filename = 'E:\sql server \test_data2_group1.ndf',
36 size = 8MB,
37 maxsize = 10MB,
38 filegrowth = 10%
39 ),
40 filegroup dbgroup2
41 (
42 name = test_data1_group2,
43 filename = 'E:\sql server \test_data1_group2.ndf',
44 size = 8MB,
45 maxsize = 10MB,
46 filegrowth = 10%
47 ),
48 (
49 name = test_data2_group2,
50 filename = 'E:\sql server \test_data2_group2.ndf',
51 size = 8MB,
52 maxsize = 10MB,
53 filegrowth = 10%
54 ),
55 log on
56 (
57 name = test_log,
58 filename = 'E:\sql server\test_log.ldf',
59 size = 3MB,
60 maxsize = 8MB,
61 filesize = 5%
62 )
四、数据库的基本操作
1、修改数据库
1 alter database test modify name = 测试
2、使用存储过程(可以修改数据库的名称)
1 exec sp_dboption 'test','single',true
2 exec sp_renamedb,'test','测试'
3 exec sp_dboption,'test','single',false
3、使用add file 添加文件
1 alter database test
2 add file
3 (
4 name = test_data10,
5 filename = 'E:\sql server\test_data10.mdf',
6 size = 5MB,
7 maxsize = 15MB,
8 filegrowth = 10%
9 )
4、删除数据库
1 drop database test
5、使用函数查看数据库的状态
1 use test
2 go
3 select databasepropertyex('test','status')
4 as 'test数据库当前状态'
6、使用存储过程查看数据库的状态
1 sp_helpdb test
7、分离数据库
1 exec sp_detach_db test
注意:若要分离数据库,不应该存在下列的几种情况
a、该数据库中存在快照
b、该数据库已经复制并且发布
c、数据库处于未知的状态
8、附加数据库
1 create database test
2 on
3 (
4 filename = 'E:\sql server\test_data.mdf'
5 )
6 log on
7 (
8 filename = 'E:\sql server\test_log.ldf'
9 )
10 for attach
五、优化数据库
这里简单介绍一下优化数据库
1、将数据文件和事务文件错放在不同磁盘上。这样在对数据库进行读写的时候,可以从多个不同的磁盘驱动器并发执行,提高了系统的运行效率,从而也提高了数据的使用效率。
2、利用文件组实现平衡负荷与并行访问(注意:文件组只能提高系统的性能而不能提高系统的稳定性)
六、疑问
数据库快照提供了恢复数据库的一个手段,不过使用数据库快照的时候又有种种的限制,比如说使用数据库会造成源数据库的性能降低,那在实际的生产过程中恢复数据库的手段有哪些?请各位大牛指点。