sql >> Database >  >> RDS >> Sqlserver

SSIS-pakket wordt niet uitgevoerd als 32-bits in SQL Server 2012

Standaard draait alles in 64 bit op de servers. Om dit gedrag te wijzigen, moet u aangeven dat de 32-bits versie van dtexec zou gebruikt moeten worden. Voor de 2012 SSISDB hebben we twee eenvoudige manieren om onze pakketten aan te roepen:SQL Agent en de catalog.start_execution methode.

catalog.start_execution

Voor uitvoeringen van pakketten met één portie kunt u het pakket vinden in de SSISDB-catalogus en er met de rechtermuisknop op klikken om Execute...

In het resulterende pop-upvenster moet u naar het tabblad Geavanceerd gaan en de 32-bit runtime controleren doos. Dit zou bij elke run van het pakket worden gedaan.

Achter de schermen zou de SQL die de wizard genereert eruitzien als

DECLARE @execution_id bigint
EXEC [SSISDB].[catalog].[create_execution]
    @package_name = N'Package.dtsx'
,   @execution_id = @execution_id OUTPUT
,   @folder_name = N'POC'
,   @project_name = N'SSISConfigMixAndMatch'
,   @use32bitruntime = True
,   @reference_id = NULL
SELECT
    @execution_id
DECLARE @var0 smallint = 1
EXEC [SSISDB].[catalog].[set_execution_parameter_value]
    @execution_id
,   @object_type = 50
,   @parameter_name = N'LOGGING_LEVEL'
,   @parameter_value = @var0
EXEC [SSISDB].[catalog].[start_execution]
    @execution_id
GO

Zoals je kunt zien, is de @use32bitruntime parameter wordt de waarde True doorgegeven om aan te geven dat deze in 32 ruimte moet worden uitgevoerd.

SQL-agent

Voor terugkerende pakketruns gebruiken we over het algemeen een planningstool. Om naar de 32bit-instelling voor een pakket in agent te gaan, is het in feite hetzelfde klikpad, behalve dat u eerst op het tabblad Configuratie moet klikken en dan klik op het tabblad Geavanceerd om 32-bit runtime te selecteren

De definitie van de taakstap zou er ongeveer zo uitzien:

EXEC msdb.dbo.sp_add_jobstep
    @job_name = N'Do it'
,   @step_name = N'Run in 32bit'
,   @step_id = 1
,   @cmdexec_success_code = 0
,   @on_success_action = 1
,   @on_fail_action = 2
,   @retry_attempts = 0
,   @retry_interval = 0
,   @os_run_priority = 0
,   @subsystem = N'SSIS'
,   @command = N'/ISSERVER "\"\SSISDB\POC\SSISConfigMixAndMatch\Package.dtsx\"" /SERVER "\".\dev2014\"" /X86 /Par "\"$ServerOption::LOGGING_LEVEL(Int16)\"";1 /Par "\"$ServerOption::SYNCHRONIZED(Boolean)\"";True /CALLERINFO SQLAGENT /REPORTING E'
,   @database_name = N'master'
,   @flags = 0

Je zult zien dat in de @command-aanroep de wizard de /X86 . genereert call wat het speciale argument is dat gereserveerd is voor SQL Agent (controleer de BOL-link in het begin) om aan te geven of de 32- of 64-bits versie van dtexec moet worden gebruikt. Een aanroep van de opdrachtregel zou ons vereisen om expliciet de juiste dtexec te gebruiken. Standaard wordt de 64 bit dtexec als eerste weergegeven in uw PATH-omgeving

64 bit dtexec-locaties

  • C:\Program Files\Microsoft SQL Server\90\DTS\Binn\DTExec.exe
  • C:\Program Files\Microsoft SQL Server\100\DTS\Binn\DTExec.exe
  • C:\Program Files\Microsoft SQL Server\110\DTS\Binn\DTExec.exe
  • C:\Program Files\Microsoft SQL Server\120\DTS\Binn\DTExec.exe

32 bit dtexec-locaties

  • C:\Program Files (x86)\Microsoft SQL Server\90\DTS\Binn\DTExec.exe
  • C:\Program Files (x86)\Microsoft SQL Server\100\DTS\Binn\DTExec.exe
  • C:\Program Files (x86)\Microsoft SQL Server\110\DTS\Binn\DTExec.exe
  • C:\Program Files (x86)\Microsoft SQL Server\120\DTS\Binn\DTExec.exe

Verdere stuurprogramma's voor probleemoplossing

Het draait op de ene server, niet op een andere.

Stap 1 - controleer of u de stuurprogramma's hebt geïnstalleerd. Dom, voor de hand liggend, maar er zijn veel vragen geweest waarbij mensen ten onrechte dachten dat het inzetten van een SSIS-pakket/.ispac ook alle genoemde assemblages zou implementeren. Het is geen nuget, dus nee, alle vereisten moeten worden geïnstalleerd en correct worden geïnstalleerd (gezien mensen proberen om assemblages naar de GAC te kopiëren in plaats van de tool te gebruiken)

Stap 2 - controleer of de installatie van het stuurprogramma overeenkomt met alle servers. Nogmaals, lijkt voor de hand liggend, maar ik heb pijn ervaren, over het algemeen VS_NEEDSNEWMETADATA, op een puntverschil in stuurprogrammaversie 4.0.2.013 leverde andere resultaten op dan 4.0.2.014

Stap 3 - Zorg ervoor dat alle door u gedefinieerde DSN's in de juiste ruimte zijn gedefinieerd. Deze bijt mensen om een ​​aantal redenen. Ik denk dat het pas in Server 2012 was dat je alleen bij de 32-bits versie van odbcad32.exe (uitvoerbaar bestand gerelateerd aan Systeembeheer -> Gegevensbronnen (ODBC)) kon komen door het op het bestandssysteem te vinden. Des te verwarrender is dat het uitvoerbare bestand odbcad32.exe heet, ongeacht of het zich in System32 of SysWOW64 bevindt en die twee mappen zijn respectievelijk voor de 64-bits stuurprogramma's en 32-bits stuurprogramma's. Ja, toekomstige lezers, dat is geen typfout. De 64-versie van applicaties bevindt zich in System32, de 32-bits versies in SysWOW64. Het was een ontwerpbeslissing die bedoeld was om de impact te minimaliseren.

Voer op de test- en liveserver C:\Windows\SysWOW64\odbcad32.exe uit Vind uw FoxPro-stuurprogramma's en de gerelateerde DSN's, zijn ze zoals verwacht?

Stap 4 - Vreemde toestemmingscontrole. Log in op beide servers als een "normaal" account en voer het pakket uit vanaf de opdrachtregel. Herhaal deze stap, maar voer deze uit met Agent, met welke proxy u al dan niet hebt gedefinieerd. Als de eerste werkt, maar de laatste faalt, duidt dat meestal op een toestemmingsprobleem. Het kan zijn dat de SQL Server- of Agent-account geen toegang heeft tot de map waarin het stuurprogramma is geïnstalleerd. Het kan zijn dat dat account de InteractWithDesktop-machtiging nodig heeft of een andere machtiging die wordt geweigerd of niet expliciet wordt verleend.



  1. Oracle ongeldig nummer in clausule

  2. Tekencoderingsprobleem

  3. Vervang komma door nieuwe regel en schrijf naar tekstbestand

  4. Deelnemen aan de tabel met klanten en tags