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.