[SQL][MCSA]70-463 考試預備 ( 1/4 )

[SQL][MCSA]70-463 考試預備 ( 1/4 )

SQL Server 2012 的 MCSA 認證需要準備三科( 70-461、70-462 和 70-463 ),參考官方網站上的說明,還有一些通過該考試人員的心得,看起來似乎要從幾個方面來下手準備

  1. Data Warehouse
  2. SSIS Package Design
  3. Deploy and Design
  4. DQS

 

建議參考書籍

  1. SQL Server 2012 SSIS整合服務 ( http://www.delightpress.com.tw/book.aspx?book_id=SKUD00024 )
  2. Training Kit (Exam 70-463): Implementing a Data Warehouse with Microsoft SQL Server 2012 ( http://www.amazon.com/Training-Kit-Exam-70-463-Implementing/dp/0735666091 )
  3. MSDN ( http://msdn.microsoft.com/zh-tw/library/ms141026.aspx )

 

而從微軟網站的考試說明中的比重看起來,主要考試重點都集中在 SSIS 上面,因此花點時間把相關需要注意和 MSDN 上的資料整理出來,方便自己來做溫習和準備。


 

SSIS Package 介紹 ( http://msdn.microsoft.com/zh-tw/library/ms141134.aspx )

 

Package

事件處理常式流程

OnError 發生錯誤時。
OnInformation 在驗證和執行可執行檔以報告資訊期間,會引發此事件。
OnPostExecute 完成執行後。
OnPostValidate 驗證完成後。
OnPreExecute 執行之前。
OnPreValidate 驗證開始時。
OnVariableValueChanged 變數變更時。
OnQueryCancel 當需要中斷執行時會觸發此事件來判斷是否確認中斷
OnWarning 發生警告時。
  • 如果想要關閉所有的事件處理的時候,可以將容器或者是工作上,將 DisableEventHandles 屬性設定為 True.
     
  • 封裝組態 ( Package Configurations ) : 組態可用於封裝部署模型。參數 ( Parameters ) 是用來取代專案部署模型的組態。

 

    1. 可用在專案佈署模型,將值指派給封裝內的屬性。
    2. 可以在專案層級建立「專案參數」(Project Parameter),並在封裝層級建立「封裝參數」(Package Parameter)。
    3. 專案參數可用於向專案中的一個或多個封裝提供專案接收的任何外部輸入。
    4. 不允許封裝在執行的時候去更改傳入的參數值。
       

 

  • 封裝交易處理 ( http://msdn.microsoft.com/zh-tw/library/ms141144.aspx  ),
    • 封裝的 TransactionOption 可能的值為 NotSupported、Supported、Required。
      1. 單一交易 : 可以將封裝的 TransactionOption 屬性設定為 Required,藉以將此封裝設定成起始這筆交易。
      2. 多個交易 : 可以將封裝的 TransactionOption 屬性設定為 Supported,將封裝內需要交易管理的的工作或容器設的 TransactionOption 屬性設定為 Required。
      3. 繼承交易 : 父封裝使用「執行封裝」工作啟動子封裝。或呼叫子封裝的「執行封裝」工作亦聯結父封裝交易
    • 封裝的 IsolationLevel 可能的值為 Unspecified、Chaos、ReadUncommitted、ReadCommitted、RepeatableRead、Serializable 和 Snapshot。
      1. ReadUncommited:  Does not lock the records being read.  This means that an uncommitted change can be read and then rolled back by another client, resulting in a local copy of a record that is not consistent with what is stored in the database.  This is called a dirty read because the data is inconsistent.
      2. Chaos:  Behaves the same way as ReadUncommitted, but checks the isolation level of other pending transactions during a write operation so that transactions with more restrictive isolation levels are not overwritten.
      3. ReadCommitted: Locks the records being read and immediately frees the lock as soon as the records have been read.  This prevents any changes from being read before they are committed, but it does not prevent records from being added, deleted, or changed by other clients during the transaction.
      4. RepeatableRead:  Locks the records being read and keeps the lock until the transaction completes.  This ensures that the data being read does not change during the transaction.
      5. Serializable:  Locks the entire data set being read and keeps the lock until the transaction completes.  This ensures that the data and its order within the database do not change during the transaction.
      6. Snapshot:  The data read within a transaction will never reflect changes made by other simultaneous transactions.  The transaction uses the data row versions that exist when the transaction begins.  No locks are placed on the data when it is read.

 

  • 專案部屬和封裝部屬的差異 ( http://msdn.microsoft.com/zh-tw/library/hh213290.aspx )
    1. 專案部屬必須將封裝部署到 SQL Server 上的 SSISDB 的資料庫( 或稱作目錄 Catalog ),主要使用 Stored Procedure 來執行封裝,也可以使用 dtExec 執行封裝,可在執行時利用參數將值指派給封裝屬性;封裝部屬則是將封裝存放在檔案系統或者是 MSDB 上,透過工具程式 DTEXEC、DTEXECUI 或 API 來執行封裝,並可利用組態來將值指派給封裝屬性。
    2. 專案部屬必須將 SQL Server Instance 上啟用 CLR 整合;封裝部屬則無這樣的限制。
    3. 專案部屬可將不同情境的參數值設定為環境變數,可在執行的時候指定使用特定的環境參數;封裝部屬則是建立多組的組態檔來對應不同的情境。
    4. 專案部屬在執行期間,會自動擷取封裝所產生的事件,並儲存至 SSISDB 內,可利用 T-SQL 查詢 SSISDB 下的相關 Table 和 View 取得執行時候的相關資訊。但封裝部屬必須將記錄提供者 ( Log Provilder )加入封裝,才能擷取事件。

 

Control Flow

  • 容器 Container
    1. For 迴圈 http://msdn.microsoft.com/zh-tw/library/ms139956.aspx
    2. Foreach http://msdn.microsoft.com/zh-tw/library/ms141724.aspx ,要清楚每種分類使用的時機
      • Foreach 檔案列舉值 : 在特定目錄下取得相關檔案列舉
      • Foreach 項目列舉值 : 可放置自己定義欄位和資料。
      • Foreach ADO 列舉值 : 可用來讀取資料表中的每一列資料
      • Foreach ADO.NET 結構描述資料列集列舉值 : 用來讀取資料庫中的 Metadata,像是有多少索引、Table 等資訊。
      • Foreach From Variable 列舉值 : 讀取特定變數的列舉值
      • Foreach NodeList 列舉值 : 指定 XML,用來讀取 XML 的 Node
      • Foreach SMO 列舉值 : 用來讀取 SQL Server Management Objects
    3. 時序 ( Sequence ) http://msdn.microsoft.com/zh-tw/library/ms139855.aspx

 

 

  • Bulk Insert task ( http://msdn.microsoft.com/zh-tw/library/ms141239.aspx )
    • 只有系統管理員 (sysadmin) 固定伺服器角色的成員才能執行包含「大量插入」工作的封裝。
    • 來源檔所在伺服器,必須和要插入資料的 SQL Server 資料庫所在的伺服器相同,如果檔案位於遠端伺服器上,則必須在路徑中指定使用 UNC 名稱的檔名。
    • 只支援用於目的地資料庫的 OLE DB 連接。
    • 當工作插入資料時,要在目的地資料表或檢視上執行的動作。這些選項包括是否檢查條件約束、啟用識別插入、保留 Null、引發觸發程序,或鎖定資料表。

70463_001

連接類型 參數標記 參數名稱
ADO ? Param1, Param2, …
ADO.NET @<參數名稱> @<參數名稱>
ODBC ? 1, 2, 3, …
OLE DB ? 0, 1, 2, 3
  • 執行 SQL 工作 ( http://msdn.microsoft.com/zh-tw/library/ms141003.aspx )
    • 可搭配連線管理員連接 DBMS 系統,不像「執行 T-SQL 陳述式工作」只能連接 SQL Server 來使用。
    • 當有使用參數時,要注意搭配不同連線時而有不同的寫法。

 

  • 指令碼工作可以讓控制流程中利用自行加入 C# or VB.Net 的 Code 來完成特定的工作,例如呼叫 Web Services 或者是對特定檔案做加工處理,讓 SSIS 可以處理的範圍可以更加有彈性;如果在相關 Package 內會大量重複運用到這樣的方式,可以考慮運用 .Net 的開發製作 Custom Task,提升使用上的效能和便利性,但這樣的 DLL 要注意配合的 SSIS 版本和檔案的註冊,否則可能會造成部屬後無法使用和升級的困擾。但如果在 Script 內只是要做變數值做簡單的運算處理的狀況下,也可以考慮使用運算式工作 ( Expression Task ) 來取代。

 

 


 

參考資料