2 questions:
1) if I place an Execute SQL Task in OnError event of the Error Handler at the Package level, will it catch all of my possible task errors? There's no need to add an Event Handler for each task in the Control flow?
2) A stupid one...I'd like to test my Event Handler (writing to custom log table in case there's an error in the Integration Service)...any ideas how to provoke an SSIS error to check my Error Handler ?
I added this line of code to my error handler script, in red.
User:criptError is a package-level string variable User:criptError has a value assigned to it when another script encounters an error condition (which I define) I added "User:criptError" as a read-only variable to the error handler script task.
Now, when I run the package, and an it encounters an error, it task just hangs, that is, it stays yellow instead of turning red... if I remove the line in red above, it works ok again.
is there an error handler in sql stored procedures? For example if i want to do a drop something and there is a lock, i want to try return if it droped it or not and if not then try again later
I need to develop code for a TRY...CATCH block in SQL Server 2008 R2 for the following error, that occurs when I get a timeout from a linked server that connects to a server in another country:
OLE DB provider "ORAOLEDB.Oracle" for linked server "MyRemoteServer" returned message "ORA-12170: TNS:Connect timeout occurred". Msg 7303, Level 16, State 1, Line 77 Cannot initialize the data source object of OLE DB provider "ORAOLEDB.Oracle" for linked server "MyRemoteServer".
Most times, it doesn't time out, but occasionally gives me a 7303 error. I can't control when timeouts happen and when they don't. I can't use RAISERROR on error 7303, as it only works on custom errors >= 50000.
My question is, how do I simulate a timeout so that I can verify my error handling code? I need a procedure that waits 10 seconds and tries again 3 times, but how do I generate the error?
i give a small fuzzle for you here , ie . i have a job which includes 6 packages in that one and while running that job any one package is fialed how can i execute that next package even that before package was failed. i am using for loop container for running my 6 packages ... is there any method to do this like on error resume next in .net
I am using an error handler that was provided to me from another source. However, I notice that there's something in the code that writes the error message twice. I tried to discover what it was, but could not seem to pinpoint it. Here's an example of what my email messages look like:
Is activity file current? The Script returned a failure result. The extracts in D:myFolder are not current! Data NOT loaded. Is activity file current? The Script returned a failure result. The extracts in D:myFolder are not current! Data NOT loaded.
Obviously, I just want my email to read:
Is activity file current? The Script returned a failure result. The extracts in D:myFolder are not current! Data NOT loaded.
Somewhere, errorMessages is being written to more than once. Need help finding the error.
Is there any differene between on-error event handler and precedence constrain failure? I have created a package and if a data flow task(flat file to DB) fails, the file has to be moved to archive folder. How I have accomplished this is Dataflow task->precedence constrain failed(red arrow)->execute process task to move the file to error folder and it worked,The same execute process task( to move the file to error folder) doesnot work when I move this to on-error event handler. Also, for the same file the on-error event is getting triggered multiple times.
Hi, I am trying to Log my activities when OnError event handler fires
I have defined few tasks in OnError event handler section so when there is a failer on the main package my OnError task runs ( which it work fine) now I am trying to add Dts.LOG from inside OnError evend handler task, and it seems like SSIS doens't give that function. I can use dts.log outside on the main package but not inside OnError section! any ideas Thanks
HI, I'm implementing a custom error loggin using SSIS event handler, I succesfully catch the error and now I trying to retreave the value of this variables: System::ErrorCode and System::ErrorDescription.
The problem is that only the System::ErrorDescription retreave a value, the variable System::ErrorCode cames empty.
I'm trying to log the information spit out by SSIS but only the rowcount part, e.g. "component xyz wrote 1000 rows", im currently using a execute sql task but that will log all information, any simple efficient way i can filter out that rows written line and log that into a sql server table?
I am current using Event Handlers in an SSIS package, but when adding a new EventHandler type eg. OnPreExecute, to an executable within the package, I am unable to see this new EventHandler defined in the hierarchical listing on the left hand combo box (named Executables).
Can't seem to find a Refresh option anywhere. I've only been able to see these newly created EventHandlers in the hierarchical listing by closing and re-opening the package.
Is this a 'feature' or am I missing a Refresh option somewhere.
Previously I've posted about precedence error that didn't work and now it works, thanks to John Welch for his support. But when I tried to use event handler, it won't work. When error occured it didn't redirect to the OnError event handler. And then I built another package but with Data Flow task only, put a simple Script task inside OnError event handler and strange..it worked fine. There is no differences between my first Data Flow task and the last Data Flow task, totally the same process. I've captured both execution result. This is the first failure Data Flow task and the last success Data Flow Task (failure and success herein means that OnError work or not)
And then I did some testing in my last package contains a success Data Flow task. I put a new Data Flow task by copy from the previous one, execute it and OnError won't work again. Then I delete it, execute the previous one and OnError worked fine. I really don't understand why by adding a new Data Flow Task then OnError event handler won't work ?
I found the following in the logs this morning (SLQ2k Sp3, Win2k)
quote:ex_raise2 - No handler found for exception major 36 minor 24 severity 20 - Server terminating
Followed by
quote:Problem creating stack dump file due to internal exception2005-10-23 16:52:23.71 spid2304 SQL Server Assertion: File: <p:sqlumsincumslist.h>, line=317 Failed Assertion = 'el->m_next == 0'.
Then a SQL Server restart. Not a nice thing to see first thing in the morning I'm sure you'll all agree.
However I think this all started a second or so earlier: quote:Using 'dbghelp.dll' version '4.0.5' *Dump thread - spid = 65, PSS = 0x3643d228, EC = 0x3643d550 quote:SQL Server Assertion: File: <recbase.cpp>, line=1374 Failed Assertion = 'm_nVars > 0'. quote:Error: 3624, Severity: 20, State: 1.
We see several of these earlier in the day, quite similar, caused by varying items of SQL.
Finally in the same second as the ex_raise2 - on a different spid again to the others quote:Using 'dbghelp.dll' version '4.0.5' *Stack Dump being sent to m:sql_datalogSQLDump1702.txt
quote:SqlDumpExceptionHandler: Process 161 generated fatal exception c0000005 EXCEPTION_ACCESS_VIOLATION. SQL Server is terminating this process..
quote:Error: 0, Severity: 19, State: 0
Half a second later on spid0 (!) quote:Open of fault log m:sql_datalogexception.log failed. * 00A09029 Module(sqlservr+00609029) (CSubRuleRemoveSubqInFOJN::`vftable'+00000019)
If anyone has any ideas, please let me know - I've seen various posts pointing at corruption, but dbcc checkdb seems to be clear.
I'm trying to implement a custom conflict resolver by inheriting from
Microsoft.SqlServer.Replication.BusinessLogicSupport.BusinessLogicModule. The replication is between a SQL Server 2005 Express subscriber and a SQL Server 2005 publisher/distributer.
The problem is that the resolver class in the DLL will not load; although, it does appear to find the DLL. (If I rename the DLL I get a "file not found error"). The exact error message is:
Microsoft.SqlServer.Replication.ComErrorException
"Error loading custom class "MergeConflictHandler" from custom assembly "MergeConflictHandler",
Error : "Could not load type 'MergeConflictHandler' from assembly 'MergeConflictHandler, Version=1.0.2502.22393, Culture=neutral, PublicKeyToken=0403e50cc4dc27fa'."."}
I placed the DLL in the directory of the program that calls SynchronizationAgent.Synchronize and tried it with and without being registered in the GAC. There was no change. Interestingly, when I move the file out of that location, but register it in the GAC, the file is not found. Thinking it may be a security problem, I gave Everyone Read & Execute and Read privileges. I believe the class is actually instantiated by replmerge.exe, an apparantly unmanaged app, so I tried marking it ComVisible. No Luck. I registered the resolver with the following T-SQL code:
, @resolver_clsid = Null The resolver I've created is not much more than a shell at this point. It is pasted below, but I tried using the code found on MSDN character-for-character and had the same problem.
using System;
using System.Text;
using System.Data;
using System.Data.Common;
using Microsoft.SqlServer.Replication.BusinessLogicSupport;
I am using checkpoints in my SSIS packages which determines the step at which the package failed the last time and restart at that step. But i need some other task also to kickoff only during restart? There is not an OnRestart handler as OnError in SSIS. How can i do this ?
I have a task configured on the post execute event handler of a package expecting this task to be executed only once after the completion of all the other tasks in the package. But I found the task configured on the post execute event of the package getting executed as many times as the number of tasks in the package + 1 . Is there any workaround for this problem?
I am using a simple Data Flow within a Squence Controller and have added a Event Handler for OnPostExecute which contains a simple insert to a table, but this is not working. My package gets successfully execute but data is not getting inserted in the table used in Event Handler. I have also tried OnError, OnPackageFailer etc... but no results. Please guide.
I'm still fairly new to some of SSIS's enhanced funtionalities, one of them being Event handlers. I have tried creating a simple package, that simply contains a SQL Execute task that basically creates a simple table. Now i have then added a OnPostExecute even handler as a test which basically runs a script task that simply shows a msgbox. I have gone to execute the package, however after the completion of the SQL Execute task, nothing happens, the even handler doesnt get fired for some reason, i switch to the even handler page and the script task has not been executed. It is like this for every event handler i have tried, even the OnError event. Could this be a problem with my installation of SSIS or have i done something wrong?
Any help would be greatly appreciated as i have done SSIS training and to create an event handler was never this hard!
i'm following steps described at: http://msdn2.microsoft.com/en-us/library/ms365150.aspx
all goes fine until step 6. of paragraph "To debug a business logic handler on a Web server using Web synchronization, or for a SQL Server Mobile Subscriber".
in my case when attaching to w3wp.exe i can only debug t-sql or native code. when i forcibly check 'managed' i get: "Unable to attach to the process. Access is denied". error picture:
I have an SSIS package that populates a field with "DEFAULT" at the start of execution and i have an Execute SQL task in PostExecute EventHandler that executes a stored proc to update the said field to "SUCCESS". I already created a blank script task to connect to the Execute SQL task and placed in the precedence constraint editor: @[System :: PackageName] == @[System :: SourceName] so that it would execute only when the package completes execution.
My problem is that there are times (probably about 1 out of 50) that the "DEFAULT" value does not get updated. I dont know why this is happening because I expect that this should always be updated since the stored proc is in PostExecute (i suppose successful or even failed execution always does what is in the PostExecute event handler). I don't know why this is happening and it is so hard to replicate.
I am performing the Merge Replication of Timesheet table between SQL server 2005 and SQL CE on the Pocket PC. For one of the article, I would like to perform web synch for only those rows which have certain field set to true.
I am trying to use Business Logic Handler to implement this logic. I am using following code out of sample on MSDN web site. However I am not sure if this code gets executed for each row for a table during synch or does this get executed once for each table? The answer would help me write logic on applying synch changes only for few rows.
Thanks
public override ActionOnDataChange UpdateHandler(SourceIdentifier updateSource, DataSet updatedDataSet, ref DataSet customDataSet, ref int historyLogLevel, ref string historyLogMessage) { if (updateSource == SourceIdentifier.SourceIsPublisher) { //check the approved status of the timesheet if (updatedDataSet.Tables["tbl_timesheets"].Rows[0]["ts_approved"] == true) { // Set the reference parameter to write the line to the log file. historyLogMessage = updatedDataSet.Tables["tbl_timesheets"].Rows[0]["ts_id"].ToString(); // Set the history log level to the default verbose level. historyLogLevel = 1;
// Accept the updated data in the Subscriber's data set and apply it to the Publisher. return ActionOnDataChange.AcceptData;
We want to develop an error handling process that will log the errors into multiple destinations (eventlog, text files or sql database) depending upon a variable set in the package. Also we want that this errror handling process should be initiated by all the tasks in the package on error.
Is this possible? Can the same event handler be called from multiple tasks in the package? Also in the event handler can we call another package which actually does the error handling. This way we have only one place to change our error handling process in case required.
Not receiving any errors. The update runs perfectly on all fields, except for the added parameter during the sub. I need to change the hidden field's value after parsing out several fields in the form and generating a logfile entry of sorts. This needs to happen after all the form fields are updated, but before the update is executed. aspx: (relevant parts only...)<asp:SqlDataSource ID="TicketDetails" runat="server" ConnectionString="<%$ ConnectionStrings:myConnectionString %>"UpdateCommand="UPDATE Tickets SET TicketSuspense = @TicketSuspense, TicketPriority = @TicketPriority, TicketLastUpdated = CURRENT_TIMESTAMP, TicketStatus = 'Assigned', TicketTechnicianNotes = @TicketTechnicianNotes WHERE (TicketID = @TicketID)"><UpdateParameters><asp:Parameter Name="TicketPriority" Type="String" /><asp:Parameter Name="TicketSuspense" Type="DateTime" /><asp:Parameter Name="TicketID" Type="Int32" /></UpdateParameters></asp:SqlDataSource> codebehind: (once again, the relevant parts only)Protected Sub TicketDetails_Updating(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.SqlDataSourceCommandEventArgs) Handles TicketDetails.UpdatingTicketTechnicianNotesHiddenField.Value = "some text..." & TicketTechnicianNotesHiddenField.ValueTicketDetails.UpdateParameters.Add(New Parameter("TicketTechnicianNotes", TypeCode.String, TicketTechnicianNotesHiddenField.Value))End Sub Thanks, - Brad
Is it possible to create an event handler in a VB.net application to run whenever a Stored Procedure is run.
My application has a scheduled task which is created and scheduled by users of the application, whenever this scheduled task is run I would like it to contact the application to kick off a sequence of tasks. I would appreciate if anybody could point me in the right direction.
When running a business logic handler at the subscriber, you can override SubscriberInserts, SubscriberUpdates and SubscriberDeletes. Are these methods called when data is changed coming from the server to client, from the client to the server, or in both directions?
One of my plan is to develop a custom task compoent to log the errors into the destination provided as paramter to the component. Now how can I restrict the use of this component in the event handler tab only. can something like this be done?
Also extending this a little further, is the below thing possible?
The custom component should expose custom properties which should allow the user to add the destinations for logging the errors. It will be a predefined list (window event log, text file, sql table etc) and the user will be allowed to check what all he/she wants. Then if the user has selected sql table then ask for the oledb connection and the table name, if text file is selected the ask for the path of the file.
Apology if I am asking too many questions around the same thing (error handling). There may be a better way to acheive what I am trying to acheive but then I have no idea about it. Your guidance will be of great help.
Again, Thanks a lot for helping this extra curious guy who wants to try and develope generalized compoenents if possible.
I have 2 related tables in SQL 2005. I am using Business Logic Handler on one of those tables during Merge Replication to reject data for few rows during web synchronization. Once a row is rejected, I would like to run the Business Logic Handler for the related table to reject changes for the row with same foreign key as the rejected row in first table.
Not sure if I need to create separate Business Logic Handlers for each table or can it be achieved in a single Handler.
Also is it possible to get a list of rejected rows back from the handler?
I'm trying to implement a custom log table. To keep the discussion simple, let's say I only have 1 column in this table and all I want to write in it are
"Start" when the package starts "Error" when it encounters an error "Finish" when the package finishes. Even if there was an error, I still want to enter "Finish'.
My Control Flow has 3 task objects, 2 Execute SQL Tasks, and 1 Data Flow Task in between them.
The first Execute SQL Task does an insert statement for the Start and the second Execute SQL Task does an insert for the Finish.
To capture any package errors, I also have an Execute SQL Task (to insert "Error") in the Event Handler for OnError. I see that when I cause an error in my package it can raise multiple OnError events, which will envoke my Execute SQL Task multiple times. (This is good because it will allow me to write a line per error event with the error description.)
The problem I have is, how do I write the "Finish" log when I have an error? If I put the insert for the finish in the same Execute SQL Task with the errors, then it will write a "Finish" for every error. But I can't put it anywhere else because if I put it anywhere else, the package never makes it there because it stops at the OnError Event Handler.
Or is there a way for me to tell the package to do the 2nd Execute SQL Task all the time?
Lastly, is there a better way to do this kind of custom logging?