9. 建立資料庫
資料庫結構
系統資料庫
建立資料庫
檢視資料庫
刪除資料庫
本章總結
當您將 Microsoft SQL Server 2000 的資料庫設計與安裝完成後,下一步就可學習如何建立資料庫。與早期的版本比較,SQL Server 2000 的資料庫沿用 SQL Server 7 的資料儲存與空間管理方式。早期的版本使用邏輯裝置和固定尺寸的資料區段來放置資料;而 SQL Server 2000 可讓使用者選擇,是否讓檔案或檔案群組依資料多寡而自動成長或縮小。本章將介紹檔案、檔案群組,以及如何管理資料庫的成長。本章還會介紹三種建立資料庫的方法,以及如何檢視與刪除資料庫。
資料庫結構
每一個資料庫都由一組系統檔案所組成,檔案又可被組合成為檔案群組。檔案群組可方便資料的管理與分類,增進系統執行效能。在這一節我們會介紹檔案及檔案群組,以及它們在資料庫中所扮演的角色。
檔案
如剛才所提到的,資料庫是由一組系統檔案所組成。系統檔案又可分為資料檔案(data file)及記錄檔案(log file)。資料檔案用以儲存資料及對象(如資料表、索引、檢視表、觸發器、預存程式等),依類型又分為主要資料檔案及次要資料檔案兩種。而記錄檔案則僅用以儲存有關交易記錄的資料。記錄檔案的空間和資料檔案的空間是分開的,不能把記錄檔案視為資料檔案的一部份。
每個資料庫至少要包含一個資料檔案及一個記錄檔案,這些檔案不可與其它資料庫共用。也就是說這一個資料庫的資料及記錄檔案就只能屬於這個資料庫。下面我們來看看資料庫的三種檔案類型。
• 主要資料檔案 顧名思義,主要資料檔案包含了一個系統的主要資料檔案,如系統資料庫啟動資訊以及系統的資料表與對象。主要資料檔案也可以儲存使用者自訂的資料表與對象。每一個資料庫只能有一個(且一定要有一個)主要資料檔案,建議的檔案副檔名是.mdf。
• 次要資料檔案 次要資料檔案可儲存不在主要資料檔案中的資料及對象。一個資料庫並不一定要有次要資料檔案(不同於主要資料檔案一定要存在),您可以選擇把所有的資料都放在主要資料檔案內。有些資料庫則會利用一個或多個次要資料檔案來將資料分散在不同的磁碟。(這種方式不同於我們在下一節將討論到的 RAID),次要資料檔案的建議副檔名是.ndf。
• 交易記錄檔案 這個檔案記錄所有交易記錄資訊,這些記錄可用來複原資料庫的資料。每一個資料庫至少要有一個交易記錄檔案。建議的副檔名為.ldf。
________________________________________
說明
以一個 SQL Server資 料庫來說,資料檔案的最大尺寸是 32TB,記錄檔案為4TB。
________________________________________
以一個簡單型的資料庫來說,一個主要資料檔案就可存放所有的資料、對象及一個交易記錄檔案。較複雜的資料庫可能包含一個主要資料檔案、五個次要資料檔案和兩個交易記錄檔案。這樣一個資料庫要如何整合分散在各個資料檔案的資料呢?答案就是:利用檔案群組。
檔案群組
檔案群組可將檔案分組以便管理與儲存(有點類似 SQL Server 早期版本的資料區段)。檔案群組將資料庫分散建立在多個磁碟、磁碟控制卡或磁碟陣列上(也就是 第五章 討論過的 RAID)以加強資料庫的執行效能。利用檔案群組可以將資料表和索引建立在指定的磁碟上,也就是說您可以為某個資料表或索引的 I/O 指定某個實體磁碟、磁碟控制卡或磁碟陣列。本節後段會有幾個範例操作。
檔案群組可分為三種類型:
• 主要檔案群組 包括主要資料檔案,及未放入其它檔案群組的檔案。系統資料表-定義使用者、對象和資料庫許可權-均放在主要檔案群組。當您建立資料庫時,SQL Server 會自動建立系統資料表。
• 使用者自訂檔案群組 是指在建立資料庫的過程中,使用者自訂的檔案群組。在指定的使用者自定檔案群組中,能建立資料表和索引。
• 預設檔案群組 如果資料表和索引在建立時都未指定檔案群組,則所有資料表與索引的分頁都會置入預設檔案群組。在每個資料庫中,一次只能有一個檔案群組當作預設的檔案群組。如果沒有指定預設的檔案群組,則預設值為主要檔案群組。屬於db_owner角色成員的使用者可把預設狀態從一個檔案群組切換到另一個檔案群組。在同一時間,只能有一個預設檔案群組。我們可以用ALTER DATABASE指令來更改檔案群組,以下為Transact-SQL的文法:
ALTER DATABASE database_name MODIFY FILEGROUP filegroup_name
DEFAULT
(您將會在〈第三篇〉學習如何運用T-SQL)。您可以將預設檔案群組設成使用者自訂群組,如此您在資料庫所建立的對象就可以自動建立在所指定的檔案群組中,而不需每次指定對象屬於哪個檔案群組。
在不同的檔案群組建立資料表及索引可控制資料儲存的位置,增進資料庫效能。舉例來說,您可以將常用的資料表放在一個大型的磁碟陣列內(譬如說一個由10部磁碟組成的 RAID),較少用的資料表則放在一個由4部磁碟組成較小型的 RAID。因此,較常存取的資料表就會被分配在多個磁碟上,允許更多磁碟 I/O 平行進行。如果您有多個磁碟但沒有使用 RAID,仍然可以善加利用檔案群組。舉例來說,您可以在各自的磁碟上建立各自的檔案,並將檔案放入各自的使用使用者自訂檔案群組。這樣當您在建立資料表或索引指定檔案群組時,所建的資料表和索引就會被放在指定的檔案內(以及檔案群組所在的磁碟內)。圖9-1即是此架構的範例:主要資料檔案放置在C磁碟內的主檔案群組中,兩個次要檔案分別放置在E和F磁碟中使用者自訂的FG1和FG2的檔案群組內,記錄檔案則放在G磁碟內。然後就可在使用者自訂檔案群組-FG1或FG2中建立資料表和索引。
圖9-1 使用檔案群組控制資料位元置
或者您可以透過使用者自訂檔案群組將資料分散在數個磁碟上。圖9-2顯示分別在磁碟E和F中使用者自訂檔案群組(FG1)中的次要資料檔案(記錄檔案在磁碟G,主要資料檔案在磁碟C)。在這個範例中,我們假定每一個資料庫檔案均建立於單一的實體磁碟中(沒有使用 RAID),利用 SQL Server 的比例寫入方式,就能將在使用者自訂的檔案群組中建立的資料表和索引,分布在兩個不同的磁碟。
圖9-2 利用檔案群組分散資料至多個磁碟
如果您使用的是 RAID 系統,您可能需要把大型的資料表資料,分散放置在兩個或數個的 RAID 控制卡所控制的邏輯磁碟陣列上。設定的方法是建立一個使用者自訂的檔案群組,檔案群組中有一個檔案存在於每個控制卡內。假定您分別在兩個不同的磁碟陣列上,各建立一個次要資料檔案,每個邏輯數組由八個實體磁碟組成,設定在 RAID 5 上,兩個數組在不同的 RAID 控制卡上。要建立一個跨控制卡的資料表或索引(等於跨16個磁碟),首先需定義一個使用者自訂的檔案群組來放置這兩個檔案,然後在此檔案群組中建立資料表或索引。圖9-3顯示使用者自訂的檔案群組(FG1)分散在十六個實體磁碟(或說兩個邏輯RAID磁碟陣列上)。圖中也顯示主要資料檔案在另一個控制卡上(RAID1),記錄檔案則在另一個 RAID10 的控制卡上。
SQL Server 可自動的將資料檔案依比例,分別在每個資料檔案以寫入的方式將資料配置在數個磁碟內,以提供最佳化的自動檔案配置方式。「Striping」是資料庫的術語,是指資料分散地儲存在一個以上的資料庫檔案內。SQL Server 檔案的 Stripping 方式與 RAID 磁碟等量扇區無關,它可以單獨使用,也可以與 RAID 一起混用。
圖9-3 使用者自訂檔案群組分散放置於數個RAID控制卡
要對資料檔案進行 Stripping 時,SQL Server 會比較每一個檔案的可用空間,然後再依比例將資料分別寫入到每一個檔案中(而非將所有資料寫入第一個檔案,等到寫滿之後,再寫入下個檔案)。資料表和索引的空間依 範圍 (extend)配置。 範圍 是配置空間給資料表與索引的基本單位,一個範圍包含8個分頁(page),每一分頁為8KB,所以一個範圍單位即有64KB。舉例來說,如果檔案F1有400 MB的可用空間;檔案F2有100 MB的可用空間,如果要將5個範圍依比例性填滿策略寫入檔案,則4個範圍分配給F1,1個範圍分配給F2。如此一來,這兩個檔案將在大致相同的時間填滿,使跨磁碟分配的I/O效能更好。無論F1和F2檔案屬於使用者自訂檔案群組,還是屬於主要檔案群組,都會依比例將資料分別寫入。如果檔案群組中的所有檔案的開始尺寸都一樣,當資料載入時,會平均配置到每一個檔案。建議將檔案群組內所有檔案的開始尺寸設定成相同,使資料跨磁碟平均配置,以達到I/O平均分配的目的。
檔案群組的另一個好處是可依檔案或檔案群組為主進行Database Backup。如果您的資料庫太大,不能一次備份全部內容,可徑自備份資料庫中的檔案或檔案群組,無需一次備份整個資料庫。本書 第32章 會詳細介紹如何利用檔案群組作部份備份。
規則和建議
使用檔案和檔案群組時,記住以下的 SQL Server 2000 規則:
• 檔案和檔案群組只能用於一個資料庫。
• 一個檔案只能屬於一個檔案群組。
• 資料和交易記錄檔案資料不能在同一個檔案中。記錄檔案空間和資料檔案空間應分別管理。
• 交易記錄檔案檔案不是檔案群組的一部分。
• 資料庫一旦建立了檔案,此檔案就不能移動到另一個檔案群組中,除非您刪除這個檔案,並重建立立檔案。
為了協助您設計資料庫,下面是幾個使用檔案和檔案群組時的建議:
• 大多數的資料庫只需要一個資料檔案和一個交易記錄檔案即可順利運作。對於I/O不是特別密集的資料庫,建議使用這種設計。
• 如 第5章 所述,記錄檔案與資料檔案必須放置於不同的實體磁碟中。
• 如果需要使用多個資料檔案,可設定主要資料檔案用於儲存系統資料表和對象,而使用者的資料和對象則另設一個或多個次要資料檔案來儲存。
• 為了得到最好的效能,儘可能將檔案和檔案群組跨多個實體磁碟建立,以利用到最多數量的平行磁碟I/O。
• 將經常存取的資料表和這些資料表所包含的非叢集索引,以檔案群組的方式放在與資料表不同的實體磁碟內。若檔案位於不同的磁碟中,則將藉由平行的I/O而改善效能。(索引將在 第17章 中討論。)
• 如果可能的話,把同一個查詢中使用的資料表存放在不同的實體磁碟上,這樣當您搜尋資料時,就能利用到平行磁碟I/O。
當一個系統大量的使用 RAID 及很多磁碟,最後兩項建議不一定適用。如果您有許多磁碟,您應該儘可能地把索引和資料表分散到不同的磁碟上,以利用到最多數量的平行磁碟I/O。
自動檔案成長
SQL Server 允許檔案依需要自動成長。當建立檔案時,您可以指定 SQL Server是否允許自動成長。建議將檔案設為允許自動成長(預設值也是設定在允許自動成長),因為它能減少管理員手動監控和增加檔案空間的負擔。
檔案建立時有一個起始的大小。當起始的空間大小填滿時,SQL Server 將依指定的成長量增加檔案空間,這個成長量稱為 成長遞增值 (growth increment),當新的空間填滿,SQL Server 又會分配新的成長遞增值。資料檔案會依需要按指定的量成長,直到磁碟已滿或達到最大檔案尺寸為止(如果有指定的話)。
________________________________________
說明
檔案自動成長不同於依比例寫入的方式。檔案自動成長是指當檔案填滿時,SQL Server 將自動增加檔案空間;而按比例寫入是指 SQL Server 根據檔案的剩餘空間,將資料依比例存放,而不增長檔案的空間。
________________________________________
最大檔案尺寸檔案即為所能成長到的最大尺寸。這個值是檔案建立時指定的,可使用 Enterprise Manager 或 ALTER DATABASE 命令更改最大檔案尺寸的值。如果沒有設定檔案的最大尺寸,SQL Server 可讓檔案依需要成長,直到磁碟空間用完為止。為了避免磁碟機出現磁碟空間不足,導致 SQL Server 錯誤,您應該為每一個檔案設定最大尺寸。如果檔案確實成長到最大尺寸,您還可以利用 ALTER DATABASE 陳述式重設最大檔案尺寸、或是當磁碟還有空間時,在磁碟上新增另一個檔案。如果檔案允許無限制擴大(依預設),當磁碟空間用盡,您就必須將檔案建立在另一個有剩餘空間的磁碟上。
您應該使用檔案自動成長和最大檔案尺寸作為設計時的規則。當建立資料庫時,將檔案設定到可能會成長到的最大尺寸。雖然檔案的成長可設成依需要自動成長,但仍建議您定期監控檔案的成長,這樣可協助您預估檔案未來的成長,並決定是否應修改資料庫以增加更多檔案。
系統資料庫
當您安裝 SQL Server 時,將會建立四個系統資料庫:master、tempdb、model和msdb資料庫。
• master 記錄系統層級的資訊、SQL Server 的安裝資訊和組態設定,並記錄所有的登入帳號、其它已經存在的資料庫,以及所有使用者資料庫主要檔案的儲存位置。您應當儲存最新的master資料庫的備份。
• tempdb 用來掌控臨時的資料表和臨時預存程式。此資料庫也用於 SQL Server 的臨時儲存所需,例如對資料進行排序。每次 SQL Server 啟動時,會根據 model 的預設尺寸重建立立一個tempdb資料庫的乾淨副本。然後它會根據需要自動成長。如果您需要較大的 tempdb 資料庫空間,您可以使用 ALTER DATABASE 命令來設定一個更大尺寸的預設值。在線上叢書搜尋 tempdb 資料庫可獲得更多資訊。
• model 系統會建立其它資料庫的模板,其中也包括 tempdb 資料庫。當建立資料庫時,第一部分是建立 model 資料庫的備份。資料庫的其餘部分則由空白分頁填充。系統中必須有 model 資料庫,因為每次當 SQL Server 啟動時,便需要使用 model 資料庫來重建 tempdb 資料庫。您也可以修改 model 資料庫,使其包括使用者自訂的資料型態、資料表等,以便您建立的每一個新資料庫都包括這些屬性。在線上叢書搜尋 model 資料庫可獲得更多資訊。
• msdb SQL Server Agent 使用它來排定工作、警示和記錄操作者資訊。( 操作者 (Operator)是被指定負責工作和警示的人。)
每一個系統資料庫都有自己的主要資料檔案和記錄檔案。資料庫儲存在安裝SQL Server 時為系統檔案指定的目錄中。
建立資料庫
SQL Server 提供三種建立資料庫的方法:使用 建立資料庫精靈 、SQL Server Enterprise Manager 和 T-SQL 指令。T-SQL 指令能儲存在檔案中並作為指令碼來執行。下面將討論這三種方法:
使用 建立資料庫精靈 要注意它的一些限制。如果您使用精靈來建立資料庫,所建立的資料檔案都會放在您指定的單一磁碟中,因為精靈建立資料庫的過程中不會有讓您指定檔案在其它位置的步驟(也就是說除了剛開始指定的位置,在精靈的安裝過程中,所有建立的資料檔案都會指定到相同的磁碟和檔案內)。記錄檔案可以放在和資料檔案不同的磁碟或檔案內,不過也只能存放在單一磁碟中。使用者自訂群組是不能被指定的,而且其中的檔案將繼承同樣的增長選項。礙於這些限制,當資料庫中只需要一個主要資料檔案和交易記錄檔案時,才建議使用 建立資料庫精靈 。
如果您想把次要資料檔案放在與主要檔案資料不同的磁碟中,或是您想增加使用者自訂的檔案群組,或者您需要替每個檔案指定增長選項,就必須使用 Enterprise Manager 或 T-SQL 指令碼來建立資料庫。
使用建立資料庫精靈
如果您是建立資料庫的新手,您可以使用 建立資料庫精靈 來建立資料庫。以下是使用精靈的步驟:
1. 開啟 SQL Server Enterprise Manager,選擇一個伺服器來建立資料庫(先按一下在 Microsoft SQL Servers 這個資料夾名稱旁邊的加號展開資料夾,再展開 SQL Server 群組資料夾,就可以看到登入的伺服器)。選取一個伺服器後,選取菜單上的 工具/精靈 進入 選擇精靈 對話方塊,展開 資料庫 ,9-4所示。
圖9-4 「選擇精靈」畫面
2. 按兩下 建立資料庫精靈 開啟 歡迎使用建立資料庫精靈 對話方塊,9-5所示。
圖9-5 「歡迎使用建立資料庫精靈」對話方塊
3. 按一下 下一步 到 為資料庫命名並指定其位置 (如9-6所示),輸入資料庫名稱、資料庫檔案及交易記錄檔案的存放路徑。如果您選擇 ... 則可以瀏覽檔案。路徑指定後按 下一步 繼續下一個步驟。
圖9-6 「為資料庫命名並指定其位置」畫面
________________________________________
說明
本節的圖將會從頭顯示如何建立一個叫做MyDB的資料庫,這個資料庫的主要資料檔案放在C:/mssql2k/MSSQL/data,記錄檔案放在D:/mssql2k/MSSQL/data。
________________________________________
4. 圖9-7是 為資料庫檔案命名 的畫面。您可以設定每一個資料庫的檔案名稱和起始大小。主要資料檔案會自動使用資料庫名稱作為前置字,您可以接受或自行輸入名稱,副檔名為 .MDF。如果您知道資料庫檔案的大小,可直接輸入起始大小值,否則建議您保留預設值,將來可利用 Enterprise Manger 或 ALTER DATABASE 指令來變更。除了一開始設定的主要檔案,其它建立的檔案是次要檔案,並自動給予檔案 .NDF這個副檔名。這些檔案將存放在與主要檔案位置相同的目錄中。按一下 下一步 繼續。當使用 建立資料庫精靈 時就沒有 使用者自訂檔案群組 這個選項。
在範例中,我們儲存原預設的主要檔案(MyDB_Data),新增一個次要檔案並命名為MyDB_Data2。兩個檔案會同時放在步驟3所指定的位置。如果所指定的檔案夾或檔案群組是放在您不想要放置的磁碟上,請停止精靈安裝的步驟,我們必須利用其它方法來新增資料庫。在下節我們會討論其它新增資料庫的方法。按一下 下一步 繼續新增步驟。
圖9-7 「為資料庫檔案命名」畫面
5. 出現 定義資料庫檔案成長量 (圖9-8)。通常這裡建議您選擇 資料庫檔案自動成長 ,讓系統依需要自動成長資料庫的尺寸,並指定資料庫檔案應該以固定遞增值成長,或是指定檔案依照目前檔案大小的百分比成長。您也可以選擇 資料庫檔案不要自動成長 ,以手動調整資料庫尺寸,但是這樣會增加人工的耗費。您也可以透過選擇 不限制檔案成長 或 限制檔案成長到 來控制資料庫檔案成長的空間。如果使用精靈新增資料庫,就無法個別定義步驟4中的資料庫檔案,也就是說使用精靈新增資料庫,則所有在步驟4新增的資料庫都遵照這裡所定義的方式成長。按 下一步 繼續新增步驟。
圖9-8 「定義資料庫檔案成長量」畫面
6. 出現 為交易記錄檔案命名 對話方塊。此對話方塊和步驟4中的 為資料庫檔案命名 的畫面很像,請注意不要混淆這兩個對話方塊。
設定邏輯同步驟4,先輸入交易記錄檔案的名稱和起始大小(注意,交易記錄檔案記錄所有資料庫的修改記錄,當系統故障時可以用來作修複資料的依據)。系統會自動建立第一個交易資料檔案並使用資料庫名稱作為前置字,當然您也可以自訂名稱。交易資料檔案的副檔名是 .ldf,視需要可自行新增交易記錄檔案。除非您知道交易檔案的起始大小,否則建議保留預設值,日後如需更改可利用 Enterprise Manager 或 ALTER DATABASE 指令變更此預設值。按 下一步 繼續下一個步驟。
7. 出現 定義交易記錄檔案成長量 ,這裡設定的邏輯同步驟5,您可以指定檔案成長的方式。完成設定後按 下一步 繼續下一個步驟。
8. 出現 完成建立資料庫精靈 (圖9-9)。檢查是否所有新增資訊皆正確,確認後按下 完成 即可完成資料庫的新增,如要修改資訊則按 上一步 回到先前的畫面。
圖9-9 「完成建立資料庫精靈」畫面
9. 出現 資料庫已成功建立 ,這表示資料庫的建置完成,按下 確定 完成新增步驟。
10. 出現資訊方塊 您要為資料庫建立維護計劃 ,建議選擇 是 。維護計劃可確保資料庫的執行效能,定期備份以防發生系統錯誤,並檢查資料的一致性。在這裡請先選擇 否 ,待 第三十章 我們再討論維護計劃。
使用 Enterprise Manager
SQL Server Enterprise Manager 能建立比精靈更複雜的資料庫選項。例如,您無需將資料庫內所有的檔案視為一個檔案群組,而可以對每一個建立的檔案定義檔案成長選項,也可以指定各自的使用者自訂檔案群組。以下介紹如何利用 Enterprise Manager 建立資料庫,在範例中我們將建立一個叫做 MyDB 的資料庫,其中包含一個主要檔案資料、三個同時存放在一個使用者自訂檔案群組的次要檔案資料。
1. 開啟 Enterprise Manager 。展開 SQL Server 群組,然後展開伺服器。在 資料庫 上按一下滑鼠右鈕,然後按一下 新增資料庫 。
2. 出現 資料庫屬性 對話方塊,先出現的是 一般 標籤頁(圖9-10)。在方塊中輸入新增的資料庫名稱。
圖9-10 「資料庫屬性」對話方塊中的「一般」標籤頁
3. 按一下 資料檔案 標籤頁(圖9-11)。Enterprise Manager 會自動建立主要資料檔案,使用所建的資料庫名稱作為前置字,並以 PRIMARY 作為檔案群組。您可以自行更改主要檔案名稱、位置或檔案大小,但是不能更改主要資料檔案的檔案群組。輸入檔案名稱(邏輯名稱)、位置(實體名稱)、尺寸和每個資料檔案的檔案群組。除了主要檔案之外的資料檔案都可以設成使用者自訂的檔案群組。在範例中我們在 My_FG 這個檔案群組內建立一個次要資料檔案名稱 MyDB_Data2。
圖9-11 「資料庫屬性」對話方塊中的「資料檔案」標籤頁
檔案預設的位置是在 SQL Sever 所在的磁碟資料夾內。可自行輸入新的檔案位置或用 瀏覽 按鈕指定檔案位置。
4. 在 檔案屬性 選項地區中可以選取讓 檔案自動成長 及成長方式,選擇邏輯同前,也可以指定 檔案大小上限 ,您可以選取 不限制檔案成長 讓檔案無限制成長,或是選取 限制檔案成長 (MB) 指定受限制的檔案所能成長的大小(以 MB 為單位)。您可以現在就選擇您的設定,或是保留預設值。若是以後要更改預設值可再回到 Enterprise Manager 的 資料庫屬性 視窗更改。若是想刪除清單中的檔案,可按一下欲刪除的檔案後按下 刪除 鍵。
5. 所有資料檔案設定完成後,按一下 交易記錄檔案 卷標頁。交易記錄檔案的設定邏輯同 資料檔案 卷標頁,但少了 檔案群組 選項,因為交易記錄檔案不屬於檔案群組。輸入檔案名稱(邏輯名稱)、位置(實體名稱),尺寸和及交易記錄檔案及其它所有檔案的 起始大小 ,選取 檔案自動成長 。
6. 資料庫屬性定義後按 確定 完成新增。現在在畫面右方就可以看到新增的資料庫表徵圖。
使用 T-SQL 命令
您可以使用 T-SQL 命令或指令碼(Script)來建立和修改資料庫,而不使用圖形化使用者介面。要建立資料庫,使用指令碼是很有用的。譬如當您在圖形化使用者介面建立了一個資料庫,卻把檔案位置設錯,更改的方式就是把整個檔案刪除再重設正確位置。但使用 T-SQL 命令就可以很快的把錯誤修正,而無須重建資料庫。您也可以利用同樣的一份指令碼在其它系統上建立另一份一模一樣的資料庫。
另一方面,Enterprise Manager 可以用來產生建立資料庫及資料庫物件的 T-SQL指令碼,不過在此動作之前必須已有一個資料庫的存在。Enterprise Manager 指令碼會涵蓋所有已存在的資料庫設定,所以您可以依需要使用已產生的指令碼。不論您使用自訂的指令碼,或是使用已產生的指令碼,這裡都建議您先瞭解建立資料庫的 T-SQL。本節我們會複習建立資料庫的 T-SQL 命令。您可以將指令碼儲存在檔案內。本書 第十三章 會學習如何建立及執行指令碼。
________________________________________
真實世界 簡單的資料庫
在這個範例中,我們將建立一個命名為 MyDB 的資料庫,它包括一個主要資料檔案(MyDB_root)、一個保留在預設的主要檔案群組中的次要資料檔案(MyDB_data1)和一個交易記錄檔案檔案(Log_data1)。以下為建立 MyDB 的 SQL 陳述式:
CREATE DATABASE MyDB
ON
(NAME = MyDB_root, --主要資料檔案
FILENAME = 'c:/mssq12k/MSSQL/data/mydbroot.mdf',
SIZE = 8MB,
MAXSIZE = 9MB,
FILEGROWTH = 100MB),
(NAME = MyDB_data1, --次要資料檔案
FILENAME = 'c:/mssql2k/MSSQL/data/mydbdata1.ndf',
SIZE = 100MB,
MAXSIZE = 1500MB,
FILEGROWTH = 100MB)
LOG ON
(NAME = Log_data1, --記錄檔案
FILENAME = 'd:/log_files/logdata1.ldf',
SIZE = 1000MB,
MAXSIZE = 1500MB,
FILEGROWTH = 100MB)
________________________________________
在這個例子中,您可以看到主要資料檔案和次要資料檔案都在C磁碟中,而記錄檔案在E磁碟中。如前所述,您應該分別儲存資料檔案和記錄檔案以改進磁碟的I/O效能。
同時建議使用 .MDF、.NDF 和 .LDF為副檔名。以 KB 或 MB 為單位來指定SIZE、MAXSIZE 和 FILEGROWTH 選項,預設值會以 MB 為單位。
XXXXXXX
________________________________________
真實世界 複雜的資料庫
這個資料庫範例是以幾個磁碟或磁碟陣列(在 RAID 系統中)的系統為基礎。在這裡,「disk」是代表一個單一的磁碟裝置,或者有 RAID 磁碟區的磁碟陣列。我們會將幾個檔案建立在不同的磁碟上,每一個檔案放置在兩個檔案群組的其中一個。我們將資料庫命名為 Sales,並包括下面的檔案:
• 主要資料檔案:Sales_root.mdf
• 在customers_group檔案群組中的三個次要資料檔案:customer_data1、customer_data2和customer_data3
• 在products_group檔案群組中的兩個次要資料檔案:product_data1和product_data2
• 一個記錄檔案:log_data1.ldf
下面是建立 Sales 資料庫的文法。因為我們將自訂一個資料群組,所以在CREATE DATABES 命令會看到 FILEGROUP 這個關鍵詞。
CREATE DATABASE Sales
ON PRIMARY --明確定義主要檔案群組(這個參數可有可無)
(NAME = Salesroot, --主要資料檔案
FILENAME = 'c:/mssq12k/MSSQL/data/salesroot.mdf',
SIZE = 8MB,
MAXSIZE = 10MB,
FILEGROWTH = 1MB),
FILEGROUP customers_group --次要資料檔案的檔案群組
(NAME = customer_data1,
FILENAME = 'd:/mssq12k/MSSQL/data/costomerdata1.ndf',
SIZE = 800MB,
MAXSIZE = 100MB,
FILEGROWTH = 100MB),
(NAME = customer_data2, --次要資料檔案
FILENAME = 'e:/mssql2/MSSQL/data/costomerdata2.ndf',
SIZE = 800MB,
MAXSIZE = 1000MB,
FILEGROWTH = 100MB),
(NAME = customer_data3, --次要資料檔案
FILENAME = 'f:/mssq12/MSSQL/data/costomerdata3.ndf',
SIZE = 800MB,
MAXSIZE = 1000MB,
FILEGROWTH = 100MB),
FILEGROUP products_group --另一個檔案群組
(NAME = product_data1, --次要資料檔案
FILENAME = 'g:/mssq12/MSSQL/data/product_data1.ndf',
SIZE = 500MB,
MAXSIZE = 700MB,
FILEGROWTH = 100MB),
(NAME = product_data2, --次要資料檔案
FILENAME = 'h:/mssq12/MSSQL/data/product_data2.ndf',
SIZE = 500MB,
MAXSIZE = 700MB,
FILEGROWTH = 100MB)
LOG ON
(NAME = logdata1, --記錄檔案
FILENAME = 'i:/log_files/logdata1.ldf',
SIZE = 800MB,
MAXSIZE = 1000MB,
FILEGROWTH = 200MB)
________________________________________
參照範例中的批註,如果存入檔案之前沒有定義檔案屬於哪一個檔案群組,檔案就會被預設放至主要檔案群組。如果在存入檔案前先定義檔案群組,檔案就會依定義被放入該檔案群組。如範例所示,在定義了 customers_group 和 products_group 這兩個檔案群組後,緊接著檔案群組後的檔案就會被放入該檔案群組。在一個檔案群組定義之後,列出的所有檔案將存放在該檔案群組中,直到定義了另一個檔案群組,或者執行至 LOG ON 敘述為止。
也請注意每一個檔案的磁碟代號。當在那些檔案群組中建立資料表和索引時,在不同的磁碟上建立每一個檔案,以將資料分散到不同的磁碟中。例如,在 customers_group 建立的資料表,會將資料依照比例(以Stripping方式)儲存到 customer_data1、customer_data2 和 customer_data3 檔案的磁碟中。記錄檔案也在沒有資料檔案的單獨磁碟中,以讓記錄檔案可以依照順序寫入。
在預設狀態下,SQL Server 可讓資料檔案依需要成長,直到磁碟空間用完為止。因此,若您不希望允許資料庫檔案的成長超過開始建立的大小時,就必須設定 FILEGROWTH= 0,這樣檔案就會依您之前設的開始尺寸填滿。當您的資料表屬於待用資料表時(不會成長的資料表,也就是不會寫入資料),您可以選擇這個設定。在這種情況下,也不需指定 MAXSIZE 值,因為最大的尺寸就是開始的尺寸設定。
________________________________________
說明
如果您使用過 SQL 6.5 或更早的版本,您會發現 SQL 7.0 版本在建立資料庫前不再使用 DISK INIT 這個命令建立邏輯裝置。現在以使用檔案的方式來取代邏輯裝置。
________________________________________
檢視資料庫
資料庫建立後,您可以使用 Enterprise Manager,或是命令列的 OSQL 以執行 SQL 命令來瀏覽及檢視資料庫內的對象。以下會依序介紹這兩種方法:
使用 Enterprise Manager
以下是使用 Enterprise Manager 檢視資料庫資訊的步驟:
1. 在 Enterprise Manager 中,展開 SQL Server群組 / 資料庫所在的伺服器名稱 和 資料庫 資料夾,9-12所示。
圖9-12 展開後的Enterprise Manager及資料庫資料夾
2. 選擇一個資料庫檢視資訊,9-13所示。
圖9-13 顯示在Northwind資料庫中的對象
使用SQL
您也可以利用命令列提示視窗,或在 Query Analyzer 執行 T-SQL 命令檢視資料庫資訊,要透過使用 SQL 命令列檢視資料庫資訊,先開啟命令提示視窗,以 OSQL 串連至 SQL Server,如下面的範例所示:
OSQL -U<username> -P<password> -S<servername>
當輸入上列的命令時,請將角括弧內的資料正確輸入(不含角括弧)。執行以下 SQL 命令列出資料庫資訊。
Use MyDB --指定要於哪一個資料庫環境下執行
GO
sp_helpfile --顯示資料庫所有檔案資訊,您也可以提供檔案名稱以得
到特定的檔案資訊
GO
sp_helpdb MyDB --上述資訊加上檔案分配的空間大小
GO
sp_helpfilegroup --顯示資料庫中檔案群組資訊,您也可以提供檔案群組名
稱以得到特定的檔案資訊
GO
sp_helpdb --檢視所有資料庫資訊
GO
________________________________________
相關資訊
您可以在 SQL Server 線上叢書中找到與這些命令和輸出方式相關細節。
________________________________________
刪除資料庫
有時候,您可能需要刪除資料庫。要注意的是資料庫一旦刪除,是不可以執行任何回複步驟的,若是要找回資料庫必須還原備份版本。為了安全起見,刪除資料庫前先備份,以防您將來又會用到它。您可以使用 Enterprise Manager 或 SQL 命令來刪除資料庫。
使用 Enterprise Manager
本書 第八章 曾提到,Enterprise Manager 可以執行資料庫管理,也可以用來檢視資料。您可以執行以下步驟,永久地刪除資料庫及所有檔案:
1. 在 Enterprise Manager 中,展開 SQL Server群組 ,按兩下欲刪除資料庫的伺服器名稱。
2. 展開 資料庫 資料夾以顯示資料庫。
3. 在您想刪除的資料庫名稱上按右鈕,然後從捷徑功能表中選擇 刪除 ,會出現 刪除資料庫 訊息框,如果您選取 刪除備份並還原資料庫的曆程記錄 ,所有屬於 msdb 資料庫中的 備份-還原曆程記錄資料表 中的 備份-還原資訊 都會被刪除,選取後按 確定 確認刪除資料庫。
________________________________________
說明
master 資料庫是不容許被刪除的。
________________________________________
使用 SQL
您可以利用 T-SQL 命令刪除資料庫。要使用 T-SQL 必須開啟 Query Analyzer 或命令提示視窗,透過 OSQL 與 SQL Server 串連,可參閱以下例子:
OSQL -U<username> -P<password> -S<servername>
資料庫的刪除是永久性的,可用 DROP DATABASE 命令來刪除資料庫及所有檔案,以下為刪除 MyDB 這個資料庫的步驟:
USE master --您必須使用master資料庫來執行DROP DATABASE
命令
GO
DROP DATABASE MyDB --資料庫名稱是唯一需要輸入的參數
GO
刪除資料庫後,建議您為 master 資料庫建立新備份,以保持最新的使用者資料庫,避免 master 資料庫中還保有已刪除的資料庫資料。另一點要注意的是,當使用者還在與資料庫聯機時,是無法刪除資料庫的。所以刪除資料庫前請先確認使用者沒有與資料庫聯機。
本章總結
在本章中,您學到更多關於資料、記錄檔案、檔案群組和檔案自動成長。也透過 建立資料庫精靈 、SQL Server Enterprise Manger 和 T-SQL 命令來建立資料庫,並學到檢視資料庫和檔案資料以及刪除資料庫的兩種方法。下一章會開始學習在資料庫中建立資料表。