sqlserver2012 学习总结笔记

Sqlserver2012 学习总结笔记

第一节 创建和维护数据库

sqlserver的版本
企业版(Enterprise) 是一种综合的数据平台,可以为运行安全的业务关键应用程序提供企业级可扩展性、性能、高可用性和高级商业智能功能。
标准版(Standard) 是一个提供易用性和可管理性的完整数据平台,部门级的应用提供支持。
开发版(Developer) 支持开发人员构建基于 SQL Server 的任一种类型的应用程序,拥有企业级的特性,但是有限制。
工作组版(Workgroup) 是运行分支位置数据库的理想选择,它提供一个可靠的数据管理和报告平台,其中包括安全的远程同步和管理功能。
网络版(Web) 对于为从小规模至大规模 Web 资产提供可扩展性和可管理性功能的 Web 宿主和网站来说成本低。
移动版(Compact) 3.5 免费提供,是生成用于基于各种 Windows 平台的移动设备、桌面和 Web 客户端的独立和偶尔连接的应用程序的嵌入式数据库理想选择。
免费版(Express) 适用于学习构建小型的应用。、

sqlserver的数据库分类
1.系统数据库
master 数据库:
master 数据库记录 SQL Server 系统的所有系统级别信息。它记录所有的登录帐户和系统配置设置。
master 数据库是这样一个数据库,它记录所有其它的数据库,其中包括数据库文件的位置。
master 数据库记录 SQL Server 的初始化信息,它始终有一个可用的最新 master 数据库备份。
msdb 数据库:
msdb 数据库供 SQL Server 代理程序调度警报和作业以及记录操作员时使用。
tempdb 数据库:
tempdb 数据库保存所有的临时表和临时存储过程。
model 数据库:
model 数据库用作在系统上创建的所有数据库的模板。当发出 CREATE DATABASE 语句时,新数据库的第一部分通过复制 model 数据库中的内容创建,剩余部分由空页填充。由于 SQL Server 每次启动时都要创建 tempdb 数据库,model 数据库必须一直存在于 SQL Server 系统中。
Resource 数据库:
Resource 数据库一个只读数据库,包含 SQL Server 包括的系统对象。系统对象在物理上保留在 Resource 数据库中,但在逻辑上显示在每个数据库的sys 架构中。
2.用户数据库

sqlserver数据库的组成
sqlserver将数据库映射为一组可操作的文件:
数据文件
.mdf文件,主数据文件,只有一个,大小不得小于3Mb。
.ndf文件,次要数据文件,可以0个或多个,可以在一个或者多个磁盘存放。
日志文件
.ldf文件,事务日志文件,至少有一个文件。

数据库存储空间的分配
创建用户数据库时,model数据库会被自动的复制到新建的数据库。
数据库存储的最小单位是,数据页(page 简称 页)。
1页是8KB的连续的磁盘存储空间。
页的大小决定了数据库表一行数据的最大的大小。
行不可以跨页存储。

数据库文件组
俩种类型的文件组:
主文件组
包含主要的数据文件和任何没有明确分配的其他文件组的其他数据文件,系统表的所有表页都分配在主文件组中。
用户定义文件组:
在定义或者修改数据库时用 ‘FILEGROUP’关键字指定。
注意::
1.日志文件不在文件组中,日志文件和数据文件分开。
2.一个文件不可以时多个文件组成员。
3.若文件组含有多个文件,则在所有文件被填满后才会自动循环增长。
4.文件加入数据库后,不能移动到其他文件组。
5.只能指定一个文件组为默认文件组。

数据文件的属性
定义数据文件和日志文件的所有信息:
文件名及位置:
逻辑文件名,物理文件名。
初始大小:
不能小于model数据库主要文件的大小。
增长方式:
可以指定文件是否自动增长(默认)
文件大小:
文件增长的最大限制,默认无限制。

T-sql创建数据库
1.sql server management studio
2.T-sql创建数据库
T-SQL格式语法举例:
create database
db_zhj --数据库名字
on
(
name=‘db_zhj_data’,–逻辑数据文件名
filename=‘E:\gongzuo_hc\db_service_data\sqlserver_2012_home\userdb_data\data\db_zhj_data.mdf’,–主数据库文件逻辑名字
size=3mb,–主数据文件初始化大小
maxsize=50Mb,–主数据文件最大大大小
filegrowth=10% --超过初始化大小后文集自动增长率。
)
log on
(
name=‘db_zhj_log’,–逻辑日志文件名
filename=‘E:\gongzuo_hc\db_service_data\sqlserver_2012_home\userdb_data\log\db_zhj_log.ldf’,–日志存放的逻辑物理名
size=2mb,–日志初始化大小
maxsize=50Mb,–日志最大大小
filegrowth=1mb --超过初始化大小后文集自动增长率。
)
go

修改数据库
收缩数据库空间:
即释放数据库中未使用的空间,
收缩从尾部开始:
自动收缩:auto_shrink 默认 false
手工收缩:收缩数据库中某个文件的大小。
按比例收缩整个数据库大小。
添加删除数据库文件:

扩大指定文件的大小
alter database db_zhj
modify file(name=‘dbz_zhj’,size=8MB)
添加新的数据文件
alter database db_zhj
add file(
name=‘db_zhj_data1’,–逻辑数据文件名
filename=‘E:\gongzuo_hc\db_service_data\sqlserver_2012_home\userdb_data\data\db_zhj_data1.ndf’,–次数据库文件逻辑名字.扩展名字为ndf
size=3mb,–主数据文件初始化大小
maxsize=50Mb,–主数据文件最大大大小
filegrowth=10% --超过初始化大小后文集自动增长率。
)
注意:::
添加文件时候,每个文件组的数据文件是按比例填充,日志文件是依次添加。
收缩整个数据库的大小
dbcc shrinkdatabase(db_zhj,20) 收缩数据库db_zhj所有文件为20%可以空间
收缩指定文件的大小
dbcc shrinkdatabase(db_zhj_data1,4) 收缩数据库的文件db_zhj_data1为4mb
删除数据库文件
alter database db_zhj
remove file db_zhj_data1
注意:::
文件为空才可以被删除。

分离和附加数据库
分离数据库:作用是实现数据库从一台计算机移动到另一台计算机上,不需要重建。
从实例中删除,但是不删除数据文件和日志文件,保持了数据文件和日志文件的完整性。
使用sp_detach_db系统存储过程。
eg: exec sp_detach_db ‘数据库名字’ true

附加数据库:将分离的数据库附加到数据库管理当中去。
必须指定主数据文件的物理存储位置和文件名字。
create databa db_zhj on	
(filename='E:\gongzuo_hc\db_service_data\sqlserver_2012_home\userdb_data\data\db_zhj_data.mdf') for attach  --for attach 是附加的意思

第二节 架构

架构(Schema ,也称为模式),
是数据库的一个逻辑命名空间,是数据库对象的容器,一个数据库包含多个架构或者一个,同一个数据库架构名字唯一。
创建架构: create schema 架构名字 authorization 用户名字
删除架构: drop schema 架构名字


第三节 分区表

1.基本概念:分区表是把表中的数据水平分割成不同的子集,并将数据子集存放在一个或者多个文件组中。物理上是大表分成几个小表,逻辑上还是一个表。
合理分区可以提高数据库的性能。
是否创建分区表取决于表当前数据量的大小,以及将来的数据量,还取决于表中的数据操作特点。
表包含或者将包含以多种不同方式使用的大量数据。
数据是分段的,比如按年份分段。

2.创建分区表
三个步骤:
(1)创建分区函数,告诉DBMS以什么方式进行分区。
create partition function
(2)创建分区方案,作用是将分区函数生成的分区映射到文件组中。
create partition schema
(3)使用分区创建表
eg:create partition function myf1(int) as range left for value (1,100,1000);–left 为包含左侧的1
create partition function myf2(int) as range right for value (1,100,1000);–left 为包含右侧的100 分区函数
go
create partition schema myfa as partition myf1 to (test1,test2,test3,test4)—创建分区方案
go
create table table_partition --创建分区表
(
coll int,
name char(100)
on myfa(coll) --分区方案上
)


第四节 索引
1.创建索引
语法:create [unique] --表示唯一索引,可选
[clustered] —聚集索引
[nonclustered] —非聚集索引
index index_name --索引名字
on table_name --所在的表
(column_name…) --所在的列
[with fillfactor=x] --填充因子,指0-100之间,该值指索引页填满的空间所占的百分比。

2.删除索引
语法:drop index table_name.index_name 或者 view_name.index_name
索引可以在表可以在视图上


第五节 索引视图

1.基本概念:
标准视图页称为虚拟表,返回结果与基本表一致,结果集不永久存放。
建立唯一聚集索引的视图称为索引视图,也成物化视图,建立索引视图后视图的结果存放在数据库中。
对基本表的修改,也反映在索引视图存储的数据中。
2.建立索引视图的场景
很少更新基础数据,索引视图效果好。
若基础数据是批处理的方式定期更新,且主要作为读取数据处理,可考虑更新前删除索引视图,然后重建,效果会更好。

索引视图可提高哪些性能:
处理大量的连接和聚合时候
许多查询经常执行连接和聚合时候
索引视图不可提高哪些性能:
具有大量写操作的OLPT操作系统
具有大量更新操作的数据库
不涉及聚合或连接的查询
group by具有高基数度的数据聚合

3.定义索引视图
创建聚合索引前视图需要符合的条件:
定义索引视图时候,视图只能引用基本表,不能是其他视图。
引用的基本表和视图在同一库,所属同一用户。
视图中表达式所引用的函数必须确定。
对视图建立的第一个索引是聚合索引,然后是其他。
create view;schemabinding;create unqiue clustered index…


第七章 高级数据库查询

第一节 一般数据库查询功能扩展
1.select语句
select [distinct] [top n] 查询的数据表达式
[into 插入的数据表]
[from 数据表]
[while 查询条件]
[group by 表达式]
[having 表达式] --聚合查询的条件
[order by 表达式[asc]|[desc]]
[compute 表达式] --在查询的结果末尾产生汇总

2.使用top限制结果集
top n [percent] [with ties]
top n --前n行
top n [percent]–前百分之n
[with ties]–包含最后一行取值并列的结果

3.case函数
是一种分支表达式
俩种类型:
简单case函数
搜索case函数
语法:
case
when 条件 then 结果表达式
when 条件 then 结果表达式
[else 结果表达式n+1]
end

4.将查询结果保存在新表中
select 查询列表 into 新表 from 源表 while 条件
注意:表前面加# 为局部临时表,加##为全局临时表
eg:select xxxx into #临时表 from 源表 while 条件


第二节 交,并,差运算
1.并 union
注意:列数相同
列隐身兼容
合并后第一个select列为列标题
若需要排序,则 order by 写最后一个select 之后,且排序的语句是第一个select列的列名。

2.交 intersect
返回在俩个集合都有的结果

3.差 except
返回第一个有,第二个没有的记录、


第三节 子查询

1.写在圆括号的语句

2.派生表,也称内联表


第四节 其他形式的子查询


第五章 其他一些查询功能

1.开窗函数

在sql server中 一组行被称为一个窗口。
与聚合函数一样,开窗函数也是对行级组进行聚合计算,但是他不像普通的起聚合函数那样每组返回一个值,开创函数可以为每组返回多个值,因为开窗函数所执行的聚合计算的行级组是窗口。
与聚合函数不同的是开窗函数在聚合函数的后面加over关键字
调用格式为: 聚合函数名字(列) over(选项)
over关键字,表示把函数当成开窗函数而不是聚合函数。
sql标准允许把所有的聚合函数当做开窗函数,用over区分就好了。

sum(列名字)over(partition by 列名字 )
max(列名字)over(partition by 列名字 )
min(列名字)over(partition by 列名字 )
avg(列名字)over(partition by 列名字 )

over与排名函数一起使用
rank() over(partition by 列名字 order by 列名字 desc/asc) :结果可能不是连续的 如1.2.2.4.5
注意:rank()具有不确定性。
排名从一开始,不具有连续性。
dense_rank() over(partition by 列名字 order by 列名字 desc/asc) : 排名是连续的整数
ntile() over(partition by 列名字 order by 列名字 desc/asc) :将有序分区中的行划分到指定数目的组中,编号从1开始,函数返回此行所属组的编号。
row_number() over(partition by 列名字 order by 列名字 desc/asc) : 返回结果集中每个分区内的序号,每个分区的第一行从一开始。

2.公用表表达式
公用表表达式(CommonTableExpression,cte):将结果集指定一个临时的名字,这些命名的结果集就是公用表表达式。
格式:with <Common_Table_Expression>[,…n]
<Common_Table_Expression>::=
Expression_Table[(column [,…n])]
as select…
eg: 定义 —with 公用表表达式名 (列1,列2) as (select 列1,列2 from 表 where 条件)
使用 —as select 列1,列2 from 公用表表达式名 where 条件


第八章 数据库后台编程技术

第一节 存储过程

1.基本概念
使用T-sql语言编写代码时,有两种方式存储和执行代码:
(1)在客户端存储代码,通过客户端程序或sql命令向dbms发送请求,由dbms将结果返回给用户程序。
(2)以子程序的形式将程序模块存储在数据库中,仅供有权限的用户反复执行使用。
存储过程:即存储在数据库中供所有用户程序使用的子程序。
存储过程的分类:
系统存储过程
用户自定义存储过程
扩展存储过程
扩张存储过程:是sqlserver可以动态转载并执行的动态链接库(dll),扩展存储过程使您得以使用C这样的编程语言创建自己的外部例程。对用户来说扩展存储过程和普通存储过程一样,执行方法相同。

存储的有点:
执行效率高。
增强代码的重用性和共享性。
使用存储过程可以减少网络流量。
使用存储过程保证安全性。
在大型数据中,应用程序访问数据库的最主要的方式是存储过程。
存储过程可以在系统启动自动执行。
2.创建,执行和删除存储过程
create procedure 存储过程名字 [;number] --定义名字
[{parm data_type}
[[varying][=default][output]]
[…n1]
[with {pecompile|encryption|pecompile,}] —encryption 是否加密
[for replication]–是否不可以执行复制的存储过程
as sql_statement[,…n2]
执行存储过程:
exec[ute] 存储过程名字 参数
eg:create procedure p_custbuy
@area varchar(20)=‘长沙’,@price money
as select * from …where address=@area
执行:exec p_custbuy @price=1000
删除存储过程:drop procedure 存储过程名字


第二节 用户自定义函数

用户自定义函数:
类似于编程语言的函数,其结构和存储过程相似,但函数必须有一个return语句,用于返回函数值。
俩类用户定义函数:
标量函数和表值函数,前者返回时单个数值,后者返回表。

1.创建和调用标量函数
定义标量函数:
create function 函数名 returns return_data_type
as
begin
【函数体】
return scalar_expression
end
eg:
create function 函数名 (@class varchar())
return int
as
begin
【函数体】
return @x
end
调用标量函数:
注意:调用时需要提供函数的拥有者和函数名字
可以在任何出现表达式的sql语句中调用类型一致的标量函数。
2.创建表值函数:
create function 函数名 returns table
as
return [(select…)]
表值函数没有返回变量,没有函数体,只返回一个查询结果。
调用内联表值函数:
使用内联表值函数与视图类似,其作用相当于带参的视图。

eg:
create function 拥有者.函数名(@参数  参数类型) returns  table
as
return  [(select....)]
调用:select* from 拥有者.函数名(参数)

3.创建和调用多语句表值函数
create function dbo.f_food(@class varchar(200))
returns @f_food table

name varchar(20),
age int,
address varchar(200)

as
begin
insert into @f_food
select name, age,address , @f_food(@class)
from table_name where name=@class)
return
end
调用:select* from 拥有者.函数名(参数)

4.删除自定义函数:
drop function 拥有者.函数名


第三节 触发器
1.基本概念:
触发器:特殊的存储过程,在对表的数据进行update、insert、delete操作时自动触发执行,常用于保证业务规则和数完整性,增强数据完整性约束的能力。
sql server2008支持三种类型的触发器:DML、DDL、登录触发器。
适用场合:
完成比check(只能实现同一表列之间的取值约束)约束更复杂的数据约束。
保证数据库的性能而维护的非规范化的数据。
可实现复杂的业务规则。
评估数据修改前后的表状态,并采取对策。

2.创建触发器:
create trigger trigger_name
{table|view}
[with encryption]
{for|after|instead of}
{ [insert][,updata][,delete][,…]}
as
sql_statament{…n]
参数说明:
for或after:
后触发器,操作、约束检查完成后触发。
instead of:
前出发器,数据操作语句最多定义一个触发器。
执行触发器而非引发语句。
满足完整性约束则需要重新执行这些数据的操作。
注意:
一个表可建多个触发器,每个触发器可由三个操作触发。
alter类型同一操作上建立多个触发器,instead of类型同一操作建立一个触发器。
所有建立和更改数据库以及数据库对象的语句,drop语句不允许在触发器中使用。
触发器不要返回任何结果。
eg:create trigger trigger_name
on table_name
for insert,update
as
declare @newM money
select @newM=salep from inserted --inserted逻辑表,保存插入前的数据。
update table_name1 set salep=@newM
where id in (select id from insered )
–deleted 逻辑表,保存删除后的数据。

3.删除触发器
drop trigger 触发器名


第四节 游标

游标:实现select 结果集的逐行处理。
1.游标组成
游标结果集(select 返回集)与游标当前指针(指向结果集中一行)
特点:定位特定行;从当前位置检索一行或者多行;支持当前行数修改;对修改结果提供不同级别的可见支持。

2.使用游标
a.声明游标:
ISO标准语法:declare cursor_name[1] cursor for
select_statement[2]
参数说明:[1]insenstitive:创建临时副本,对临时副本操作,否则基本表;scroll范围,否则支持next;
[2]read only:禁止更新 update 更新列指定列或者所有。
b.打开游标
open cursor_name
c.提取数据
fetch [1]from cursor_name into @variable_name[,…n]
d.关闭游标
close cursor_name
e.释放游标
deallocate cursor_name --释放游标的所有资源。


第九章 安全管理

内容摘要
1.理解安全控制的基本概念
2.了介sql server2008的存取控制
3.掌握sql server2008的安全孔子的实现方式
4.了解oracle的安全管理

第五节 sql server 的安全控制
建立登录账户
create login login_name
修改登录账户属性
alter login login_name
s删除登录账户
drop login login_name

3.数据库用户
用户有了登录账户,只是连接到了sql服务器,并不具有访问数据库的权限。
映射:让登录账户成为数据库用户的操作 成为映射。
一个登录账户可以映射为多个数据库用户。
默认情况下,新建数据库只有一个用户:dbo,数据库用户的拥有者。
建立数据库用户
create user user_name [|for|from] login login_name
Guest用户,特殊数据库用户,匿名访问,没有映射到登录账户的时候使用
grant connect to guest
revoke connect to guest --revoke 激活
删除数据库用户
drop user user_name

4.权限管理
登录账户成为合法用户后没有任何操作权限,就需要为用户授予数据库及其对象的操作权限。
a.对象级别的权限(6种)
select、insert、update、delete、references、 execute --references引用
授权语句:
grant 对象权限 on 对象 to (主体:数据库用户或者角色)[with grant option]
拒绝权限:
deny 对象权限 on 对象 to (主体:数据库用户或者角色)[cascade[as 主体]]
收权语句:
revoke 对象权限 on 对象 to (主体:数据库用户或者角色)[cascade[as 主体]]
b.语句级别的权限
grant create database ,create view …to user_name,user_name1
deny create database ,create view …to user_name,user_name1
revoke create database ,create view …from user_name,user_name1

5.角色
定义:一组具有相同权限的用户就是角色。
分为:系统角色和用户角色;
系统角色又分为固定服务器角色(服务器级别角色)和固定数据库角色(数据库级别角色)
用户角色均是数据库角色。

固定服务器角色:
Bulkadmin:执行bulk insert 语句权限。
Dbcreator:创建、修改、删除还原数据库权限。
Diskadmin:具有管理磁盘文件的权限。
Processadmin:管理运行进程权限。
Secutyadmin:专门管理登录账户、读取错误日志执行create database权限的账户。
Serveradmin:服务器级别的配置和关闭服务权限。
Setupadmin:添加删除除链接服务器。
Sysadmin:系统管理员,Windows超级用户,自动映射为系统管理员。
Public:系统预定义服务器角色,每个登录名都是这个角色成员。没有授予或者特定权限,则将具有这个角色权限。
为固定服务器角色添加成员
EXEC sp_addsrvrolemember ‘user_name’,‘sysadmin’
为固定服务器角色删除成员
EXEC sp_dropsrvrolemember ‘user_name’,‘sysadmin’

固定数据库角色:
定义在数据库级别上,存在于每个数据库中。
用户加入固定数据库角色九具有数据库角色权限。
Db_accessadmin:添加或者删除数据库权限。
Db_backupoperator:备份数据库、日志权限。
Db_datareader:查询数据库数据权限。
Db_datawriter:具有插入、删除、更改权限。
Db_ddladmin:执行数据定义的权限。
Db_denydatareader:不允许具有查询数据库中所有用户数据的权限。
Db_denydatawriter:不允许具有插入、删除、更改数据库中所有用户的数据权限。
Db_owner:具有全部操作权限,包括配置,维护,删除数据库。
Db_securityadmin:具有管理数据库角色、角色成员以数据库中语句和对象的权限。
为固定数据库角色添加成员
EXEC sp_addsrvrolemember ‘user_name’,‘Db_owner’
为固定数据库角色删除成员
EXEC sp_dropsrvrolemember ‘user_name’,‘Db_owner’

用户自定义角色:
属于数据库级别。

创建角色:
create role role_name
授权和固定一样;
删除角色:
create role role_name


第六节 oracle安全管理

oracle的安全机制分为数据级别的安全控制,表级,列级,行级的安全控制。
数据库级别的安全通过用户身份认证和授权给用户来保证。
表级、列级、行级对的安全通过授予或回收对象权限保证,支持集中式、分布式、跨平台应用。
oracle系统通常设置俩级别安全管理员:
全局级:负责管理、协调、维护全局数据库一致性和安全性。
场地级:负责本节点的数据库安全性、用户管理、系统特权与角色的管理。
1.用户与资源管理:
安权限划分大小分为DBA用户和普通用户。
dba用户由dbms自动创建,sys和system用户,拥有全部的系统特权。
普通用户:由dba用户或者是具有dba权限的用户创建,并授予特权。

建立用户
create user user_name identified by 123456 default tablespace xxx
quota 5m on xxx(限制使用空间5m)

管理用户和资源:
dba特权用户可以该表一个用户资源使用限额、密码、登录次数等
alter user user_name quote 69m on xxxx
alter user user_name identified by123456799

删除用户
drop user user_name cascade (删除用户以及所拥有的全部对象)

2.权限管理
a.系统特权:
三种特权:
connect:不能建立任何对象,可以查询数据字典及访问数据库对象。
recourse:可建立数据库对象(表,视图,索引…)。
dba:拥有在预定义的全部权限。

b.对象特权:
用户维护表级,行级,列级数据的安全性。
eg:grant all on 表 to 用户
	grant select(列1,列2,.....)on 表 to 用户

第十章 数据库的维护和优化
内容摘要:
1.了解数据库库运行的基本原理。
2.了解运行状态监控与分析。
3.了解数据库存储空间管理。
4.掌握数据库优化方法。
DBAS进行维阶段的主要任务:
保证数据库系统安全,可靠高效的运行。
数据库的运行除了DBMS与数据库外,还需要各种系统部件协调工作。
首先必须有各种相应的应用程序。
其次各应用程序与dbms都需要在操作系统os支持下工作。
维护工作包括:
数据库转存与恢复。
数据库安全性、完整性控制。
检查并改善数据库性能。
数据库重组和重构。
重组不修改数据库原有的逻辑结构和物理结构。
重构部分修改模式和内模式。
数据库的监控分析:指管理员借助工具检测DBMS的运行情况,掌握数据库当前或者以往的负荷、配置、应用等信息,并分析检测数据的性能参数和环境信息,评估dbms的整体运行状态。
根据检测分析实现不同,分为:
数据库系统建立的自动监控机制,
由DBM自动检测数据库的运行情况。
管理员手动实施的检测机制。

根据监控对象不同,分为:
数据库架构体系的监控
监控空间基本信息,空间的使用率与剩余空间大小等。
数据库性能监控
监控数据缓存命中率,库缓冲、用户锁、索引使用、等待事件等。

对数据空间进行管理是一项非常重要的工作。
空间使用变化带来的问题:
降低数据系统服务性能
空间溢出导致灾难停机事故
数据的存储结构分为:
逻辑存储结构
物理存储结构

sql server数据库中一个逻辑上的数据库直接和一组物理上的数据文件对应,没有空间的概念。
DBMS对空间的管理包括:创建数据空间、修改空间大小、删除空间、修改空间状态、新建、移动、关联数据文件。

数据库性能优化是dbas系统上线后常见的运行维护任务之一。
进行数据库性能优化时,首先要确定优化目标,一般从数据库运行环境、参数调整、模式调整、数据库存储优化、查询优化几方面考虑。

1.数据库运行环境与参数调整
可以从外部环境、调整内存分配、整磁盘i/o、调整
资源竞争等几方面着手改表数据库参数,提高性能。
外部调整:cpu,网络
调整竞争:修改控制连接数据库的最大进程数。
减少调度进程的竞争。
减少多线程服务进程竞争。
减少重做日志缓存区竞争。
减少回滚段竞争。

2.模调整式优化
数据库的规范化过程:高效率利用存储空间,减少数据冗余,减少数据的不一致性。
反规范化:将规范化关系转换为非规范化的关系过程。
反规范化方法:增加派生冗余列、增加冗余列、重新组表、分割和增加汇总表的方法。都破坏数据完整性
采用反规范化技术从实际出发均衡利弊。
分割表 :水平,垂直。

3.存储优化:
a.物化视图
b.聚集,创建聚合索引。
4.查询优化
a.合理索引,但是系统开销大了。
索引原则:
是否为一个属性建立索引:该属性是码或存在某个查询中被使用。
在哪些属性建立索引:若一个关系的多个属性共同出现在查询中,一般采用多属性索引。
是否建立聚合索引:聚合索引适合范围查询,可建立多属性索引,优点体现在数据记录存取过程中。
使用散列还是树索引:散列索引适合等值查询,关系数据库多使用B+索引,支持作为搜码的属性的等值查询和范围查询。
使用索引原则:
经常在查询中被作为条件使用的列。应为其建立索引。
频繁进行排序或分组的列,为其建立索引。
一个列的值域很大时,建索引。
如果待排列的列有多个,建复合索引。
可以使用系统工具来检查索引的完整性,必要时进行修复,当数据表更新大量数据后,删除并重建索引。
索引建立完成后,运行期间还需要优化。
调优的目的:动态评估需求。
索引调整和修改的原因:
缺索引,查询语句时间长。
某些索引自开始没使用,却占用了较多的磁盘空间。
索引建在频繁该表的属性上,导致系统开销大。

  b.避免或者简化排序:
		order by 和group by语句涉及的排序,磁盘开销很大,应利用索引自动适当的次序输出。
	影响优化器的因素:
		由于现在索引不足,导致排序索引中不包括一个或者几个待排序的因素、
		order by 和group by子句中列的次序和索引次序不一致。排序的列来自不同的表
		为避免不必要的排序。要正确的建索引,合理合并数库表,如排序不可避免,则简化它,缩小范围、

	c.消除对大型表数据的顺序存储
		嵌套查询,对表的顺序存取严重影响查询效率。
		优化方法:对连接列进行索引,或者使用并集避免顺序存取。
	d.避免正则表达式
	e.使用临时表加速查询
		将表的一个子集排序创建临时表。
	f.排序取代非排序存储磁盘。
	g.不充分的连接条件。
	h.存储过程优化。
	l.不要随意使用游标。
	m.事务处理。

5.sql server性能工具
sql server Profiler 检测性能。
数据库引擎优化顾问


第十二章 备份与恢复

第一节 备份恢复概念

1.备份数据库
数据备份的原因:防止丢失,数据的转移方式。
2.恢复数据库
俩种类型:介质故障恢复,非介质故障恢复。


第二节 sql server的备份与恢复机制

1.恢复模式
三种恢复模式:简单恢复模式,完整恢复模式,大容量日志恢复模式。
2.备份内容和时间
备份内容
用户数据库
系统数据库
备份时间
系统数据库:修改之后进行备份
用户数据库:周期备份
立刻进行备份:
创建数据库之后,或批量加载数据库之后。
创建索引之后。
执行清理事务日志之后。
执行大容量数据操作之后。

3.sql server的备份机制
a.备份设备:磁带,磁盘
备份设备类型:
永久备份设备:在备份之前需要先建立。
临时备份设备:不需要预先建立,在备份的时候将数据库直接拷贝在物理文件上。

使用系统存储过程创建备份设备:
sp_addumpdecice
[@devtype=]‘device_type’–设备类型 ,可以是disk和tape
[@logicalname]‘logical_name’–设备逻辑名称
[@physicalname]‘physicalname’–设备实际名称
eg:创建一个名字为my_bak的磁盘设备,其物理名称为D:\dump1.bak
exec sp_addumpdecice ‘disk’ ,‘my_bak’,‘D:\dump1.bak’

b.备份类型
	1)数据库备份:完整备份,差异备份
	2)文件备份:文件备份,差异文件备份
	3)事务日志备份

c.常用备份策略:
	完整备份
	完整备份+日志备份
	完整备份+差异备份+日志备份

e.实现备份:
	使用sql server平台
	使用t-sql语句
	eg:backup database 数据库 to my_bak;完整数据库备份。
		backup log pubs to my_bak_log;事务日志备份 ,pubs数据库名字

4.sql server的恢复机制
数据库(数据库完整还原)
数据文件(文件还原)

还原顺序:
恢复最近的完整备份
恢复最近的差异备份
恢复数据库

实现还原:
使用sql server 管理平台;
使用t-sql语言;
eg:restore database 数据库 from mybak_2 --完整备份
where file=1,norecovery --norecovery不要覆盖
restore database 数据库 from mybak_2 --差异备份
where file=2,norecovery --日志备份
restore log 数据库 from mybak_log


第三节 oracle的备份与恢复机制

1.oracle数据逻辑备份和恢复
常见故障:
sql语句失效
进程失效
实例失效
网络失效

上面的四种内部机制处理。

用户错误
介质失效

利用备份数据恢复。

逻辑备份:
指通过工具将数据库的数据转换成格式的文件,保存在文件系统中。
工具 :exp/imp expdp/ipdp

物理备份:
用户管理备份
RECOVER MANAGER(RMAN)备份
第三方软件
恢复数据库
restore :从备份数据库找到完整的备份文件,恢复完整的过程文件。
recover :将日志和增量备份的改变用户到数据文件,使数据文件恢复指定时间点的过程。


第十三章 大规模数据库架构

第一节 分布式数据库

1.分布式数据库系统与分布式数据库的区别:
分布式数据库系统:数据分布存储于若干场地,并且每个场地由独立于其他场地的dbms进行数据管理。物理上分散,逻辑上集中的数据库系统。
分布式数据库:分布式数据库系统中各场地数据库的逻辑集合。
2.分布式数据库目标与数据分布策略
分布式数据库目标:
12个目标:
本地自治,非集中式管理,高可用性。
位置独立,数据分片独立性,数据复制独立性。
分布式查询,事务管理。
硬件独立性,操作系统独立性,网络独立性
数据库管理系统独立性。
数据库分布策略:
从数据分片和数据分配考虑
数据分片(对关系操作)
按一定规则将某一个全局关系划分为多个片段,
水平分片——
垂直分片–、
导出分片–
混合分片–

4.分布式数据库的相关技术
分布式查询
用户与分布式数据系统的接口。分布式查询优化考虑:
1.操作顺序
2.操作算法
3.不同场地的数据流动的顺序。
分布事务管理


第二节 并行数据库
1.并行数据库概述
并行数据库系统:通过并行实现各种数据操作.
优势:增强可用性。
2.并行数据库系统结构
共享内存系统
共享磁盘
无共享资源系统
层次结构


第三节 云计算数据库的结构
第四节 xml系统数据库 ;支持xml格式数据库。


第十四章 数据仓库和数据挖局

第一节 决策支持系统的发展

一般数据分为:
分析型数据
操作型数据
决策支持系统(DSS)
DSS建立在OLTP

数据库仓库是核心,操作型系统是数据源。

数据仓库的其他特点:
粒度:影响数据量,粒度越小回答越细。

发布了4 篇原创文章 · 获赞 7 · 访问量 1250

猜你喜欢

转载自blog.csdn.net/zhaohj123456/article/details/101013643