SQL Server

SQL Server 準備考試 (2)

基本介紹

教學目標

本篇文章主要分享如何準備 SQL Server 相關考試科目「Exam 70-762: Developing SQL Databases」的心得。

重點概念

首先最近這個月工作一直被資料庫的相關問題所困擾,所以花了些時間看了所購買的兩本中文電腦書籍「SQL Server 效能調校」和「SQL Server 2016 管理實戰」,以及看了線上原文書「Exam Ref 70-762 Developing SQL Databases」和線上課程「Developing SQL Databases - Exam 70-762 Certification」,並且於今天中午前往考試中心參與 70-762 考試科目,順利以 800 多分考取通過,同時因為之前已經考取通過 70-761 考試科目 ,所以就獲得 Microsoft Certified Solutions Associate: SQL 2016 Database Development 證照,此外也是目前我的第一張 MCSA 證照。

Microsoft Certified Solutions Associate: SQL 2016 Database Development

接著要如何準備 70-762 的考試科目,主要重點有四個,分別為:

  1. 設計及實作資料庫物件。
  2. 實作程式設計物件。
  3. 管理資料庫並行處理。
  4. 最佳化資料庫物件與 SQL 基礎結構。

再來設計及實作資料庫物件主要是參考「SQL Server 效能調校」中文電腦書了解叢集索引和非叢集索引的概念。以及最佳化資料庫物件與 SQL 基礎結構主要是參考「SQL Server 2016 管理實戰」中文電腦書了解基礎 效能監控工具程式的概念。

最後實作程式設計物件和管理資料庫並行處理主要是參考線上原文書「Exam Ref 70-762 Developing SQL Databases」和線上課程「Developing SQL Databases - Exam 70-762 Certification」為主,說真的內容有點太多了看得沒很懂,但至少有基本的概念就夠了,以利考試時用消去法選答案。

總結準備時間雖然只有用一個月的下班時間,但是因為之前就多多少少有 SQL Server 工作經驗,再加上運氣不錯就順利通過,獲取生平第一張 MCSA 證照,預計再參與 70-475 考試科目,除了了解如何透過微軟的解決方案設計和實作大數據分析之外,同時取得 MCSE 證照,但考試內容比起這次有點太多了…。

相關資源

SQL Server 高可用性 (1)

基本介紹

教學目標

初步了解 SQL Server 高可用性的基本概念。

重點概念

首先我們在企業中建立系統時通常會考慮高可用性,若以服務業務單位的角度而言,只要因為效能不足造成回應時間過慢,或者系統無法提供服務時,則系統可用性就會被提出來進行檢討。此時資料庫管理師針對資料庫的高可用性所面臨的挑戰主要是平均修復時間,所謂可用性主要公式為 (平均運作時間 - 平均修復時間) / 平均運作時間。

接著資料庫高可用性的解決方案能夠避免因為硬體或軟體失敗所造成的影響,並且讓平均修復時間降至最少,其中常見的原因主要有硬體故障或毀損、應用程式錯誤、使用者操作錯誤和不當的資料庫行為。此時 SQL Server 主要提供四種高可用性永不停機 (Always On) 的解決方案,分別為:

  1. 容錯轉移叢集:主要是透過 Windows 平台提供的高可用性功能。
  2. 資料庫鏡像:主要是支援近乎的容錯移轉,但建議改用可用性群組。
  3. 可用性群組:主要是讓我們能夠針對多個資料庫容錯移轉。
  4. 記錄傳送:主要是傳遞主要伺服器的交易記錄備份,以利進行復原。

再來最基本的應用就是容錯轉移叢集,其主要是透過 Windows 平台提供的高可用性功能,能夠提供 SQL Server 完整執行個體的高可用性功能。其主要是由一個或多個實體節點 (伺服器) 所組成,且具有共用磁碟。此時主要透過 Windows 平台中的「容錯移轉叢集管理員」進行容錯移轉的設定,並且我們能夠當伺服器硬體發生故障、軟體發生錯誤或計劃升級其間,將節點容錯移轉至其它節點,繼續提供服務,以利提供高可用性。

最後 SQL Server 容錯移轉主要有兩種架構分別為 Active / Passive 和 Active / Active,所謂 Active / Passive 架構主要是單一執行個體叢集,整個叢集僅有一個容錯執行個體,其共用相同共享磁碟中的資料檔或交易記錄檔,執行過程中只允許一個節點擁有叢集群組的資源,而另一個節點則是等待狀態,若擁有資源的節點一但發生異常時,則次要節點則會立即啟動相關服務。所謂 Active / Active 架構主要是多個執行個體叢集,每個執行個體皆有專屬的資料檔或交易記錄檔,也皆存在個別的磁碟中,執行過程中允許多個節點擁有群組的資源,若其中一個節點發生異常時,則會立即轉移至其它正常的節點立即啟用相關服務。

總結在企業中當我們規劃建置系統時,通常會考慮資料庫的高用性架構,此時 SQL Server 容錯移轉通常會被導入進行使用,以利提供業務單位高可用性的服務。

相關資源

SQL Server 準備考試 (1)

基本介紹

教學目標

本篇文章主要分享準備 SQL Server 相關考試科目「Exam 70-761: Querying Data with Transact-SQL」的心得。

重點概念

首先最近參與的解決方案皆搭配 SQL Server 伺服器,雖然之前在銀行資訊單位擔任資訊專員時有開發與維護 SQL Server 伺服器的工作經驗,但卻沒有去考微軟官方的 Querying Data with Transact-SQL 考試科目,而是先完成 edX 的線上免費課程,並且付費取得證書,以利完成與獲取微軟資料科學專業學程的證書。如今擔任顧問分析師已滿半年該充實更多相關的專業知識與實務技能,因此就在過年期間花了點時間準備「Exam 70-761: Querying Data with Transact-SQL」考試科目,並且在今天通過 70-761 考試,而本篇主要是準備考試的心得分享。其中我準備 70-761 考試參考的資源主要包括免費線上課程、付費線上課程、付費電子書籍和付費練習題目,如下所示:

  1. 免費線上課程:Querying Data with Transact-SQL (edX)
  2. 付費線上課程:SQL Server 70-761: Querying Data with Transact-SQL (Safari Online)
  3. 付費線上課程:Querying Data with Transact-SQL - Exam 70-761 Certification Training (Safari Online)
  4. 付費電子書籍:Exam Ref 70-761 Querying Data with Transact-SQL, First Edition (Safari Online)
  5. 付費練習題目:Practice Lab: 70-761 - Querying Data with Transact-SQL (MeasureUp)

接著免費線上課程主要有影片教學和實驗操作,以利我們初步了解 SQL Server 中 T-SQL 查詢語言,但是比較花費時間官方建議是六週的時間。至於付費線上課程主要是在 Safari Online 線上網站上觀看,有兩門分別為「SQL Server 70-761: Querying Data with Transact-SQL」課程和「Querying Data with Transact-SQL - Exam 70-761 Certification Training 」課程,若是初學者建議觀看第一門課程比較簡單能夠在幾天的時間初步了解 SQL Server 中 T-SQL 查詢語言,但是若要通過 70-761 考試則建議搭配看第二門課程比較詳細能夠讓我們更加了解 SQL Server 中 T-SQL 查詢語言更多細節與原理。

再來付費電子書籍則是參考官方考試指定書籍「Exam Ref 70-761 Querying Data with Transact-SQL, First Edition」,請務必從頭看過一遍,並且了解三個章節摘要所提到的每項內容,這對於考試來說非常重要。同時可以購買付費練習題目「Practice Lab: 70-761 - Querying Data with Transact-SQL」,本想說了解題型,但是實際考試時總共四十八題,則有六題將會是直接撰寫 T-SQL 查詢語言的題目,因此除了透過練習題目了解哪些觀念不熟悉之外,更需要親自撰寫 T-SQL 查詢語言才比較有機會通過考試,其中請務必熟悉 PIVOT 陳述式該如何撰寫,考試時能夠檢查語法是否正確,但是我卻忘了如何撰寫 PIVOT 陳述式的語法,因此該題未得分有點可惜。此外練習題目沒有一題出現在實際考試中,因此必須讀懂練習題目中針對每個選項的解釋說明,請勿只背答案因為沒有用,正常人只要花一天做個十次以上模擬測試就能夠達到多次滿分,此時多次滿分不代表就能夠順利通過考試。

最後我在準備 70-761 考試時有撰寫幾篇相關的文章可供參考,其中的內容主要是參考免費線上課程、付費線上課程、付費電子書籍和付費練習題目。

  1. SQL-Server 基本概念 (1)
  2. SQL Server 基本概念 (2)
  3. SQL Server 基本概念 (3)
  4. SQL Server 基本概念 (4)
  5. SQL Server 基本概念 (5)
  6. SQL Server 資料類型 (1)
  7. SQL Server 查詢指令 (1)
  8. SQL Server 查詢指令 (2)
  9. SQL Server 查詢指令 (3)
  10. SQL Server 查詢指令 (4)
  11. SQL Server 查詢指令 (5)
  12. SQL Server 查詢指令 (6)
  13. SQL Server 查詢指令 (7)
  14. SQL Server 查詢指令 (8)
  15. SQL Server 查詢指令 (9)
  16. SQL Server 查詢指令 (10)
  17. SQL Server 查詢指令 (11)
  18. SQL Server 查詢指令 (12)
  19. SQL Server 函數指令 (1)
  20. SQL Server 函數指令 (2)
  21. SQL Server 函數指令 (3)
  22. SQL Server 錯誤處理 (1)
  23. SQL Server 錯誤處理 (2)
  24. SQL Server 錯誤處理 (3)

總結若要考取 70-761 考試科目請務必熟悉查詢指令、函數指令和錯誤處理,其實就是透過 T-SQL 進行管理資料、查詢資料和設計資料庫三大考試重點,此外若初學者且平常沒有撰寫 T-SQL 查詢語言,則建議先花六週的時間完成免費線上課程「Querying Data with Transact-SQL」之後,有些撰寫 T-SQL 查詢語言的感覺之後再來準備 70-761 考試科目將會比較合適。

相關資源

SQL Server 基本概念 (5)

基本介紹

教學目標

初步了解 SQL Server 中透過查詢語言 T-SQL 設計資料庫的基本概念。

重點概念

首先在 T-SQL 查詢語言中的檢視表是不支援參數,但是能夠重複使用資料表表達式,內建資料表值函數與檢視表類似,但是支援參數,因此我們可以將內建資料表值函數視為參數化的檢視表。除了檢視表和內建資料表值函數在 T-SQL 查詢語言中常用之外,我們還會經常在 T-SQL 查詢語言中應用使用者定義函數。所謂使用者定義函數主要分為傳回單一值或傳回資料表變數,請注意的在使用者定義函數中無法進行錯誤處理。單一值使用者定義函數接受參數並且傳回單一值,至於多陳述式資料表值使用者定義函數則是定義了傳回至表頭中的資料表變數,使用者定義函數主要是用資料表傳回資料表變數。此外當我們查詢使用者定義函數時,SQL Server 會在內部建立資料表變數,執行函數的流程以填充資料,並且將其交給呼叫查詢,同時使用者定義函數與預儲程序不同在於我們能夠透過使用者定義函數作為查詢的一部分進行互動。

接著在 T-SQL 查詢語言中的預儲程序則主要能夠重用執行例行處理程序和封裝邏輯,其與使用者定義函數不同在於預儲程序可以修改資料表中的資料,使用動態 SQL 陳述式,並且支援錯誤處理。此外預儲程序還能夠幫助我們更好的控制權限,方法是主要是向使用授予對該過程的 EXECUTE 權限,而不予直接執行基礎活動的權限,與使用者定義函數不同,預儲程序不可能出現在查詢中。

再來在 T-SQL 查詢語言中的交易將會支援具有完整 ACID 屬性,分別為原子性 (Atomicity)、一致性 (Consistency)、隔離性 (Isolation) 和持久性 (Durability)。同時 T-SQL 查詢語言更支援 TRY-CATCH 結構以利實現錯誤處理,恰當地使用這種結構,並且結合確保我們不會在發生錯誤時保持交易處於打開的狀態,從而使得我們能夠提供一的錯誤處理解決方案。此外透過 XACT_ABORT 選項設定為 ON 的狀態,當發生錯誤時,我們可以確保一致的結果,不使用 TRY-CATCH 時打開交易將會回滾,並且中止批次,當使用 TRY-CATCH 時,交易將會失敗,並且控制傳遞給 CATCH 區塊。

最後在 T-SQL 查詢語言中針對 NULL 值的處理主要有兩個重要的函數分別為 ISNULL 和 COALESCE 函數,所謂 ISNULL 函數和 COALESCE 函數返回其輸入中不是 NULL 的第一個值,並且我們可以使用連接、子查詢和集合運算元組合多個資料表的資料時。此外若在對應的關鍵列中可能有 NULL 值,則需要考慮比較的預期結果,並且若我們期望在比較兩個 NULL 值時得到一個對應,則在連接和子查詢中我們需要添加特殊的處理。

總結我們能夠透過查詢語言 T-SQL 有效設計資料庫中的資料內容,但請注意要如何正確使用檢視表、使用者函數、預儲程序、交易與錯誤處理和 NULL 值的特殊處理,將會對於 T-SQL 效能優化非常有幫助。

相關資源

SQL Server 基本概念 (4)

基本介紹

教學目標

初步了解 SQL Server 中透過查詢語言 T-SQL 查詢資料的基本概念。

重點概念

首先若我們透過獨立子查詢將會獨立執行於外部查詢,因此有利於我們進行錯誤排除的相關作業,請注意若相關子查詢引用了外部查詢中資料的列,並且通常非常複雜,雖然在某些情況下SQL Server 更有效的處理子查詢,但是的我們還是要確保子查詢的效能。此外支援 APPLY 運算元,能夠幫助我們將表達式應用於某個資料表中的每一列,若是右側是一個空集合,則 CROSS APPLY 運算元則不傳回左側列,反之 OUTER APPLY 運算元則會傳回。

接著 T-SQL 支援資料表表達式命名查詢,能夠幫助我們簡化和重用程式碼,T-SQL 中主要支援四種資料表表達式,分別為衍生資料表、一般資料表表達式、檢視表和內建資料表函數。只有當我們需要在一個子句中使用表達式時才會使用衍生資料表和一般資料表表達式,當我們需要重用資料表表達式時,將會使用檢視表和內建資料表值函數,其中若沒有涉及參數,請使用檢視表,否則請使用內建資料表值函數。若我們不希望內部查詢的結果保留在資料表中,則請使用資料表表達式,否則請在執行時請使用暫存資料表或資料表變數。此外 T-SQL 還有支援系統版本的暫存資料表允許我們長時間追蹤資料修改的歷史記錄,我們在資料表上啟用系統版本控制,並且將其連接至相對應的歷史記錄資料表中,同時使用 DATETIME2 列來表示有效期間的開始與結束。當我們修改目前資料表時,SQL Server 將會自動追蹤歷史記錄資料表中的列之歷史狀態。此外讀取資料請使用 FOR SYSTEM_TIME 子句查詢目前資料表,以及使用 AT 子句請求在指定時間之內回傳資料的狀態,或者使用 FROM、BETWEEN 或 CONTAINED IN 子句請求返回指定時間區段內有效的資料狀態,使用 ALL 子句我們可以請求查看目前和歷史列的所有狀態。

再來 T-SQL 支援定義一個分組集的傳統分組查詢和使用子句 GROUPING SETS,CUBE 和 ROLLUP 定義多個分組集的分組查詢,並且使用 GROUPING_ID 函數來計算分組集識別符號。此外若我還能夠使用 PIVOT 運算元主要是將資料從行的狀態轉換為列的狀態,並且使用 UNPIVOT 運算元將資料從列狀態轉換為行狀態。當我們使用 PIVOT 運算元時,請確保使用資料表表達式來投影所涉及的元素,以利避免不必要的列隱性分組,以及 UNPIVOT 主要是用 NULL 刪除列。至於視窗函數允許我們針對基礎查詢結果執行資料分析計算,而不隱藏細節。T-SQL 支援聚合、排序、編移和統計視窗功能。

最後 T-SQL 支援使用 FOR XML 子句建立 XML 文件作為 SELECT 語句的輸出,能夠幫助我們讀取 XML 資料,並且使用 OPENXML 函數將其轉換為資料表格式。同時能夠將 XML 資料儲存在 SQL Server 中的 XML 資料類型的列中,當然我們可使用此列的方法來提取單一值,XML 片段或修改 XML 資料等等,以及我們使用 Xquery 表達式作為 XML 資料類型方法的參數來導航至適當的元素或屬性。此外 SQL Server 中並沒有本機 JSON 資料類型,但是我們還是能夠使用 FOR JSON 子句從查詢中創建 JSON 文檔,並且使用 OPENJSON 函數將 JSON 文件切分為資料表格式,以及使用 JSON_VALUE 和 JSON_QUERY 函數取得單一值或 JSON 片段,或者使用 JSON_MODIFY 函數修改 JSON 資料,同時透過 ISJSON 函數測試合法性。

總結我們能夠透過查詢語言 T-SQL 有效查詢資料庫中的資料內容,但請注意要如何正確使用資料表表達式將會對於 T-SQL 效能優化非常有幫助。

相關資源