Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Gói SSIS không chạy dưới dạng 32bit trong SQL Server 2012

Theo mặc định, mọi thứ sẽ chạy ở 64 bit trên máy chủ. Để thay đổi hành vi này, bạn cần chỉ ra rằng phiên bản 32 bit của dtexec nên được sử dụng. Đối với SSISDB 2012, chúng tôi có hai cách dễ dàng để gọi các gói của mình:SQL Agent và catalog.start_execution phương pháp.

catalog.start_execution

Đối với các lần chạy gói phục vụ đơn lẻ, bạn có thể tìm gói trong danh mục SSISDB và nhấp chuột phải vào chúng để Execute...

Trong hộp thoại bật lên kết quả, bạn sẽ cần chuyển đến tab Nâng cao và kiểm tra 32-bit runtime hộp. Điều này sẽ được thực hiện trên mỗi lần chạy gói.

Đằng sau hậu trường, SQL mà trình hướng dẫn tạo ra sẽ trông như thế nào

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

Như bạn có thể thấy, @use32bitruntime tham số được chuyển một giá trị True để cho biết nó sẽ chạy trong 32 dấu cách.

Tác nhân SQL

Để chạy gói định kỳ, chúng tôi thường sử dụng công cụ lập lịch. Để truy cập cài đặt 32 bit cho một gói trong tác nhân, về cơ bản, đó là cùng một đường dẫn nhấp chuột ngoại trừ trước tiên bạn cần nhấp vào tab Cấu hình và sau đó nhấp vào tab Nâng cao để chọn 32-bit runtime

Định nghĩa bước công việc sẽ giống như

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

Bạn sẽ thấy rằng trong lệnh gọi @command, trình hướng dẫn tạo /X86 gọi là đối số đặc biệt dành riêng cho SQL Agent (kiểm tra liên kết BOL ở phần đầu) để cho biết liệu nên sử dụng phiên bản dtexec 32 hay 64 bit. Một lệnh gọi dòng lệnh sẽ yêu cầu chúng ta sử dụng dtexec chính xác một cách rõ ràng. Theo mặc định, dtexec 64 bit sẽ được liệt kê đầu tiên trong môi trường PATH của bạn

Vị trí 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

Vị trí 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

Các trình điều khiển khắc phục sự cố khác

Nó chạy trên một máy chủ, không chạy trên một máy chủ khác.

Bước 1 - xác minh rằng bạn đã cài đặt trình điều khiển. Ngớ ngẩn, hiển nhiên nhưng đã có nhiều câu hỏi khiến mọi người nhầm tưởng việc triển khai gói SSIS / .ispac cũng sẽ triển khai tất cả các hội đồng tham chiếu. Nó không phải là nuget nên không, tất cả các điều kiện tiên quyết sẽ cần phải được cài đặt và cài đặt đúng cách (đã thấy mọi người cố gắng sao chép các assembly vào GAC thay vì sử dụng công cụ)

Bước 2 - xác minh cài đặt trình điều khiển phù hợp trên các máy chủ. Một lần nữa, có vẻ rõ ràng nhưng tôi đã trải qua nỗi đau, nói chung là VS_NEEDSNEWMETADATA, về một điểm khác biệt trong phiên bản trình điều khiển phiên bản 4.0.2.013 tạo ra kết quả khác với 4.0.2.014

Bước 3 - Đảm bảo rằng bất kỳ DSN nào bạn đã xác định đều được xác định trong không gian chính xác. Cái này cắn mọi người vì một số lý do. Tôi nghĩ rằng phải đến Server 2012, bạn chỉ có thể truy cập phiên bản 32bit của odbcad32.exe (tệp thực thi liên quan đến Công cụ quản trị -> Nguồn dữ liệu (ODBC)) bằng cách tìm nó trên hệ thống tệp. Điều khó hiểu hơn là tệp thực thi được đặt tên là odbcad32.exe bất kể nó nằm trong System32 hay SysWOW64 và hai thư mục đó dành cho trình điều khiển 64 bit và trình điều khiển 32 bit tương ứng. Vâng, độc giả tương lai, đó không phải là lỗi đánh máy. Phiên bản 64 của ứng dụng nằm trong System32, phiên bản 32 bit trong SysWOW64. Đó là một quyết định thiết kế nhằm giảm thiểu tác động.

Trên máy chủ thử nghiệm và trực tiếp, hãy chạy C:\Windows\SysWOW64\odbcad32.exe Tìm trình điều khiển FoxPro của bạn và các DSN liên quan, chúng có như mong đợi không?

Bước 4 - Kiểm tra quyền kỳ lạ. Đăng nhập vào cả hai máy chủ như một tài khoản "bình thường" và chạy gói từ dòng lệnh. Lặp lại bước này nhưng thực hiện nó bằng cách sử dụng Agent, với bất kỳ proxy nào bạn có thể hoặc có thể chưa xác định. Nếu cái đầu tiên hoạt động nhưng cái sau không thành công, điều đó thường chỉ ra sự cố về quyền. Có thể là tài khoản SQL Server hoặc Agent không thể truy cập bất kỳ thư mục nào mà trình điều khiển đã được cài đặt. Có thể là tài khoản đó cần quyền InteractWithDesktop hoặc một số quyền khác bị từ chối hoặc không được cấp rõ ràng.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Truy vấn SQL Server để ẩn dữ liệu cột hàng trùng lặp. Không muốn xóa một hàng trùng lặp

  2. Tôi có thể kiểm tra các ràng buộc trước khi xóa trong SQL Server không?

  3. Ngày nối tiếp trong SQL?

  4. Truyền đối chiếu các biến nvarchar trong t-sql

  5. Trích xuất các số từ một văn bản trong SQL Server