資料庫的處理 - 碁峰資訊epaper.gotop.com.tw/pdf/AED001700.pdf · 2011-01-25 ·...

30
資料庫的處理 本章學習目標 完成本章之後,讀者將可了解 資料庫使用的檔案類型 了解資料檔及交易記錄檔 了解系統資料庫 重要資料庫處理

Transcript of 資料庫的處理 - 碁峰資訊epaper.gotop.com.tw/pdf/AED001700.pdf · 2011-01-25 ·...

Page 1: 資料庫的處理 - 碁峰資訊epaper.gotop.com.tw/pdf/AED001700.pdf · 2011-01-25 · 資料庫是邏輯的定義,實體上,儲存在硬碟的資料庫仍是一個個檔案,

資料庫的處理本章學習目標

完成本章之後,讀者將可了解

資料庫使用的檔案類型

了解資料檔及交易記錄檔

了解系統資料庫

重要資料庫處理

Page 2: 資料庫的處理 - 碁峰資訊epaper.gotop.com.tw/pdf/AED001700.pdf · 2011-01-25 · 資料庫是邏輯的定義,實體上,儲存在硬碟的資料庫仍是一個個檔案,

6-2

Part 02 I SQL Server 實戰篇

6-1 資料庫與檔案的關係 資料庫是邏輯的定義,實體上,儲存在硬碟的資料庫仍是一個個檔案,

本節將先說明資料庫與檔案的關係,了解此二者的關係之後,再說明如何管

理資料庫及檔案。

6-1-1 資料庫使用的檔案

每一資料庫均至少會使用兩個檔案,檔案又可組成檔案群組,以方便管

理或提昇處理效率。

兩個類型及三個副檔名

SQL Server 資料庫的檔案可分為資料檔及交易記錄檔等兩種類型,前者

是資料儲存處;交易記錄檔記錄了資料的變更,以及日後對每筆交易所做修

改進行復原時所需要的足夠資訊。交易記錄檔會記錄分頁的配置和取消配

置,以及每筆交易的認可或復原,在一個經常使用的資料庫中,通常交易記

錄檔會持續成長,且成長速度遠大於資料檔案。

除此之外,SQL Server 為資料庫檔案共使用三個副檔名,包括.mdf、ndf

及 ldf 等,其中.mdf 是主要資料庫檔案,資料庫的定義及系統物件都儲存在

此,.ndf 是可有可無的次要檔案,.ldf 是交易記錄檔,一個資料庫至少會有.mdf

及.ldf 檔案。如圖 6-1:

Page 3: 資料庫的處理 - 碁峰資訊epaper.gotop.com.tw/pdf/AED001700.pdf · 2011-01-25 · 資料庫是邏輯的定義,實體上,儲存在硬碟的資料庫仍是一個個檔案,

資料庫的處理

6-3

CHAPTER 6

圖 6-1 資料庫的檔案

圖 6-1 顯示的是檔案總管之 SQL Server 資料庫檔案,位置在安裝目錄下

的 MSSQL\DATA 內,此圖顯示的檔案只有.mdf 及.ldf,每兩個檔案組合為一

個資料庫,主檔名相同,如 master.mdf 及 master.ldf 是一個資料庫,名稱是

master。

副檔名可以自訂

mdf、ldf 及 ndf 都只是 SQL Server 的預設名稱,但不一定非使用這三個

副檔名不可,此三者只是約定俗成的名稱,形成之慣例。

加入檔案至資料庫

若要加入檔案至資料庫,可以在 Management Studio 中開啟資料庫的屬

性,再切換至「檔案」,如圖 6-2:

Page 4: 資料庫的處理 - 碁峰資訊epaper.gotop.com.tw/pdf/AED001700.pdf · 2011-01-25 · 資料庫是邏輯的定義,實體上,儲存在硬碟的資料庫仍是一個個檔案,

6-4

Part 02 I SQL Server 實戰篇

圖 6-2 資料庫的檔案

圖 6-2 表示目前資料庫共有三個檔案,其中 DaShang1 是筆者按下「加入」

按鈕,再分別輸入邏輯名稱、檔案名稱(在「自動成長」之右)所加入的,加入

的新檔副檔名預設是.ndf。

圖 6-2 的「檔案類型」,就是前小節說明的兩種類型,「資料列資料」

就是資料檔。檔案的另兩項重要組成是初始大小及自動成長。前者在資料檔

及交易記錄檔預設值是 3 MB 及 1 MB,且都是自動成長,但自動成長的單

位不同,建議若對資料庫檔案及效能的關係沒有深入了解,這兩項設定使用

預設值即可。

使用 T-SQL(Ch6\Ch6-1\611AddFile.SQL)=>為資料庫建立新檔

ALTER DATABASE DaShang

ADD FILE (

NAME=Da,

FILENAME='D:\DATA\Da.ndf',

SIZE=5MB,MAXSIZE=100MB,FILEGROWTH=5MB)

程式 6-1

Page 5: 資料庫的處理 - 碁峰資訊epaper.gotop.com.tw/pdf/AED001700.pdf · 2011-01-25 · 資料庫是邏輯的定義,實體上,儲存在硬碟的資料庫仍是一個個檔案,

資料庫的處理

6-5

CHAPTER 6

上述程式表示在 DaShang 資料庫加入名為 Da.ndf 的檔案,邏輯名稱是

Da,並分別指定初始大小、上限值及自動成長量等資訊。若要移除檔案,請

使用 REMOVE FILE <邏輯名稱>。

使用 T-SQL(Ch6\Ch6-1\612MoveFile.SQL)=>移動檔案

ALTER DATABASE DaShang

MODIFY FILE(

NAME=DaShang,

FILENAME='D:\DATA\DaShang.mdf')

程式 6-2

以上程式表示將 DaShang 資料庫的 DaShang.mdf 檔案移至指定位置,但

這個動作不會真的移動檔案,只是「告訴」SQL Server,檔案位置已變更,所

以移動檔案的動作仍然必須在檔案總管中完成,再以程式 6-2 完成檔案新位置

及資料庫的連結。若在 Management Studio,可以在圖 6-2 更改檔案的路徑。

6-1-2 檔案及檔案群組

檔案是實體架構,檔案之上又有檔案群組,這是無形的邏輯架構,群組

只對 SQL Server 的管理有意義。一個檔案群組可擁有一或多個檔案,建立資

料庫後,主要資料庫檔案會自動置於名為 PRIMARY 的群組,但交易記錄檔

不使用群組,如圖 6-2,只有前兩個資料庫檔案置於 PRIMARY 群組,第三個

交易記錄檔是「不適用」。

建立檔案群組

PRIMARY 是 SQL Server 為每一資料庫配置的預設檔案群組,若沒有為

檔案指定群組,就置於 PRIMARY 內。

若要建立檔案群組,請在資料庫的屬性頁中切換至「檔案群組」,再按

下「加入」按鈕,如圖 6-3:

Page 6: 資料庫的處理 - 碁峰資訊epaper.gotop.com.tw/pdf/AED001700.pdf · 2011-01-25 · 資料庫是邏輯的定義,實體上,儲存在硬碟的資料庫仍是一個個檔案,

6-6

Part 02 I SQL Server 實戰篇

圖 6-3 加入檔案群組

如圖 6-3 所示,顯示在「資料列」中的就是目前資料庫的群組,每一群

組共有名稱、檔案、唯讀及預設值等四項屬性,其中檔案無法在圖 6-3 更改,

其他均可在此更改設定。

使用 T-SQL(Ch6\Ch6-1\613AddFileGroup.SQL)

ALTER DATABASE DaShang

ADD FILEGROUP GP1

ALTER DATABASE DaShang

MODIFY FILEGROUP GP1 DEFAULT

程式 6-3

在程式 6-3 中,以 ALTER DATABASE 敘述更改資料庫的兩項設定,先

以 ADD FILEGROUP 加入名為 GP1 的檔案群組,再以 MODIFY FILEGROUP

更改 GP1 為預設檔案群組。

Page 7: 資料庫的處理 - 碁峰資訊epaper.gotop.com.tw/pdf/AED001700.pdf · 2011-01-25 · 資料庫是邏輯的定義,實體上,儲存在硬碟的資料庫仍是一個個檔案,

資料庫的處理

6-7

CHAPTER 6

更改後重新啟動

所有針對檔案、檔案群組的變更,都是重要改變,若在實務環境,最好

是在沒有使用者連線時,更改檔案及檔案群組,且更改後,最好重新啟

動 SQL Server 伺服器。

一個資料庫內可使用多個檔案及檔案群組,SQL Server 會有如此的設計,

當然有其道理,以下說明資料庫、檔案、檔案群組等三者的基本管理須知。

使用檔案群組的前提

檔案群組對於 SQL Server 而言,只有一個意義,就是比例填滿原則。若

一個檔案群組含有多個檔案,SQL Server 會依照各檔案的大小,依比例平均

寫入資料,不會只寫入至其中一或少數檔案,又有其他檔案閒置不冋。

故依此原則,使用一個以上檔案群組的目的通常是為了效能,如使用四

個資料庫檔案,分置於四個不同代號的磁碟機,若將這四個檔案置於同一群

組,可藉此改善效能。

但大部份的應用使用一個資料檔案及一個群組即已足夠,若要使用多個

檔案,原則就是以檔案群組在硬體間分散處理,儘量避免集中作業。

關於交易記錄檔

稍早曾說明交易記錄檔不可放在群組內,它必須單獨存在。交易記錄檔

是資料庫的重要歷史資料,資料檔案會保留最新的變更結果,而交易記錄檔

則含有變更的歷史,備份及還原的處理都靠它。

也由於它含有資料庫的變更記錄,所以 SQL Server 對交易記錄檔的存取動

作比資料檔更為頻繁,一個結果值寫入至資料檔,但可能有非常龐大的交易資

Page 8: 資料庫的處理 - 碁峰資訊epaper.gotop.com.tw/pdf/AED001700.pdf · 2011-01-25 · 資料庫是邏輯的定義,實體上,儲存在硬碟的資料庫仍是一個個檔案,

6-8

Part 02 I SQL Server 實戰篇

料寫至交易記錄檔。故基於效能考量,交易記錄檔最好與資料檔案分開置於不

同磁碟機,這與建立資料庫後,資料檔及交易記錄檔在一起的結果不同。

瀏覽資料庫相關檔案

步驟 1: 先確認你的 SQL Server 伺服器共有幾個使用者資料庫,如有三

個,含四個系統資料庫,共有七個資料庫。

步驟 2: 開啟檔案總管,切換至 SQL Server 的安裝目錄,瀏覽 Data 資

料夾的內容。

觀察: 若有七個資料庫,是不是共有十四個檔案?若不是的話,請找

出那個資料庫使用了較多或較少的檔案。

6-2 資料庫其他相關處理 本節將說明三個重點,分別是系統資料庫、在資料庫快顯功能提供的工

作及重要資料庫選項等。

6-2-1 關於系統資料庫

每一 SQL Server 伺服器共有 master、model、msdb 及 tempdb 等四個系

統資料庫,此四者是 SQL Server 的重要元件,若對 SQL Server 運作原理沒有

深入了解,建議不要更改這四個系統資料庫的內容,以下說明系統資料庫的

內容,算是此四者的概觀。

master

這是最重要的系統資料庫,它記錄了 SQL Server 伺服器層級的相關資

訊,伺服器層級之意是所有應該由伺服器主控的資訊,都儲存於此,如登入

Page 9: 資料庫的處理 - 碁峰資訊epaper.gotop.com.tw/pdf/AED001700.pdf · 2011-01-25 · 資料庫是邏輯的定義,實體上,儲存在硬碟的資料庫仍是一個個檔案,

資料庫的處理

6-9

CHAPTER 6

帳戶、有那些使用者自訂資料庫、每一資料庫使用的檔案等,都放在 master

資料庫內,所以它是 SQL Server 的管控中心。

master資料庫的所含組件都是系統型態,在Mangement Studio開啟master

資料庫後,顯示的元件不是「系統」就是「sys」為物型態或名稱的啟始文字,

如可以執行 sys.databases 檢視,如圖 6-4:

圖 6-4 執行 sys.databases 檢視

檢視就是查詢,sys.databases 檢視可以顯示目前 SQL Server 伺服器含有

的資料庫及其重要設定,如圖 6-4 的執行結果顯示共有五個資料庫,前四者

是系統資料庫,DaShang 是自訂資料庫,各資料庫的重要設定就在此一檢視

的各個欄位。

以下是 master 資料庫的重要限制:

不可加入檔案或檔案群組,也不可移除檔案或為檔案更改名稱

不可變更資料庫擁有者,master 的擁有者必定是 dbo

不可建立全文檢索索引

不可卸除 master 資料庫

不可設定為離線或唯讀

Page 10: 資料庫的處理 - 碁峰資訊epaper.gotop.com.tw/pdf/AED001700.pdf · 2011-01-25 · 資料庫是邏輯的定義,實體上,儲存在硬碟的資料庫仍是一個個檔案,

6-10

Part 02 I SQL Server 實戰篇

綜合以上所述,可以看出 master 資料庫必須隨時連線、可讀寫、所有組

件及設定最好都不要更改,也就是讓 SQL Server 伺服器自己處理。

msdb

msdb 資料庫主要用來記錄兩個主要資訊,一是 Management Studio 及

Agent 啟動時的必要資訊,另是資料庫的備份及還原記錄。所以若 msdb 資料

庫發生損毀,Management Studio 可能就無法啟動。

而備份及還原的所有動作發生後,SQL Server 會記錄至 msdb 資料庫的各

個資料表內,如圖 6-5:

圖 6-5 開啟 backfile 資料表

圖 6-5 的狀態是開啟 msdb 資料庫的 backfile 資料表,共顯示兩筆記錄,

表示至少已執行過一次備份資料庫,另還有許多以 backup 為首的資料表,都

與備份有關。

設計人員可以變更 msdb 資料庫的擁有者,其他限制同 master 資料庫。

Page 11: 資料庫的處理 - 碁峰資訊epaper.gotop.com.tw/pdf/AED001700.pdf · 2011-01-25 · 資料庫是邏輯的定義,實體上,儲存在硬碟的資料庫仍是一個個檔案,

資料庫的處理

6-11

CHAPTER 6

model

這是範本資料庫,建立新資料庫時,SQL Server 會以 model 資料庫為範

本,複製成為新資料庫,所以它是新資料庫的來源,同時在每次啟動 SQL

Server 時,也會以 model 資料庫為來源,建立 tempdb 資料庫。

大部份會對 model 資料庫做修改的部份是權限、資料庫選項等,也可建

立資料表、預存程序等物件,新資料庫就會套用 model 資料庫的設定,並自

動納入在 model 資料庫建立的物件。

model 資料庫的限制同 master 資料庫。

tempdb

每次重新啟動 SQL Server 伺服器後,就會以 model 資料庫為範本,重新

建立 tempdb 資料庫。如其名稱所代表的意義,此資料庫的目的是保存暫存物

件。既然是暫存,就表示這些物件的存在,只是為了特定目的而存在,完成

任務後就會被清除。

暫存物件的來源可以是使用者自訂或 SQL Server 因為各項工作需要而自

動建立,使用者自訂的暫存物件包括本機或全域暫存資料表、資料表變數、

資料指標、暫存預存程序等。由於這些物件都是在程式內宣告及建立,故在

Management Studio 中,tempdb 資料庫的「暫存資料表」幾乎沒有相關處理

功能,如圖 6-6:

Page 12: 資料庫的處理 - 碁峰資訊epaper.gotop.com.tw/pdf/AED001700.pdf · 2011-01-25 · 資料庫是邏輯的定義,實體上,儲存在硬碟的資料庫仍是一個個檔案,

6-12

Part 02 I SQL Server 實戰篇

圖 6-6 tempdb 的暫存資料表

如圖 6-6 所示,tempdb 的「暫存資料表」沒有可用的工作。Tempdb 資料

庫的限則同 master 資料庫。

關於系統物件

系統資料庫與一般資料庫都有系統物件,這些系統物件的內容及定義不

可更改。但可以在系統資料庫建立使用者自訂物件,如在 model 資料庫

建立資料表或預存程序。

6-2-2 重要資料庫工作

本小節將說明資料庫的重要工作,即在 Management Studio 的資料庫快顯

功能表的「工作」,如圖 6-7:

Page 13: 資料庫的處理 - 碁峰資訊epaper.gotop.com.tw/pdf/AED001700.pdf · 2011-01-25 · 資料庫是邏輯的定義,實體上,儲存在硬碟的資料庫仍是一個個檔案,

資料庫的處理

6-13

CHAPTER 6

圖 6-7 資料庫的工作

卸離及附加

卸離及附加是相反的操作,卸離表示將資料庫完整地自 SQL Server 伺服

器移除,但保留所有資料檔及交易記錄檔,以便再執行附加。卸離的目的通

常是在不伺 SQL Server 伺服器間移動資料庫,如先在 A 伺服器卸離資料庫,

再至 B 伺服器執行附加。

若要卸離資料庫,當然必須先確定沒有使用者正在連線,再於圖 6-7 中

點選「卸離」,如圖 6-8:

Page 14: 資料庫的處理 - 碁峰資訊epaper.gotop.com.tw/pdf/AED001700.pdf · 2011-01-25 · 資料庫是邏輯的定義,實體上,儲存在硬碟的資料庫仍是一個個檔案,

6-14

Part 02 I SQL Server 實戰篇

圖 6-8 卸離資料庫

在圖 6-8 有兩個卸離選項,只有勾選「卸除連接」,才表示卸離資料庫。

另若使用全文檢索,圖 6-8 會有是否更新全文檢索索引的選項。

若要附加資料庫,請在 Management Studio 的「資料庫」按下滑鼠右鍵,

再點選「附加」及指定.mdf 檔案,指定檔案後,會顯示如圖 6-9:

圖 6-9 附加資料庫

Page 15: 資料庫的處理 - 碁峰資訊epaper.gotop.com.tw/pdf/AED001700.pdf · 2011-01-25 · 資料庫是邏輯的定義,實體上,儲存在硬碟的資料庫仍是一個個檔案,

資料庫的處理

6-15

CHAPTER 6

附加之後的資料庫,與一般資料庫無異,所以由卸離至附加,等於是移

動資料庫的過程。

使用預存程序

預存程序名稱 範例 說明

sp_detach_db EXEC sp_detach_db 'DaShang', 'true'

卸除

DaShang資料庫,且

不更新索

引統計

sp_attach_db EXEC sp_attach_db @dbname = 'db1', @filename1 = 'd:\ Data\db1.mdf', @filename2 = 'd:\ \Data\db1_log.ldf'

附 加 含 有

多 個 檔 案

的資料庫

sp_attach_single_file_dbEXEC sp_attach_single_file_db @dbname = 'db1',@physname = 'd:\ \db1.mdf'

附 加 只 有

一 個 檔 案

的資料庫

表 6-1

離線及線上工作

這兩個工作選項是相對的,且同一時間必定只有一者可以使用,在圖 6-7

點選「離線工作」,就可將指定資料庫設為離線狀態,如圖 6-10:

圖 6-10 完成離線之後

Page 16: 資料庫的處理 - 碁峰資訊epaper.gotop.com.tw/pdf/AED001700.pdf · 2011-01-25 · 資料庫是邏輯的定義,實體上,儲存在硬碟的資料庫仍是一個個檔案,

6-16

Part 02 I SQL Server 實戰篇

圖 6-10 表示完成離線之後,此時資料庫圖示會顯示不同符號,表示此資

料庫已離線。離線之後的資料庫只有使用少數工作,也無法更改資料庫所含

物件,當然也不允許前端使用者的要求連線。離線的反向操作是線上工作,

可恢復資料庫正常運作。

壓縮資料庫

資料庫體積會隨著記錄增加而長大,壓縮處理可以適度縮小資料庫佔用

空間,壓縮的對象又可分為資料庫及檔案。若點選「壓縮」 「資料庫」選

項,表示壓縮資料庫,如圖 6-11:

圖 6-11 壓縮資料庫

圖 6-11 會顯示目前資料庫的名稱及大小,包括配置空間及可用空間,配

置空間是資料庫體積的最大上限(可自動放大),可用空間表示在配置空間中,

還剩多少空間可用,可用空間愈小,表示可壓縮的空間也愈小。若選擇重新

組織檔案,表示壓縮前將先針對檔案予以最佳化,包括將分頁移至檔案的起

始位置,但會拉長執行時間。

Page 17: 資料庫的處理 - 碁峰資訊epaper.gotop.com.tw/pdf/AED001700.pdf · 2011-01-25 · 資料庫是邏輯的定義,實體上,儲存在硬碟的資料庫仍是一個個檔案,

資料庫的處理

6-17

CHAPTER 6

使用 T-SQL(Ch6\Ch6-2\621ShirinkDB.SQL)

DBCC SHRINKDATABASE (DaShang, 10,NOTRUNCATE)

程式 6-4

以上語法表示壓縮 DaShang 資料庫,並騰出 10%空間,最後的

NOTRUNCATE 表示將釋放的空間留在資料庫內,若未指定第三個引數,釋

放的空間將留給作業系統,另第三個引數也可以是 TRUNCATEONLY,表示

資料庫將縮小至上次配置的大小,空間釋放予作業系統,同時使用此項引數

後,第二個引數的數字將被忽略。

壓縮檔案

除了壓縮資料庫外,也可壓縮資料庫的個別檔案,每一資料庫至少有兩

個檔案,分別是資料檔及交易檔,壓縮檔案的對話方塊如圖 6-12:

圖 6-12 壓縮檔案

Page 18: 資料庫的處理 - 碁峰資訊epaper.gotop.com.tw/pdf/AED001700.pdf · 2011-01-25 · 資料庫是邏輯的定義,實體上,儲存在硬碟的資料庫仍是一個個檔案,

6-18

Part 02 I SQL Server 實戰篇

在圖 6-12 中,「檔案類型」可指定資料或交易檔,在此選定檔案類型後,

可再指定檔案群組及檔案名稱,如資料庫名稱為 DaShang,則資料檔名稱是

DaShang,交易檔名稱是 DaShang_log,壓縮動作有三個選擇,分別表示釋放

未使用的空間、釋放前先組織頁面、集中資料至同一個檔案群組等。

使用 T-SQL(Ch6\Ch6-2\622ShirinkFile.SQL)

USE DaShang

DBCC SHRINKFILE (DaShang_DATA,3,TRUNCATEONLY)

程式 6-5

以上敘述表示壓縮 DaShang 資料庫的 DaAShang_DATA 檔案,並壓縮成

3 MB,這個數字只是期望值,SQL Server 會視檔案的目前使用狀況,儘量壓

縮成指定大小。TRUNCATEONLY 表示將壓縮後空間釋放給作業系統,也可

使用 NOTRUNCATE,將壓縮後空間留在檔案中。另一重要參數選項是

EMPTYFILE,功能是將指定檔案的內容移至同資料庫的其他檔案,並清空指

定檔案。

關於壓縮的大小及時機

由於 SQL Server 在處理時,需要資料庫有一定比例的空間,所以若在壓

縮資料庫及經過少許操作後,發現資料庫體積又恢復成原來大小甚至更

大,表示壓縮設定的釋放空間,又被 SQL Server 伺服器拿回使用,故上

次的壓縮大小設定即不符需求。至於壓縮資料庫的時機,以在大量刪除

記錄或刪除物件後為宜。

產生指令碼

指令碼就是 T-SQL 語法,這是可通用於 SQL Server 環境,用來控制伺服

器、資料庫的語言,在 Management Studio 中有多個地方可自動產生指令碼,

若對 T-SQL 語法不熟,可使用此功能。

Page 19: 資料庫的處理 - 碁峰資訊epaper.gotop.com.tw/pdf/AED001700.pdf · 2011-01-25 · 資料庫是邏輯的定義,實體上,儲存在硬碟的資料庫仍是一個個檔案,

資料庫的處理

6-19

CHAPTER 6

Management Studio 中有三個位置提供產生指令碼的功能,一是各個對話

方塊,如圖 6-13 是壓縮的屬性對話方塊:

圖 6-13 壓縮的指令碼

如圖 6-13 所示,開啟「指令碼」後,至多可有四個選擇,表示編寫的指

令碼將置於那一個位置。

第二個地方是在資料庫的各個物件的快顯功能表之「編寫資料表的指令

碼」,如圖 6-14:

圖 6-14 在資料庫物件執行撰寫指令碼

Page 20: 資料庫的處理 - 碁峰資訊epaper.gotop.com.tw/pdf/AED001700.pdf · 2011-01-25 · 資料庫是邏輯的定義,實體上,儲存在硬碟的資料庫仍是一個個檔案,

6-20

Part 02 I SQL Server 實戰篇

圖 6-14 表示為選取的資料表編寫指令碼,共有九個動作,每一動作都可

將指令碼輸出至三個地方。

最後一個產生指令碼的位置是圖 6-7 的「產生指令碼」選項,此項會啟

動「指令碼精靈」,可在其內選擇資料庫、資料庫所含物件、編寫目的地等,

如圖 6-15 是在此精靈完成指定後,顯示的工作內容:

圖 6-15 在指令碼精靈完成指定之後

匯入及匯出

匯入及匯出的處理對象是資料庫中的記錄,同時來源及目的端的資料庫

可以是任何 SQL Server 2008 支援的檔案格式。以下是以 DaShang 範例資料

庫為例,將資料表匯出成為 Excel 檔案。

在圖 6-7 點選「匯出資料」。

Page 21: 資料庫的處理 - 碁峰資訊epaper.gotop.com.tw/pdf/AED001700.pdf · 2011-01-25 · 資料庫是邏輯的定義,實體上,儲存在硬碟的資料庫仍是一個個檔案,

資料庫的處理

6-21

CHAPTER 6

在圖 6-16 檢查及設定匯出的來源,即目前資料庫,再按下「下一

步」按鈕。

圖 6-16 指定匯出來源資料庫

在圖 6-17 指定匯出目的地為 Excel,再輸入或指定 xls 檔案路徑及

名稱,完成後按下「下一步」按鈕。

圖 6-17 指定匯出目的地

Page 22: 資料庫的處理 - 碁峰資訊epaper.gotop.com.tw/pdf/AED001700.pdf · 2011-01-25 · 資料庫是邏輯的定義,實體上,儲存在硬碟的資料庫仍是一個個檔案,

6-22

Part 02 I SQL Server 實戰篇

在圖 6-18 選擇「從一或多個資料表或檢視表複製資料」,再按下

「下一步」按鈕。

圖 6-18 指定資料表或查詢

在圖 6-19 勾選欲匯出的資料表或檢視,再按下「下一步」按鈕。

圖 6-19 選擇匯出的記錄來源

Page 23: 資料庫的處理 - 碁峰資訊epaper.gotop.com.tw/pdf/AED001700.pdf · 2011-01-25 · 資料庫是邏輯的定義,實體上,儲存在硬碟的資料庫仍是一個個檔案,

資料庫的處理

6-23

CHAPTER 6

此時會嚐試在來源及目的端轉換欄位的資料類型,不需處理及按下

「下一步」按鈕,如圖 6-20:

圖 6-20 匯出前的轉換資料類型

選擇「立即執行」及按下「下一步」按鈕。

按下「完成」按鈕。

以上就是將資料表匯出至 Excel 檔案的操作,每個資料表及檢視在匯出

後的 XLS 文件內會自成一個工作表,同時 SQL Server 會自動轉換資料型態。

匯入及匯出的操作完全相同,都可以選擇不同的檔案格式,但必須注意

檔案是否存在的問題,如選擇匯出至 Access 時,則匯出的 MDB 檔案必須已

經存在,匯出至 Excel 時,XLS 檔案可以不存在,也就是匯出時立即新建。

Page 24: 資料庫的處理 - 碁峰資訊epaper.gotop.com.tw/pdf/AED001700.pdf · 2011-01-25 · 資料庫是邏輯的定義,實體上,儲存在硬碟的資料庫仍是一個個檔案,

6-24

Part 02 I SQL Server 實戰篇

由 Access 匯入資料

步驟 1: 請使用匯入及匯出精靈,由 Access 檔案執行匯入。

觀察: 在 Management Studio,開啟匯入資料表的設計視窗,是不是

沒有主索引?

6-2-3 重要資料庫選項

本小節要說明的是資料庫選項,也就是在資料庫運作期間的工作狀態,

這些設定都在資料庫屬性的「選項」中,如圖 6-21:

圖 6-21 資料庫的選項

Page 25: 資料庫的處理 - 碁峰資訊epaper.gotop.com.tw/pdf/AED001700.pdf · 2011-01-25 · 資料庫是邏輯的定義,實體上,儲存在硬碟的資料庫仍是一個個檔案,

資料庫的處理

6-25

CHAPTER 6

資料庫的可用選項很多,以下僅說明重要部份。

自動選項

圖 6-21 有數個自動選項,分別說明如後:

自動更新統計資料:統計資料是 SQL Server 建立查詢計畫的依據,主要內

容就是索引,而查詢計畫之優劣又關係到查詢執行的效率,若啟動此項,

則 SQL Server 在定義查詢計畫時,會先由資料表取得最新的統計資料。

自動非同步更新統計資料:只有自動更新統計資料為 True 時,此項才可設

定為 True,表示 SQL Server 可不定期更新過期統計資料,即非同步更新。

自動建立統計資料:若設定為 True,表示在建立查詢計畫時,會自動建

立可能遺漏的統計資料。

自動壓縮:若設定為 True,表示 SQL Server 會為資料庫的資料檔及交易

記錄檔,在背景執行自動壓縮,若檔案內的未使用空間達到 25%以上,

就會予以壓縮。

自動關閉:若設定為 True,表示在最後一位使用者離線後,SQL Server

會自動關閉資料庫,並釋放其佔用的系統資源。若又有使用者試圖連線,

SQL Server 會再度啟始資料庫,並取得需要的相關資源。

使用 T-SQL(Ch6\Ch6-2\623AutoOptions.SQL)

ALTER DATABASE DaShang

SET AUTO_CLOSE ON --開啟自動關閉

ALTER DATABASE DaShang

SET AUTO_SHRINK OFF --關閉自動壓縮

ALTER DATABASE DaShang

SET AUTO_UPDATE_STATISTICS ON --開啟更新統計

ALTER DATABASE DaShang

SET AUTO_UPDATE_STATISTICS_ASYNC OFF --關閉非同步更新統計

ALTER DATABASE DaShang

SET AUTO_CREATE_STATISTICS ON --開啟建立統計

程式 6-6

每一個自動相關選項的值,在 T-SQL 中都是 ON 或 OFF。

Page 26: 資料庫的處理 - 碁峰資訊epaper.gotop.com.tw/pdf/AED001700.pdf · 2011-01-25 · 資料庫是邏輯的定義,實體上,儲存在硬碟的資料庫仍是一個個檔案,

6-26

Part 02 I SQL Server 實戰篇

限制存取

限制存取之意是資料庫的連線狀態,共有 MULTI_USER(預設值 )、

SINGLE_USER 及 RESTRICTED_USER 等三個選項,前二者由字面即可了解

其意義,分別表示允許多人或單人連線至資料庫。

RESTRICTED_USER 之意是只有 db_owner 資料庫角色、資料庫建立者

和系統管理員伺服器角色的成員,可以連接到資料庫。

若正有多位使用者正在連線,則更改限制存取狀態的動作,不論更改為

SINGLE_USER 或 RESTRICTED_USER,SQL Server 都會以新規則進行驗

證,若連線狀況不符新規則,就會中止處理。

資料庫連線

此一設定不在圖 6-21 中,只可使用 T-SQL,資料庫連線共有 ONLINE、

OFFLINE 及 EMERGENCY 等,前二者較易理解,分別表示線上及離線。

EMERGENCY 表示將資料庫設定為唯讀,只有系統管理伺服器角色的成

員可以讀取資料庫內的記錄。

使用 T-SQL(Ch6\Ch6-2\624DBAccess.SQL)

ALTER DATABASE SaShang

SET MULTI_USER,ONLINE

程式 6-7

限制存取及資料庫連線的選項設定,都是直接列明在 SET 之後。

在 T-SQL 中取得及設定工作狀態

T-SQL 是使用 SQL Server 的重要設計工具,若要做為資料庫管理人員

(DBA),必須熟悉 T-SQL。SQL Server 提供許多以「@@」符號為首的系統

環境變數,可以取得工作狀態的資訊,如表 6-2:

Page 27: 資料庫的處理 - 碁峰資訊epaper.gotop.com.tw/pdf/AED001700.pdf · 2011-01-25 · 資料庫是邏輯的定義,實體上,儲存在硬碟的資料庫仍是一個個檔案,

資料庫的處理

6-27

CHAPTER 6

名稱 功能說明

@@CONNECTIONS 傳回連線或嘗試連線的次數,自上次啟動 SQL Server

算起

@@CPU_BUSY 傳回 CPU 花在工作上的時間,以毫秒為單位,自上次

啟動 SQL Server 算起

@@CURSOR_ROWS

傳回在連線開啟的最後一個資料指標中合格資料列的

數目,傳回 0 表示無法開啟資料指標,傳回-1 表示資

料指標是動態的

@@DATEFIRST

傳回 DATEFIRST 參數的現行值,表示指定的每週第一

天,1 代表星期一,2 代表星期二,以此類推,7 代表

星期日

@@DBTS 傳回現行資料庫中現行 timestamp 資料型別的值。此

timestamp 保證在資料庫中是唯一的

@@ERROR 傳回上次執行 Transact-SQL 陳述式時的錯誤代碼

@@FETCH_STATUS

傳回最後一次執行 FETCH 陳述式的結果,傳回 0 表示

順利執行,傳回-1 表示執行失敗,傳回-2 表示擷取的

資料列已遺漏

@@IDENTITY 傳回上次插入的識別值

@@IDLE 傳回 SQL Server 已經閒置的時間,自上次啟動算起,

以毫秒為單位

@@IO_BUSY 傳回 SQL Server 已經花在執行輸入和輸出作業的時

間,自上次啟動算起,以毫秒為單位

@@LANGID 傳回使用中語言的本機語言識別項

@@LANGUAGE 傳回目前使用中的語言名稱

@@LOCK_TIMEOUT 傳回現行工作階段的現行鎖定逾時設定,以毫秒微單

@@MAX_CONNECTIONS 傳回可同時連接 SQL Server 的最大使用者數目

@@MAX_PRECISION 傳回伺服器目前設定的 decimal 和 numeric 料型別的

有效位數

Page 28: 資料庫的處理 - 碁峰資訊epaper.gotop.com.tw/pdf/AED001700.pdf · 2011-01-25 · 資料庫是邏輯的定義,實體上,儲存在硬碟的資料庫仍是一個個檔案,

6-28

Part 02 I SQL Server 實戰篇

名稱 功能說明

@@NESTLEVEL 傳回現行預存程序執行的巢狀層次,初始值為 0

@@OPTIONS 傳回現行 SET 選項的相關資訊

@@PACK_RECEIVED 傳回自上次啟動後,SQL Server 自網路讀取輸入封包

的數目

@@PACK_SENT 傳回自上次啟動後,SQL Server 寫入輸出封包的數目

@@PACKET_ERRORS 傳回自上次啟動 SQL Server 後,在連線上的網路封包

發生錯誤的數目

@@PROCID 傳回現行程序的預存程序識別項

@@REMSERVER 傳回遠端 SQL Server 資料庫伺服器名稱,此名稱會顯

示在登入記錄中

@@ROWCOUNT 傳回受到上一個陳述式影響的資料列數目

@@SERVERNAME 傳回執行 SQL Server 的本機伺服器名稱

@@SERVICENAME

傳回執行 SQL Server 的登錄機碼名稱。如果目前的執

行個體為預設執行個體,@@SERVICENAME 會傳回

MSSQLServer。如果目前的執行個體為具名執行個

體,這個函數會傳回執行個體名稱

@@SPID 傳回目前的使用者處理序的伺服器處理序識別項(ID)

@@TEXTSIZE

傳回 SET 陳述式的 TEXTSIZE 選項的現行值,此值指

定 SELECT 陳述式所傳回的 text 或 image 資料的最大

長度,以位元組為單位

@@TIMETICKS 傳回各時間刻度的毫秒數

@@TOTAL_ERRORS 傳回自上次啟動後,SQL Server 已進行的磁碟讀取/

寫入錯誤的數目

@@TOTAL_READ 傳回自上次啟動後,SQL Server 讀取磁碟的數目

@@TOTAL_WRITE 傳回自上次啟動後,SQL Server 寫入磁碟的數目

@@TRANCOUNT 傳回現行連線中現用交易的數目

@@VERSION 傳回現行 SQL Server 安裝的日期、版本和處理器類型

表 6-2

Page 29: 資料庫的處理 - 碁峰資訊epaper.gotop.com.tw/pdf/AED001700.pdf · 2011-01-25 · 資料庫是邏輯的定義,實體上,儲存在硬碟的資料庫仍是一個個檔案,

資料庫的處理

6-29

CHAPTER 6

圖 6-22 是取得系統環境變數的範例:

圖 6-22 取得系統環境變數內容

每一環境變數可傳回數量不定的欄位,各欄位之意義請自行查閱輔助

說明。

除了取得之外,也可設定工作狀態,如表 6-3:

選項設定 功能說明

SET ANSI_NULL_DFLT_OFF {ON|OFF} 設定新欄位是否允許 NULL 值

SET ANSI_NULL_DFLT_ON {ON|OFF} 與上項功能相同,但使用相反的設定值

SET ANSI_NULLS {ON|OFF}

使用 Null 值時,指定等於(=)及不等於

(<>)比較運算子符合是否 SQL-92 的

行為,若為 ON,則如 WHERE 欄位

=NULL 的條件將不被接受

SET ANSI_PADDING {ON|OFF}

控制資料行儲存數值長度小於資料行

定義大小的處理方式,適用於 char、

varchar、binary 及 varbinary 等型態

Page 30: 資料庫的處理 - 碁峰資訊epaper.gotop.com.tw/pdf/AED001700.pdf · 2011-01-25 · 資料庫是邏輯的定義,實體上,儲存在硬碟的資料庫仍是一個個檔案,

6-36

Part 02 I SQL Server 實戰篇

一.選擇題

1.( ) 下列何者不是 SQL Server 資料庫的副檔名 (A)mdf (B)dbf (C)ndf

2.( ) 下列何者是 SQL Server 資料庫的主要檔案副檔名 (A)mdf (B)dbf (C)ndf

3.( ) 下列那種檔案不能置於檔案群組 (A)mdf (B)dbf (C)ndf

4.( ) 建立資料庫後的預設檔案群組名稱是 (A)filegroup (B)primary (C)primarykey

5.( ) 下列何者是建立新資料庫的範本 (A)master (B)msdb (C)model

6.( ) 下列那一個系統資料庫儲存備份及還原記錄 (A)master (B)msdb (C)model

7.( ) 下列何者不是壓縮的處理對象 (A)資料庫 (B)檔案群組 (C)檔案

8.( ) 若要在不同伺服器移動資料庫,可使用下列何種處理 (A)離線及線

上 (B)卸離及附加 (C)匯入及匯出

9.( ) 下列何者不是檔案群組的功能 (A)可集中多個資料檔 (B)可依比例

填滿群組內各檔案 (C)可同時壓縮群組內多個檔案

10.( ) 下列那種連線方式會導致資料庫成為唯讀 (A)ONLINE (B)OFFLINE (C)EMERGENCY