SQL Server ОТМЕНА - PullRequest
       6

SQL Server ОТМЕНА

2 голосов
/ 11 декабря 2008

Я работаю на полставки (студент на дневном отделении), и компания, в которой я работаю, использует SQL Server 2005. В SQL Server мне кажется странным то, что если вы делаете скрипт, который включает вставку, обновление и т. Д. любой реальный способ отменить его, кроме отката или использования транзакций.

Вы можете сказать, что не так с этими двумя вариантами? Хорошо, если, например, кто-то делает оператор обновления и забывает вставить предложение WHERE, вы внезапно обнаруживаете, что обновлено 13 000 строк, и внезапно все клиенты в этой таблице называются «bob». Теперь у вас есть гнев на 13 000 бобов, с которым этот «кто-то» забыл использовать транзакцию, и если вы сделаете откат, вы отмените критические изменения, которые были необходимы в других областях.

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

Ответы [ 7 ]

5 голосов
/ 11 декабря 2008

SET IMPLICIT_TRANSACTIONS - это то, что вы, вероятно, ищете.

5 голосов
/ 11 декабря 2008

Я не верю, что ты что-то пропустил. Использование транзакций для предотвращения подобных ошибок - лучший механизм, и это тот же механизм, который Oracle использует для защиты конечного пользователя. Разница в том, что Oracle неявно начинает транзакцию для вас, тогда как в SQL Server вы должны делать это явно.

3 голосов
/ 11 декабря 2008

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

Проверьте эту ссылку для получения дополнительной информации: http://msdn.microsoft.com/en-us/library/ms175158.aspx

0 голосов
/ 01 августа 2009

Если я делаю что-либо с каким-либо риском в SQL Server, я пишу скрипт так:

НАЧАТЬ ТРАН

Вставить .... что угодно

Обновление .... что угодно

- COMMIT

Последняя строка является целевым комментарием: сначала я запускаю строки, затем проверяю, нет ли ошибки, а затем выделяю только слово Commit и выполняю его. Это работает, потому что в Management Studio вы можете выбрать часть T-SQL и просто выполнить выбранную часть.

Есть несколько преимуществ: неявные транзакции тоже работают, но это не значение по умолчанию для SQL Server, поэтому вы должны помнить, чтобы включить его или установить параметры, чтобы сделать это. Кроме того, если он включен постоянно, я нахожу, что людям легко «забыть» и оставить незафиксированные транзакции открытыми, что может блокировать других. Это в основном потому, что это не стандартное поведение, и люди SQL Server к этому не привыкли.

0 голосов
/ 11 декабря 2008

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

0 голосов
/ 11 декабря 2008

Насколько я понимаю, в SQL Server 2008 добавлена ​​функция аудита, которая регистрирует все изменения, сделанные пользователями в различных базах данных, а также имеет возможность откатывать их по факту.

Опять же, это то, что я прочитал или услышал от нашего администратора, но, возможно, стоит посмотреть.

РЕДАКТИРОВАТЬ: После просмотра, он, кажется, дает возможность откатить только изменения схемы, но не изменения данных (триггеры DDL).

0 голосов
/ 11 декабря 2008

Я думаю, что транзакции работают хорошо. Вы можете откатить БД (к предыдущей резервной копии или указать в журнале), но я думаю, что транзакции намного проще.

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