По подразбиране всичко ще работи в 64 бита на сървърите. За да промените това поведение, трябва да посочите, че 32-битовата версия на dtexec трябва да се използва. За 2012 SSISDB имаме два лесни начина за извикване на нашите пакети:SQL Agent и catalog.start_execution
метод.
catalog.start_execution
За изпълнение на пакет за еднократно обслужване можете да намерите пакета в каталога на SSISDB и да щракнете с десния бутон върху тях, за да Execute...
В появилия се изскачащ диалогов прозорец ще трябва да отидете в раздела Разширени и да проверите 32-bit runtime
кутия. Това ще се прави при всяко изпълнение на пакета.
Зад кулисите SQL, който съветникът генерира, ще изглежда така
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
Както можете да видите, @use32bitruntime
параметърът получава стойност True, за да покаже, че трябва да се изпълнява в 32 пространство.
SQL агент
За повтарящи се изпълнявания на пакети обикновено използваме инструмент за планиране. За да стигнете до 32-битовата настройка за пакет в агента, това е основно същият път за щракване, с изключение на това, че първо трябва да щракнете върху раздела Конфигурация и след това щракнете върху раздела Разширени, за да изберете 32-bit runtime
Дефиницията на стъпката на работа ще изглежда нещо като
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
Ще видите, че в извикването на @command съветникът генерира /X86
call, който е специалният аргумент, запазен за SQL Agent (проверете връзката BOL в началото), за да посочите дали трябва да се използва 32 или 64 битова версия на dtexec. Извикването на командния ред ще изисква от нас изрично да използваме правилен dtexec. По подразбиране 64-битовият dtexec ще бъде посочен първи във вашата PATH среда
64 битови 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
32-битови 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
Допълнителни драйвери за отстраняване на неизправности
Работи на един сървър, но не и на друг.
Стъпка 1 - проверете дали сте инсталирали драйверите. Глупаво, очевидно, но имаше много въпроси, при които хората погрешно смятаха, че внедряването на SSIS пакет/.ispac също ще разположи всички посочени сборки. Не е nuget, така че не, всички предпоставки ще трябва да бъдат инсталирани и инсталирани правилно (видяни хора се опитват да копират сглобки в GAC, вместо да използват инструмента)
Стъпка 2 - проверете дали инсталацията на драйвера съвпада между сървърите. Отново, изглежда очевидно, но изпитах болка, обикновено VS_NEEDSNEWMETADATA, на точка разлика във версия на драйвера 4.0.2.013 даде различни резултати от 4.0.2.014
Стъпка 3 - Уверете се, че всички DSN, които сте дефинирали, са дефинирани в правилното пространство. Този хапе хората по редица причини. Мисля, че едва след Server 2012 можете да стигнете до 32-битовата версия на odbcad32.exe (изпълним файл, свързан с Административни инструменти -> Източници на данни (ODBC)), като го намерите във файловата система. Още по-объркващо е, че изпълнимият файл се казва odbcad32.exe, независимо дали е в System32 или SysWOW64 и тези две папки са съответно за 64-битовите драйвери и 32-битовите драйвери. Да, бъдещи читатели, това не е печатна грешка. 64-те версии на приложенията са в System32, 32-битовите версии са в SysWOW64. Това беше дизайнерско решение, предназначено да минимизира въздействието.
На тестовия и активния сървър изпълнете C:\Windows\SysWOW64\odbcad32.exe
Намерете вашите драйвери за FoxPro и свързаните DSN, според очакванията ли са?
Стъпка 4 - Странна проверка на разрешение. Влезте в двата сървъра като "нормален" акаунт и стартирайте пакета от командния ред. Повторете тази стъпка, но я изпълнете с помощта на агент, с какъвто и прокси да сте дефинирали или не. Ако първият работи, но последният се провали, това обикновено означава проблем с разрешението. Възможно е акаунтът на SQL Server или агент да няма достъп до папката, в която е инсталиран драйверът. Възможно е споменатият акаунт да се нуждае от разрешение InteractWithDesktop или друго разрешение, което е отказано или не е изрично предоставено.