SSISDB 系列随笔汇总:
- SSISDB1:使用SSISDB管理Package
- SSISDB2:SSIS工程的操作实例
- SSISDB3:Package的执行实例
- SSISDB4:当前正在运行的Package及其Executable
- SSISDB5:使用TSQL脚本执行Package
- SSISDB6:参数和环境变量
使用工程部署模式(Project Deployment Model),对管理SSIS工程的部署,排除ETL运行过程中出现的异常等问题,很有帮助。开发人员把SSIS工程部署到“Integration Services Catalog”中之后,集成服务引擎把Package的配置数据,ETL执行的情况等都记录在SSISDB数据库中。数据库SSISDB包含两个内置的框架(schema)中:internal和catalog。internal 框架下的数据表、视图等对象是集成服务引擎内部使用的,catalog框架下的数据表,视图等对象是提供给用户使用的。在数据库SSISDB中,用户可以使用TSQL脚本调用和执行package,通过视图查看package的执行情况,根据package的历史消息对package进行故障排除,管理package执行的参数或环境变量等。
一,基本元素
用户可以查看架构catalog下的视图,来监控SSISDB的运行情况。SSISDB数据库的基本构成是:Folder、Project、Package、Parameter和环境(Environment):
- [catalog].[folders]:用于查看在Integration Services Catalog->SSISDB目录下创建的文件夹(Folder);
- [catalog].[projects] :用于查看存储在文件夹(Folder)下的SSIS 工程(Project);
- [catalog].[packages] :用于查看位于SSIS Project下的Package;
- [catalog].[object_parameters] :用于查看Package或Project的参数,字段object_type=20表示Project参数;字段object_type=30,表示Package参数;
- [catalog].[execution_parameter_values] :用于查看Package或Project在执行时的参数值;用户在执行package之前,可以修改Package参数的默认值,在Package执行时的参数的值是参数的执行值。
- [catalog].[environments]、[catalog].[environment_variables]和[catalog].[environment_references] :用于查看环境,环境中的变量,以及环境的引用,环境引用表示Project和Environment之间的映射关系;
在Package执行时,SSISDB会创建一个Operation,Execution,并统计每一个Package中的每一个可执行任务组件(Executable)的执行情况:
- [catalog].[operations] :用于查看操作信息,常见的操作类型是:部署工程(deploy_project),执行包(create_execution and start_execution),停止包(stop_operation),维护窗口(Retention window);
- [catalog].[executions]:用于查看Package的执行情况;
- [catalog].[executables]:用于查看Package中的可执行任务组件(Executable),Executable 是package的可执行组件,在控制流(Control Flow)选项卡中,是一个Task 或者 Container;
- [catalog].[executable_statistics] :用于查看可执行任务组件的执行情况;
二,参数
SSISDB中的参数分为默认参数和执行参数,对象参数可以从视图[catalog].[object_parameters] 查看,该视图用于存储所有Package和Project的参数的信息。parameter_name表示参数名称,data_type表示参数的数据类型,必需属性(required)为1,表示在执行package时,该参数必须赋值,敏感属性(sensitive)为1,表示参数值是敏感的,SSIS会隐藏明文,显示为•••;value_set字段为1,表示参数被赋值,如果为0,表示参数未被赋值。
1,使用参数的对象
根据参数的作用域,可以把参数分为Package参数和Project参数,字段object_type=20表示Project级别的参数;字段object_type=30,表示Package级别的参数,
字段object_name是对象的名称,如果字段object_type=20表示Project名称;字段object_type=30,表示Package名称。
还有一种特殊的对象,它的object_type为50,配置相应的参数,能够改变Package在执行时的特殊行为。
2,参数值
参数有三类值: design_default_value,default_value, 和 execution_value,设置时的默认值(design_default_value)是指在VS中设计Package时为参数指定的值;默认值(default_value)是指Package部署到SSIS中为参数设置的默认值;如果没有修改参数的默认值,那么默认值就是设计时的默认值。执行时(execution_value)是指Package在运行时为参数设置的值。由于在执行package时,可以选择设置参数的Value,或选择使用默认值,所以执行值是Package在某一次执行(Execution)时所使用的值。
3,参数值的类型
字段 value_type 表示参数值的类型,如果value_type 为V,表示参数值就是default_value 或 execution_value字段的字面值,如果value_type 为R,表示参数的值是引用环境中的变量的值。
字段referenced_variable_name 是引用的环境的名称。
4,特殊参数的值
通过catalog.execution_parameter_values查看Package的执行参数,当object_type为50时,可以为package配置特殊的参数:
- LOGGING_LEVEL
- DUMP_ON_ERROR
- DUMP_ON_EVENT
- DUMP_EVENT_CODE
- CALLER_INFO
- SYNCHRONIZED
这些参数会影响Package运行的行为,例如 LOGGING_LEVEL会影响Package运行时,系统记录Package的日志级别。
三,配置SSIS维护代理(Agent)的属性
SSIS引擎使用Agent来维护SSISDB记录的数据,用户可以使用视图 [catalog].[catalog_properties] 查看代理的配置信息:
- ENCRYPTION_ALGORITHM:加密算法的名称
- MAX_PROJECT_VERSIONS:每个工程保持的最大版本数量
- OPERATION_CLEANUP_ENABLED:周期性地删除旧版本
- RETENTION_WINDOW:保持窗口
- SCHEMA_BUILD:
- SCHEMA_VERSION:
- SERVER_CUSTOMIZED_LOGGING_LEVEL:
- SERVER_LOGGING_LEVEL:服务器级别的日志级别
- SERVER_OPERATION_ENCRYPTION_LEVEL:
- VERSION_CLEANUP_ENABLED:启用版本清除功能
SSIS引擎会追踪对Package操作的历史记录和消息,包括Package的执行情况,工程的部署,以及执行的消息等,为了维护操作数据的size,SSIS创建了一个维护Job,叫做“SSIS Server Maintenance Job”,这个Agent Job在Integration Services安装时创建。SSIS通过该Job删除旧版本的Project,Package的操作记录和事件产生的消息。
在每次每次工程部署SSIS时,集成服务引擎都会记录工程的版本,用户可以通过SSISDB查看部署的版本,并可以根据需要切换到老的版本。用户可以通过“版本历史”查看部署的版本,或者查询视图catalog.object_versions 查看部署的历史版本。
1,通过Integration Services Catalogs来查看
打开SSISDB-》Projects,查看指定project的version history,这种方式查看Deployed Time 比较慢
2,当前版本
查询SSISDB的表projects,查看最后一次部署的时间
select f.name as foler_name, --p.project_id, p.name as project_name, p.deployed_by_name, p.last_deployed_time from catalog.projects p inner join catalog.folders f on p.folder_id=f.folder_id
3,查看部署的历史版本
通过查看SSISDB的表catalog.object_versions,查看部署的历史版本
select f.name as foler_name, p.project_id, p.name as project_name, ov.created_by as deployed_by, ov.created_time as deployed_at from catalog.object_versions ov inner join catalog.projects p on ov.object_id=p.project_id inner join catalog.folders f on p.folder_id=f.folder_id where ov.object_type=20 --object type: 20 project and p.project_id=8 order by deployed_at desc
参考文档: