Автор в значительной степени использует технологию DTS для перемещения и преобразования данных внутри BI Приложения; потребовалось найти допустимое решение повторного связывания пакетов на Промышленном сервере после перемещения их из среды разработки и QA. Эта статья представляет решение задачи трудоёмкой работы ручного соединения 50 и более пакетов DTS после импортирования их на новый SQL Server.
Проблема
Мы создаем родительские пакеты, которые используют Execute Package Task для вызова дочернего пакета. По умолчанию Execute Package Task будет использовать PackageID (GUID), чтобы загрузить и выполнить пакет. PackageID назначается в тот момент, когда Вы сохраняете новый пакет вместе с VersionID и timestamp временем создания.
Рисунок 1
Простой способ продемонстрировать это состоит в том, чтобы открыть пакет и затем, используя опцию 'Save As', присвоив пакету новое имя. Далее в Изначальном пакете создать "Execute Package Task" и установить зависимость между пакетами Master и Дочерним, связав STG_ED коннектором с Дочерним пакетом (Demo Child-Task) как на Рис. 1.
Если бы Вам по некоторым причинам потребовалось заменить Дочерний пакет, как например в случае сохранение после внесения изменений, это повлекло бы за собой создание полностью нового VersionID, с новой временной меткой и новым ProgramID! И это нарушило бы соединение между пакетами, поскольку VersionID указывает на старый VersionID с тем же самым именем. PackageID {543E … .184} на заднем плане Рис. 2 является устаревшим, следовательно выполнение потерпит неудачу!
Рисунок 2
[В начало]
Предлагаемое Решение
Мы удалили зависимость PackageID/VersionID, обнулив свойство PackageID ExecutePackageTask. Сделав это, мы вынудили использоваться другое свойство - свойство PackageName. Вы можете легко проверить это через функцию Disconnected Edit. Она доступна из меню Package: щелкните правой кнопкой мыши на пустом пространстве пакета и выберите "Disconnected Edit". Но для нашей run-time среды этого недостаточно.
Решение автора состоит в том, чтобы, добавив Dynamic Properties Task выполнить назначение NULL зависимым Дочерним пакетам в run-time. Эта задача станет основой для нашего процесса вместе с пустым значением Global variable, которое будет назначаться всем свойствам PackageID. Тогда при выполнении дочернего пакета будет использоваться имя пакета вместо PackageID. Необходимо выполнить следующие шаги:
Рисунок 3
Создайте Dynamic Properties Task с именем Blank out PropertyID как на Рис. 3 (см. Выше). Нажмите на кнопку Properties; следующее диалоговое окно будет аналогично Рис. 4.
Рисунок 4
Рисунок 5
Это вызов окна Package Properties. Для каждой задачи в левой стороне окна (DTSTask_DTSExecutePackageTask_1, 2, и т.д.) необходимо отредактировать PackageID и нажать на кнопку Set (как на Рис. 5).
Рисунок 6
Затем создайте и назначьте Global variable (или многократно используйте существующую). Если Вы создаете новую Глобальную переменную, то не назначайте ей никаких значений. Они будут переведены к значению NULL в run-time; Вы можете многократно использовать её для всего Списка задач.
Чтобы обеспечить переносимость между серверами, пожалуйста, сделайте следующее:
-
убедитесь, что SQL Server, который Вы используете для того, чтобы создать пакеты DTS, зарегистрирован как (LOCAL) (Windows NT) как на Рис. 7.
-
гарантируйте, что все внутренние пакеты используют локальный (LOCAL) SQL сервер, имя сервера не прописано жестко.
Рисунок 7
В следующей статье автор расскажет, как осуществить распределение пакетов DTS и их активацию на новом SQL Server.