SSIS dtexec Error - The 'OraOLEDB.Oracle.1' provider is not registered.

  • a) You said that you can execute (not deploy) the package from SSDT, correct? I said that I can execute the package as well as deploy it from my local workstation SSDT.

    b) If yes, try executing from SSDT after changing the Run64BitRuntime setting.  Run64BitRuntime only applies within SSDT. It does not affect deployed packages.

    From my local SSDT, my package always runs successfully with no errors, irrespective of Run64BitRuntime - FALSE or TRUE. Does not make difference. 

    Oracle connectivity problem of this package comes into picture when I run same package using DTEXec command from my workstation (main reason for this thread) .

    This package is discussion, when executed from my local workstation SSDT as well SSIS DB catalog server, connects to oracle successfully without any issues. but fails to connect oracle only when executed using DTEXEC command from my workstation.

  • what you are failing to understand is that your command line is executing the package ON THE SERVER and as such all resources required NEED to be on the server  - the command line you use is only kicking off the execution.

    so install oracle client on the server as I stated and it should work

    if you wish to execute the package locally on the command line you can do it also - different command line, and you point it to the .ispac file instead of the server

  • Hi Fredrico

    Thanks for your time to respond to my post. Oracle client is already installed on Server.

    Question, When  i run DTEXEC command from my workstation, which oracle client is used by dtsx package while executing ? Oracle client installed on SSID DB catalog server (where packages are executed) OR client installed on my local workstation ?

    As per my knowledge, in case of SQL Server Agent job configured on SSISDB catalog server, it simple uses all server resources and works perfectly. but this DTEXEC is confusing me a lot...

  • it depends.

    dtexec has a varied set of options.

    1. execute package - package model - executes locally - option /FILE is used
    2. execute package - project model - executes locally if option /PROJECT is used
    3. execute package - project model - executes on server if option /ISSERVER is used

    options 1 and 2 use local resources - option 3 uses server resources.

    there are 2 other options /SQL and /DTS - do not even look at them and do not use them in any circumstance as they are way obsolete

    when using option 3 DTEXEC is just executing a set of stored procs on the SSISDB catalog database - you could easily execute them yourself (as many people do) and accomplish the same results.

    if using SQL Server Agent (and assuming SSIS execution - not a command line ) it will by default use the 64 bit version of it unless the"use 32bit runtime" option is set.

    if using dtexec to execute locally you either use a 32 bit of dtexec or a 64bit of dtexec with option "/86"

    kicking off a Project based package using TSQL the default is to use the 64bit engine - again can be overridden by setting some parameters when creating the execution instance.

    in your workstation the only way to get the 64bit of DTEXEC is to have a SQL Server installation done - there is no

    some useful info at https://www.sqlshack.com/an-overview-of-dtexec-utility-in-ssis/

  • If the Package runs on the SSIS server successfully and not on you local machine most likely the problem is your Oracle Client isn't configured. you can copy the TNSnames file from the ssis server but there is still a good bit of configuration needed in the oracle client to make a connection. take a look below

    https://social.msdn.microsoft.com/Forums/sqlserver/en-US/6b6efab4-c26f-45cd-aca6-4ba3d53f13a4/the-oraoledboracle1-provider-is-not-registered-on-the-local-machine

  • Thanks Wayne for this reply. I will check this and let you know...

  • wayne Freeman-369096 wrote:

    If the Package runs on the SSIS server successfully and not on you local machine most likely the problem is your Oracle Client isn't configured. you can copy the TNSnames file from the ssis server but there is still a good bit of configuration needed in the oracle client to make a connection. take a look below

    https://social.msdn.microsoft.com/Forums/sqlserver/en-US/6b6efab4-c26f-45cd-aca6-4ba3d53f13a4/the-oraoledboracle1-provider-is-not-registered-on-the-local-machine

    Nice idea, but as it successfully runs locally in SSDT, I am not sure that this will solve it.

    The absence of evidence is not evidence of absence
    - Martin Rees
    The absence of consumable DDL, sample data and desired results is, however, evidence of the absence of my response
    - Phil Parkin

  • That error almost always relates to mis-configured Oracle client connection in the package. either the Oracle client isn't setup correctly or the connection string  the package calls is different between the 2 machines

  • Hello Everyone

    Thanks for showing your interest to help me for this problem. Even though I could not resolve this problem, I got workaround for this issue.

    Instead of calling DTEXec command, I am calling database stored procedure "ssisdb.catalog.start_execution"  from my powershell code  script.

    With this script, my SSIS package is running fine on SQL SSIS DB server and i am able to establish oracle connectivity.

    Only problem with this approach is i must run this code using Windows Authentication. But in real world scenario, it will be my Mainframe ESP agent (machine_name$ id) that will be calling this script.

    Can a non-Windows ID (ID which is not a Active Directory ID but,  a generic ID) execute "ssisdb.[catalog].[create_execution]" ? If so what steps are required ?

    Please advise. Below is the code I used.

    $sqlCmd = New-Object System.Data.SqlClient.SqlCommand ("ssisdb.[catalog].[create_execution]", $sqlConn)

    $sqlCmd.CommandType = [System.Data.CommandType]::StoredProcedure

    $sqlCmd.Parameters.AddWithValue("folder_name", $TargetFolderName) | Out-Null

    $sqlCmd.Parameters.AddWithValue("project_name", $ProjectName) | Out-Null

    $sqlCmd.Parameters.AddWithValue("package_name", $PackageName) | Out-Null

    $sqlCmd.Parameters.Add("use32bitruntime", [System.Data.SqlDbType]::Bit).Value = $RunIn32Bit.IsPresent

    $sqlCmd.Parameters.Add("execution_id", [System.Data.SqlDbType]::BigInt).Direction = [System.Data.ParameterDirection]::Output

    $sqlCmd.ExecuteNonQuery() | Out-Null

    [int64]$execID = $sqlCmd.Parameters["execution_id"].Value

    $sqlCmd.Dispose()

    • This reply was modified 4 years, 3 months ago by  sarang1183.
    • This reply was modified 4 years, 3 months ago by  sarang1183.

Viewing 9 posts - 16 through 23 (of 23 total)

You must be logged in to reply to this topic. Login to reply