Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

SSIS пакетът не работи като 32-битов в SQL Server 2012

По подразбиране всичко ще работи в 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 или друго разрешение, което е отказано или не е изрично предоставено.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да добавите нова колона за самоличност към таблица в SQL Server?

  2. Използвайте TYPE_ID(), за да получите идентификатора на тип данни в SQL Server

  3. Използване на Spotlight Cloud за разрешаване на блокиране на SQL Server

  4. определяне на набора от символи на таблица/база данни?

  5. Принудително INSERT само чрез съхранена процедура