2012-06-22 33 views
1
動態改變服務器名稱

我有我的SSIS包在一個開發週期(開發,QA,分期和生產),因此移動通過我想使用一種配置,在SSIS設置服務器名稱幾個環境在我的連接管理器中,這樣我就不需要手工操作了。在SSIS

我讀過有關使用XML配置文件,SQL配置表和環境變量。但是我遇到的問題是我的QA和臨時環境位於同一臺服務器上,但使用兩個單獨的SQL實例。如何在此實例中動態配置服務器名稱?

回答

2

好的,這是我們如何處理。我們使用環境變量來確定數據庫從其中讀取其餘的配置。環境變量與用戶相關聯,所以我們爲一個用戶設置了QA的作業,並將作業設置爲另一個用戶。我們的用戶被稱爲SQLQA和SQLstaging,並且僅用於運行作業。然後環境變量指向我們在SSIS配置中存儲其餘配置的數據庫。

0

您仍然可以使用一個配置文件進行QA和分段。將兩臺服務器都包含在文件中。

然後,當您構建執行程序包的QA進程時,請包含一個可選的運行時參數,該參數採用您希望程序包執行的特定環境,並在程序包開始時使用一個小腳本任務設置適當的變量(甚至只是動態變量)。

它並不完美,但它至少應該讓你在不同環境下執行,而無需更改包本身。

0

我對這個問題的解決方案是,設計時間值總是指着開發環境。任何開發人員都會打開該軟件包,它會針對該環境進行驗證,並且一切都很好。

運行開發之外的包意味着他們是通過SQL Agent的運行。如果您可以確切掌握這一級別的控制,那麼創建作業以指向正確的配置庫就很簡單了。

實際存在的,我每次使用環境(SYSDB),其持有我們的配置,日誌框架+標準記錄表(sysdtslog90/sysssislog)的自定義SSIS目錄。每個軟件包都需要有一個變量User::Default_ConfigurationServer,並且該變量用作配置連接管理器的ConnectionString屬性上的表達式。聽起來很複雜,但它不是---

  1. 創建String類型
  2. 複製配置 連接管理器的連接字符串的值的變量,並粘貼爲價值
  3. 指定的表達式回配置連接管理器的 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 

現在,無論創建我的工作在那裏的,它指向該變量到正確的位置這反過來導致包發現正確的存儲庫,我有較少的工作要做。