Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Paket SSIS Tidak Berjalan sebagai 32bit di SQL Server 2012

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.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bagaimana cara menghindari satu kutipan di SQL Server?

  2. Mengapa membandingkan variabel tanggal SQL dengan nol berperilaku seperti ini?

  3. Fungsi TYPE_NAME yang diperluas yang mencakup panjang data

  4. Kelompokkan baris berurutan dengan nilai yang sama menggunakan rentang waktu

  5. Perbarui satu tabel berdasarkan data dari beberapa tabel SQL Server 2005,2008