Как отменить изменения SQL с помощью установщика - PullRequest
0 голосов
/ 15 января 2011

У меня есть установщик для установки процедур, сценариев, представлений и т. Д. В SQL Server 2005/2008.

Теперь я хочу добавить условие в установщик, например, если при установке возникла ошибка, я хочуотменить все изменения, сделанные на сервере SQL.

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

Может ли кто-нибудь направить меня, если он сделал то же самое?

Чтобы указать, что я использую установщик WIX.

Также, если кто-то попробовал SMO, это очень поможет.

Ответы [ 2 ]

0 голосов
/ 15 января 2011

Откат сценария обновления SQL может быть затруднен, особенно если этот сценарий может завершиться сбоем в любой момент. Проблема в том, что встроенный механизм отката не может обрабатывать, например, большинство операторов DDL. Таким образом, вам придется реализовать такие откаты вручную с помощью компенсирующих сценариев, которые отменяют изменения.

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

0 голосов
/ 15 января 2011

Самый простой и надежный способ справиться с этим - вообще не использовать установщик.Скорее заверните весь ваш SQL в блок транзакции.Использование этого означает, что если по каким-либо причинам произойдет сбой (как часть SQL), то транзакция будет корректно откатываться, и все ваши изменения в БД будут отменены, и вам не придется реализовывать ничего, кроме определения блока транзакции в вашем операторе SQL.

Предполагая, что MS SQL больше информации о транзакциях можно найти здесь:

http://msdn.microsoft.com/en-us/library/ms188929.aspx

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

Если вам нужно запустить «откат» компонента SQL вашей установки, если какой-либо другой компонент вашей установки завершится неудачно.Тогда, к сожалению, вы не можете использовать транзакции таким образом.Однако в этом случае вы можете просто вызвать скрипт отката, который удалит любые SP / таблицы и т. Д., Которые вы добавили.Тем не менее, в .NET вы можете быть обработчиком транзакций SQL в коде (например, C #), если он вам доступен, вы можете использовать это, чтобы обернуть все.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...