530 likes | 645 Views
第 8 章 建立資料庫. 課前指引 由於 SQL Server 是一種大型的資料庫管理系統,不像一般辦公室人員所使用的小型資料庫 ACCESS ,所儲存的資料量不會過於龐大。 SQL Server 是屬於企業級的用戶使用,所以資料的成長會非常快速與龐大;因此,在建立資料庫之初必須先瞭解 SQL Server 的底層架構,也就是檔案系統的檔案與資料庫之間的對應關係,以及如何有效擴展底層檔案,用以擴充上層資料庫用戶的儲存空間。. 章節大綱. 8-1 SQL Server 的相關資料庫. 8-4 更改資料庫. 8-2 建立資料庫前的觀念. 8-5 刪除資料庫.
E N D
第8章 建立資料庫 課前指引 由於SQL Server是一種大型的資料庫管理系統,不像一般辦公室人員所使用的小型資料庫ACCESS,所儲存的資料量不會過於龐大。SQL Server是屬於企業級的用戶使用,所以資料的成長會非常快速與龐大;因此,在建立資料庫之初必須先瞭解SQL Server的底層架構,也就是檔案系統的檔案與資料庫之間的對應關係,以及如何有效擴展底層檔案,用以擴充上層資料庫用戶的儲存空間。
章節大綱 8-1 SQL Server的相關資料庫 8-4 更改資料庫 8-2 建立資料庫前的觀念 8-5 刪除資料庫 8-3 建立資料庫 備註:可依進度點選小節
8-1 SQL Server的相關資料庫 • 【物件總管】 可分為三大類的資料庫 • 『系統資料庫』 • AdventureWorks系列的 『範例資料庫』 • 『使用者自建資料庫』
8-1 SQL Server的相關資料庫 • 系統資料庫: • master: • 系統層級的資料庫,核心資料庫 • model: • 樣版資料庫 • msdb: • 讓『SQL Server Agent』服務所使用的資料庫 • tempdb: • 全域性的資料庫
8-1 SQL Server的相關資料庫 • master • 屬於系統層級的資料庫,也就是一個核心資料庫 • 如果此資料庫損毀,MS SQL Server也將無法正常啟動 • 其中所記錄的包括登入帳號、被管理的端點伺服器(endpoints)、分散式處理中被鏈結的伺服器(linked servers)以及SQL Server系統的所有設定項目 • 除此之外,master資料庫中也記錄了在SQL Server中的所有資料庫資訊,包括這些資料庫的實體檔案位置和SQL Server的初始資訊
8-1 SQL Server的相關資料庫 • model • 『model』資料庫的目的是當成所有新建資料庫所參考的一個樣版資料庫 • 在新增一個資料庫時,系統會參考此model資料庫來新增出新的資料庫 • 例如在model資料庫中新增一個名為testTBL的資料表;以後使用者新增出來的所有資料庫內都會有testTBL資料表
8-1 SQL Server的相關資料庫 • msdb • 讓『SQL Server Agent』服務所使用的,讓此代理程式(Agent)記錄排程警告、排程作業和其他相關作業之用
8-1 SQL Server的相關資料庫 • tempdb • 『tempdb』是一個全域性的資料庫 • 可以提供給使用者暫時儲存資料的一個資料庫,或是使用者在經過龐大資料計算時暫存的一個資源 • 存於此資料庫內的資料都是暫存性的,如果系統重新啟動之後,所有的資料將會全部被清除掉
8-1 SQL Server的相關資料庫 • 範例資料庫 • 微軟公司所研發的SQL Server產品,一直以來都會內附範例資料庫(AdventureWorks),提供給一般學習資料庫者可以透過範例資料庫來學習 • SQL Server 2008在安裝時,預設已不再自動安裝 • 使用者可自行至CodePlex網址( http://codeplex.com/SqlServerSamples )下載安裝
8-1 SQL Server的相關資料庫 • 安裝微軟的範例資料庫AdventureWorks系列,會出現以下畫面,也就是告知使用者在安裝此範例程式時,必須先符合以下兩項要求
8-1 SQL Server的相關資料庫 • 必須安裝全文檢索功能並啟動 • 【Microsoft SQL Server 2008】\【組態工具】\【SQL Server組態管理員】\【SQL Server服務】\啟動『SQL Full-text Filter Daemon Launcher』
8-1 SQL Server的相關資料庫 • 必須啟動FILESTREAM • 【Microsoft SQL Server 2008】\【組態工具】\【SQL Server組態管理員】\【SQL Server服務】\【SQL Server】服務上按右鍵,選【內容】\點選【FILESTREAM】頁籤\勾選【啟用FILESTREAM的Transact-SQL存取(E)】
8-2 建立資料庫前的觀念 • 對於使用者或資料庫設計人員而言,資料是儲存在一個邏輯概念上的『資料庫』 • 實際上,這些資料是以『檔案』形式儲存於儲存體(例如硬碟) • 由作業系統管理的『檔案系統』,經由『資料庫管理系統』的對應
8-2 建立資料庫前的觀念 • SQL Server的實體檔案類型 SQL Server的管理方式在檔案的部份可分為 • 『邏輯檔案名稱』(logic_file_name) • SQL Server 資料庫管理系統所掌控 • 『作業系統檔案名稱』(os_file_name), • 由作業系統來掌控
8-2 建立資料庫前的觀念 • 『作業系統檔案』,可區分為兩大類型,分別為『記錄檔』(log file)與『資料檔』(data file )兩種 • 『記錄檔』(log file)又稱為『交易記錄檔』,主要是儲存使用者所有的交易過程,目的在預防資料庫管理系統在非毀壞性故障時,能透過此檔案將交易正常恢復 • SQL Server 2005以前版本的『資料檔』只有一種類型;而今SQL Server 2008的『資料檔』可分為兩類:『資料列資料』與『檔案資料流資料』(FILESTREAM) 『作業系統檔案』
8-2 建立資料庫前的觀念 • SQL SERVER的檔案類型
8-2 建立資料庫前的觀念 • SQL Server的檔案群組 • 『檔案群組』(filegroup)可以將散佈在不同硬碟中的檔案歸納成一個群組 • 也就是說,一個『檔案群組』的檔案可以分佈在不同的實體硬碟 • 倘若有一個資料量很大且經常被存取的資料表,可以將此資料表配置於一個『檔案群組』,再新增幾個檔案於不同的實體硬碟 • 當資料在存取時,實體硬碟可以同時進行搜尋資料,所以在效率上可以較為快速
8-2 建立資料庫前的觀念 • 例如,『檔案01』、『檔案02』與『檔案04』歸屬於『檔案群組G1』 • 再將『產品資料表』指定存放到『檔案群組G1』 • 這樣系統就會將『產品資料表』的資料分散儲存於這三個檔案 • 搜尋『產品資料表』內的資料,由於三部磁碟機是獨立作業,這將會提升查詢上的效益
8-3 建立資料庫 • 範例8-1 • 給定一個資料庫名稱,其他使用系統之預設值來建立資料庫 • 範例8-2 • 建立兩個『資料列資料檔』與兩個『記錄檔』,並設定檔案的『自動成長』參數 • 範例8-3 • 利用多個檔案群組來建立資料庫
8-3 建立資料庫 • 【範例8-1】 • 利用SQL Server的預設值,新建『圖書借閱管理8-1』的資料庫,內容如下表規格 • 【範例8-2】 • 新建『圖書借閱管理8-2』的資料庫,在『主要檔案群組』(Primary Filegroup)下建立兩個『資料列資料檔』、兩個『交易記錄檔』(log file),以及使用相同的成長參數,內容如下表規格
8-3 建立資料庫 • 【範例8-3】 • 新建『圖書借閱管理8-3』的資料庫,利用預設的『主要檔案群組』(Primary Filegroup),並另建兩個『檔案群組』,分別為G1以及G2,另外有兩個『交易記錄檔』,以及使用相同的檔案『自動成長』參數,內容如下表規格 續
8-3 建立資料庫 • 在此可將較複雜的【範例8-3】表示成下圖
8-3 建立資料庫 • 【範例8-1】step1 利用SQL Server的預設值, 新建『圖書借閱管理8-1』的資料庫, 內容如下表規格
8-3 建立資料庫 Step2: 【檔案名稱】分別為『圖書借閱管理8-1.MDF』和 『圖書借閱管理8-1_log.LDF』
8-3 建立資料庫 • 【範例8-2】 新建『圖書借閱管理8-2』的資料庫 內容如下表規格 前面步驟如同範例8-1 step1:
8-3 建立資料庫 Step2:點選每一個檔案中【自動成長】的按鍵
8-3 建立資料庫 • 【範例8-3】前面步驟如同範例8-2step1: 新建『圖書借閱管理8-3』的資料庫 內容如下表規格
8-3 建立資料庫 Step2:
8-3 建立資料庫 • 利用SQL之CREATE DATABASE建立資料庫 執行SQL語法的地方
8-3 建立資料庫 • 建立資料庫(CREATE DATABASE)之語法: CREATE DATABASE database_name [ ON [ PRIMARY ] ← 主要群組 [ <filespec> [ ,...n ] ← 在主要群組下的檔案群定義 [ , <filegroup> [ ,...n ] ] ← 其他群組和其所屬之檔案群定義 [ LOG ON { <filespec> [ ,...n ] } ] ← 系統日誌檔之定義 ] ]
8-3 建立資料庫 • 【範例8-1】 建立『圖書借閱管理8-1』資料庫 CREATE DATABASE [圖書借閱管理8-1]
8-3 建立資料庫 • 【範例8-2】 建立『圖書借閱管理8-2』資料庫 必須先建立『C:\8-2』與『D:\8-2』目錄來儲存實體檔案, DML語言不會主動建立OS的系統檔案目錄 CREATE DATABASE [圖書借閱管理8-2] ON PRIMARY (name=P1,filename='C:\8-2\P1.MDF',size=5MB,maxsize=5GB,filegrowth=10%), (name=P2,Filename='D:\8-2\P2.NDF',size=5MB,maxsize=5GB,filegrowth=10%) LOG ON (name=Log1,filename='C:\8-2\Log1.LDF',size=5MB,maxsize=5GB,filegrowth=10%), (name=Log2,filename='D:\8-2)Log2.LDF',size=5MB,maxsize=5GB,filegrowth=10%)
8-3 建立資料庫 • 【範例8-3】 建立『圖書借閱管理8-3』資料庫 CREATE DATABASE [圖書借閱管理8-3] ON PRIMARY (name=P1,filename='C:\8-3\P1.MDF',size=5MB,maxsize=5GB,filegrowth=10%), (name=P2,Filename='D:\8-3\P2.NDF',size=5MB,maxsize=5GB,filegrowth=10%), FILEGROUP G1 (name=G11,filename='C:\8-3\G11.NDF',size=5MB,maxsize=5GB,filegrowth=10%), (name=G12,filename='D:\8-3\G12.NDF',size=5MB,maxsize=5GB,filegrowth=10%), FILEGROUP G2 (name=G21,filename='C:\8-3\G21.NDF',size=5MB,maxsize=5GB,filegrowth=10%), (name=G22,filename='D:\8-3\G22.NDF',size=5MB,maxsize=5GB,filegrowth=10%) LOG ON (name=Log1,filename='C:\8-3\Log1.LDF',size=5MB,maxsize=5GB,filegrowth=10%), (name=Log2,filename='D:\8-3\Log2.LDF',size=5MB,maxsize=5GB,filegrowth=10%)
8-3 建立資料庫 • 組織CREATE DATABASE的語法結構 • 第一區塊為『主要檔案群組』 • 第二區塊為『G1』檔案群組 • 第三區塊為『G2』檔案群組 • 第四區塊為交易記錄檔
8-3 建立資料庫 • CREATE DATABASE [圖書借閱管理8-3] • ON PRIMARY • (name=P1,filename='C:\8-3\P1.MDF',size=5MB,maxsize=5GB,filegrowth=10%), • (name=P2,Filename='D:\8-3\P2.NDF',size=5MB,maxsize=5GB,filegrowth=10%), • FILEGROUP G1 • (name=G11,filename='C:\8-3\G11.NDF',size=5MB,maxsize=5GB,filegrowth=10%), • (name=G12,filename='D:\8-3\G12.NDF',size=5MB,maxsize=5GB,filegrowth=10%), • FILEGROUP G2 • (name=G21,filename='C:\8-3\G21.NDF',size=5MB,maxsize=5GB,filegrowth=10%), • (name=G22,filename='D:\8-3\G22.NDF',size=5MB,maxsize=5GB,filegrowth=10%) • LOG ON • (name=Log1,filename='C:\8-3\Log1.LDF',size=5MB,maxsize=5GB,filegrowth=10%), • (name=Log2,filename='D:\8-3\Log2.LDF',size=5MB,maxsize=5GB,filegrowth=10%) (1) (2) (3) (4)
8-4 更改資料庫 • 圖形介面更改資料庫step1: • 【範例8-4】 【範例8-2】建立後的結果再擴建 兩個群組G1與G2,分別各有兩個 檔案G11、G12以及G21、G22, 最後結果會和【範例8-3】一樣
8-4 更改資料庫 Step2:
8-4 更改資料庫 Step3:
8-4 更改資料庫 • 利用SQL之ALTER DATABASE更改資料庫 • 更改資料庫(ALTER DATABASE)之語法(Syntax): ALTER DATABASE database_name { ADD FILE <filespec> [ ,...n ] [ TO FILEGROUP { filegroup_name | DEFAULT } ] | ADD LOG FILE <filespec> [ ,...n ] | REMOVE FILE logical_file_name | MODIFY FILE <filespec> | ADD FILEGROUP filegroup_name | REMOVE FILEGROUP filegroup_name | MODIFY FILEGROUP filegroup_name | MODIFY NAME = new_database_name } [;]
8-4 更改資料庫 • 【範例8-5】 依據以下的資料庫規格,先建立一個初始名為 『圖書借閱管理8-5』的資料庫,再透過ALTER DATABASE來擴充及改變原有的資料庫,成為另一個新的資料庫規格 • CREATE DATABASE [圖書借閱管理8-5] • ON PRIMARY • (name=P1,filename='C:\8-5\P1.MDF',size=5MB,maxsize=5GB,filegrowth=10%) • LOG ON • (name=Log1,filename='C:\8-5\Log1.LDF',size=5MB,maxsize=5GB,filegrowth=10%)
8-4 更改資料庫 分為兩次來建立G1與G2的檔案群組 [新增檔案群組 G1] – 使用ADD FILEGROUP ALTER DATABASE [圖書借閱管理8-5] ADD FILEGROUP G1 [新增檔案群組 G2] – 使用ADD FILEGROUP 與 REMOVE FILEGROUP --不小心將檔案群組名稱G2打成G5 ALTER DATABASE [圖書借閱管理8-5] ADD FILEGROUP G5 --刪除錯誤的檔案群組名稱G5 ALTER DATABASE [圖書借閱管理8-5] REMOVE FILEGROUP G5 ALTER DATABASE [圖書借閱管理8-5] ADD FILEGROUP G2
8-4 更改資料庫 [同時新增兩個檔案(G11、G12)至 檔案群組 G1] –使用ADD FILE [同時新增兩個檔案(G21、G22)至 檔案群組 G2] –使用ADD FILE • ALTER DATABASE [圖書借閱管理8-5] • ADD FILE (name=G11,filename='C:\8-5\G11.NDF',size=5MB,maxsize=10GB,filegrowth=20%), • (name=G12,filename='D:\8-5\G12.NDF',size=5MB,maxsize=10GB,filegrowth=20%) • TO FILEGROUP G1 • ALTER DATABASE [圖書借閱管理8-5] • ADD FILE (name=G21,filename='C:\8-5\G21.NDF',size=5MB,maxsize=10GB,filegrowth=20%), • (name=G22,filename='D:\8-5\G22.NDF',size=5MB,maxsize=10GB,filegrowth=20%) • TO FILEGROUP G2
8-4 更改資料庫 [新增一個檔案到PRIMARY群組]–使用ADD FILE [注意] 由於PRIMARY是保留字,所以要用中括弧 [ ] 前後括起來,否則會發生語法錯誤 [新增一個記錄檔]–使用ADD LOG FILE • ALTER DATABASE[圖書借閱管理8-5] • ADD FILE (namALTER DATABASE e=P2,Filename='D:\8-5\P2.NDF',size=5MB,maxsize=10GB,filegrowth=20%) • TO FILEGROUP [PRIMARY] • ALTER DATABASE [圖書借閱管理8-5] • ADD LOG FILE (name=Log2,filename='D:\8-5\Log2.LDF',size=5MB,maxsize=10GB,filegrowth=20%)
8-4 更改資料庫 [變更原本已建立的檔案格式]–使用MODIFY FILE [更改資料庫名稱]–使用MODIFY NAME 若是覺得『圖書借閱管理8-5』每次都要使用中括弧很麻煩,那就可以透過更改資料庫名稱方式解決,以後任何的操作就不用再刻意使用中括弧 • ALTER DATABASE [圖書借閱管理8-5] • MODIFY FILE (name=P1,maxsize=10GB,filegrowth=20%) • ALTER DATABASE [圖書借閱管理8-5] • MODIFY FILE (name=Log1,maxsize=10GB,filegrowth=20%) • ALTER DATABASE [圖書借閱管理8-5] • MODIFY NAME=圖書借閱管理85
8-5 刪除資料庫 • 圖形介面刪除資料庫