如何在SSIS中为OracleClient连接设置超时?

frebpwbc  于 2023-06-29  发布在  Oracle
关注(0)|答案(1)|浏览(124)

我有一个SSIS包,可以将数据从Oracle导入SQL。此外,还有一个SQL作业每5分钟执行一次此包。问题是,当SSIS无法建立到Oracle的连接时,没有超时错误会导致整个包失败。因此,作业保持在执行状态,SSIS甚至在几天后仍在尝试建立连接。关键是Oracle不会让SSIS在一次连接尝试失败后连接,无论连接问题是否解决。
如何防止此问题?当连接不成功时,是否有任何方法使作业失败,以便在数据丢失5分钟后,作业将再次执行,并建立新的连接?
提醒大家一下,我在SSIS中设置OracleClient连接类型。SQLClient连接类型已经有了一个用于设置连接超时的选项。

cidc1ykv

cidc1ykv1#

尝试在脚本任务中 Package Oracle连接:不要在数据流中直接使用Oracle连接管理器,而是使用脚本任务以编程方式建立连接。这样,您就可以更好地控制连接过程。
在脚本任务中,可以使用Oracle Data Provider for .NET(ODP.NET)中的OracleConnection类设置连接超时机制。OracleConnection类有一个ConnectionTimeout属性,可用于设置建立连接的超时值。

using System;
using System.Data;
using Microsoft.SqlServer.Dts.Runtime;
using System.Windows.Forms;
using Oracle.ManagedDataAccess.Client;

namespace ST_XXXXXXXXXXXXXXXXXXXXXXXX
{
    public partial class ScriptMain : Microsoft.SqlServer.Dts.Tasks.ScriptTask.VSTARTScriptObjectModelBase
    {
        public void Main()
        {
            // Set the connection string for Oracle
            string connectionString = "your_oracle_connection_string";

            // Create an OracleConnection object
            using (OracleConnection connection = new OracleConnection(connectionString))
            {
                // Set the connection timeout value (in seconds)
                connection.ConnectionTimeout = 300; 

                try
                {
                    // Open the connection
                    connection.Open();
                    
                    // Connection successful, proceed with data import logic here
                    
                    // ...
                }
                catch (Exception ex)
                {
                    // Connection failed, handle the exception as per your requirements
                    
                    // ...
                }
            }

            Dts.TaskResult = (int)ScriptResults.Success;
        }
    }
}

在执行SSIS包的SQLServer作业中,可以将其配置为适当地处理故障。将作业设置为在一定次数的失败后重试包执行,或在特定次数的重试后使作业失败。如果SSIS包无法连接到Oracle,则将在定义的时间段后重试作业。

相关问题