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 [email protected]
執行: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 [email protected])
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 [email protected]
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
資料庫倉庫是核心,操作型系統是資料源。
資料倉庫的其他特點:
粒度:影響資料量,粒度越小回答越細。