SSISDB5 使用TSQL指令碼執行Package

2021-09-22 07:23:25 字數 4060 閱讀 5525

通常情況下,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

@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

該sp建立package的執行例項,以輸出(output)引數返回執行例項的id。

二,傳遞引數

向執行例項傳遞引數是可選的步驟,引數分為package引數和系統引數,系統引數控制packag的行為,如果引數@object_type的值為50,表示為執行例項設定系統引數。

--

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 來修改引數的執行值(execution value):

catalog.set_execution_parameter_value 

[@execution_id = execution_id

, [ @object_type =

] object_type

, [@parameter_name =

] parameter_name

, [@parameter_value =

] parameter_value

引數 @object_type的值是20、30 和50,分別表示工程級別的引數(project parameter),包級別的引數(package parameter),以及系統引數;

引數 @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_value 

@execution_id=@package_execution_instance_id,

@object_type

=50,

@parameter_name

= n'synchronized

', @parameter_value

=1;

synchronized是乙個系統引數,引數@object_type必須設定為50,當設定引數synchronized的執行值(execution value)為1,儲存過程:catalog.start_execution 等到package執行完成之後返回。

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 命令的視窗看到列印的一系列...