Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Pakiet SSIS nie działa jako 32-bitowy w SQL Server 2012

Domyślnie wszystko na serwerach będzie działać w wersji 64-bitowej. Aby zmienić to zachowanie, musisz wskazać, że 32-bitowa wersja dtexec powinien być używany. W przypadku bazy danych SSISDB 2012 mamy dwa proste sposoby wywoływania naszych pakietów:agenta SQL i catalog.start_execution metoda.

catalog.start_execution

W przypadku pojedynczych uruchomień pakietów obsługujących można znaleźć pakiet w katalogu SSISDB i kliknąć go prawym przyciskiem myszy, aby Execute...

W wyświetlonym oknie dialogowym musisz przejść do zakładki Zaawansowane i sprawdzić 32-bit runtime skrzynka. Byłoby to zrobione przy każdym uruchomieniu pakietu.

Za kulisami wygenerowany przez kreatora SQL wyglądałby tak

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 widać, @use32bitruntime parametrowi jest przekazywana wartość True, aby wskazać, że powinien działać w 32 miejscach.

Agent SQL

W przypadku cyklicznych uruchomień pakietów zazwyczaj używamy narzędzia do planowania. Aby przejść do 32-bitowego ustawienia pakietu w agencie, jest to w zasadzie ta sama ścieżka kliknięcia, z wyjątkiem tego, że najpierw musisz kliknąć kartę Konfiguracja, a następnie następnie kliknij kartę Zaawansowane, aby wybrać 32-bit runtime

Definicja etapu pracy wyglądałaby mniej więcej tak

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

Zobaczysz, że w wywołaniu @command kreator generuje /X86 wywołanie, które jest specjalnym argumentem zarezerwowanym dla agenta SQL (sprawdź łącze BOL na początku), aby wskazać, czy należy użyć 32-bitowej czy 64-bitowej wersji dtexec. Wywołanie wiersza poleceń wymagałoby od nas jawnego użycia poprawnego dtexec. Domyślnie 64-bitowy dtexec będzie wyświetlany jako pierwszy w środowisku PATH

64-bitowe lokalizacje 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-bitowe lokalizacje 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

Dalsze rozwiązywanie problemów ze sterownikami

Działa na jednym serwerze, nie na innym.

Krok 1 — sprawdź, czy zainstalowałeś sterowniki. To głupie, oczywiste, ale było wiele pytań, w których ludzie błędnie myśleli, że wdrożenie pakietu SSIS/.ispac spowoduje również wdrożenie wszystkich wymienionych zestawów. To nie jest nuget, więc nie, wszystkie wymagania wstępne musiałyby zostać zainstalowane i poprawnie zainstalowane (widziano, że ludzie próbują kopiować zestawy do GAC zamiast używać narzędzia)

Krok 2 — sprawdź, czy instalacja sterownika jest zgodna z różnymi serwerami. Znowu wydaje się to oczywiste, ale doświadczyłem bólu, generalnie VS_NEEDSNEWMETADATA, w punkcie różnicy w wersji sterownika w wersji 4.0.2.013 dały inne wyniki niż 4.0.2.014

Krok 3 — Upewnij się, że wszystkie zdefiniowane nazwy DSN zostały zdefiniowane w odpowiednim miejscu. Ten gryzie ludzi z wielu powodów. Myślę, że dopiero w Server 2012 można było uzyskać dostęp tylko do 32-bitowej wersji odbcad32.exe (plik wykonywalny związany z Narzędziami administracyjnymi -> Źródła danych (ODBC)) przez znalezienie go w systemie plików. Tym bardziej zagmatwane jest to, że plik wykonywalny nosi nazwę odbcad32.exe, niezależnie od tego, czy znajduje się w System32, czy SysWOW64, a te dwa foldery dotyczą odpowiednio sterowników 64-bitowych i 32-bitowych. Tak, przyszli czytelnicy, to nie jest literówka. Wersja 64 aplikacji znajduje się w System32, wersje 32-bitowe znajdują się w SysWOW64. Była to decyzja projektowa mająca na celu zminimalizowanie wpływu.

Na serwerze testowym i na żywo uruchom C:\Windows\SysWOW64\odbcad32.exe Znajdź sterowniki FoxPro i powiązane DSN, czy są zgodne z oczekiwaniami?

Krok 4 - Dziwne sprawdzenie uprawnień. Zaloguj się do obu serwerów jako „normalne” konto i uruchom pakiet z wiersza poleceń. Powtórz ten krok, ale wykonaj go za pomocą Agenta, z dowolnym serwerem proxy, który zdefiniowałeś lub nie. Jeśli pierwszy działa, ale drugi się nie powiedzie, zwykle oznacza to problem z uprawnieniami. Możliwe, że konto SQL Server lub Agent nie ma dostępu do folderu, w którym zainstalowano sterownik. Może się zdarzyć, że wspomniane konto wymaga uprawnienia InteractWithDesktop lub innego uprawnienia, które jest odmawiane lub nie jest jawnie przyznane.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Sprawdzanie naruszenia reguły integralności referencyjnej przed usunięciem

  2. Zmiana INT na BigInt

  3. Problem z tworzeniem pliku .MDF z Visual Studio 2010

  4. Test wydajności MS SQL Server w systemie Linux i Windows w celu wykrycia różnicy

  5. Jak zmienić rozmiar strony SQL Server?