sql >> Databáze >  >> RDS >> Sqlserver

SQL Server 2012 dotazování na data aplikace Access 2007 pomocí chyby OPENROWSET

Konečně, po několika neúspěšných pokusech nechat SQL Server „promluvit“ s databází Accessu – buď jako „Propojený server“ v SSMS nebo přes OPENROWSET() v T-SQL – Našel jsem tento blogový příspěvek, který nabízí následující tři (3) návrhy.

Tweak #1:Nastavení poskytovatele OLE DB

Poskytovatel OLE DB pro ACE (nebo Jet) musí mít povoleny možnosti "Dynamický parametr" a "Povolit zpracování". V SSMS otevřete

Objekty serveru> Propojené servery>Poskytovatelé

větev, klikněte pravým tlačítkem na "Microsoft.ACE.OLEDB.12.0" (nebo "Microsoft.Jet.OLEDB.4.0"), vyberte "Vlastnosti" a ujistěte se, že jsou vybrány tyto možnosti:

Tweak #2:Oprávnění složky Temp

To je ten, který mě zarazil.

SQL Server zjevně potřebuje zapsat informace do dočasného souboru při spuštění dotazu OLE DB proti databázi Accessu. Protože SQL Server běží jako služba, používá složku %TEMP% účtu, pod kterým služba běží.

Pokud je služba SQL Server spuštěna pod vestavěným účtem "Network Service", pak je dočasná složka

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

a pokud běží pod vestavěným účtem "Local Service", pak je složka temp

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

Můj problém byl, že SSMS běželo pod mým účet (nikoli NETWORK SERVICE), takže jsem měl přístup pouze ke čtení do složky Temp

Jakmile jsem si udělil oprávnění k úpravě této složky

a povolil dotazy OPENROWSET, jak je zdokumentováno v jiné otázce zde, konkrétně ...

EXEC sp_configure 'show advanced options', 1
RECONFIGURE
GO
EXEC sp_configure 'ad hoc distributed queries', 1
RECONFIGURE
GO

... můj dotaz fungoval dobře:

Tweak #3:memory_to_reserve

Ačkoli jsem to v mém případě nepotřeboval, zmíněný blog také tvrdí, že úprava spouštěcího parametru "-g memory_to_reserve" pro službu SQL Server může také pomoci vyhnout se podobným chybám. Chcete-li to provést:

  • spusťte SQL Server Configuration Manager
  • klikněte pravým tlačítkem na službu SQL Server (karta "Služby SQL Server") a zvolte "Vlastnosti"
  • na kartě "Upřesnit" přidejte před řetězec -g512; na nastavení "Parametry spouštění"
  • restartujte službu SQL Server

Další podrobnosti o nastavení "memory_to_reserve" naleznete v článku MSDN zde.



  1. Omezení simultánních uživatelských relací pro konkrétní přihlášení na SQL Server

  2. Konfigurace ověřování LDAP a mapování skupin pomocí MariaDB

  3. PDO::fetchAll vs. PDO::fetch ve smyčce

  4. Jak zálohovat / exportovat databázi MySQL pomocí PHP