我试图在Oracle服务器上从MS SQL Server运行openrowset。
当我执行以下命令时:
select * from
OPENROWSET('OraOLEDB.Oracle','srv';'user';'pass',
'select * from table')
发生以下错误
Msg 7302, Level 16, State 1, Line 1
Cannot create an instance of OLE DB provider "OraOLEDB.Oracle" for linked server "(null)".
任何人都可以告诉我如何使用qwwxswpoi openrowset?
我使用的是64位版本的MS SQL Server和Oracle OLEDB驱动程序。
我在运行带有MS SQL Server 2008 x64的Windows 7 x64和Windows Server 2008 x64的两台计算机上尝试过此操作。两者都显示相同的错误消息。
在SQL Server企业管理器中,打开OraOLEDB.Oracle
,右键单击\Server Objects\Linked Servers\Providers
提供程序,选择属性并检查OraOLEDB.Oracle
选项。重新创建链接的服务器并再次测试。
如果您无权访问SQL Server Management Studio,还可以执行以下查询:
"Allow inprocess"
遇到这个问题,链接服务器适用于服务器上本地管理员的用户,但不适用于其他任何人。经过几个小时的乱七八糟,我设法使用以下步骤解决问题:
使用Windows身份验证(而不是本地SQL Server帐户)连接到SQL Server时,尝试使用链接服务器可能会导致错误消息:
EXEC master.dbo.sp_MSset_oledb_prop N'OraOLEDB.Oracle', N'AllowInProcess', 1
这个问题最直接的答案是由Cannot create an instance of OLE DB provider "(OLEDB provider name)"...
提供的,因为“MSDAINITIALIZE DCOM类的安全设置不正确”。
解决方案是修复MSDAINITIALIZE的安全设置。在Windows Vista及更高版本中,该类由TrustedInstaller拥有,因此必须先更改MSDAINITIALIZE的所有权,然后才能调整安全性。上面的KB有详细的说明。
MSDAINITIALIZE是OLE DB提供的COM类。此类可以解析OLE DB连接字符串,并根据连接字符串中的属性值加载/初始化提供程序。 MSDAINITILIAZE由连接到SQL Server的用户启动。如果使用Windows身份验证连接到SQL Server,则会在登录的用户帐户下初始化提供程序。如果登录的用户是SQL登录名,则在SQL Server服务帐户下初始化提供程序。根据使用的登录类型,必须相应地提供MSDAINITIALIZE的权限。
该问题至少可以追溯到SQL Server 2000; This MSDN blog post describes the reason(参见“消息3”)并具有为OLEDB提供程序设置In Process标志的建议修复程序。
虽然设置In Process可以解决当前的问题,但它可能不是您想要的。根据微软的说法,
在SQL Server进程外部实例化提供程序可以保护SQL Server进程免受提供程序中的错误的影响。在SQL Server进程外部实例化提供程序时,不允许引用长列(text,ntext或image)的更新或插入。 - KB 280106 from Microsoft describes the error。
更好的答案是使用Microsoft指南并调整MSDAINITIALIZE安全性。
特别是对于错误7302,我在我的注册表中发现,在寻找OraOLEDB.Oracle时,InprocServer32位置是错误的。
如果是这种情况,或者您在注册表中找不到该字符串,则必须安装或重新注册该组件。
我不得不从GUID级别删除密钥,然后找到ProgID(OraOLEDB.Oracle)密钥,并删除它。 (ProgID作为一对链接到CLSID)。
然后我通过调用ORAOLEDB * .dll上的regsvr32.exe重新注册了OraOLEDB.Oracle。
仅仅重新注册并没有解决问题,我不得不删除注册表项,使其指向正确的位置。或者,破解InprocServer32位置。
现在我有错误7308,关于单线程公寓;继续前进!
除了其他很棒的响应,我只需要给Oracle安装文件夹赋予NTFS权限。 (我给了读取权限)
以下配置的类似情况:
我的解决方案
尝试链接到Oracle 12c的SQL Server 2017上收到同样的错误。我们能够使用Oracle的SQL Developer连接到源数据库,但链接服务器不断抛出7302错误。
最后,我们停止了所有SQL服务,然后重新安装了ODAC组件。启动SQL服务备份,瞧!