Ответ 1
Я предполагаю, что каждый пропустил предложение WHERE с DELETE или UPDATE в какой-то момент...
Ты знаешь тот, о котором я говорю.
Мы все были там в какой-то момент. Вы получаете это ужасное чувство страха и осознание того, что мой бог действительно сделал это на самом деле.
Конечно, теперь вы можете смеяться над этим, правда, так что продолжайте и делитесь своими неудачами SQL Server с нами.
Еще лучше, если вы можете подробно описать, как вы решили свою проблему, чтобы мы могли учиться на наших ошибках вместе.
Итак, чтобы получить мяч, я пойду первым.....
Это было в мои ранние годы как младший Гуру SQL Server. Я бегал по Enterprise Manager, выполняя несколько административных обязанностей. Вы знаете, как это происходит, проверяя несколько журналов, гарантируя, что резервное копирование работает нормально, небольшая домашняя работа с базой данных, в значительной степени занятой бизнесом на автопилоте и нажатием клавиши ввода в обычных подсказках, которые появляются.
Ой, подождите, было приглашение "Вы уверены, что хотите удалить эту таблицу". Слишком поздно!
Просто чтобы подтвердить наличие каких-либо начинающих администраторов баз данных, удаление производственной таблицы очень плохо!
Излишне говорить, что мировой рекорд был быстро установлен для быстрого восстановления базы данных в новую базу данных, быстро сопровождаемую миграцией таблицы, о да. Разумеется, все остальные не были умнее, но все же были ценным уроком. Концентрат!
Я предполагаю, что каждый пропустил предложение WHERE с DELETE или UPDATE в какой-то момент...
Введено 5 миллионов испытуемых в производственную базу данных. Самая большая ошибка, на мой взгляд, заключалась в том, чтобы дать мне право на запись на производство db в первую очередь.: P Bad dba!
Моя самая большая ошибка SQL Server предполагала, что она была такой же способной, как Oracle, когда дело дошло до concurrency.
Позвольте мне объяснить.
Когда дело доходит до уровня изоляции транзакций в SQL Server, у вас есть два варианта:
Я считаю, что это происходит из ANSI SQL.
(2) является уровнем изоляции по умолчанию и (imho) меньшим из двух зол. Но это огромная проблема для любого долговременного процесса. Я должен был выполнять пакетный загрузку данных и мог делать это только из часов, потому что он убил веб-сайт во время его работы (это заняло 10-20 минут, поскольку оно вставляло полмиллиона записей).
Oracle, с другой стороны, имеет MVCC. Это в основном означает, что каждая транзакция будет видеть согласованное представление данных. Они не будут видеть незафиксированные данные (если вы не установите для этого уровень изоляции). Они также не блокируют незафиксированные транзакции (я был ошеломлен идеей, предположительно, что корпоративная база данных считает это приемлемым на основе concurrency).
Достаточно сказать, что это был опыт обучения.
А ты что, что? Даже MySQL имеет MVCC.
Я изменил все цены на ноль на крупном, производственном, сайте электронной коммерции. Мне пришлось снять сайт и восстановить БД из резервной копии. ОЧЕНЬ УГЛИ.
К счастью, это было LOOONG назад.
забыв выделить предложение WHERE при обновлении или удалении
скрипты обрабатывают и проверяют объекты, зависящие от зависания, и запускают это при производстве
Я работал над платежной системой в большом онлайн-бизнесе. Многомиллионный бизнес.
Запуск восстановления с прошлой недели на экземпляр производства вместо экземпляра разработки. Не хорошее утро.
К счастью, мы только сделаем один взлет, прежде чем вы поймете, что использование транзакций действительно очень, очень тривиально. Я внес поправки в тысячи записей о происшествии раньше, к счастью, откат там...
Если вы запрашиваете живую среду, не проверив свои скрипты, я думаю, что смущение должно быть действительно безрассудным или, возможно, непрофессиональным.
Я видел, как многие другие пропустили предложение WHERE
.
Я сам, сначала использую предложение WHERE
, а затем возвращаюсь к началу строки и вводим остальную часть запроса:)
Один из моих фаворитов произошел в автоматическом импорте, когда клиент изменил структуру данных, не сообщив нам в первую очередь. Столбец номер социального страхования и сумма денег, которую мы должны были заплатить человеку, были переведены. К счастью, мы нашли это, прежде чем система попыталась заплатить кому-то свой номер социального страхования. Теперь у нас есть проверки в автоматическом импорте, которые ищут забавные данные перед запуском и останавливают его, если данные кажутся странными.
Как сказал zabzonk, забыли предложение WHERE в обновлении или два в мой день.
У нас было старое приложение, которое не справлялось с синхронизацией с нашей базой данных HR для обновления имен очень эффективно, главным образом из-за того, как они вносили изменения в названия. Во всяком случае, определенная женщина вышла замуж, и мне пришлось написать запрос на изменение базы данных, чтобы обновить ее фамилию, я забыл, где предложение, и все в названии приложения были теперь Allison Smith.
Столбцы имеют значение NULL, а значения параметров не могут получить правильную информацию...
Я работал с младшим разработчиком, когда тот запутался и назвал "Drop" вместо "Delete" на таблице.
Это была долгая ночь, чтобы восстановить резервную копию...
Изменить: я должен был упомянуть, это было в производственной среде, и таблица была заполнена данными...
Самая большая ошибка заключалась в том, что разработчики "записывали" доступ к производственной БД многие записи DEV и TEST были вставлены/перезаписаны и были добавлены в резервное копирование, пока они не были разумно предложены (мной!), чтобы разрешить доступ только для чтения!
Тип связанного SQL-сервера. Я помню, как важно знать, насколько важно всегда утилизировать SqlDataReader. У меня была система, которая отлично работала в разработке и, как оказалось, работала против базы данных ERP. В производстве он сбил базу данных, потому что я предположил, что этого достаточно, чтобы закрыть SqlConnection и иметь сотни, если не тысячи открытых подключений.
В начале моего совместного занятия я закончил доступ к каждому, кто использовал эту конкретную систему (которая использовалась многими приложениями в моей провинции). В моей защите я был знаком с SQL Server Management Studio и не знал, что вы можете "открывать" таблицы и редактировать определенные записи с помощью оператора sql.
Я пропустил весь пользовательский доступ с помощью простого оператора UPDATE (доступ к этому приложению был предоставлен учетной записью пользователя в блоке SQL, а также определенной записью в таблице доступа), но когда я пошел, чтобы выделить это выражение и запустите его, я не включил предложение WHERE.
Общей ошибкой я сказал. Быстрое исправление было неучтенным для всех аккаунтов (включая учетные записи, срок действия которых истек), пока база данных не будет скопирована. Теперь я либо открываю таблицы и выбираю определенные записи с помощью SQL, либо полностью обертываю все внутри транзакции, за которым следует немедленный откат.
Наши ИТ-подразделения решили перейти на SQL 2005 с SQL 2000.
В следующий понедельник пользователи спрашивали, почему их приложение не работает. Ошибки вроде:
DTS Не найдено и т.д.
Это привело к хорошему набору из 3 суббот в офисе, перестраивающем пакеты в SSIS с хорошим пакетом сверхурочных:)
Не совсем "ошибка", но когда я впервые изучала PHP и MYSQL, я бы тратил часы в день, пытаясь понять, почему мой код не работает, не зная, что у меня есть неправильный пароль/имя пользователя/хост/базы данных для моей базы данных SQL. Вы не можете поверить, сколько времени я потратил на это, и сделать это еще хуже, это не случайный случай. Но LOL, все это хорошо, он строит характер.
Я один раз и только один раз набрал что-то похожее на следующее:
psql> UPDATE big_table SET foo=0; WHERE bar=123
Мне удалось исправить ошибку довольно быстро. С той и другой ошибки мои обновления всегда начинаются с:
psql> UPDATE table SET WHERE foo='bar';
Намного легче избежать ошибок.
Это было до того дня, когда Google мог помочь. Я не сталкивался с этой проблемой с SQL Server, но с этим уродливым старшим кузеном Sybase.
Я обновил схему таблицы в рабочей среде. Не понимая в то время, что хранимые процедуры, использующие SELECT *, должны быть перекомпилированы для ввода новых полей, я продолжил проводить следующие восемь часов, пытаясь понять, почему хранимая процедура, которая выполняла ключевую часть работы, не срабатывала. Только после перезагрузки сервера я понял.
Потеря тысяч долларов и сотен (конечных пользователей) человеко-часов на вашем флагманском сайте клиентов - это довольно образовательный опыт. Настоятельно рекомендуется!!
Здоровое количество лет назад я работал на сайте клиентов, у которого был приятный script, чтобы очистить среду разработчиков от всех заказов, тележек и клиентов.., чтобы облегчить тестирование, поэтому я, конечно, проклял script на анализаторе запросов сервера производства и запустил его.
Взял за 5-6 минут, чтобы запустить тоже, я был сует о том, насколько медленным был сервер dev, пока не появилось количество удаленных строк.:)
К счастью, я только что запустил полную резервную копию, так как я собирался выполнить установку.
Помимо типичной ошибки where where. Ускорился на неверную БД и, следовательно, пришлось запустить восстановление. Теперь я triple проверяю имя моего сервера. К счастью, у меня была хорошая резервная копия.
Я установил максимальную память сервера на 0. В то время я думал, что автоматически скажет SQL-серверу использовать всю доступную память (это было раньше). Нет такой удачи. SQL-сервер решил использовать только 16 МБ, и мне пришлось подключаться в однопользовательском режиме, чтобы вернуть настройки.
Нажмите "Восстановить" вместо "Резервное копирование" в Management Studio.