Secara default, semuanya akan berjalan dalam 64 bit di server. Untuk mengubah perilaku ini, Anda perlu menunjukkan bahwa versi 32 bit dari dtexec seharusnya digunakan. Untuk SSISDB 2012, kami memiliki dua cara mudah untuk memanggil paket kami:Agen SQL dan catalog.start_execution
metode.
catalog.start_execution
Untuk menjalankan paket penyajian tunggal, Anda dapat menemukan paket di katalog SSISDB dan klik kanan pada paket tersebut untuk Execute...
Dalam dialog pop-up yang dihasilkan, Anda harus membuka tab Advanced dan memeriksa 32-bit runtime
kotak. Ini akan dilakukan pada setiap menjalankan paket.
Di balik layar, SQL yang dihasilkan wizard akan terlihat seperti
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
Seperti yang Anda lihat, @use32bitruntime
parameter diberikan nilai True untuk menunjukkan bahwa parameter tersebut harus dijalankan dalam ruang 32.
Agen SQL
Untuk menjalankan paket berulang, kami biasanya menggunakan alat penjadwalan. Untuk mendapatkan pengaturan 32bit untuk paket di agen, pada dasarnya jalur klik yang sama kecuali Anda harus mengklik tab Konfigurasi terlebih dahulu dan lalu klik pada tab Advanced untuk memilih 32-bit runtime
Definisi langkah pekerjaan akan terlihat seperti
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
Anda akan melihat bahwa dalam panggilan @command, wizard menghasilkan /X86
panggilan yang merupakan argumen khusus yang disediakan untuk Agen SQL (periksa tautan BOL di awal) untuk menunjukkan apakah dtexec versi 32 atau 64 bit harus digunakan. Permintaan baris perintah akan mengharuskan kita untuk secara eksplisit menggunakan dtexec yang benar. Secara default, dtexec 64 bit akan terdaftar pertama di lingkungan PATH Anda
Lokasi dtexec 64 bit
- 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
Lokasi dtexec 32 bit
- 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
Driver pemecahan masalah lebih lanjut
Ini berjalan di satu server, tidak di server lain.
Langkah 1 - verifikasi bahwa Anda telah menginstal driver. Konyol, jelas tetapi ada banyak pertanyaan di mana orang secara keliru mengira menggunakan paket SSIS/.ispac juga akan menyebarkan semua rakitan yang direferensikan. Ini tidak nuget jadi tidak, semua prasyarat perlu diinstal, dan diinstal dengan benar (terlihat orang mencoba menyalin rakitan ke GAC alih-alih menggunakan alat)
Langkah 2 - verifikasi kecocokan penginstalan driver di seluruh server. Sekali lagi, tampaknya jelas tetapi saya pernah mengalami rasa sakit, umumnya VS_NEEDSNEWMETADATA, pada titik perbedaan dalam versi driver versi 4.0.2.013 menghasilkan hasil yang berbeda dari 4.0.2.014
Langkah 3 - Pastikan bahwa setiap DSN yang telah Anda tetapkan telah ditentukan di ruang yang benar. Yang ini menggigit orang karena beberapa alasan. Saya pikir tidak sampai Server 2012 Anda hanya bisa mendapatkan odbcad32.exe versi 32bit (dapat dieksekusi terkait dengan Alat Administratif -> Sumber Data (ODBC)) adalah dengan menemukannya di sistem file. Yang lebih membingungkan adalah executable bernama odbcad32.exe terlepas dari apakah itu di System32 atau SysWOW64 dan kedua folder itu masing-masing untuk driver 64 bit dan driver 32 bit. Ya, pembaca masa depan, itu bukan salah ketik. Versi 64 aplikasi ada di System32, versi 32 bit ada di SysWOW64. Itu adalah keputusan desain yang dimaksudkan untuk meminimalkan dampak.
Pada pengujian dan server langsung, jalankan C:\Windows\SysWOW64\odbcad32.exe
Temukan driver FoxPro Anda dan DSN terkait, apakah seperti yang diharapkan?
Langkah 4 - Pemeriksaan izin yang aneh. Masuk ke kedua server sebagai akun "normal" dan jalankan paket dari baris perintah. Ulangi langkah ini tetapi jalankan menggunakan Agen, dengan proxy apa pun yang mungkin atau mungkin belum Anda tetapkan. Jika yang pertama berhasil tetapi yang terakhir gagal, itu biasanya menunjukkan masalah izin. Bisa jadi akun SQL Server atau Agen tidak dapat mengakses folder apa pun yang diinstal driver. Mungkin akun tersebut memerlukan izin InteractWithDesktop atau izin lain yang ditolak atau tidak diberikan secara eksplisit.