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

Balíček SSIS neběží jako 32bitový na serveru SQL Server 2012

Ve výchozím nastavení poběží na serverech vše v 64bitové verzi. Chcete-li toto chování změnit, musíte uvést, že 32bitová verze dtexec by měl být použit. Pro SSISDB 2012 máme dva snadné způsoby vyvolání našich balíčků:SQL Agent a catalog.start_execution metoda.

catalog.start_execution

Pro spuštění balíčku s jednou porcí můžete balíček najít v katalogu SSISDB a kliknutím na něj pravým tlačítkem Execute...

Ve výsledném vyskakovacím dialogovém okně budete muset přejít na kartu Upřesnit a zkontrolovat 32-bit runtime box. To by bylo provedeno při každém spuštění balíčku.

V zákulisí by SQL, které průvodce generuje, vypadalo takto

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

Jak můžete vidět, @use32bitruntime parametru je předána hodnota True, která indikuje, že by měl běžet v 32 prostoru.

Agent SQL

Pro opakované spouštění balíčků obecně používáme plánovací nástroj. Chcete-li se dostat na 32bitové nastavení pro balíček v agentovi, je to v podstatě stejná cesta pro kliknutí s tím rozdílem, že nejprve musíte kliknout na kartu Konfigurace a pak klikněte na kartu Upřesnit a vyberte 32-bit runtime

Definice kroku úlohy by vypadala nějak takto

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

Uvidíte, že ve volání @command průvodce vygeneruje /X86 call, což je speciální argument vyhrazený pro SQL Agent (zkontrolujte odkaz BOL na začátku), abyste určili, zda má být použita 32 nebo 64bitová verze dtexec. Vyvolání příkazového řádku by vyžadovalo, abychom explicitně použili správný dtexec. Ve výchozím nastavení bude 64bitový dtexec uveden jako první ve vašem prostředí PATH

64bitová umístění dtexec

  • 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

32bitová umístění dtexec

  • 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

Další ovladače pro odstraňování problémů

Na jednom serveru běží, na jiném ne.

Krok 1 – ověřte, že jste nainstalovali ovladače. Hloupé, zřejmé, ale vyskytlo se mnoho otázek, kdy se lidé mylně domnívali, že nasazení balíčku SSIS/.ispac by také nasadilo všechna odkazovaná sestavení. Není to nuget, takže ne, všechny předpoklady by musely být nainstalovány a správně nainstalovány (viděno, že se lidé pokoušejí zkopírovat sestavení do GAC namísto použití nástroje)

Krok 2 – ověřte, že se instalace ovladače shoduje na všech serverech. Opět se to zdá zřejmé, ale pocítil jsem bolest, obecně VS_NEEDSNEWMETADATA, bodový rozdíl ve verzi ovladače 4.0.2.013 přinesl jiné výsledky než 4.0.2.014

Krok 3 – Ujistěte se, že všechna DSN, která jste definovali, byla definována ve správném prostoru. Tenhle kousne lidi z mnoha důvodů. Myslím, že až do Serveru 2012 jste se mohli dostat k 32bitové verzi odbcad32.exe (spustitelný soubor související s administrativními nástroji -> Zdroje dat (ODBC)) pouze tím, že jste ji našli v systému souborů. O to více matoucí je, že se spustitelný soubor jmenuje odbcad32.exe bez ohledu na to, zda je v System32 nebo SysWOW64 a tyto dvě složky jsou pro 64bitové ovladače a 32bitové ovladače. Ano, budoucí čtenáři, to není překlep. 64 verzí aplikací je v System32, 32bitové verze jsou v SysWOW64. Bylo to designové rozhodnutí, které mělo minimalizovat dopad.

Na testovacím a živém serveru spusťte C:\Windows\SysWOW64\odbcad32.exe Najděte ovladače FoxPro a související DSN, jsou podle očekávání?

Krok 4 – Podivná kontrola oprávnění. Přihlaste se k oběma serverům jako "normální" účet a spusťte balíček z příkazového řádku. Opakujte tento krok, ale proveďte jej pomocí agenta, s jakýmkoli proxy serverem, který jste mohli nebo nemuseli definovat. Pokud první funguje, ale druhý selže, obvykle to znamená problém s oprávněním. Je možné, že účet SQL Server nebo Agent nemůže získat přístup k jakékoli složce, do které byl ovladač nainstalován. Je možné, že uvedený účet potřebuje oprávnění InteractWithDesktop nebo jiné oprávnění, které je odepřeno nebo není výslovně uděleno.



  1. reverzní inženýrství databáze mysql k vytvoření aplikace django

  2. Připojení Oracle k SQL Serveru přes zabezpečené připojení

  3. SQL dotaz pro výběr dvojic hodnot ve sloupci 1, které odpovídají jednomu ze dvou vzorů ve sloupci 2

  4. Přidejte sloupec do tabulky s výchozí hodnotou rovnou hodnotě existujícího sloupce