th1*_*ey3 20 sql-server oracle oledb linked-server windows-authentication
我试图在Oracle服务器上从MS SQL Server运行openrowset.
当我执行以下命令时:
select * from
OPENROWSET('OraOLEDB.Oracle','srv';'user';'pass',
'select * from table')
Run Code Online (Sandbox Code Playgroud)
发生以下错误
Msg 7302, Level 16, State 1, Line 1
Cannot create an instance of OLE DB provider "OraOLEDB.Oracle" for linked server "(null)".
Run Code Online (Sandbox Code Playgroud)
谁能告诉我如何使用openrowset OraOLEDB.Oracle
?
我使用的是64位版本的MS SQL Server和Oracle OLEDB驱动程序.
我在运行带有MS SQL Server 2008 x64的Windows 7 x64和Windows Server 2008 x64的两台计算机上尝试过此操作.两者都显示相同的错误消息.
Dav*_*ant 47
在SQL Server企业管理器中,打开\Server Objects\Linked Servers\Providers
,右键单击OraOLEDB.Oracle
提供程序,选择属性并选中该"Allow inprocess"
选项.重新创建链接的服务器并再次测试.
如果您无权访问SQL Server Management Studio,还可以执行以下查询:
EXEC master.dbo.sp_MSset_oledb_prop N'OraOLEDB.Oracle', N'AllowInProcess', 1
Run Code Online (Sandbox Code Playgroud)
小智 13
遇到这个问题,链接服务器适用于服务器上本地管理员的用户,但不适用于其他任何人.经过几个小时的乱七八糟,我设法使用以下步骤解决问题:
使用Windows身份验证连接到SQL Server(而不是本地SQL Server帐户)时,尝试使用链接服务器可能会导致错误消息:
Cannot create an instance of OLE DB provider "(OLEDB provider name)"...
Run Code Online (Sandbox Code Playgroud)
Microsoft KB 2647989提供了此问题的最直接答案,因为"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; Microsoft的KB 280106描述了该错误(请参阅"消息3"),并提供了为OLEDB提供程序设置In Process标志的建议修复程序.
虽然设置In Process可以解决当前的问题,但它可能不是您想要的.根据微软的说法,
在SQL Server进程外部实例化提供程序可以保护SQL Server进程免受提供程序中的错误的影响.在SQL Server进程外部实例化提供程序时,不允许引用长列(text,ntext或image)的更新或插入.- SQL Server 2008 R2的链接服务器属性文档.
更好的答案是使用Microsoft指南并调整MSDAINITIALIZE安全性.
归档时间: |
|
查看次数: |
94682 次 |
最近记录: |