Eu tenho algumas dezenas de servidores vinculados, MSSQL, Teradata e Oracle. Eles estão no SQL Server 2019. Os servidores Oracle estão usando o cliente OraOLEDB.Oracle 19c. Todos são criados com o mesmo script parametrizado.
Mensagem de erro:
Não é possível criar uma instância do provedor OLE DB "OraOLEDB.Oracle" para o servidor vinculado "XXXXXXX".
Editar: Funciona com o login do Administrador do Windows, mas não com qualquer outro login SA.
O número do erro é 7302, mas não é um problema de registro de DLL
O script foi usado para criar os servidores vinculados no SQL Server 1 e SQL Server 2, no #1 tudo funciona muito bem. Em #2, os servidores MSSQL e Teradata são bons, mas os servidores Oracle funcionam apenas com a conta usada para instalar o Oracle. Eu tentei conceder todos os direitos a Todos na base Oracle e Oracle Home para teste, mas isso não ajudou.
Todos os servidores vinculados são configurados para usar usuário remoto e senha remota para todos os logins. Abaixo está a parte do script que executa 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
A solução acabou por ser o sinalizador AllowInProcess no provedor OraOLEDB.Oracle.
Isso resolveu o problema: