Konfiguracje pakietów SSIS 2008 są ignorowane

10

Wraz ze zmianą konfiguracji pakietów w 2008 r. W porównaniu z 2005 r., Kiedy podałem / ConfigFile coś.dtsConfig w wierszu poleceń, zmienne zdefiniowane w pakiecie zachowują swoje wartości czasu projektowania zamiast używać ustawień z pliku konfiguracyjnego.

Nie jestem do końca pewien, jak rozumiem, JAK w ogóle uzyskać zewnętrzny plik konfiguracyjny. Przeczytałem artykuły, które mówią, że tylko skonfigurowane konfiguracje w czasie projektowania zastąpią ładowanie zewnętrznego pliku. Czy to oznacza, że ​​mogę zmienić zmienne na puste ciągi i wtedy zostaną one nadpisane? Nie mogę całkowicie usunąć zmiennej! Co z liczbami całkowitymi?

Widziałem artykuły, które wspominają o wyłączaniu za pomocą konfiguracji pakietów w pakiecie.

Mogę użyć edytora pakietów SSIS lub edytora XML, aby zmienić ścieżkę pliku konfiguracyjnego w pakiecie, a następnie użyje ustawień tego pliku „ostatni” (niezależnie od opcji zewnętrznego / ConfigFile), ale nie chcę być zmiana pakietu. Chcę jednego pakietu z Test.dtsConfig i Production.dtsConfig i mieć możliwość przełączania się tam iz powrotem bez zmiany pakietu.

Jaka jest teraz zalecana metoda?

Cade Roux
źródło
1
Ulgę możesz znaleźć tutaj na forum SQLServerCentral. Niektóre wyjaśnienie zmiany zachowań jest tutaj - sekcja Zachowanie zmian związanych z pakietem konfiguracjach.
Marian
Proszę zobaczyć następujące pliki, aby zorientować się, o których pakietach i konfiguracjach mówię: Config i partie , Testuj pakiet i Readme .
Marian

Odpowiedzi:

10

Musisz wziąć pod uwagę, że podczas uruchamiania przez BIDS pakiet pobierze najpierw wartość zmiennej z pliku konfiguracyjnego i tylko jeśli plik konfiguracyjny nie istnieje, wygeneruje ostrzeżenie i wartość zostanie pobrana z pakietu.

Teraz sytuacja w linii poleceń jest nieco inna. Możesz mieć następujące sytuacje:

  1. uruchom pakiet w linii cmd bez wybranego pliku konfiguracyjnego:

    dtExec /file "e:\Work\TestPackageConfiguration\TestPackageConfiguration\TestPackage.dtsx"
    • jeśli oryginalny plik konfiguracyjny (nazwijmy go Prod) nie istnieje w tej samej ścieżce zdefiniowanej w metadanych pakietu, używane są wartości z pakietu i zostanie wyświetlone ostrzeżenie o braku pliku konfiguracyjnego;
    • jeśli oryginalny plik konfiguracyjny istnieje i jest poprawny, wówczas zostaną użyte wartości z pliku konfiguracyjnego (wartości wewnętrzne zostaną pominięte);
  2. uruchom pakiet w linii cmd bez wybranego pliku konfiguracyjnego, ale ze zmienną ustawioną w wywołaniu:

    dtExec /file "e:\Work\TestPackageConfiguration\TestPackageConfiguration\TestPackage.dtsx" /SET \Package.Variables[checkMe];"outside the package in cmd line"
    • jeśli oryginalny plik konfiguracyjny nie istnieje, wartość jest pobierana z wywołania pakietu / SET;
    • jeśli oryginalny plik konfiguracyjny istnieje, to wartość jest pobierana z pliku konfiguracyjnego, a nawet / SET jest ignorowany (jest to używane tylko w powyższym przypadku);
  3. uruchom pakiet w linii cmd z nowym plikiem konfiguracyjnym (powiedzmy DEV zamiast Prod):

    dtExec /file "e:\Work\TestPackageConfiguration\TestPackageConfiguration\TestPackage.dtsx" /configFile "c:\ETL Config\TestPackage_config_Dev.dtsConfig"
    • jeśli nowy plik config (Dev) istnieje, a stary (Prod) nie, wówczas używane są wartości z niego;
    • jeśli istnieją zarówno plik konfiguracyjny Dev, jak i Prod, używane są tylko wartości z Prod (DEV jest pomijane, nawet jeśli podano to w wywołaniu wiersza poleceń);
  4. uruchom pakiet w wierszu cmd z nowym plikiem konfiguracyjnym i instrukcją SET w wywołaniu:

    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"
    • jeśli oba pliki konfiguracyjne istnieją, Prod zostanie użyte, wszystkie inne zostaną zignorowane, nawet SET;
    • jeśli nie istnieje plik konfiguracyjny, zostanie użyta wartość SET;

Krótko mówiąc, jeśli chcesz użyć nowego pliku konfiguracyjnego, musisz zmienić nazwę / przenieść stary i wywołać pakiet za pomocą / configFile. Jeśli to nie wystarczy i chcesz zastąpić nawet nowy plik konfiguracyjny, użyj zmiennej / SET. Lub możesz ominąć dowolny plik konfiguracyjny i po prostu użyć instrukcji / SET w wywołaniu wsadowym.

Mam nadzieję, że rzuci to trochę światła na twoje możliwości.

Marian
źródło
Wygląda więc na to, że jednym z dużych problemów jest to, że moja ścieżka w oknie programowania jest identyczna jak taht na serwerze podczas wykonywania, więc ścieżka do konfiguracji w pakiecie jest zawsze poprawna.
Cade Roux,
Więc myślę, że powinienem mieć Dev, Test i Prod, aby pakiet zawsze wskazywał Dev i nigdy nie miał konfiguracji Dev na moim serwerze, a następnie mogę wykonać wiele konfiguracji na serwerze i być w stanie działać na różnych konfiguracjach do woli, ponieważ Konfiguracja Dev w pakiecie nigdy nie zostanie znaleziona. Mogę więc debugować przy użyciu konfiguracji dewelopera, ale wtedy będę miał problem z uruchomieniem go z wiersza poleceń w oknie dewelopera, ponieważ znajdzie tę konfigurację.
Cade Roux
Zakładam, że zgadzasz się, że jest to o wiele bardziej skomplikowane, niż powinno być, prawda? Jakby dostali nową, małą funkcję (przeładowanie) po zmianie na 2008 r., Ale zabili najpopularniejszy scenariusz użycia konfiguracji pakietów.
Cade Roux
Cóż, TAK, zgadzam się, że jest to o wiele brzydsze niż powinno być. Wiele czasu zajęło mi rozgryzienie tego, ponieważ zawsze zapomniałem zmienić nazwę oryginalnego pliku konfiguracyjnego :-). Wolałbym, żeby była w następującej kolejności: SET, / configFile, oryginalna konfiguracja, wewnętrzna wartość pakietu. Dla mnie byłoby to bardziej sensowne
Marian
Żaden z artykułów, które przeczytałem, nie wspomina, że ​​jest dostępny oryginalny plik konfiguracyjny, co stanowi duży problem. Teraz rozumiem, dlaczego opublikowali ten edytor pakietów SSIS, abyś mógł to zmienić w pakiecie bez konieczności otwierania BIDS.
Cade Roux