通常情況下,etl工程師建立乙個agent job來周期性地執行package,agent底層呼叫ssisdb的儲存過程(catalog.start_execution)以同步模式來啟動執行例項,這就意味著,我們可以模擬agent job的行為,使用tsql指令碼執行package。ssis引擎每執行一次package,都會建立乙個執行例項(execution instance),每個執行例項都有唯一的標識 executionid,資料型別是bigint。
執行例項可以包含引數,使用儲存過程(catalog.set_execution_parameter_value)向執行例項傳遞引數。執行例項的引數分為兩種型別:系統引數和package引數,系統引數共有7個,用於控制日誌記錄、執行方式(非同步/同步)等行為,而package引數,用於向package傳遞動態的引數值。為了控制執行例項的行為,需要向執行例項傳遞系統引數;有些package包含引數,在開始執行例項之前,必須賦值。
一,建立執行例項
執行package的第一步是建立package的執行例項,並儲存執行例項的id。使用 catalog.create_execution 儲存過程建立乙個執行例項,建立成功之後,通過輸出引數返回唯一的例項id(execution_id)。
declare該sp建立package的執行例項,以輸出(output)引數返回執行例項的id。@execution_id
bigint
exec catalog.create_execution @package_name
=n'test.dtsx
', @execution_id
=@execution_id output,
@folder_name
=n'myprojectfloder
', @project_name
=n'myproject
', @use32bitruntime
=false,
@reference_id
=null
二,傳遞引數
向執行例項傳遞引數是可選的步驟,引數分為package引數和系統引數,系統引數控制packag的行為,如果引數@object_type的值為50,表示為執行例項設定系統引數。
--使用儲存過程 catalog.set_execution_parameter_value 來修改引數的執行值(execution value):set package parameter
declare
@var0 sql_variant=n'
package_parameter_value
';exec catalog.set_execution_parameter_value
@execution_id
=@execution_id,
@object_type
=30, --
package parameter
@parameter_name
=n'package_parameter_name
', @parameter_value
=@var0
--set system parameter
declare
@var1
smallint=1
exec
[ssisdb
].[catalog
].[set_execution_parameter_value
]@execution_id
=@execution_id,
@object_type
=50, --
system parameter
@parameter_name
=n'logging_level
', @parameter_value
=@var1
exec
[ssisdb
].[catalog
].[start_execution
]@execution_id
catalog.set_execution_parameter_value引數 @object_type的值是20、30 和50,分別表示工程級別的引數(project parameter),包級別的引數(package parameter),以及系統引數;[@execution_id = execution_id
, [ @object_type =
] object_type
, [@parameter_name =
] parameter_name
, [@parameter_value =
] parameter_value
引數 @parameter_name 是引數的名稱,對於系統引數,共有以下7個:
引數@parameter_value是引數的值,例如,設定@object_type=50,@parameter_name=『synchronized』,@parameter_value為1,表示以同步方式啟動執行例項。
三,開始執行例項
為執行例項傳遞相應的引數之後,可以呼叫sp執行package的執行例項。在例項的指令碼中,由於沒有啟用同步模式(設定系統引數:synchronized為1),因此,該sp以非同步方式執行package,不等package執行完成,該sp就立即返回。
exec catalog.start_execution @execution_id四,執行例項的執行模式=@execution_id
go
ssis 引擎預設以非同步方式執行package,這意味著,在呼叫sp:catalog.start_execution 開始執行例項之後,sp不等待package執行完成,立即返回,返回的結果值表示呼叫package的結果。如果後續執行的package必須在前乙個package執行完成之後才能開始執行,那麼,必須以同步方式執行package,所謂同步模式,就是說,在呼叫sp:catalog.start_execution 之後,sp不會立即返回,而是等package執行完成之後,sp才會返回,將控制權傳遞到下一條tsql 語句。
引數 synchronized 控制package的執行模式,是以同步,還是以非同步方式執行,該引數的預設值是0,也就是說,禁用同步模式,通過把引數:synchronized 的執行值(execution value)修改為1,使ssis engine以同步方式執行package:
exec catalog.set_execution_parameter_valuesynchronized是乙個系統引數,引數@object_type必須設定為50,當設定引數synchronized的執行值(execution value)為1,儲存過程:catalog.start_execution 等到package執行完成之後返回。@execution_id=@package_execution_instance_id,
@object_type
=50,
@parameter_name
= n'synchronized
', @parameter_value
=1;
quick tip – run ssis 2012 packages synchronously and other execution parameters
catalog.create_execution (ssisdb database)
catalog.start_execution (ssisdb database)
catalog.set_execution_parameter_value (ssisdb database)
catalog.executions (ssisdb database)
作者:
悅光陰
分類:
ssisdb
標籤:
ssisdb
使用 WScript exe 執行指令碼
wscript.exe 是 windows 指令碼宿主的乙個版本,用來在 windows 中執行指令碼。wscript.exe 提供了基於 windows 的對話方塊,用於設定指令碼屬性。使用 wscript.exe,可以通過下列方式在 windows 下執行指令碼 如果被雙擊的指令碼檔案的副檔名尚...
使用python執行shell指令碼
這裡介紹一下python執行shell命令的四種方法 1 os模組中的os.system 這個函式來執行shell命令 os.system ls anaconda ks.cfg install.log install.log.syslog send sms service.py sms.py 0注,...
使用Monkey執行指令碼測試
一次性輸入example script.txt 腳步裡面的所有內容,命令如下 root lenovo desktop cat example script.txt telnet 127.0.0.1 1080 這時,你就可以在你執行 monkey port 1080 v v 命令的視窗看到列印的一系列...