佳木斯湛栽影视文化发展公司

主頁 > 知識庫 > SSIS 延遲驗證方法

SSIS 延遲驗證方法

熱門標(biāo)簽:服務(wù)外包 百度競價排名 網(wǎng)站排名優(yōu)化 呼叫中心市場需求 AI電銷 地方門戶網(wǎng)站 鐵路電話系統(tǒng) Linux服務(wù)器

驗證是一個事件,該事件在Package執(zhí)行時,第一個被觸發(fā),驗證能夠避免SSIS引擎執(zhí)行一個有異常的Package或Task。延遲驗證(DelayValidation)是把驗證操作延遲到Package真正運行(run-time)時開始執(zhí)行,當(dāng)禁用延遲驗證時,一旦驗證操作返回錯誤(Error)或警告(Warning),Package就不會繼續(xù)執(zhí)行下去。在更新海量的數(shù)據(jù)時,通常需要用到暫存表把遠(yuǎn)端數(shù)據(jù)加載到本地,這就需要在Package執(zhí)行之后,創(chuàng)建暫存表(staging table);在Package執(zhí)行之后,刪除暫存表,當(dāng)禁用延遲驗證時。當(dāng)禁用延遲驗證時,驗證操作在Package執(zhí)行之前,會檢測暫存表是否存在,由于暫存表需要在Package執(zhí)行之后創(chuàng)建,因此,驗證事件發(fā)出錯誤消息,Package停止運行,這對這種情況,必須使用延遲驗證,在真正引用到暫存表時,延遲暫存表是否存在。

一,延遲驗證屬性

延遲驗證屬性作用于Package,Task,容器(Container)和鏈接管理器(Connection Manager),默認(rèn)情況下,禁用延遲驗證,這就意味著,在Package執(zhí)行時,首先驗證Package,Task,容器和鏈接管理器引用的對象是否有效,如果有任何對象不存在,那么驗證失敗,Package停止運行。

在Package開始執(zhí)行之前,驗證Package,能夠盡早發(fā)現(xiàn)錯誤,避免浪費系統(tǒng)資源去執(zhí)行一個必定會失敗的Package,合理配置,會帶來性能的優(yōu)化。

二,驗證方式

按照驗證的執(zhí)行順序來看,Package包含兩種類型的驗證方式:

Package Validation:在Package執(zhí)行時,首先驗證Package及其包含的所有組件,是Package級別的驗證;

組件驗證:組件級別的驗證,包含Task , Connection Manager和Container,在組件開始執(zhí)行之前,驗證組件中引用對象的有效性。

驗證分為兩個階段(Phrase),首先進行Package級別的驗證,而后進行組件級別的驗證:

Package級別的驗證包含組件級別的驗證,如果禁用延遲驗證,那么組件級別的驗證會執(zhí)行兩次,這在設(shè)計Package時,不是一個好的選擇,這會增加Package的驗證時間,還會增加每一次打開Package進行編輯的時間。而啟用延遲驗證,這會禁用了Package 級別的驗證,以至于在Package的設(shè)計時(design-time),只執(zhí)行組件級別的驗證,注意,任何情況下,無法禁用組件級別的驗證。

通常情況下,對一個完成開發(fā)的Package啟用延遲驗證,是一個好的選擇,這會減少Package整體的執(zhí)行時間,因為跳過了Package級別的驗證。

1,禁用延遲驗證

禁用Package的延遲驗證,需要設(shè)置Package的DelayValidation屬性值為False,默認(rèn)情況下,Packag會禁用延遲驗證,如下圖所示:

那么在Package開始運行之后,第一件事就是開始執(zhí)行Package Validation,當(dāng)Package級別的驗證操作完成之后,開始驗證Package包含的各個Task等,如果驗證發(fā)現(xiàn)錯誤,Package不會被執(zhí)行,直接報錯。

2,啟用延遲驗證

啟用Package的延遲驗證,需要設(shè)置Package的DelayValidation屬性值為True,如下圖所示:

當(dāng)啟用延遲驗證時,Package會執(zhí)行下去,知道運行到特定的組件時,才會執(zhí)行組件驗證,如果組件驗證失敗,那么拋出錯誤消息,停止Package的運行。

組件驗證發(fā)生真正執(zhí)行組件,如果上流組件新建一個暫存表(staging table),下游組件引用該暫存表,并不會出現(xiàn)異常,這是因為在該組件進行驗證時,該暫存表已經(jīng)存在。

三,延遲驗證屬性的層次結(jié)構(gòu)

在Package級別上設(shè)置DelayValidation屬性并不能阻止打開Package時的最初的驗證過程,它只是在運行包時延遲Package級別的驗證,這就意味著Package將繼續(xù)運行,但是當(dāng)打開Package時警報仍然出現(xiàn)。如果想阻止打開Package時的驗證,那么必須把Task級別上的DelayValidation屬性設(shè)置為True。

避免驗證鏈接管理器,有時,是一個非常節(jié)省開發(fā)時間的選擇。有時打開Package的過程會花費很長的時間,這可能是因為它引用了一個遠(yuǎn)程數(shù)據(jù)源,而數(shù)據(jù)源的響應(yīng)很緩慢,或者鏈接不上。如果我們正在開發(fā)一個包,并且需要經(jīng)常打開這個包,那么我們可能需要花費很長的時間來等待SSIS驗證一個數(shù)據(jù)源。在這樣的情況下,在任務(wù)級設(shè)置DelayValidation屬性為True可以為我們節(jié)省大量的時間。

示例1,驗證操作只會驗證屬性的完整性

設(shè)置Package Level的屬性DelayValidation=False,Task Level的屬性DelayValidation=False

Package的處理流程如下圖所示,Package級別的Validation在Create Staging Table的Validation之前開始,在Insert Data的Validation之后結(jié)束,從圖中能看到Insert Data的驗證完成,實際上,驗證操作并沒有檢查出一個非常簡單的語法錯誤,直到Task真正執(zhí)行時,才發(fā)現(xiàn)錯誤,這說明,驗證操作只會驗證Task屬性的完整性,效果是有限的。

示例2,驗證操作會驗證引用的對象是否存在

設(shè)置Package Level的屬性DelayValidation=False,Task Level的屬性DelayValidation=False,在Data Flow Task中,OLE DB Source組件從一個當(dāng)前不存在的表dbo.delay_test中selelct數(shù)據(jù):

在執(zhí)行Package時,SSIS彈出“Package Validation Error”窗體,這就是Package級別上的驗證發(fā)現(xiàn)的錯誤:

設(shè)置Package Level的屬性DelayValidation=False,Task Data Flow Task的屬性DelayValidation=True,重新執(zhí)行,Package成功執(zhí)行。

示例3,打開package的驗證

設(shè)置Package Level的屬性DelayValidation=True,Task Level的屬性DelayValidation=False,在打開Package時,Task Data Flow Task上面是有紅色X號的,當(dāng)設(shè)置Task Level的屬性DelayValidation=True時,在打開package時,Task Data Flow Task上面的紅色X符號消失,這說明,在打開Package時,驗證操作已經(jīng)開始,并且Task 級別的驗證屬性會覆蓋上層的驗證。

以上三個示例說明,在打開Package,設(shè)計Package和運行Package時,SSIS引擎都會對Package進行驗證,并且Package的驗證操作是優(yōu)層次結(jié)構(gòu)的,底層的延遲驗證會覆蓋上層的延遲驗性。

以上這篇SSIS 延遲驗證方法就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。

標(biāo)簽:仙桃 蘭州 湖南 崇左 衡水 黃山 湘潭 銅川

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《SSIS 延遲驗證方法》,本文關(guān)鍵詞  ;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 收縮
    • 微信客服
    • 微信二維碼
    • 電話咨詢

    • 400-1100-266
    华亭县| 南川市| 北京市| 信丰县| 鹤壁市| 科技| 临清市| 宁河县| 海南省| 如东县| 霍城县| 三明市| 平安县| 乌拉特后旗| 河曲县| 德清县| 溧水县| 嘉善县| 崇明县| 抚远县| 保靖县| 北票市| 武宁县| 澜沧| 杭锦后旗| 拜泉县| 慈溪市| 新巴尔虎右旗| 赤峰市| 凯里市| 南城县| 沙田区| 台江县| 阿合奇县| 齐河县| 霍州市| 大埔区| 运城市| 双鸭山市| 会东县| 靖远县|