Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

SQL Server 2012 consultando dados do Access 2007 usando o erro OPENROWSET


Finalmente, após várias tentativas malsucedidas de fazer com que o SQL Server "fale" com um banco de dados do Access - como um "Servidor vinculado" no SSMS ou via OPENROWSET() em T-SQL – encontrei esta postagem no blog que oferecia as três (3) sugestões a seguir.

Ajuste nº 1:configurações do provedor OLE DB


O provedor OLE DB para ACE (ou Jet) deve ter as opções "Parâmetro dinâmico" e "Permitir em processo" habilitadas. No SSMS, abra o

Objetos de servidor> Servidores vinculados> Provedores

branch, clique com o botão direito do mouse em "Microsoft.ACE.OLEDB.12.0" (ou "Microsoft.Jet.OLEDB.4.0"), escolha "Propriedades" e certifique-se de que essas opções estejam selecionadas:


Ajuste nº 2:permissões da pasta temporária


Este é o que estava me atrapalhando.

Aparentemente, o SQL Server precisa gravar informações em um arquivo temporário enquanto executa uma consulta OLE DB em um banco de dados do Access. Como o SQL Server está sendo executado como um serviço, ele usa a pasta %TEMP% da conta na qual o serviço está sendo executado.

Se o serviço do SQL Server estiver sendo executado na conta interna "Serviço de rede", a pasta temporária será

%SystemRoot%\ServiceProfiles\NetworkService\AppData\Local\Temp

e se estiver sendo executado na conta "Serviço local" integrada, a pasta temporária será

%SystemRoot%\ServiceProfiles\LocalService\AppData\Local\Temp

Meu problema era que o SSMS estava sendo executado em meu conta (não NETWORK SERVICE), então eu só tinha acesso de leitura à pasta Temp



Depois de me conceder permissões de modificação nessa pasta



e habilitei as consultas OPENROWSET conforme documentado em outra pergunta aqui, a saber ...
EXEC sp_configure 'show advanced options', 1
RECONFIGURE
GO
EXEC sp_configure 'ad hoc distributed queries', 1
RECONFIGURE
GO

... minha consulta funcionou bem:


Ajuste nº 3:memory_to_reserve


Embora eu não precise usá-lo no meu caso, o blog mencionado também afirma que ajustar o parâmetro de inicialização "-g memory_to_reserve" para o serviço SQL Server também pode ajudar a evitar erros semelhantes. Fazer isso:
  • iniciar o SQL Server Configuration Manager
  • clique com o botão direito do mouse no serviço do SQL Server (guia "Serviços do SQL Server") e escolha "Propriedades"
  • na guia "Avançado", adicione -g512; para a configuração "Parâmetros de inicialização"
  • reiniciar o serviço SQL Server

Para obter mais detalhes sobre a configuração "memory_to_reserve", consulte o artigo do MSDN aqui.