我有我的SSIS包在一個開發週期(開發,QA,分期和生產),因此移動通過我想使用一種配置,在SSIS設置服務器名稱幾個環境在我的連接管理器中,這樣我就不需要手工操作了。在SSIS
我讀過有關使用XML配置文件,SQL配置表和環境變量。但是我遇到的問題是我的QA和臨時環境位於同一臺服務器上,但使用兩個單獨的SQL實例。如何在此實例中動態配置服務器名稱?
我有我的SSIS包在一個開發週期(開發,QA,分期和生產),因此移動通過我想使用一種配置,在SSIS設置服務器名稱幾個環境在我的連接管理器中,這樣我就不需要手工操作了。在SSIS
我讀過有關使用XML配置文件,SQL配置表和環境變量。但是我遇到的問題是我的QA和臨時環境位於同一臺服務器上,但使用兩個單獨的SQL實例。如何在此實例中動態配置服務器名稱?
好的,這是我們如何處理。我們使用環境變量來確定數據庫從其中讀取其餘的配置。環境變量與用戶相關聯,所以我們爲一個用戶設置了QA的作業,並將作業設置爲另一個用戶。我們的用戶被稱爲SQLQA和SQLstaging,並且僅用於運行作業。然後環境變量指向我們在SSIS配置中存儲其餘配置的數據庫。
您仍然可以使用一個配置文件進行QA和分段。將兩臺服務器都包含在文件中。
然後,當您構建執行程序包的QA進程時,請包含一個可選的運行時參數,該參數採用您希望程序包執行的特定環境,並在程序包開始時使用一個小腳本任務設置適當的變量(甚至只是動態變量)。
它並不完美,但它至少應該讓你在不同環境下執行,而無需更改包本身。
我對這個問題的解決方案是,設計時間值總是指着開發環境。任何開發人員都會打開該軟件包,它會針對該環境進行驗證,並且一切都很好。
運行開發之外的包意味着他們是通過SQL Agent的運行。如果您可以確切掌握這一級別的控制,那麼創建作業以指向正確的配置庫就很簡單了。
實際存在的,我每次使用環境(SYSDB),其持有我們的配置,日誌框架+標準記錄表(sysdtslog90/sysssislog)的自定義SSIS目錄。每個軟件包都需要有一個變量User::Default_ConfigurationServer
,並且該變量用作配置連接管理器的ConnectionString屬性上的表達式。聽起來很複雜,但它不是---
淨影響在開發中是它什麼也不做,但現在你定位,使其在其他環境下工作。我公司代理的所有看起來像
DECLARE @serverName sysname
, @jobstep_command nvarchar(4000)
-- Lots of other stuff removed
SET @serverName = @@servername
SET @jobstep_command = N'/SQL "\MyPackage"' + '" /SERVER "' + @serverName + '" /CHECKPOINTING OFF /REPORTING E /SET "\Package.Variables[User::Default_ConfigurationServer].Properties[Value]";"\"Provider=SQLNCLI10;Data Source=' + @serverName + ';Initial Catalog=SYSDB;Integrated Security=SSPI;\""'
-- create the job, also removed
-- Create the job step
EXECUTE @return_code = msdb.dbo.sp_add_job
@job_name = @job_name
, @enabled = @job_enabled
, @description = @job_description
, @start_step_id = @job_start_step
, @category_name = @category_name
--, @category_id = @category
, @owner_login_name = @job_owner_login_name
, @notify_level_eventlog = @job_notify_level_eventlog
, @notify_level_email = @job_notify_level_email
, @notify_level_netsend = @job_notify_level_netsend
, @notify_level_page = @job_notify_level_page
, @notify_email_operator_name = @job_notify_email_operator_name
, @notify_netsend_operator_name = @job_notify_netsend_operator_name
, @notify_page_operator_name = @job_notify_page_operator_name
, @delete_level = @job_delete_level
, @job_id = @job_id OUTPUT
現在,無論創建我的工作在那裏的,它指向該變量到正確的位置這反過來導致包發現正確的存儲庫,我有較少的工作要做。