首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> 關於SqlServer

SQL Server 呼叫 SSIS 套件兩大方式:dtexec 檔案部署 vs 專案部署目錄 (SSISDB)

     編輯:關於SqlServer

前置:啟用 xp_cmdshell

EXEC sp_configure 'show advanced options', 1; RECONFIGURE;
EXEC sp_configure 'xp_cmdshell', 1; RECONFIGURE;

方式一:檔案部署 — 直接執行 .dtsx

EXEC xp_cmdshell 'dtexec /f "C:\Packages\ETL_Order.dtsx"';
  • 適用:獨立套件、無參數化、簡單排程
  • 缺點:路徑硬編碼、難以管理版本/環境變數、安全性較低

方式二:專案部署 — 部署至 SSISDB (SQL Server 2012+ 推薦)

部署步驟 (SSDT/VS)

  1. 專案屬性 → Deployment Target Version 選對應 SQL 版本
  2. 右鍵專案 → Deploy → 選 SSISDB → 伺服器名、路徑 (如 /Projects/ETL)
  3. 加密等級:EncryptAllWithPassword 或 EncryptSensitiveWithPassword

T-SQL 呼叫 (catalog.create_execution + start_execution)

DECLARE @execId BIGINT;
EXEC [SSISDB].[catalog].[create_execution]
    @folder_name = N'ETL',
    @project_name = N'OrderProject',
    @package_name = N'ETL_Order.dtsx',
    @use32bitruntime = 0,
    @runinscaleout = 0,
    @execution_id = @execId OUTPUT;

-- 設定參數 (可選)
EXEC [SSISDB].[catalog].[set_execution_parameter_value]
    @execution_id = @execId, @object_type = 30, -- 30=Package, 20=Project
    @parameter_name = N'SourcePath', @parameter_value = N'D:\Data\';

-- 執行
EXEC [SSISDB].[catalog].[start_execution] @execution_id = @execId;

舊版相容:dtexec /DTS (MSDB 存儲)

EXEC xp_cmdshell 'dtexec /DTS "\MSDB\ETL_Order" /SERVER "MyServer" /MAXCONCURRENT "-1" /CHECKPOINTING OFF /REPORTING V';
  • 部署:SSDT 產生部署資訊清單 → 雙擊 → 部署至 SQL Server (MSDB)
  • 或 SSMS → Integration Services → 預存套件 → MSDB → 匯入
  • 保護等級:RelyOnServerStorageAndRoles

關鍵差異對比

維度檔案部署 (/f)專案部署 (SSISDB)MSDB 部署 (/DTS)
版本需求所有2012+2005+
參數化/環境變數❌✅ 完整支援⚠️ 有限
版本控管/專案層級❌✅ 專案/套件版本❌
執行日誌/報表❌✅ SSISDB 內建⚠️ 需自建
Scale Out 執行❌✅❌
安全性/加密檔案層級資料庫層級 + 角色資料庫層級

⚠️ 常見錯誤與解決

  1. 加密錯誤 0x8009000B:部署/匯入時保護等級不匹配 → 重新部署並選正確等級
  2. xp_cmdshell 禁用:同上啟用
  3. 32/64 位不匹配:/use32bitruntime 或部署目標版本
  4. 權限不足:SQL Agent 執行帳戶需有檔案/資料庫存取權
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved