Конфігурації пакетів SSIS 2008 ігноруються


10

Зі зміною конфігурацій пакунків у 2008 році порівняно з 2005 роком, коли я вказую / ConfigFile something.dtsConfig у командному рядку, змінні, визначені в пакеті, зберігають свої значення часу проектування, а не використовують налаштування з файлу config.

Я не зовсім впевнений, що я розумію, ЯК отримати зовнішній файл конфігурації, який взагалі використовується. Я читав статті, в яких говориться, що тільки встановлені в часі дизайну конфігурації замінять завантаження зовнішнього файлу. Чи означає це, що я можу змінити змінні на порожні рядки, і тоді вони будуть перезаписані? Я не можу видалити змінну повністю! Що про цілі числа?

Я бачив статті, в яких згадується вимкнення, використовуючи конфігурації пакета в пакеті.

Я можу використовувати редактор пакунків SSIS або редактор XML, щоб змінити шлях конфігураційного файлу в пакеті, і тоді він буде використовувати налаштування цього файлу "останнім" (незалежно від зовнішньої опції / параметра ConfigFile), але я не хочу бути зміна пакета. Я хочу один пакет з Test.dtsConfig і Production.dtsConfig і мати можливість міняти місцями назад і назад, не змінюючи пакет.

Який зараз рекомендований спосіб зробити це?


1
Ви можете знайти полегшення тут , на форумі SQLServerCentral. Деякі пояснення зміни поведінки є тут - розділ Зміни поведінки, пов’язані з конфігураціями пакунків.
Мар’ян

Перегляньте наступні файли, щоб мати уявлення про те, про які пакунки та конфігурації я говорю: Налаштування та партії , Тестовий пакет та Readme .
Мар’ян

Відповіді:


10

Потрібно врахувати, що при запуску BIDS пакет спочатку прийме значення змінної з конфігураційного файлу, і лише якщо конфігураційний файл не існує, він видасть попередження і значення буде взято з пакета.

Тепер ситуація в командному рядку дещо інша. Ви можете мати такі ситуації:

  1. запустіть пакет у рядку cmd без обраного файлу конфігурації:

    dtExec /file "e:\Work\TestPackageConfiguration\TestPackageConfiguration\TestPackage.dtsx"
    • якщо вихідний конфігураційний файл (назвемо його Prod) не існує в тому самому шляху, визначеному в метаданих пакета, використовуються значення всередині пакета, і ви просто отримаєте попередження про відсутність файлу конфігурації;
    • якщо вихідний конфігураційний файл існує і є дійсним, тоді будуть використані значення з конфігураційного файлу (внутрішні значення будуть обійдені);
  2. запустіть пакет у рядку cmd без обраного файлу конфігурації, але зі змінною, встановленою у виклику:

    dtExec /file "e:\Work\TestPackageConfiguration\TestPackageConfiguration\TestPackage.dtsx" /SET \Package.Variables[checkMe];"outside the package in cmd line"
    • якщо вихідний конфігураційний файл не існує, то значення приймається з / виклику пакету / SET;
    • якщо існує початковий конфігураційний файл, то значення береться з конфігураційного файлу і навіть / SET ігнорується (це використовується лише у випадку, зазначеному вище);
  3. запустіть пакет у cmd рядку з новим конфігураційним файлом (скажімо, DEV замість Prod):

    dtExec /file "e:\Work\TestPackageConfiguration\TestPackageConfiguration\TestPackage.dtsx" /configFile "c:\ETL Config\TestPackage_config_Dev.dtsConfig"
    • якщо новий файл config (Dev) існує, а старий (Prod) ні, використовуються значення з нього;
    • якщо існують і конфігураційний файл Dev, і Prod, використовуються лише значення з Prod (DEV обходить навіть, якщо вказано у виклику командного рядка);
  4. запустіть пакет у рядку cmd з новим конфігураційним файлом та оператором SET у виклику:

    dtExec /file "e:\Work\TestPackageConfiguration\TestPackageConfiguration\TestPackage.dtsx" /configFile "c:\ETL Config\TestPackage_config_Dev.dtsConfig" /SET \Package.Variables[checkMe];"outside the package in cmd line - DEV config"
    • якщо існують обидва файли конфігурації, буде використовуватися Prod, всі інші ігноруються, навіть SET;
    • якщо не існує жодного конфігураційного файла, буде використано значення SET;

Отже, коротше кажучи, якщо ви хочете використовувати новий конфігураційний файл, вам доведеться перейменувати / перемістити старий і зателефонувати в пакет / configFile. Якщо цього недостатньо і хочете замінити навіть новий файл конфігурації, тоді використовуйте змінну / SET. Або ви можете обійти будь-який конфігураційний файл і просто використовувати / SET оператори в пакетному виклику.

Сподіваємось, це пролити трохи світла у ваші можливості.


Отже, це звучить як одна з великих проблем полягає в тому, що мій шлях на вікні розробки ідентичний тату на сервері під час виконання, щоб шлях до конфігурації в пакеті завжди був дійсним.
Cade Roux

Тому я думаю, що я повинен мати Dev, Test і Prod, щоб пакет завжди вказував на Dev і ніколи не мав конфігурацію Dev на моєму сервері, і тоді я можу зробити декілька конфігурацій на сервері і мати змогу запускати проти різних конфігурацій з моменту Конфігурація Dev в пакеті ніколи не буде знайдена. Тож я можу налагоджувати за допомогою конфігурації Dev, але тоді у мене виникнуть проблеми із його запуском із командного рядка на поле «dev», оскільки він знайде конфігурацію Dev.
Кейд Ру

Я припускаю, що ви згодні, що це насправді набагато складніше, ніж має бути, правда? Наче вони отримали нову маленьку функцію (перезавантаження) в зміні на 2008 рік, але вбили найпоширеніший сценарій використання конфігурацій пакета.
Кейд Ру

Так, так, я погоджуюся, що це набагато хижіше, ніж має бути. Щоб зрозуміти це, мені знадобилося багато, тому що я завжди забував перейменувати оригінальний файл конфігурації :-). Мені б більше подобалося, щоб він був у такому порядку: SET, / configFile, оригінал config, значення внутрішнього пакета. Це мало б сенсу для мене ..
Мар'ян

Жодна із статей, які я прочитав, не згадує, що саме доступний оригінальний файл конфігурації - це велика проблема. Тепер я бачу, чому вони опублікували цей редактор пакетів SSIS, щоб ви могли змінити це в пакеті, не відкриваючи BIDS.
Кейд Ру
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.