Что такое лучшие практики развертывания и отслеживания изменений пакетов SSIS?

Мой любимый способ заняться этим с эти configSource атрибут. По общему признанию я только использую это на одном элементе (<connectionStrings>), но он действительно обеспечивает простой способ загрузить и различные сегменты web.config (который я делаю в течение времени установки с помощью проекта WebSetup).

5
задан Brann 15 October 2009 в 10:05
поделиться

5 ответов

Что ж, мы сохраняем все в управления источником. Наши пакеты SSIS сохраняются как файлы DTSX и помещаются в систему управления версиями. Мы используем версии из системы контроля версий всего для продвижения в QA и Prod. Мы выполняем всю нашу настройку для пакетов SSIS, используя таблицы конфигурации в базе данных, которую мы настроили для управления метаданными для пакетов SSIS. Обычно он состоит из всех наших строк подключения, а также некоторых переменных, которые мы могли бы установить во время выполнения. У нас также есть все наши журналы, настроенные в этой базе данных. Одним из достоинств этого является то, что становится намного проще загружать изменяемые пакеты, потому что таблицы конфигурации обычно не нужно изменять, и все, что нужно, - это загрузить измененный файл dtsx в то место, откуда он будет запускаться. И даже если нам нужно добавить новую ссылку в таблицу конфигурации, это будет вставка в таблицу, и ее легко запрограммировать для процесса обновления.

Вы также можете использовать файлы конфигурации xml, чтобы легко изменить свои конфигурации (они также могут быть хранится в системе управления версиями), но мы предпочитаем иметь все в базе данных ETL, где мы храним метаданные.

2
ответ дан 14 December 2019 в 08:55
поделиться
  1. Я не знаю, можно ли вообще автоматизировать обновление пакета.
  2. Для развертывания пакетов SSIS создайте файл манифеста
  3. Вы можете написать сценарии SQL для создания расписаний и заданий SQL , а затем вызвать этот сценарий, используя какой-нибудь сценарий vb.net или что-то в этом роде.
  4. Чтобы добавить сценарии SQL в TFS, откройте SQL Server Management Studio> Файл> Создать> Проект> Скрипты SQL Server. Добавьте сценарии в папку «Запросы», а затем вы сможете добавить это решение в TFS. Я никогда этого не пробовал. Вместо этого я вручную копирую файлы сценариев в TFS.

На мой взгляд, нет смысла создавать полноценную утилиту развертывания для развертывания пакетов SSIS, поскольку это очень редкое действие. Развертывание / установка должны быть простыми, когда мы распространяем программный продукт среди нетехнических пользователей, чтобы он был удобен для пользователя.

1
ответ дан 14 December 2019 в 08:55
поделиться

В точке 1 (автоматизация развертывания):

Пакеты SSIS можно развертывать из командной строки с помощью dtutil.exe .

В следующем примере выполняется развертывание локальный файл c: \ test.dtsx в хранилище MSDB на server1 с именем test_package :

dtutil.exe /FILE C:\test.dtsx /dests server1 /COPY SQL;test_package

Он будет выполнять любую комбинацию импорта / экспорта для все различные варианты хранилища SSIS, если вы можете выработать комбинацию используемых параметров.

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

В пунктах 2 и 3 (управление исходным кодом агента SQL):

Как уже говорили другие, задания и расписания агента SQL могут быть написаны как сценарий T-SQL (в разделе «Управление» Студия, щелкните правой кнопкой мыши задание и выберите Задание сценария для ... ), которое хранится в системе управления версиями и развертывается, как любой другой сценарий T-SQL.

Наше дерево управления версиями БД настроено с одной папкой на производственный сервер, содержащий одну подпапку для каждой пользовательской базы данных плюс дополнительную подпапку с именем _config , которая содержит сценарии для объектов уровня сервера, таких как имена входа, связанные серверы и задания агента SQL.

(На самом деле это не имеет отношения к вашему вопросу, но мы храним пакеты SSIS в их собственном дереве, так как они могут применяться к нескольким серверам)

Мы не используем TFS, поэтому я не могу комментировать особенности вставляя в него скрипты.

Наше дерево управления версиями БД настроено с одной папкой на рабочий сервер, содержащей одну подпапку для каждой пользовательской базы данных, плюс дополнительную подпапку с именем _config , которая содержит сценарии для объектов уровня сервера, таких как логины, связанные серверы и Задания агента SQL.

(На самом деле это не имеет отношения к вашему вопросу, но мы храним пакеты SSIS в их собственном дереве, так как они могут применяться к нескольким серверам)

Мы не используем TFS, поэтому я не могу комментировать особенности вставляя в него скрипты.

Наше дерево управления версиями БД настроено с одной папкой на производственный сервер, содержащей одну подпапку для каждой пользовательской базы данных, плюс дополнительную подпапку с именем _config , которая содержит сценарии для объектов уровня сервера, таких как логины, связанные серверы и Задания агента SQL.

(На самом деле это не имеет отношения к вашему вопросу, но мы храним пакеты SSIS в их собственном дереве, так как они могут применяться к нескольким серверам)

Мы не используем TFS, поэтому я не могу комментировать особенности вставляя в него скрипты.

3
ответ дан 14 December 2019 в 08:55
поделиться

Пункт 1 см. На этом сайте http://jessicammoss.blogspot.com/2008/05/ssis-configuration-to-configuration-to.html

Некоторое время назад у меня был тот же вопрос, и этот сайт мне очень помог. Мне интересно узнать о других точках, а также о том, что моя команда развертывает их вручную, как и вы, но я подумал, что поделюсь тем, что знал.

1
ответ дан 14 December 2019 в 08:55
поделиться

Что касается создания сценариев для объектов, вы можете сделать это через DMO, SMO, PowerShell, VBScript и любое другое количество методов. Я до сих пор использую свой старый сценарий VB DMO, который я написал, основанный на коде с нескольких веб-сайтов, и выполняю этот код через задачу сценария SSIS. Настройте задание агента SQL Server, которое выполняет пакет, и добавьте шаг, который проверяет код. Я не знаком с TFS, но я сделал это как с Visual SourceSafe, так и с Perforce без каких-либо проблем. Уловка заключается в том, что вам просто нужно научиться выполнять автоматическую регистрацию в командной строке, которая объединяет изменения (обновления, удаления, создания). Ниже приведена моя древняя задача сценария VB.NET. Имейте в виду, что вы можете частично заменить его переменными, чтобы сделать его более динамичным.

' Microsoft SQL Server Integration Services Script Task
' Write scripts using Microsoft Visual Basic 2008.
' The ScriptMain is the entry point class of the script.

Imports System
Imports System.Data
Imports System.Math
Imports Microsoft.SqlServer.Dts.Runtime
Imports System.IO
Imports System.Text.RegularExpressions


<System.AddIn.AddIn("ScriptMain", Version:="1.0", Publisher:="", Description:="")> _
Partial Class ScriptMain

Private Sub ScriptMain_Startup(ByVal sender As Object, ByVal e As System.EventArgs)

End Sub

Private Sub ScriptMain_Shutdown(ByVal sender As Object, ByVal e As System.EventArgs)
    Try
        ' Unlock variables from the read-only and read-write variable collection properties
        If (Dts.Variables.Count <> 0) Then
            Dts.Variables.Unlock()
        End If
    Catch ex As Exception
    End Try
End Sub

Enum ScriptResults
    Success = DTSExecResult.Success
    Failure = DTSExecResult.Failure
End Enum
Private Function CleanFileName(ByVal FileName As String) As String


    FileName = Regex.Replace(FileName, "[/\\:?=*<>]", "-")
    Return FileName

End Function







Public Sub Main()

    ''THESE MUST BE SET AND THE AGENT ACCOUNT MUST HAVE WRITE ACCESS TO THE DRIVE SELECTED
    Dim FolderName = "\\Your\Folder\Hierarchy\"
    Dim ServerName = "your-server-name"

    Dim ScriptOptions As Integer
    ScriptOptions = 1 ' Generate Drop
    ScriptOptions = ScriptOptions Or 4 ' Generate Default (Create)
    ScriptOptions = ScriptOptions Or 34 ' Generate Permissions (Database & Object)

    Dim ScriptOptions_Jobs As Integer
    ScriptOptions_Jobs = 1 ' Generate Drop
    ScriptOptions_Jobs = ScriptOptions_Jobs Or 1203765415 ' Other stuff


    Dim ScriptOptions_Tables As Integer
    ScriptOptions_Tables = 1 ' Generate Drop
    ScriptOptions_Tables = ScriptOptions_Tables Or 4 ' Generate Default (Create)
    ScriptOptions_Tables = ScriptOptions_Tables Or 34 ' Generate Permissions (Database & Object)
    ScriptOptions_Tables = ScriptOptions_Tables Or 73736 ' Generate Indexes

    Dim EXCLUDE_LIST = "master/tempdb/model/msdb"

    ''Standardize the end of the folder name to include \.
    If Right(FolderName, 1) <> "\" Then
        FolderName = FolderName & "\"
    End If

    ''Declare a folder that can be deleted.  Delete doesn't like ending with \.
    Dim FolderNameDelete = FolderName
    If Right(FolderNameDelete, 1) = "\" Then FolderNameDelete = _
        Left(FolderNameDelete, Len(FolderNameDelete) - 1)

    'Used for file system tasks.
    Dim oFSO = CreateObject("Scripting.FileSystemObject")

    'Delete if the folder exists.  If you don't delete the folder and populate the scripts,
    'then objects that were deleted from the database won't disappear and the Perforce diff
    'won't recognize that the objects need to be deleted in Perforce.
    If oFSO.FolderExists(FolderName) = True Then
        oFSO.DeleteFolder(FolderNameDelete, True)
    End If

    'Create the folder now so that we have a clean script destination.
    oFSO.CreateFolder(FolderName)
    oFSO.CreateFolder(FolderName & "Databases")
    oFSO.CreateFolder(FolderName & "Jobs")

    'connect to the server instance using trusted credentials so we dont have password stored in a file and we dont have
    'to worry about password changes breaking anything
    Dim oServer = CreateObject("SQLDMO.SQLServer")
    With oServer
        .LoginSecure = True
        .Connect(ServerName)
    End With

    'Script out SQL Server Agent Jobs.
    For Each oJob In oServer.JobServer.Jobs
        oJob.Script(ScriptOptions_Jobs, FolderName & "Jobs\" & CleanFileName(oJob.Name) & ".sql")
    Next


    'loop through all databases and excluding those in the EXCLUDE_LIST above, script out all the stored procedures.
    'You could easily change this to read from a table or to let you pass in a different list.
    For Each oDB In oServer.Databases

        If InStr(1, EXCLUDE_LIST, oDB.Name) = 0 Then

            'each db will get a folder in the main folder (FolderName) that will act as a container for the backup
            'folders we'll create each time we run this
            Dim dbFolder = FolderName & "Databases\" & oDB.Name & "\"

            oFSO.CreateFolder(dbFolder)
            oFSO.CreateFolder(dbFolder & "Stored Procedures")
            oFSO.CreateFolder(dbFolder & "Tables")
            oFSO.CreateFolder(dbFolder & "User-Defined Functions")
            oFSO.CreateFolder(dbFolder & "Views")

            'script out all the non-system procs
            For Each oProc In oDB.StoredProcedures
                If oProc.SystemObject = False Then
                    ''262150= SQLDMOScript_ObjectPermissions + SQLDMOScript_PrimaryObject + SQLDMOScript_OwnerQualify
                    oProc.Script(ScriptOptions, dbFolder & "\Stored Procedures\" & CleanFileName(oProc.Owner) & "_" & CleanFileName(oProc.Name) & ".sql")
                End If
            Next

            'script out all the non-system views
            For Each oView In oDB.Views
                If oView.SystemObject = False Then
                    ''262150= SQLDMOScript_ObjectPermissions + SQLDMOScript_PrimaryObject + SQLDMOScript_OwnerQualify
                    oView.Script(ScriptOptions, dbFolder & "\Views\" & CleanFileName(oView.Owner) & "_" & CleanFileName(oView.Name) & ".sql")
                End If
            Next

            'script out all the non-system user-defined functions
            For Each oUDF In oDB.UserDefinedFunctions
                If oUDF.SystemObject = False Then
                    ''262150= SQLDMOScript_ObjectPermissions + SQLDMOScript_PrimaryObject + SQLDMOScript_OwnerQualify
                    oUDF.Script(ScriptOptions, dbFolder & "\User-Defined Functions\" & CleanFileName(oUDF.Owner) & "." & CleanFileName(oUDF.Name) & ".sql")
                End If
            Next

            'script out all the non-system tables
            For Each oTable In oDB.Tables
                If oTable.SystemObject = False Then
                    ''262150= SQLDMOScript_ObjectPermissions + SQLDMOScript_PrimaryObject + SQLDMOScript_OwnerQualify
                    oTable.Script(ScriptOptions_Tables, dbFolder & "\Tables\" & CleanFileName(oTable.Owner) & "_" & CleanFileName(oTable.Name) & ".sql")
                End If
            Next


        End If
    Next

    'close it all out
    oServer.DisConnect()
    oServer = Nothing
    oFSO = Nothing

    Dts.TaskResult = ScriptResults.Success
End Sub

End Class

0
ответ дан 14 December 2019 в 08:55
поделиться
Другие вопросы по тегам:

Похожие вопросы: