Хранимые процедуры / схема БД в системе контроля версий - PullRequest
68 голосов
/ 17 сентября 2008

Ребята, вы отслеживаете хранимые процедуры и схему базы данных в выбранной вами системе контроля версий?

Когда вы вносите изменения (добавляете таблицу, обновляете сохраненный процесс, как вы вносите изменения в систему контроля версий?

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

Редактировать: Ого, спасибо за отличные предложения, ребята! Я хотел бы выбрать более одного «Принятого ответа»!

Ответы [ 21 ]

1 голос
/ 17 сентября 2008

В моей компании мы склонны хранить все элементы базы данных в системе контроля версий как отдельные сценарии, так же как и для отдельных файлов кода. Любые обновления сначала выполняются в базе данных, а затем переносятся в репозиторий исходного кода, поэтому сохраняется история изменений.
На втором этапе все изменения базы данных переносятся в базу данных интеграции. Эта база данных интеграции представляет собой то, как должна выглядеть производственная база данных после развертывания. У нас также есть база данных QA, которая представляет текущее состояние производства (или последнее развертывание). После того, как все изменения внесены в базу данных Integration, мы используем инструмент сравнения схем (Red Gate SQL Diff для SQL Server), чтобы сгенерировать сценарий, который будет переносить все изменения из одной базы данных в другую.
Мы обнаружили, что это довольно эффективно, так как он генерирует один скрипт, который мы можем легко интегрировать с нашими установщиками. Самая большая проблема, с которой мы часто сталкиваемся, это то, что разработчики забывают перенести свои изменения в интеграцию.

1 голос
/ 17 сентября 2008

Хранимые процедуры получают 1 файл на sp со стандартом, если существуют операторы drop / create вверху. Представления и функции также получают свои собственные файлы, чтобы их было проще создавать и использовать повторно.

Для начала схема - это всего 1 скрипт, затем мы внесем изменения в версию.

Все это хранится в проекте базы данных Visual Studio, подключенном к TFS (@ work или VisualSVN Server @ home для личных вещей) со структурой папок следующим образом:
- проект
- функции
- схема
- хранимые процедуры
- взгляды

0 голосов
/ 17 сентября 2008

Мы храним все, что связано с приложением, в нашей SCM. Сценарии БД обычно хранятся в своем собственном проекте, но обрабатываются так же, как и любой другой код ... проектирование, реализация, тестирование, принятие.

0 голосов
/ 17 сентября 2008

Я запускаю задание, чтобы записать его в формальную структуру каталогов.

Ниже приведен код VS2005, проект командной строки, вызываемый из командного файла, который выполняет эту работу. Ключи app.config в конце кода.

Он основан на другом коде, который я нашел в Интернете. Слегка боль в настройке, но она работает хорошо, как только она заработает.

Imports Microsoft.VisualStudio.SourceSafe.Interop
Imports System
Imports System.Configuration

Module Module1

    Dim sourcesafeDataBase As String, sourcesafeUserName As String, sourcesafePassword As String, sourcesafeProjectName As String, fileFolderName As String


    Sub Main()
        If My.Application.CommandLineArgs.Count > 0 Then
            GetSetup()
            For Each thisOption As String In My.Application.CommandLineArgs
                Select Case thisOption.ToUpper
                    Case "CHECKIN"
                        DoCheckIn()
                    Case "CHECKOUT"
                        DoCheckOut()
                    Case Else
                        DisplayUsage()
                End Select
            Next
        Else
            DisplayUsage()
        End If
    End Sub

    Sub DisplayUsage()
        Console.Write(System.Environment.NewLine + "Usage: SourceSafeUpdater option" + System.Environment.NewLine + _
            "CheckIn - Check in ( and adds any new ) files in the directory specified in .config" + System.Environment.NewLine + _
            "CheckOut - Check out all files in the directory specified in .config" + System.Environment.NewLine + System.Environment.NewLine)
    End Sub

    Sub AddNewItems()
        Dim db As New VSSDatabase
        db.Open(sourcesafeDataBase, sourcesafeUserName, sourcesafePassword)
        Dim Proj As VSSItem
        Dim Flags As Integer = VSSFlags.VSSFLAG_DELTAYES + VSSFlags.VSSFLAG_RECURSYES + VSSFlags.VSSFLAG_DELNO
        Try
            Proj = db.VSSItem(sourcesafeProjectName, False)
            Proj.Add(fileFolderName, "", Flags)
        Catch ex As Exception
            If Not ex.Message.ToString.ToLower.IndexOf("already exists") > 0 Then
                Console.Write(ex.Message)
            End If
        End Try
        Proj = Nothing
        db = Nothing
    End Sub

    Sub DoCheckIn()
        AddNewItems()
        Dim db As New VSSDatabase
        db.Open(sourcesafeDataBase, sourcesafeUserName, sourcesafePassword)
        Dim Proj As VSSItem
        Dim Flags As Integer = VSSFlags.VSSFLAG_DELTAYES + VSSFlags.VSSFLAG_UPDUPDATE + VSSFlags.VSSFLAG_FORCEDIRYES + VSSFlags.VSSFLAG_RECURSYES
        Proj = db.VSSItem(sourcesafeProjectName, False)
        Proj.Checkin("", fileFolderName, Flags)
        Dim File As String
        For Each File In My.Computer.FileSystem.GetFiles(fileFolderName)
            Try
                Proj.Add(fileFolderName + File)
            Catch ex As Exception
                If Not ex.Message.ToString.ToLower.IndexOf("access code") > 0 Then
                    Console.Write(ex.Message)
                End If
            End Try
        Next
        Proj = Nothing
        db = Nothing
    End Sub

    Sub DoCheckOut()
        Dim db As New VSSDatabase
        db.Open(sourcesafeDataBase, sourcesafeUserName, sourcesafePassword)
        Dim Proj As VSSItem
        Dim Flags As Integer = VSSFlags.VSSFLAG_REPREPLACE + VSSFlags.VSSFLAG_RECURSYES
        Proj = db.VSSItem(sourcesafeProjectName, False)
        Proj.Checkout("", fileFolderName, Flags)
        Proj = Nothing
        db = Nothing
    End Sub

    Sub GetSetup()
        sourcesafeDataBase = ConfigurationManager.AppSettings("sourcesafeDataBase")
        sourcesafeUserName = ConfigurationManager.AppSettings("sourcesafeUserName")
        sourcesafePassword = ConfigurationManager.AppSettings("sourcesafePassword")
        sourcesafeProjectName = ConfigurationManager.AppSettings("sourcesafeProjectName")
        fileFolderName = ConfigurationManager.AppSettings("fileFolderName")

    End Sub

End Module



<add key="sourcesafeDataBase" value="C:\wherever\srcsafe.ini"/>
<add key="sourcesafeUserName" value="vssautomateuserid"/>
<add key="sourcesafePassword" value="pw"/>
<add key="sourcesafeProjectName" value="$/where/you/want/it"/>
<add key="fileFolderName" value="d:\yourdirstructure"/>
0 голосов
/ 17 сентября 2008

Все сценарии (создание объектов и т. Д.) И их сохранение в системе контроля версий Как изменения туда попадают? Это часть стандартной практики того, как все делается. Нужно добавить таблицу? Напишите скрипт CREATE TABLE. Обновить sproc? Отредактируйте скрипт хранимой процедуры.

Я предпочитаю один сценарий для объекта.

0 голосов
/ 17 сентября 2008

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

0 голосов
/ 17 сентября 2008

Я настоятельно рекомендую поддерживать схему и хранимые процедуры в системе контроля версий.

Сохранение версий хранимых процедур позволяет откатить их, если они будут признаны проблемными.

Схема - менее очевидный ответ, в зависимости от того, что вы имеете в виду. Очень полезно поддерживать SQL, который определяет ваши таблицы в управлении исходным кодом, для дублирующих сред (prod / dev / user и т. Д.).

0 голосов
/ 17 сентября 2008

Для проков запишите проки с оболочками скриптов в простые файлы и примените изменения из этих файлов. Если он был применен правильно, вы можете зарегистрировать этот файл, а также сможете воспроизвести его и из этого файла.

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

0 голосов
/ 17 сентября 2008

Мы храним хранимые процедуры в системе контроля версий. То, как мы (или, по крайней мере, я), делаем это, добавляем папку в мой проект, добавляем файл для каждого SP и вручную копируем, вставляем в него код. Поэтому, когда я меняю SP, мне нужно вручную изменить файл исходного кода.

Мне было бы интересно услышать, могут ли люди делать это автоматически.

0 голосов
/ 11 февраля 2015

Если вы ищете простое, готовое решение, наша система Sql Historian использует фоновый процесс для автоматической синхронизации изменений DDL в TFS или SVN, прозрачный для всех, кто вносит изменения в базу данных. По моему опыту, большая проблема заключается в поддержании кода в системе контроля версий с тем, что было изменено на вашем сервере - и это потому, что обычно вам приходится полагаться на людей (даже разработчиков!), Чтобы изменить их рабочий процесс, и не забывать проверять их изменения. после того, как они уже сделали это на сервере. Возложение этого бремени на машину облегчает жизнь каждому.

...