Sql-Server

無法為除 Windows 管理員登錄之外的所有人創建 OLE DB 提供程序“OraOLEDB.Oracle”的實例

  • March 3, 2022

我有幾十個連結伺服器、MSSQL、Teradata 和 Oracle。這些在 SQL Server 2019 上。Oracle 伺服器正在使用 OraOLEDB.Oracle 19c 客戶端。它們都是使用相同的參數化腳本創建的。

錯誤資訊:

無法為連結伺服器“XXXXXXX”創建 OLE DB 提供程序“OraOLEDB.Oracle”的實例。

編輯:適用於 Windows 管理員的登錄名,但不適用於任何其他 SA 登錄名。

錯誤號是 7302 但不是 DLL 註冊問題

該腳本用於在 SQL Server 1 和 SQL Server 2 上創建連結伺服器,在 #1 上一切正常。在 #2 上,MSSQL 和 Teradata 伺服器很好,但 Oracle 伺服器只能使用用於安裝 Oracle 的帳戶。我嘗試將所有權利授予 Oracle base 和 Oracle Home 上的所有人進行測試,但這沒有幫助。

所有連結伺服器都設置為使用遠端使用者和遠端密碼進行所有登錄。下面是執行 sp_addlinkedsrvlogin 的腳本部分。

SET @SQL = N'EXEC master.dbo.sp_addlinkedsrvlogin @rmtsrvname=@ServerName,@useself=N''False'',@locallogin=NULL,@rmtuser=@UserName,@rmtpassword=@Password'

EXEC $(TargetServer).master.dbo.sp_executesql 
   @stmt=@SQL
   ,@params = N'@ServerName nvarchar(250), @UserName nvarchar(250), @Password nvarchar(250)'
   ,@ServerName=@ServerName
   ,@UserName=@UserName
   ,@Password=@Password

解決方案原來是 OraOLEDB.Oracle 提供程序上的 AllowInProcess 標誌。

這解決了問題:

EXEC master.dbo.sp_MSset_oledb_prop N'OraOLEDB.Oracle', N'AllowInProcess', 1

引用自:https://dba.stackexchange.com/questions/308181