Я ищу путь к автоматизированному поколение сценариев изменения для наших баз данных.
В настоящее время мы используем выпуск базы данных Visual Studio 2008, который имеет опцию Schema Compare, но я не вижу путь к автоматизированному те действия.
То, что я хотел бы сделать, создают старое и новую базу данных во время моих ежедневных сборок и имеют схему, выдерживают сравнение, генерируют сценарий изменения для различий между теми двумя. (Различия в схеме и процедурах, справочные таблицы могут быть отброшены и воссозданы без проблем),
Кто-либо знает о решении для, или я собираюсь записать мили сценариев для получения этого движения?
Используя любые заплаченные продукты помимо Microsoft инструменты не являются опцией здесь...
Обновление на основе обратной связи:
Подобно тому, что делает @Anton Gogolev, мы используем инструмент, который позволяет вам записывать миграции в файлы XML. Используемый нами инструмент называется Liquibase и поддерживает множество различных вариантов СУБД. Мы не только используем его внутри наших схем разработчика, мы также используем его извне во время установки обновления, которую запускает заказчик.
Вы можете попробовать немного изменить свой подход.
Я разрабатываю инструмент под названием Wizardby , который позволяет вам записывать миграции баз данных в специальном DSL. Таким образом, вместо того, чтобы полагаться на хрупкие алгоритмы сравнения схем (например, ни один из них не может правильно обрабатывать переименования столбцов / таблиц), вы записываете все изменения в схему своей базы данных в файле mdl
, который позже компилируется с помощью Wizardby в платформенно-зависимый SQL. Его также можно интегрировать в процесс сборки.
public void doGet(HttpServletRequest request, HttpServletResponse response) {
String searchString = request.getParameter("searchString");
// process searchString
}
Декодирование параметра выполняется автоматически.
-121--4716294- Для квадратичного программирования с Python используется qp
-солвер из cvxopt
( источник ). Используя это, легко перевести проблему LCP в проблему QP (см. Википедия ). Пример:
from cvxopt import matrix, spmatrix
from cvxopt.blas import gemv
from cvxopt.solvers import qp
def append_matrix_at_bottom(A, B):
l = []
for x in xrange(A.size[1]):
for i in xrange(A.size[0]):
l.append(A[i+x*A.size[0]])
for i in xrange(B.size[0]):
l.append(B[i+x*B.size[0]])
return matrix(l,(A.size[0]+B.size[0],A.size[1]))
M = matrix([[ 4.0, 6, -4, 1.0 ],
[ 6, 1, 1.0 2.0 ],
[-4, 1.0, 2.5, -2.0 ],
[ 1.0, 2.0, -2.0, 1.0 ]])
q = matrix([12, -10, -7.0, 3])
I = spmatrix(1.0, range(M.size[0]), range(M.size[1]))
G = append_matrix_at_bottom(-M, -I) # inequality constraint G z <= h
h = matrix([x for x in q] + [0.0 for _x in range(M.size[0])])
sol = qp(2.0 * M, q, G, h) # find z, w, so that w = M z + q
if sol['status'] == 'optimal':
z = sol['x']
w = matrix(q)
gemv(M, z, w, alpha=1.0, beta=1.0) # w = M z + q
print(z)
print(w)
else:
print('failed')
Обратите внимание:
Можете ли вы быть более конкретными? Например, насколько велика база данных? Сколько у него данных? Насколько быстрым должно быть модернизация?
Я уверен, что для этой проблемы не существует полностью общего и автоматического решения.
Если переименовать столбец и сравнить только схему? Столбец будет удален и создан пустым.
Если разделить столбец «Полное имя» на «Имя», «Среднее имя», «SurName». Как сравнивать схему с ней?
Убедитесь, что эти образцы можно продолжить и продолжить.
Похоже, что в Power Tools Microsoft® Visual Studio Team System 2008 Database Edition есть SqlSchemaCompareTask. http://www.microsoft.com/downloads/details.aspx?FamilyID=73ba5038-8e37-4c8e-812b-db14ede2c354&displaylang=en
На основе первой версии базы данных Edition, а не в обновленном выпуске GDR2.
Функциональность SQL Compare также доступна в виде библиотек и документирована как таковая. Я использовал эти dll в консольном приложении, проблем не было.
Как упоминалось в thijs , Database Edition Power Tools содержит SqlSchemaCompareTask, который вы можете использовать из своего кода для создания сценария изменения:
SqlSchemaCompareTask task = new SqlSchemaCompareTask()
{
SourceConnectionString = "Data Source=source-db; ...",
SourceDatabaseName = "source-database-name",
TargetConnectionString = "Data Source=target-db; ...",
TargetDatabaseName = "target-database-name",
OutputFileName = "changes.sql",
OutputPath = @"C:\path\to\output"
};
task.Execute();
Кроме того, вы можете выполнить его с помощью сценария сборки через msbuild.exe
:
<Import
Project="$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v8.0\TeamData\
Microsoft.VisualStudio.TeamSystem.Data.PowerTools.Tasks.targets"/>
<Target Name ="SchemaCompare">
<SqlSchemaCompareTask
SourceConnectionString="$(SourceConnectionString)"
SourceDatabaseName="$(TargetDatabase)"
TargetConnectionString="$(TargetConnectionString)"
TargetDatabaseName="$(TargetDatabase)"
OutputPath = "$(IntermediateOutputPath)"
OutputFileName = "$(TargetDatabase)SchemaCompare.sql"
IgnoreChecks ="true"/>
</Target>
Вот уже 10 лет я использую DbGhost для реализации управления изменениями sql в большинстве консультантов, в которых я работал; это нескончаемый сюрприз по поводу отсутствия управления изменениями SQL, которое могло бы сравниться с тем, что предусмотрено для кода приложения.
Поддержка Innovartis не имеет себе равных в предоставлении помощи в реализации как подхода непрерывной интеграции для поддержки баз данных, так и процесса выпуска и путей обновления. Совсем недавно я применил его к проекту Monorail / nHibernate, над которым я работаю, который генерирует сценарии обновления из нашей модели домена POCO, которая определяет нашу базу данных. Они создаются и применяются с помощью нашей сборки CruiseControl при каждой регистрации.
Более конкретно для вашей ситуации, вы можете указать DbGhost на версию выпуска (v1.0) вашей базы данных и создать сценарий для исходных и статических данных. Затем это можно ввести в систему управления версиями. Это необязательные шаги, но разумная отправная точка.
DbGhost также может сравнивать (и / или создавать) базу данных, созданную из исходной или текущей базы данных (скажем, v1.1), и предоставлять отчет сравнения, сценарий обновления или обновлять целевую базу данных.
Мы используем его для генерации всех сценариев обновления (повтора и отката) для обновления между каждой дельтой.
В течение 10 лет всякий раз, когда я обнаруживал проблему с продуктом, полезные ребята из службы поддержки всегда вежливо указывали либо на ошибку в моем процессе, либо на одну из многих точек расширения в процессе, которые мне нужно использовать, чтобы преодолеть мою проблема. Он, безусловно, обрабатывает удаление столбцов, индексов, данных, абсолютно всего. Настройки позволяют автоматически вносить только простые изменения и могут не работать при предупреждениях или удалении объектов (столбцов / таблиц), все они поддерживаются в файлах настроек xml (у нас есть более подходящие настройки в нашей сборке разработки и более строгие для сборки в реальном времени).
Я бы не рассматривал разработку Sql Server без него, и это произвело революцию в моей разработке SQL.
Если вам нужны более подробные сведения о рекомендуемом процессе или более подробные инструкции, пожалуйста, дайте мне знать.