SSMA无法找到指定的提供者 [英] SSMA unable to find specified provider

查看:186
本文介绍了SSMA无法找到指定的提供者的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我已经安装了完整的oracle客户端12.2.0,并且我正在尝试使用SSMA将一些数据库从oracle迁移到sql服务器,但是当我尝试连接到oracle时,出现以下错误:

i've installed the full oracle client 12.2.0 and i'm trying to migrate some db from oracle to sql server with SSMA, but when i try to connect to oracle i get the folowing error:

Unable to find specified provider.
Compatible Oracle Data Access Connectivity libraries were not found on the machine.

我已经设置了环境变量HOME_ORACLE,并且在安装过程中默认设置了PATH,所以我排除了问题所在. 我还搜索了有关ODAC的信息,所有提示都使我想起了oracle istant提供程序,但是由于我已经用管理员安装(完整)安装了客户端,所以我认为该安装也将涵盖它们. 有什么建议吗?

I've already set the environment's variables HOME_ORACLE and the PATH was set by default during the installation, so i exclude that the problem is there. I've also searched about the ODAC, and all hints remind me on oracle istant provider, but since i've installed the client with an administrator installation (full) i thought that the installation would covered them too. Any suggestion?

我尝试使用标准模式和tnsnames模式登录,但结果相同

i tried to login with a standard mode and also with the tnsnames mode, but the results is the same

推荐答案

Oracle Universal Installer 12.2中似乎有一个错误,它没有注册ODP.NET组件.您可以在下面运行脚本(根据您的系统修改文件夹名称)以正确配置它们.

Looks like there is a bug in the Oracle Universal Installer 12.2, it does not register the ODP.NET components. You can run script below (modify folder names according to your system) in order to configure them properly.

set Oracle_x64=c:\oracle\product\12.1\Client_x64\odp.net
set OraProvCfg_x64=%Oracle_x64%\bin\4\OraProvCfg.exe

set Oracle_x86=c:\oracle\product\12.1\Client_x86\odp.net
set OraProvCfg_x86=%Oracle_x86%\bin\4\OraProvCfg.exe

set TNS_ADMIN=C:\oracle\network\admin



IF EXIST "%Oracle_x64%\managed\common\Oracle.ManagedDataAccess.dll" "%OraProvCfg_x64%" /action:gac /providerpath:%Oracle_x64%\managed\common\Oracle.ManagedDataAccess.dll
IF EXIST "%Oracle_x64%\managed\PublisherPolicy\4\Policy.4.121.Oracle.ManagedDataAccess.dll" "%OraProvCfg_x64%" /action:gac /providerpath:%Oracle_x64%\managed\PublisherPolicy\4\Policy.4.121.Oracle.ManagedDataAccess.dll
IF EXIST "%Oracle_x64%\managed\PublisherPolicy\4\Policy.4.122.Oracle.ManagedDataAccess.dll" "%OraProvCfg_x64%" /action:gac /providerpath:%Oracle_x64%\managed\PublisherPolicy\4\Policy.4.122.Oracle.ManagedDataAccess.dll

IF EXIST "%Oracle_x64%\managed\common\Oracle.ManagedDataAccess.dll" "%OraProvCfg_x64%" /action:config /product:odpm /frameworkversion:v4.0.30319 /providerpath:%Oracle_x64%\managed\common\Oracle.ManagedDataAccess.dll /set:settings\TNS_ADMIN:%TNS_ADMIN%
IF EXIST "%Oracle_x86%\managed\common\Oracle.ManagedDataAccess.dll" "%OraProvCfg_x86%" /action:config /product:odpm /frameworkversion:v4.0.30319 /providerpath:%Oracle_x86%\managed\common\Oracle.ManagedDataAccess.dll /set:settings\TNS_ADMIN:%TNS_ADMIN%

rem Oracle.ManagedDataAccessDTC was used in earlier versions, not used anymore
"%OraProvCfg_x64%" /action:ungac /providerpath:Oracle.ManagedDataAccessDTC

IF EXIST "%Oracle_x64%\bin\2.x\Oracle.DataAccess.dll" "%OraProvCfg_x64%" /action:gac /providerpath:%Oracle_x64%\bin\2.x\Oracle.DataAccess.dll
IF EXIST "%Oracle_x64%\PublisherPolicy\2.x\Policy.2.102.Oracle.DataAccess.dll" "%OraProvCfg_x64%" /action:gac /providerpath:%Oracle_x64%\PublisherPolicy\2.x\Policy.2.102.Oracle.DataAccess.dll
IF EXIST "%Oracle_x64%\PublisherPolicy\2.x\Policy.2.111.Oracle.DataAccess.dll" "%OraProvCfg_x64%" /action:gac /providerpath:%Oracle_x64%\PublisherPolicy\2.x\Policy.2.111.Oracle.DataAccess.dll
IF EXIST "%Oracle_x64%\PublisherPolicy\2.x\Policy.2.112.Oracle.DataAccess.dll" "%OraProvCfg_x64%" /action:gac /providerpath:%Oracle_x64%\PublisherPolicy\2.x\Policy.2.112.Oracle.DataAccess.dll
IF EXIST "%Oracle_x64%\PublisherPolicy\2.x\Policy.2.121.Oracle.DataAccess.dll" "%OraProvCfg_x64%" /action:gac /providerpath:%Oracle_x64%\PublisherPolicy\2.x\Policy.2.121.Oracle.DataAccess.dll
IF EXIST "%Oracle_x64%\PublisherPolicy\2.x\Policy.2.122.Oracle.DataAccess.dll" "%OraProvCfg_x64%" /action:gac /providerpath:%Oracle_x64%\PublisherPolicy\2.x\Policy.2.122.Oracle.DataAccess.dll

IF EXIST "%Oracle_x64%\bin\4\Oracle.DataAccess.dll" "%OraProvCfg_x64%" /action:gac /providerpath:%Oracle_x64%\bin\4\Oracle.DataAccess.dll
IF EXIST "%Oracle_x64%\PublisherPolicy\4\Policy.4.112.Oracle.DataAccess.dll" "%OraProvCfg_x64%" /action:gac /providerpath:%Oracle_x64%\PublisherPolicy\4\Policy.4.112.Oracle.DataAccess.dll
IF EXIST "%Oracle_x64%\PublisherPolicy\4\Policy.4.121.Oracle.DataAccess.dll" "%OraProvCfg_x64%" /action:gac /providerpath:%Oracle_x64%\PublisherPolicy\4\Policy.4.121.Oracle.DataAccess.dll
IF EXIST "%Oracle_x64%\PublisherPolicy\4\Policy.4.122.Oracle.DataAccess.dll" "%OraProvCfg_x64%" /action:gac /providerpath:%Oracle_x64%\PublisherPolicy\4\Policy.4.122.Oracle.DataAccess.dll

IF EXIST "%Oracle_x86%\bin\2.x\Oracle.DataAccess.dll" "%OraProvCfg_x86%" /action:gac /providerpath:%Oracle_x86%\bin\2.x\Oracle.DataAccess.dll
IF EXIST "%Oracle_x86%\PublisherPolicy\2.x\Policy.2.102.Oracle.DataAccess.dll" "%OraProvCfg_x86%" /action:gac /providerpath:%Oracle_x86%\PublisherPolicy\2.x\Policy.2.102.Oracle.DataAccess.dll
IF EXIST "%Oracle_x86%\PublisherPolicy\2.x\Policy.2.111.Oracle.DataAccess.dll" "%OraProvCfg_x86%" /action:gac /providerpath:%Oracle_x86%\PublisherPolicy\2.x\Policy.2.111.Oracle.DataAccess.dll
IF EXIST "%Oracle_x86%\PublisherPolicy\2.x\Policy.2.112.Oracle.DataAccess.dll" "%OraProvCfg_x86%" /action:gac /providerpath:%Oracle_x86%\PublisherPolicy\2.x\Policy.2.112.Oracle.DataAccess.dll
IF EXIST "%Oracle_x86%\PublisherPolicy\2.x\Policy.2.121.Oracle.DataAccess.dll" "%OraProvCfg_x86%" /action:gac /providerpath:%Oracle_x86%\PublisherPolicy\2.x\Policy.2.121.Oracle.DataAccess.dll
IF EXIST "%Oracle_x86%\PublisherPolicy\2.x\Policy.2.122.Oracle.DataAccess.dll" "%OraProvCfg_x86%" /action:gac /providerpath:%Oracle_x86%\PublisherPolicy\2.x\Policy.2.122.Oracle.DataAccess.dll

IF EXIST "%Oracle_x86%\bin\4\Oracle.DataAccess.dll" "%OraProvCfg_x86%" /action:gac /providerpath:%Oracle_x86%\bin\4\Oracle.DataAccess.dll
IF EXIST "%Oracle_x86%\PublisherPolicy\4\Policy.4.112.Oracle.DataAccess.dll" "%OraProvCfg_x86%" /action:gac /providerpath:%Oracle_x86%\PublisherPolicy\4\Policy.4.112.Oracle.DataAccess.dll
IF EXIST "%Oracle_x86%\PublisherPolicy\4\Policy.4.121.Oracle.DataAccess.dll" "%OraProvCfg_x86%" /action:gac /providerpath:%Oracle_x86%\PublisherPolicy\4\Policy.4.121.Oracle.DataAccess.dll
IF EXIST "%Oracle_x86%\PublisherPolicy\4\Policy.4.122.Oracle.DataAccess.dll" "%OraProvCfg_x86%" /action:gac /providerpath:%Oracle_x86%\PublisherPolicy\4\Policy.4.122.Oracle.DataAccess.dll

更新

Oracle Doc ID 2272241.1 出于意图:

适用于:
适用于.NET的Oracle数据提供程序-版本12.1.0.2及更高版本
Microsoft Windows x64(64位)
Microsoft Windows(32位)

Applies to:
Oracle Data Provider for .NET - Version 12.1.0.2 and later
Microsoft Windows x64 (64-bit)
Microsoft Windows (32-bit)

症状
在安装12.2 Oracle Data Provider for .Net时,该提供程序 不会自动在全局程序集缓存(GAC)中注册.

Symptoms
When installing the 12.2 Oracle Data Provider for .Net, the provider is not automatically registered in the Global Assembly Cache (GAC).

更改
移至适用于.Net的Oracle Provider的12.2版本

Changes
Moved to the 12.2 version of the Oracle Provider for .Net

原因
这是预期的行为.由于有许多环境正在使用 从12.2开始,ODP.Net的多个版本并排 安装程序不会在以下位置自动注册ODP.Net提供程序: 默认情况下为GAC.

Cause
This is the expected behavior. Since so many environments are using multiple versions of ODP.Net side by side, starting with 12.2, the installer does not automatically register the ODP.Net provider in the GAC by default.

解决方案
如Doc ID中所述,将dll手动注册到GAC中 1169890.1:HOWTO:使用OraProvCfg.exe从全局程序集缓存中添加/删除Oracle程序集的示例使用

Solution
Manually register the dll into the GAC as outlined in Doc ID 1169890.1: HOWTO: Example use of OraProvCfg.exe to add/remove Oracle assemblies from the Global Assembly Cache

但是,我认为这是一个错误.并行运行ODP.Net的多个版本非常困难,因为Oracle.DataAccess.dll的版本必须与完全的Oracle Client版本匹配.安装多个Oracle客户端(即,对于64位和32位,每个客户端都安装多个)通常会导致很多问题,而且很少见.

However, I would consider this as a bug. It is quite difficult to run multiple versions of ODP.Net side by side, because the version of Oracle.DataAccess.dll has to match exactly the version of the Oracle Client. Installing more than one Oracle Client (i.e. more than one each for 64-bit and 32-bit) typically causes a lot of problems and is rather uncommon.

这篇关于SSMA无法找到指定的提供者的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆