1. DataBase Engine
SQL Server 2008中最主要的组件就是DataBase Engine. 它是一个Windows Service,用于以relational format 存储、处理数据,如XML, or spatial data (新的)
1)可靠的存储
由2个条件决定:① 硬件 ② 事务日志
①硬件:preferable to maintain the data on RAID arrays
// RAID: 多个物理硬盘组成的一个逻辑硬盘,数据可以存在不同的硬盘,增加安全性。如果一个硬盘上的数据损坏了,只要修复这一个即可
在SQL Server中,一行行的数据存在页里,每个页是8kb大小。每8个页组成一个区,因此:
8KB → 1 page → 8 pages → 1 Extent
②事务日志
事务日志不会记录“所有的”数据库更改,二进制的大型对象,如image & text,就不会产生日志
2)快速的数据访问
由2个因素决定:①索引 ② 读取内存中的数据
第②点解释:
类似Citect的IOServer → 当页请求数据时,如果cache里面有,就直接把cache的值给它;若cache中没有,再直接读硬盘的值,并且把值存到cache里
如果cache满了,最新的页会顶掉最早的页
如果被顶掉的页中有还未被写入的更改,那么他们再被顶掉前,会先把更改写入硬盘。如果没有这类未被写入的更改,就直接丢弃
3)数据一致性
如何保证数据的一致性呢?主要的理念是:在某一时刻,只允许有一个客户端更改数据,并且阻止其他客户端在这个过程中读取此数据 → 通过事务锁来实现
4)安全
5)数据完整性
2. SQL Server 2008 Administration & Management Tools
1)SSMS
2)Configuration Manage
3) SQL Server Agent
它是一个Scheduling Tool,用于定义、执行scheduled 脚本。同时,它也处理自动报警,比如数据库run out of space
它也是一个Windows Service, 和database Engine在同一台机器上
如果要共同管理多个装有SQL的机器,就可以使用Agent进行管理。它可以通过使用MultiServer Administration,将任务分发给多个服务器。这样一来,虽然任务是在多台计算机上执行的,但是可以实现只在一台计算机上进行管理。假设你有20台server,你只要检查completion status of the job就可以,不用登录到各台计算机
另外,Agent还可以转发事件。任何记录在Windows系统日志中的事件,都可以转发给某一台计算机
4)SQL Server Profiler
它是一个GUI的接口,获取所有发至数据库引擎,或从数据引擎发出的queries,有点像network sniffer. 它不仅可以获取并存储所有发给服务器的T-sql语句,还可以获得如死锁、登陆、错误等的sql server事件。用Profiler可以完成的任务有:
① 当客户端为第三方软件时,可以直接获取到发给server的语句
② 可以playback, 用于性能测试
③ 可以查出导致Access Violation的原因
④ 可以显示出每一条语句的performance data
⑤ 对于复杂的存储过程,可以判断出哪一部分导致的性能问题
⑥ 可以实时检查服务器活动
3. Replication
用于在多个数据库中同步数据,可以把一个实例的数据传到另一个,也可以把sql server的数据,通过ODBC或OLEDB接口,复制到Oracle,Access或其他数据库
Replication不会在目标数据库重建表格或索引,而是复制表格或索引中的更改
主要有三种Replication的方式:
① SnapShot
server会在某一时间点上,对表格中的数据take a picture。一般来说,如果这个操作是scheduled的,那么目标数据会在自动在每次更新的时后被替换
② Transactional
通过读取源数据库的事务日志,并把更改应用于目标数据库。对于每一个插入、更新和删除操作,服务器都会将一个操作的副本发给下游的数据库。
Transaction Replication不能保证在任意的时间内,两个数据库是一模一样的,但是,它可以确保源数据库的每一个更改,最后都会应用在目标数据库中。如果你想保证两个数据库时时刻刻要一模一样,那可以使用Distributed Transactions 或者 镜像
③ Merge
有的时候,需要对复制后的表格进行一些更改,或者merger these changes together at some later date, 这个时候就需要merger replication。
它允许数据被订阅者修改,并且可以在later time同步。这种同步可以是几秒,也可以是一天之后
Merger应用的地方:Sales Database 有一个主数据库,这个主数据库的数据可以复制到多个sales laptops. 销售人员可以增加记录,也可以修正错误,当他们回到办公室后,可以把这些更改同步给central database. 这些更改被提交后,laptop也会得到最近一次更新的最新数据
Immediata Updating: 允许目标数据库立即更改源数据库的内容
4. 数据库镜像
镜像保证了一个数据库有两份copy, 而且这两份copy 放在不同的sql server实例中,或者不同位置的不同计算机中。类似主备冗余的概念,一个是主数据库,一个是备数据库。这两个数据库时时刻刻都在同步,时刻保持一致。
这是如何实现的呢?通过把每一条事务日志的记录,按顺序发送给备的数据库。与Replication woks at the logic level 不同,镜像works at the level of physical log record
5. Full-Text Search
在搜索大的文本字段时,很有用。
例如:
select * from resume where decription like '%guru%'
此条语句执行的会很慢。原因:数据库引擎can't index text colums,所以整张表格都会被遍历。
但是,如下语句,采用了full-text 查询,就很好:
select * from resume where contains (description ,'furu')
或者:
select * from resume where contains (*,'sql and ''ability to work'' ')