I have created a SSIS package. I need to apply Transaction to this package for rollbacking in case the package fails. What I found is a property "TransactionOption" which should be given "Required". Am I right ? And I have set TransactionOption for the package as "Required" But the package fails when I executed. What all steps should I do for setting TransactionOption "required" ?
In detail, My package contains 4 control tasks. One of them is a Data Flow Task, containing Lookup Tasks.
I got the following error
"[Execute SQL Task] Error: Failed to acquire connection "SQLConnectionMgr1". Connection may not be configured correctly or you may not have the right permissions on this connection."
When I set the TransactionOption to "Supported", the packages runs successfully.
Create 2 "OLE DB Connection managers" both connecting to the same
database. On the properties of one of the "OLE DB Connection
managers" set the 'RetainSameConnection' property to true.
Then create 3 "Execute SQL Task" and connect them with the "OLE DB
Connection managers" were the 'RetainSameConnection' property is set
to true.
Add the following statements on there respective Execute SQL task
BEGIN TRANSACTION
COMMIT TRANSACTION
ROLLBACK TRANSACTION
It sounds like you might not have appropriate permission to use the Distributed Transaction Coordinator (MSDTC) service which is required to utilize transactions in SSIS.
See this article on Transactions for more information: http://www.mssqltips.com/tip.asp?tip=1585
Also you might need to look more into how the MSDTC works in relation to SSIS to get your issue resolved.
To enable Trancaction is ssis you need to check below prerequiste
1, Distributed Transaction Coordinator (MSDTC) service should be started in the machine, if its local machine.
2, if you are using has a client (server machine-->user machine) then MSDTC enabled in both machine with security option of NETWORK DTC Access (Allow Remote Clients, Allow Inbound, Allow Outbound) under Component Services --> Computer Properties --> MSDTC tab --> Security Option
3, Sometimes Firewall from any one machine or both can be blocked of network DTC so you need to disable/uninstall.
Errors:
Cannot Acquire Connection Manager
Solution:
check the step 1 if you are user of local machine, if you are client user check step 2 and 3
Then asusual
change the Trancaction Option as required in the properties of package level or container level as you required and check.
Related
Do SSIS ConnectionManagers attempt to make their connections on package start, or when the connection is first used?
If it's the latter, I can use failure transitions to handle connection failures within the package, but if it's the former then I have to do it externally.
I can assume that they'd design it with the latter, but I can't find it in the documentation anywhere easily searchable/accessible.
It depends and can be controlled.
With the default setting of DelayValidation=false property, SSIS engine at package start tries to connect (validate) all Connection Managers and tasks with metadata and which use Connection Managers like Data Flows etc.
If you set DelayValidation=true on the Connection Manager itself and all relevant tasks, then the first connection on the Connection Manager for the validation would be executed right before the task is executed. This is quite helpful if you use expressions on Connection Manager properties, like dynamic connection string, and before package execution it cannot be evaluated.
In SSIS,it always try to validate connection manager at the package start time.
Once the SSIS package start, it first validate for all parameter, variable and connection manager etc.
I have an SSIS package that has run for months daily with no problem. Suddenly it is failing every day with the error above. No changes to the package or the stored procs it runs have been pushed, to my knowledge, no changes to the database environment have been made including permissions for the service account that owns the job.
This is a SQL Server 2008 package that connects to a SQL server 2008 R2 database. The configuration is through the ssisconfig table and it defines which server to use through an environment variable.
The component in question is using a stored proc. In the proc, all fields are explicitly cast to the same data type of the table the data is being staged too. The proc runs fine by itself. It is a relatively complex proc that has two table variables and a CTE.
I can't run it from my local on prod and dev is not failing. If I open the prod SSIS package while I am set to the environment variable that the job owner uses, I do not get a validation error on this component. ValidateExternalMetadata is set to true for this component. For the entire package though, Delay Validation is set to True. I do get a validation error that would be expected on a task using a variable that is set dynamically in an earlier task. This error, however, is many, many steps later than the step it is currently failing on.
Usually in the past when we have had this sort of unspecific error, I have been easily able to see the problem with the data that caused the sudden failure. But none of the data in the proc result set is even close to being incorrect for the datatypes defined for staging table for that field. None of the required fields are missing data either.
I am out of ideas for what else to look at. If the environment didn't change, the actual code didn't change and the data looks correct, what is left to try?
As I have commented for details error, you can try below link from Microsoft:
Debug SSIS Package while calling from Agent
Some info from link:
Reasons that the package may have failed are as follows:
The user account that is used to run the package under SQL Server Agent differs from the original package author.
The user account does not have the required permissions to make connections or to access resources outside the SSIS package.
The package may not run in the following scenarios:
The current user cannot decrypt secrets from the package. This scenario can occur if the current account or the execution account
differs from the original package author, and the package's
ProtectionLevel property setting does not let the current user
decrypt secrets in the package.
A SQL Server connection that uses integrated security fails because the current user does not have the required permissions.
File access fails because the current user does not have the required permissions to write to the file share that the connection
manager accesses. For example, this scenario can occur with text
log providers that do not use a login and a password. This scenario
can also occur with any task that depends on the file connection
manager, such as a SSIS file system task.
A registry-based SSIS package configuration uses the HKEY_CURRENT_USER registry keys. The HKEY_CURRENT_USER registry keys
are user-specific.
A task or a connection manager requires that the current user account has correct permissions.
Method 1: Use a SQL Server Agent proxy account Create a SQL Server Agent proxy account. This proxy account must use a credential that
lets SQL Server Agent run the job as the account that created the
package or as an account that has the required permissions.
This method works to decrypt secrets and satisfies the key
requirements by user. However, this method may have limited success
because the SSIS package user keys involve the current user and the
current computer. Therefore, if you move the package to another
computer, this method may still fail, even if the job step uses the
correct proxy account.
Method 2: Set the SSIS Package ProtectionLevel property to ServerStorage Change the SSIS Package ProtectionLevel property to
ServerStorage. This setting stores the package in a SQL Server
database and allows for access control through SQL Server database
roles.
Method 3: Set the SSIS Package ProtectionLevel property to EncryptSensitiveWithPassword Change the SSIS Package ProtectionLevel
property to EncryptSensitiveWithPassword. This setting uses a password
for encryption. You can then modify the SQL Server Agent job step
command line to include this password.
Method 4: Use SSIS Package configuration files Use SSIS Package configuration files to store sensitive information, and then store
these configuration files in a secured folder. You can then change the
ProtectionLevel property to DontSaveSensitive so that the package is
not encrypted and does not try to save secrets to the package. When
you run the SSIS package, the required information is loaded from the
configuration file. Make sure that the configuration files are
adequately protected if they contain sensitive information.
Method 5: Create a package template For a long-term resolution, create a package template that uses a protection level that differs
from the default setting. This problem will not occur in future
packages.
Above link will help you through logging and other possible scenarios of failure of your package from SQL Agent. I suspect that your user of Agent has been corrupted. But that is an assumption. You first enable the logging of SSIS by following link :
Enable SSIS Package Logging
Some info from link
To set the logging level for a package by using the Execute Package
dialog box
In SQL Server Management Studio, navigate to the package in Object Explorer.
Right-click the package and select Execute.
Select the Advanced tab in the Execute Package dialog box.
Under Logging level, select the logging level. See the table below for a description of available values.
Complete any other package configurations, then click OK to run the package.
Hope this will help you in the first place. If not please let me know.
There is a Master package as below to call and run all child packages in my SSIS solution by Project Reference. Also, all connection managers are set at project level since all packages are sharing the same ones.
When manually running, everything works well from master to last child. However, when the master package is executed from a SQL Agent, it shows error as follows:
Code: 0xC001000E Source: Master
Description: The connection "{5A827D76-916C-4F22-ADE9-266ABBEB1E37}" is not found.
This error is thrown by Connections collection when the specific connection element is not found.
Then I checked the connection ID and found it is an OLE DB connection manager in the first child package as follows:
I'm not sure if I should replace project connections with package level to fix this issue. Hopefully someone could help me out. Thanks in advance!
Some more info that might be helpful:
All connection managers are connect to SQL-Server 2012 and my visual studio version is 2010.
An SSIS proxy is created with the same windows account of packages for SQL Agent to execute. It also has full control to all DBs used in solution.
SQL Agent is set as below:
I have an SSIS package that takes data from a MySQL database and puts it in to a SQL Server table. The connection to MySQL is ADO.net. The package runs fine in BIDS.
I would like to deploy the package to be run as a Job on SQL Server 2008. The MySQL connection requires sensitive data to be either stored within the package or held in some external configuration source. If it is stored within the package it will either by encrypted with a key specific to my windows user profile or must be protected via a password.
I have tried three methods of setting up a SQL Server Agent job to execute this pacakge, and all fail:
Using a Password
I set the ProtectionLevel of the package to EncryptSensitiveWithPassword and supply a password for the package. I then save a copy of the package to the msdb. I can then connect to SSIS and run the package, at which point I am prompted for a password.
When I try to schedule this as a job in SQL Server I am prompted to enter the password by clicking on the Configurations tab of the Job Step Properties and I can see that the /DECRYPT switch has been added to the Command Line tab. The Run As property is set to the SQL Server Agent Service Account, which is mapped to a database login that has sysadmin server role. When I attempt to start this job I get the following error:
Executed as user: DOMAIN\UserROLE. Microsoft (R) SQL Server Execute Package Utility Version 10.0.5500.0 for 64-bit Copyright (C) Microsoft Corp 1984-2005. All rights reserved. Started: 12:31:30 Error: 2012-07-03 12:31:31.20 Code: 0xC00291EC Source: Get Data Execute SQL Task Description: Failed to acquire connection "DATA_SOURCE". Connection may not be configured correctly or you may not have the right permissions on this connection. End Error DTExec: The package execution returned DTSER_FAILURE
It seems that using this method the package password itself is not stored anywhere for the job to access it.
Using an XML configuration file
I then created a copy of the package and set the ProtectionLevel to DontSaveSensitive and I set up a package configuration to store the MySQL credentials in an XML file. I then save this to the msdb and then when I run the package from
Integration Services I can provide a path to the config file, and all is well. However, once again when I set up a job for the package I point to a configuration file on the server but the job fails with the same error. I am wondering whether this is because the SQL Server Agent does not have an associated windows account that would allow it to read from the XML file stored in the file system.
Using a SQL Server table configuration
This time I created a copy of the package and set the ProtectionLevel to ServerStorage. I then created a [SSIS Configurations] table in the target SQL Server database. I modified the entries in this table to contain the password for the MySQL data source. Again, the package runs successfully from Integration Services, but fails with the same error as previously when run from a job. I have checked that the SQL Server Agent is able to read from the [SSIS Configurations] table ok - I set up a standalone job to test this.
Does anyone have any suggestions about what else I should do here?
I am thinking of giving up on SQL Server Agent Jobs for this and going back to having the package scheduled simply by the windows scheduler but thought before throwing in the towel I would try here first.
I am using the method of encrypting the password by setting EncryptSensitiveWithPassword as you discribed above and don't see anything you do wrong. Remember to use option keep protection level of the original package when importing the package with integration services, but it looks like you're doing that, too.
Try setting the role SQLAgentOperatorRole to your SQL Server Agent Service Account, you didn't mention that and i am not sure if you did. This could possibly solve your permission problems. (liked to answer by commenting this, but i lack of permissions here, too :)
i have set the TransactionOption as Required in my SSIS package. But the package fails. The error shown is some MSDTC error. I am not able to get it. is there any settings to be changed or done in the machine or server we are deploying/running/working the package ? So wat all steps should we have to follow for setting Transaction in a package.
"The built-in transaction support in SSIS makes use of the Distributed
Transaction Coordinator (MSDTC) service which must be running. MSDTC
also allows you to perform distributed transactions; e.g. updating a
SQL Server database and an Oracle database in the same transaction."
How To Use Transactions in SQL Server Integration Services SSIS
I hope this helps