天天看點

《資料庫基礎及實踐技術——SQL Server 2008》一3.1 SQL Server資料庫概述

sql server 2008中的資料庫由包含資料的表集合以及其他對象(如視圖、索引、存儲過程等)組成,目的是為執行與資料有關的活動提供支援。sql server支援在一個執行個體中建立多個資料庫,每個資料庫在實體和邏輯上都是獨立的,互相之間沒有影響。每個資料庫存儲相關的資料。例如,可以用一個資料庫存儲商品及銷售資訊,用另一個資料庫存儲人事資訊。

從資料庫的應用和管理角度來看,sql server将資料庫分為兩大類:系統資料庫和使用者資料庫。系統資料庫是sql server資料庫管理系統自動建立和維護的,這些資料庫用于儲存維護系統正常運作的資訊,如一個sql server執行個體上共建有多少個使用者資料庫,每個資料庫的建立日期、占用空間大小、包含的檔案個數,以及每個資料庫包含的對象等。使用者資料庫儲存的是與使用者的業務有關的資料,我們通常所說的建立資料庫都是指的建立使用者資料庫,對資料庫的維護也指的是對使用者資料庫的維護。一般使用者對系統資料庫隻有查詢權。

安裝好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的對象資料總管中,在“系統資料庫”下看不到這個資料庫。

sql server資料庫由一組作業系統檔案組成,這些檔案被劃分為兩類:資料檔案和日志檔案。資料檔案包含資料和對象,如表、索引、存儲過程和視圖。日志檔案記錄了使用者對資料庫所進行的更改操作。資料和日志資訊絕不會混合在同一個檔案中,而且一個檔案隻由一個資料庫使用。

資料檔案

資料檔案用于存放資料庫資料。資料檔案又分為:主要資料檔案和次要資料檔案。

主要資料檔案:主要資料檔案的推薦擴充名是.mdf,它包含資料庫的系統資訊,也可存放使用者資料。每個資料庫都有且隻能有一個主要資料檔案。主要資料檔案是為資料庫建立的第一個資料檔案。sql server 2008要求主要資料檔案的大小不能小于3mb。

次要資料檔案:次要資料檔案的推薦擴充名是.ndf。一個資料庫可以不包含次要資料檔案,也可以包含多個次要資料檔案,而且這些次要資料檔案可以建立在一個磁盤上,也可以分别建立在不同的磁盤上。

當某個資料庫包含的資料量非常大,需要占用比較大的磁盤空間時,有可能造成計算機上的任何一個磁盤都不能滿足資料庫對空間的要求。這種情況下,就可以為資料庫建立多個次要資料檔案,讓每個檔案建立在不同的磁盤上。在主要資料檔案之後建立的所有資料檔案都是次要資料檔案。

次要資料檔案的使用和主要資料檔案的使用對使用者來說是沒有差別的,而且對使用者也是透明的,使用者不需要關心自己的資料是存放在主要資料檔案上,還是存放在次要資料檔案上。

讓一個資料庫包含多個資料檔案,并且讓這些資料檔案分别建立在不同的磁盤上,不僅有利于充分利用多個磁盤上的存儲空間,而且可以提高資料的存取效率。

日志檔案

日志檔案的推薦擴充名為.ldf,用于存放恢複資料庫的所有日志資訊。每個資料庫必須至少有一個日志檔案,也可以有多個日志檔案。

說明:

1)sql server是将資料庫映射為一組作業系統檔案。資料和日志資訊絕不會混合在同一個檔案中,而且一個檔案隻由一個資料庫使用。

2)sql server 2008不強制使用.mdf、.ndf 和 .ldf 檔案擴充名,但建議使用這些擴充名以利于辨別檔案的用途。

關于資料的存儲配置設定

在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%。

《資料庫基礎及實踐技術——SQL Server 2008》一3.1 SQL Server資料庫概述

是以,在設計關系表時應考慮表中每行資料的大小,使一個資料頁盡可能存儲更多的資料行,以減少空間浪費。

檔案組基本概念

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。

建立檔案組

在sql server 2008中,可以在首次建立資料庫時建立檔案組,也可以在以後向資料庫中添加更多檔案時建立檔案組。但是,一旦将檔案放置到某個檔案組中,就不能再将這些檔案移到其他檔案組中。

注意:檔案組不能獨立于資料庫檔案建立,檔案組是在資料庫中組織檔案的一種管理機制。

我們将在後續章節中介紹如何在建立及修改資料庫時建立檔案組。

在定義資料庫時,除了指定資料庫的名字外,其餘要做的工作就是定義資料庫的資料檔案和日志檔案,定義這些檔案需要指定的資訊包括:

1)檔案名及其位置。

資料庫的每個資料檔案和日志檔案都具有一個邏輯檔案名和一個實體檔案名。邏輯檔案名是在所有transact-sql語句中引用實體檔案時所使用的名稱,該檔案名必須符合sql server辨別符規則,而且在一個資料庫中,邏輯檔案名必須是唯一的。實體檔案名包括存儲檔案的路徑以及實體檔案名,該檔案名必須符合作業系統檔案命名規則。一般情況下,如果有多個資料檔案的話,為了獲得更好的性能,建議将檔案分散存儲在多個實體磁盤上。

2)初始大小。

可以指定每個資料檔案和日志檔案的初始大小。在指定主要資料檔案的初始大小時,其大小不能小于model資料庫中主要資料檔案的大小,因為系統是将model資料庫的主要資料檔案内容複制到使用者資料庫的主要資料檔案上。

3)增長方式。

如果需要的話,可以指定檔案是否自動增長。該選項的預設設定為自動增長,即當資料庫的空間用完後,系統自動擴大資料庫的空間,這樣可以防止由于資料庫空間用完而造成的不能插入新資料或不能進行資料操作的錯誤。

4)最大大小。

檔案的最大大小指的是檔案增長的最大空間限制。預設設定是無限制。建議使用者設定允許檔案增長的最大空間大小,因為如果不設定檔案的最大空間大小,但設定了檔案自動增長,則檔案将會無限制增長直到磁盤空間用完為止。