| ||||||||||||||||
| ||||||||||||||||
| ||||||||||||||||
Перемещение DTS пакетов Достаточно просто вручную скопировать один DTS пакет с
одной машины SQL Server на другую. Но что, если Вы хотите
скопировать все имеющиеся DTS пакеты с SERVERA на SERVERB,
потому что Вы выводите из эксплуатации SERVERA? Если у вас
сотни DTS пакетов то, копирование их вручную отнимет у вас
очень много времени. Эта статья расскажет о том, как можно
использовать SQL-DMO и модель объекта DTS, чтобы быстро
скопировать большое количество DTS пакетов. Рис. 1 Эта иллюстрация показывает свойства подключения "Microsoft OLE DB provider for SQL Server" с именем "SERVER1". Следующая иллюстрация показывает свойства подключения "Text File (Destination)" (см. Рис.2). Заметьте, что имя сервера "SERVER1" появится среди свойств этих двух подключений. Далее будет приведён сценарий T-SQL, который изменит все имеющиеся строки, ссылающиеся на имя "SERVER1" на имя нового сервера назначения - "SERVER2." Рис. 2 Следующая иллюстрация демонстрирует второй пакет, запланированный для миграции, с именем "MyPackage2": Этот пакет так же содержит подключение "Microsoft OLE DB provider for SQL Server" с именем "SERVER1" как показано на предыдущем рисунке, и имеет "Execute SQL Task " чтобы усечь таблицу. Еще раз, свойства этого пакета также имеют строку, "SERVER1" среди свойств пакета; необходимо изменить эту строку, при миграции этого пакета на "SERVER2". Рис. 3 Чтобы продемонстрировать, как использовать SQL-DMO, чтобы
скопировать и изменить эти два пакета с одного сервера на
другой, воспользуемся сценарием T-SQL. Этот сценарий T-SQL
использует OLE Automation, чтобы анализировать различные
объекты, коллекции, и свойства объектной модели DTS для
выполнения миграции. Здесь приведён полный текст
сценария.
Чтобы получить имена
всех пакетов, используется хранимая процедура
sp_enum_dtspackages. Это недокументированная хранимая
процедура, расположенная в базе данных msdb. Подробная
информация об этой процедуре может быть найдена здесь. Как
можно было заметить в ранее приведенном коде, имена пакетов
получены от сервера, на котором выполняется этот сценарий (в
этом случае, SERVER1). Как только сценарий нашёл имена всех
DTS пакетов сервера "SERVER1", каждый DTS пакет обрабатывается
и каждая ссылка на "SERVER1" заменяется ссылкой на
"SERVER2".
С очередным проходом
через цикл WHILE каждый пакет просматривается, изменяется и
копируется на SERVER2. Чтобы загрузить каждый пакет в память
используется OLE Automation. Сначала создаётся объект "DTS
Package" при помощи хранимой процедуры "sp_OACreate". Как
только этот объект успешно создан, код T-SQL загружает текущий
пакет, который нужно обработать, в память, используя метод
"LoadFromSQLServer". Этот метод требует определить сервер, с
которого будет загружаться пакет; метод аутентификации,
который будет использоваться (Windows или SQL Server); и
пакет, который необходимо загрузить. Приведенный код
использует Windows Authentication; однако, в качестве примера
так же приведены параметры, используемые при аутентификации
SQL Server. При использовании SQL Server Authentication
необходимо указать логин (login) и пароль (password). Как
только пакет загрузится, будет напечатано сообщение,
указывающее, что пакет был успешно загружен.
Этот код приводит к исполнению хранимой процедуры "sp_OAGetErrorInfo". Эта процедура печатает пользовательские сообщения об ошибках OLE Automation. Примечание: этот код приведён в Разделе F. Следующие разделы обрабатывают свойства пакета, изменяя каждую ссылку "SERVER1" на новый сервер назначения "SERVER2". Ниже приведён код раздела C. Этот раздел обрабатывает информацию о Подключении каждого пакета:
Число подключений,
имя каждого подключения и свойства DataSource изменяются,
когда коллекция "Connections" перепроверена для каждого
подключения. Вы можете найти значения для каждого из этих
свойств при помощи хранимой процедуры "sp_OAGetProperty".
Ранее приведенный код сначала идентифицирует число
подключений, содержавшихся в пакете. Затем, для каждого
подключения, сценарий проверяет Имя и DataSource, определяет,
указана ли строка "SERVER1". Если строка "SERVER1" найдена, то
она заменяется строкой "SERVER2". Для изменения свойств DTS
пакетов можно воспользоваться хранимой процедурой
"sp_OASetProperty".
Как можно увидеть, сначала определяется число задач в DTS пакете, используя свойство "Task.Count". Затем, обрабатывается каждая задача; вместо того, чтобы конкретно определять свойства, которые нужно проверить и изменить, обрабатывается и проверяется каждое свойство в задаче. Чтобы сделать это, определяется число свойств для каждой задачи при помощи "Properties .Count." Затем выполняется хранимая процедура "sp_OAGetProperty", в которой установленные свойства параметров используют следующий синтаксис, чтобы вернуть Имя и свойства Value соответственно:
В этом синтаксисе,
"@i" идентифицирует определенную обрабатываемую задачу, а "@j"
идентифицирует определенное свойство в пределах задачи. Если
какое-нибудь значение свойства содержит строку "SERVER1", то с
помощью хранимой процедуры "sp_OASetProperty" будет
произведена заменена на строку "SERVER2".
Первый шаг этого
процесса использует метод "RemoveFromSQLServer" чтобы удалить
заменяемый пакет с сервера назначения (Server2). В случае,
если пакет уже существует на сервере назначения, использование
этого метода гарантирует, что будет скопирован пакет, а не
добавлена новая версия. (Примечание: проверяется два различных
сообщения об ошибках, возвращаемых из выполнения метода
"RemoveFromSQLServer". Возвращаемый код "-2147217900"
указывает, что пакет, который нужно скопировать, не существует
на сервере назначения.) Затем, с помощью метода
"SaveToSQLServer",пакет сохраняется на сервере назначения.
Последний показанный кусочек кода - это код, показывающий
ошибки, возвращаемые при исполнении различных хранимых
процедур OLE Automation.
Два пакета, которые
были скопированы, были очень простыми пакетами, они не имели
всех возможных коллекций и свойств, которые могут
использоваться в ваших DTS Пакетах. Для осуществления миграции
ваших DTS пакетов может понадобиться доработка приведенного в
этой статье кода. |
|
| ||||||||||||||||
|