Можно ли избежать файлов конфигурации XML и при этом использовать конфигурацию пакета в службах SSIS? - PullRequest
3 голосов
/ 31 мая 2011

Наша команда управляет несколькими версиями файлов dtsconfig, по одной для каждой среды выпуска, и я пытаюсь выяснить, есть ли способ избежать этого, и посмотреть, есть ли более простой способ.

Наша проблема заключается в том,с указанием, где найти входной файл.В каждой среде выпуска входные файлы находятся на сервере, который отличается от сервера, на котором размещен файл пакетов, что, как я подозреваю, является нормой.

В идеале я хотел бы иметь возможность указать файл ConnectionStringиспользуя переменную Environment для указания местоположения папки, но оставьте константу имени файла постоянной, как в следующем примере:

% FileFolder% \ MyFile.txt.

.., где% FileFolder% равенв \ OurServerName \ OurProjectName \ OurFilesFolder.

<?xml version="1.0"?>
<DTSConfiguration>
    <DTSConfigurationHeading>
        <DTSConfigurationFileInfo GeneratedBy="MyDomain\MyIDE" GeneratedFromPackageName="" GeneratedFromPackageID="" GeneratedDate="05/30/2009 01:26:00 PM" />
    </DTSConfigurationHeading>
    <Configuration ConfiguredType="Property" Path="\Package.Connections[FLAT_FILE_PLAN].Properties[ConnectionString]" ValueType="String">
        <ConfiguredValue>\\OurServerName\OurProjectName\OurFilesFolder\MyFile.txt</ConfiguredValue>
    </Configuration>
</DTSConfiguration>

Ответы [ 3 ]

4 голосов
/ 31 мая 2011

Вот возможное решение, в котором вы можете попытаться указать путь к папке в переменной среды и использовать его в своем пакете.В этом примере не используется файл конфигурации (.dtsconfig), но для него требуется Environment Variable с именем SSISFolderPath, установленный на компьютере, на котором выполняется пакет.

Пошаговый процесс:

  1. Перейдите к Control Panel -> System -> Advanced system settings -> нажмите на вкладку Advanced -> Нажмите на кнопку Environment Variables... -> Нажмите на вторую кнопку New... в нижней части диалогового окна.Эти шаги действительны для Windows Server 2008 или 2008 R2.В старых серверах Windows могут быть немного другие параметры навигации.

  2. Создайте переменную среды, как показано на скриншоте # 1 .Я назвал его SSISFolderPath и дал значение c:\temp\SSISFolderPath\

  3. ПРИМЕЧАНИЕ: Если у вас открыто Visual Studio IDE, закройте и снова откройтечтобы параметры переменной среды были видны как в среде IDE, так и в пакете служб SSIS.

  4. В пакете служб SSIS создайте переменную с именем FilePath, как показано на снимке экрана # 2 . Обратитесь по этой ссылке , чтобы узнать, как создать переменную в пакете служб SSIS.

  5. В пакете служб SSIS выберите меню SSISи выберите Package Configurations... Пожалуйста, убедитесь, что вы нажимаете на пакет, прежде чем сделать это.В противном случае этот параметр не будет отображаться.

  6. Установите флажок Enable package condifurations и нажмите кнопку Add....См. Снимок экрана # 3 .

  7. На шаге Select Configuration Type выберите значение Переменная среды из раскрывающегося списка Configuration type и выберитеВновь созданная переменная, в данном примере это SSISFolderPath , из выпадающего списка Environment variable.Нажмите кнопку Next >.См. Снимок экрана # 4 .

  8. На шаге Select Target Property разверните раздел Variables и разверните Properties переменной FilePath и выберите Значение в узле Properties.Нажмите кнопку Next >.См. Снимок экрана # 5 .

  9. На шаге Completing the Wizard укажите подходящий Configuration name.Я дал Environment_Variable .Нажмите кнопку Finish.См. Снимок экрана # 6 .

  10. Я поместил Script task на вкладке Поток управления пакета служб SSIS, чтобы продемонстрировать, что переменная заполнена значением изEnvironment Variables.Обратите внимание, что переменная в данный момент не имеет значения в пакете.На следующем шаге, когда задача «Сценарий» вызывается во время выполнения пакета, переменная будет заполнена значением из Environment Variables SSIFolderPath , созданным на машине, и будет отображаться в MessageBox ,См. Снимок экрана # 7 для примера вывода.

Надеюсь, это поможет.

Код задачи скрипта: (Используйте приведенный ниже код для замены метода Main () в задаче «Сценарий»)

VB Код метода Main (), который можно использовать в SSIS 2005 and above

Public Sub Main()
    Dim varCollection As Variables = Nothing    

    Dts.VariableDispenser.LockForRead("User::FilePath")
    Dts.VariableDispenser.GetVariables(varCollection)

    MessageBox.Show(varCollection("User::FilePath").Value.ToString())

    Dts.TaskResult = ScriptResults.Success
End Sub

C # Код метода Main (), который можно использовать только в SSIS 2008 and above.

public void Main()
{
    Variables varCollection = null;
    Dts.VariableDispenser.LockForRead("User::FilePath");
    Dts.VariableDispenser.GetVariables(ref varCollection);

    MessageBox.Show(varCollection["User::FilePath"].Value.ToString());
    Dts.TaskResult = (int)ScriptResults.Success;
}

Снимок экрана № 1:

1

Снимок экрана № 2: По этой ссылке можно узнатьКак создать переменную в пакете служб SSIS.

2

Снимок экрана № 3:

3

Снимок экрана № 4:

4

Снимок экрана № 5:

5

Снимок экрана № 6:

6

Снимок экрана № 7:

7

Снимок экрана № 8: (Этот снимок экрана относится только к SSIS 2005)

8

1 голос
/ 03 июня 2011

@ У Siva очень хороший ответ, который хорошо работает для отдельных сред / разработчиков на разных машинах, однако на практике мы обнаружили, что если вы запускаете несколько сред (Dev / UAT / Prod / etc) на одной машине, на которой используется средаПеременные оказываются сложными, так как вам нужно постоянно изменять переменную среды перед запуском подпроцессов.

Мы попробовали несколько вариантов конфигурации с различными клиентами - только файлы XML dtsConfig, имеющие всю конфигурацию внутри (по одному для каждой среды)- переменная окружения, которая контролирует, какой файл dtsConfig используется, - минимальный файл dtsConfig, который указывает на комбинацию SQL-сервер / база данных / таблица, для которой задан полный конфиг.

Если бы мы начали с нуля, я бы вообще выбрал третийвариант, так как он был наиболее гибким для нас.

0 голосов
/ 03 июня 2011

Я обнаружил, что передача значений в переменные из агента SQL Server хорошо работает для меня.

Я запускаю пакеты служб SSIS для запланированных задач, поэтому типом задания SQL Server является «Пакет служб интеграции SQL Server», а затем вы можете указать значения на вкладке «Задать значения» в свойствах шага задания.

Когда я запускаю локально, например, у меня есть путь свойства "\ Package.Variables [User :: ChildPackagePath] .Properties [Value]" со значением "D: \ Database \ ETL \ ETL \" (Нет цитаты либо). В разных средах это по-разному.

Это имеет свои плюсы и минусы -

Дело в том, что все, у кого есть доступ к заданиям агента SQL Server, могут видеть детали (хотя только эти люди).

Плюсы в том, что вы можете создавать сценарии задания и изменять любые значения в сценарии, чтобы быстро создавать новое задание в новой среде. Также вы можете иметь разные «версии», если хотите - когда одни и те же пакеты используются разными заданиями с разными значениями.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...