Развертывание и резервное копирование хранимых процедур с помощью служб SSIS

Я пытаюсь создать пакет SSIS для развертывания и резервного копирования хранимых процедур для нашего проекта.

У меня есть файл .sql, каждый файл содержит одно определение хранимой процедуры, а имя файла - это само имя хранимой процедуры. Я пытаюсь сделать следующее с помощью SSIS

  1. Прочитать все имена файлов по одному
  2. Найдите определение каждой хранимой процедуры, если она существует в базе данных.
  3. Если существует, то сохраните определение с тем же именем в другой папке (в моем случае это папка ROLLBACK)
  4. Для всех новых SP он сохраняется в том же файле с именем DropNewSp.sql с помощью команды DROP STORED PROCEDURE.
  5. После завершения процесса резервного копирования выполните все файлы в целевой базе данных.

Я могу сгенерировать желаемые файлы .sql, но столкнулся со следующей проблемой: 1. Пакет также создал нежелательный пустой файл .sql для всех новых хранимых процедур. 2. Процесс выполнения завершился неудачно, если хранимая процедура имеет некоторую зависимость от последующих хранимых процедур. процесс


person Draga    schedule 20.03.2019    source источник
comment
Службы SSIS предназначены для интеграции, а не для одноразовых сценариев и уж точно не для создания сценариев SQL. Это работа SSDT и файлы dacpac   -  person Panagiotis Kanavos    schedule 20.03.2019
comment
То, что вы описываете, это сценарий базы данных, а не какая-либо резервная копия. Резервное копирование означает выполнение команды BACKUP для копирования всей схемы и данных в файл bak. Простой способ развернуть базу данных с данными это сделать резервную копию и восстановить ее в нужном месте.   -  person Panagiotis Kanavos    schedule 20.03.2019
comment
Спасибо за ваш ответ. Да, вы правы, на самом деле это не процесс резервного копирования, я просто хотел автоматизировать процесс развертывания хранимой процедуры и сохранить существующую версию для целей отката.   -  person Draga    schedule 20.03.2019
comment
Как я объяснил, это не работа SSIS, это работа SSDT. SSIS также не позволит вам ничего откатить. Службы SSIS перемещают данные, не создают сценарии для объектов базы данных, не сравнивают схемы и не создают сценарии миграции. SSDT делает все это.   -  person Panagiotis Kanavos    schedule 20.03.2019


Ответы (1)


В этом ответе я предоставлю основные шаги с некоторыми ссылками, чтобы получить больше информации о том, как выполнить каждый шаг. Даже если я согласен с комментариями, упомянутыми выше, это не работа SSIS.

  1. Добавьте контейнер цикла foreach, который зацикливается на файлах .sql и сохраняет имя файла внутри переменной:

  2. Добавьте задачу выражения в получить имя файла из полного пути к файлу (переменная)

    @{User::FileNameWithoutExtension] = SUBSTRING (@[User::FullFilePath], LEN( @[User::FullFilePath] ) - FINDSTRING( REVERSE( @[User::FullFilePath] ), "\\", 1) + 2,  LEN (RIGHT( @[User::FullFilePath], FINDSTRING( REVERSE( @[User::FullFilePath] ), "\\", 1 ) - 1 ) ) - FINDSTRING( REVERSE( @[User::FullFilePath] ), ".", 1 )  )
    
  3. Добавьте задачу «Выполнение SQL» внутри контейнера цикла foreach, чтобы проверить, найдена ли хранимая процедура в базе данных:

    SELECT COUNT(*) FROM sys.objects WHERE type = 'P' AND name = ?)
    
  4. Использование приоритета ограничений с выражениями добавляет 2 пути от выполнения задачи sql

    • the first using expression @[User::Count] == 0
    • второй с использованием выражения @[User::Count] > 0

Другие ссылки:

И сохраните результат внутри переменной, используя набор результатов.

  1. Добавьте задачу сценария, чтобы записать определение процедуры в целевой файл

  2. На первом пути добавьте File system task для перемещения файл в указанный каталог

  3. Добавьте еще один цикл foreach для чтения новых файлов и выполнения содержимого.

person Hadi    schedule 20.03.2019