SSIS hang with unhandle exception
如果你的packages在执行的过程中有没有被捕获到的异常,则sqldumper会跳出来获取这些异常信息输出,存在下面的目录中:
C:\Program Files\Microsoft SQL Server\110\Shared\ErrorDumps
文件有以.tmp和mdmp结尾.
SQLDUMPER_ERRORLOG.log
通常这个时候整个package就会被hang住,如果你使用Dtsdebughost.exe(即在VS)中测试时,
如果你直接使用dtexec.exe来操作,可能dtexec就已经崩溃了.stop working.
我的包中使用到了多线程进行数据加载,如果线程中出现了异常,package会在测试时hang住,所以我就进行了下面的测试.
我在Package中使用了一个scripttask,new 了三个线程执行一些简单的测试操作.
我特意让子线程抛出一些测试异常,我们在主线程中无法捕获这些子线程抛出的异常.
但是我使用appdomain.currentdomain.unhandleexception方法来捕获处理这些异常.
第一次测试的结果是:
sqldumper跳出来,然后pacakge就一直running,SSDT中显示包已经执行完成.但是其onPostExecute事件并未被执行.
从processinginfo中可以看到unhandleexception绑定的事件处理方法已经执行了.
界面中一直hang住的情况,我分析是有些线程没有被中止
然后我就开始了第二次尝试,
在处理未捕获异常的事件处理方法中加入处理线程的方法,我让每一个线程在启动前都加入一个list<thread>对象.
处理的时候,先捕获异常信息,然后输出线程的状态,最后abort线程.我发现task顺利完成了.
第三次测试,我在Package的OnQueryCancel中加入一个scriptask,但其中故意生成一个异常,scripttask也会被hang住,
因为我发现在package的执行过程中,onquerycancel事件会被不定期触发,只要我们的System::Cancel变量是false.
在bookonline上查找相关onquercancel的说明,它会不定期触发,你可以通过设置system::cancel变量的值通知它停止运行,它给了你这样的一个机会,终止任务的执行.
我想到了MSDN论坛上有一个人问题的问题,他说如果package的执行时长超过10分钟,就需要它自动停止,其实就可以使用类似这样的方法,如果package执行时长超过10分钟,就把它的System::Cancel值置为true即可.
在package中的代码如下:
bool isreuse = false;List<Thread> _listworkthreads = new List<Thread>();object internalsyncobj = new object();/// <summary>/// This method is called when this script task executes in the control flow./// Before returning from this method, set the value of Dts.TaskResult to indicate success or failure./// To open Help, press F1./// </summary>public void Main(){// TODO: Add your code hereAppDomain.CurrentDomain.UnhandledException += HandleException;Dts.TaskResult = (int)ScriptResults.Success;string mymsg = "thread :" + System.Threading.Thread.CurrentThread.ManagedThreadId.ToString()+ " domainid:"+ System.Threading.Thread.GetDomainID().ToString();Dts.Events.FireInformation(0, "showmsg", mymsg, "", 0, ref isreuse);int times = 0;bool isused = false;while (times < 300){times++;Dts.Events.FireInformation(0, "showmsg", times.ToString(), "", 0, ref isreuse);if (times == 9 && !isused){Dts.Events.FireInformation(0, "showmsg", "update var_threadcount to 2", "", 0, ref isreuse);Dts.Variables["var_threadcount"].Value = 2;//try { Dts.VariableDispenser.Reset(); }catch { }isused = true;}}runNewThread("test");Thread th = new Thread(obj =>{throw new Exception("hello exception in thread");});lock (internalsyncobj) { _listworkthreads.Add(th); }th.Start();System.Threading.Thread.Sleep(6 * 1000);}void runNewThread(string msg){Thread th = new Thread(obj =>{Dts.Events.FireInformation(0, "showmsg", msg, "", 0, ref isreuse);string mymsg = "thread :" + System.Threading.Thread.CurrentThread.ManagedThreadId.ToString()+ " domainid:"+ System.Threading.Thread.GetDomainID().ToString();Dts.Events.FireInformation(0, "showmsg", mymsg, "", 0, ref isreuse);Thread t = new Thread(() =>{throw new Exception("hello exception in child thread!");});lock (internalsyncobj) { _listworkthreads.Add(t); }t.Start();});lock (internalsyncobj) { _listworkthreads.Add(th); }th.Start(msg);}void HandleException(object sender, UnhandledExceptionEventArgs e){Dts.Events.FireInformation(0, "UnhandleException", "sender:" + sender.ToString() +"message:" + ((Exception)e.ExceptionObject).Message, "", 0, ref isreuse);//handle child threadlock (internalsyncobj){Dts.Events.FireInformation(0,"AppdomainUnhandleException", "thread count:" + _listworkthreads.Count.ToString()+ " start to kill all child thread at time:" + DateTime.Now.ToString(), "", 0, ref isreuse);foreach (Thread th in _listworkthreads){Dts.Events.FireInformation(0, "ThreadState", "thread state:" + th.ThreadState.ToString()+ DateTime.Now.ToString(), "", 0, ref isreuse);try {th.Abort(); }catch (Exception ex) { }}}}
View Code
转载于:https://www.cnblogs.com/huaxiaoyao/p/3738088.html
SSIS hang with unhandle exception相关推荐
- ssis面试题_SSIS面试问题
ssis面试题 These SSIS interview questions cover many of the top topics that you will be asked when appl ...
- ssis组件_SSIS脚本组件概述
ssis组件 SSIS Script component is a prominent strength of SQL Server Integration Services since it all ...
- 现代软件工程系列 学生的精彩文章 (2) 到底是谁的 bug?
http://teamkingofcsharp.spaces.live.com/blog/cns!59FC2D3DD66822AA!406.entry 又见M$的bug 发信人: Dora9 (Dor ...
- python自定义全局异常_如何在python中进行全局异常捕获
使用sys.excepthook函数进行全局异常的获取. 首先定义异常处理函数, 并使用该函数接收系统异常信息. import wx import sys class TestFrame(wx.Fra ...
- Android挂断电话流程
近期在友盟上看到许多关于挂断电话导致崩溃的问题,如下异常 java.lang.NoSuchMethodError: No interface method endCall()Z in class Lc ...
- Oracle 学习笔记,,,经验总结整理的。。。
cmd进入: 1. D:\oracle\ora92\bin> 2. sqlplus /nolog 3. conn sys/sys as sysdba sqlplus进入: username:sy ...
- 教学管理系统——利用java和mysql来实现
利用java和mysql实现教学管理系统.教学管理系统主要是在eclipse利用java代码完成编写,并与数据库进行连接,使得两边都能控制数据库的数据变化.仅供初学者参考. 每学期学校都要开设-定的课 ...
- c#直接调用ssis包实现Sql Server的数据导入功能
调用ssis包实现Sql Server的数据导入功能网上已经有很多人讨论过,自己参考后也动手实现了一下,上一次笔者的项目中还用了一下这个功能.思前想后,决定还是贴一下增强记忆,高手请54. 1.直接调 ...
- Java 处理 Exception 的 9 个最佳实践!
点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 在Java中处理异常并不是一个简单的事情.不仅仅初学者很难理解,即 ...
最新文章
- centos下docker1.7 上传文件到容器报错 Error: Path not specified
- C++(STL):05---智能指针之unique_ptr
- php 异步处理类,php异步处理类
- Java基础---键盘录入工具(Scanner类)
- 【分治】动态点分治 ([ZJOI2007]捉迷藏)
- opengl 矩阵投影代码 shade_LookAt、Viewport、Perspective矩阵
- java中UUID类生成32位随机数(附加 6 位随机数)
- android模拟器横屏显示,安卓模拟器bluestacks怎么横屏显示
- 2020年营收仅62.5万,九城凭什么砸1亿美金购买矿机?
- 无权图的单源最短路径
- lua的userdata的生存周期
- 想知道体感游戏的类型有哪些吗?我来告诉你
- JavaScript高级编程语言基础语法
- java ema算法_K线图指标算法(MA EMA)
- 科技云报道:元宇宙如何切入办公场景?云桌面或是必经之路
- 抽象工厂模式(图画版)
- js小玩意(三)从数组中找到指定元素并删除
- shopping更任性,不止有淘宝,还有智慧商场!
- 北京工业大学 C语言课设
- Github资源汇总
热门文章
- 机器学习(六)支持向量机svm初级篇
- Convolutional Sequence to Sequence Learning笔记
- linux git 发邮件,gitlab发邮件基于sendmail
- android 自定义横向堆积柱形图,MPAndroidChart项目实战(八)——自定义分段堆积柱状图...
- linux yum选择版本mysql_linux yum安装指定版本mysql
- linux几种常见的文件内容查找和替换命令
- java socket 异步回调函数,分享nodejs异步编程基础之回调函数用法
- 如何关闭小娜进程_Python多进程之进程间通信 - Pipe amp; Queue
- 网络安全人才平均年薪 24.09 万,跳槽周期 31 个月,安全工程师现状大曝光!
- Python学习入门2:Python学习路线(课程大纲+Python视频教程+下载地址)