Например: Обновление всех строк таблицы customer, потому что вы забыли добавить предложение where.
Я думаю, что моя худшая ошибка была
truncate table Customers
truncate table Transactions
Я не видел, в какой сервер MSSQL я был зарегистрирован, я хотел убрать свою местную копию... Знакомый " О, s ** t" когда это брало значительно дольше, чем о половине секунды, чтобы удалить, мой босс заметил, что я пошел visibily белый, и спросил, что я просто сделал. О половину минуты спустя, наш монитор места сошел с ума и начал посылать нам по электронной почте говорящий, что место снизилось.
Урок учился? Никогда не сохраняйте связь открытой, чтобы жить DB дольше, чем необходимый absolutly.
Был только до 4:00, восстанавливая данные из резервных копий также! Мой босс чувствовал жалость ко мне и купил меня ужин...
Я работаю на небольшую компанию электронной коммерции, there' s 2 разработчика и DBA, я являющийся одним из разработчиков. I' m обычно не в привычке к обновлению производственных данных на лету, если у нас есть хранимые процедуры we' ve изменился, мы проводим их через исходный контроль и имеем официально установка режима развертывания.
Хорошо так или иначе пользователь приехал ко мне нуждающийся в обновлении, сделанном к нашей базе данных контакта, групповое обновление связка средств. Таким образом, я выписал вопрос в наших условиях испытаний, чем-то как
update facilities set address1 = '123 Fake Street'
where facilityid in (1, 2, 3)
Что-то как этот. Управлял им в тесте, 3 обновленные ряда. Скопированный это к клипборду, приклеиваемому это в предельных услугах на наше производство sql коробка, управляло им, с ужасом наблюдаемый, поскольку это заняло 5 секунд, чтобы выполнить и обновило 100 000 рядов. Так или иначе я скопировал первую линию а не второе, и wasn' t обращающий внимания как я < kbd> CTRL + < kbd> V < kbd> CTRL + < kbd> E ' d.
Мой DBA, греческий джентльмен старшего возраста, вероятно, самый сварливый человек I' встреченный ve не был взволнован. К счастью у нас были резервная копия и это didn' t ломают любые страницы, к счастью та область только действительно в целях показа (и объявляющий/отправляющий).
Извлеченный урок был, обращают внимание на какой you' ре, копирующее и приклеивающее, вероятно, некоторые другие также.
Что-то к эффекту:
'электронная почта обновления установила processedTime=null, sentTime=null'
на производственной базе данных информационного бюллетеня, отправляя каждую электронную почту в базе данных.
Младший DBA должен был сделать:
delete from [table] where [condition]
Вместо этого они напечатали:
delete [table] where [condition]
Что является правильным T-Sql, но, по сути, полностью игнорирует бит where [условие] (по крайней мере, так было тогда на MSSQL 2000/97 - я забыл, на каком именно) и стирает всю таблицу.
Это было весело :-/
Приблизительно 7 лет назад я производил сценарий изменения для client' s DB после работы поздно. Я только изменил хранимые процедуры, но когда я произвел SQL, у меня был " иждивенец сценария objects" проверенный. Я управлял им на своей местной машине, и все, казалось, работали хорошо. Я управлял им на client' s сервер и сценарий имел успех.
Тогда я загрузил веб-сайт, и место было пусто. К моему ужасу, " иждивенец сценария objects" урегулирование сделало 'СТОЛ СНИЖЕНИЯ' для каждого стола, которого коснулись мои хранимые процедуры.
Я немедленно назвал лидерство dev и босса, сообщающего им, что произошло и выяснение, где последняя резервная копия DB могла быть расположена. 2 других devs были conferenced в и заключением, в которое мы приехали, был то, что никакая резервная система не была даже на месте, и никакие данные не могли быть восстановлены. Клиент потерял их весь website' s содержание и я был первопричиной. Результат был 5 000$ кредит, данный нашему клиенту.
Для меня это был большой урок, и теперь я суперосторожен относительно управления любыми сценариями изменения и поддержки DBs сначала. I' m все еще с той же компанией сегодня, и каждый раз, когда шутки подходят о резервных копиях или сценариях базы данных, кто-то всегда поднимает известный " СНИЖЕНИЕ TABLE" инцидент.
Мне когда-то удалось написать курсор обновления, который никогда не выходил. На 2M + стол ряда. Замки просто возросли и возросли до этой RAM на 8 ГБ, с 16 ядрами (в 2002!) коробка на самом деле прекратила работу (разнообразия «синего» экрана).
update Customers set ModifyUser = 'Terrapin'
Я забыл, где пункт - довольно невинный, но на столе с 5 000 + клиенты, мое имя будет на каждом отчете некоторое время...
Урок учился: сделка использования передает и обратная перемотка!
Мы пытались закрепить разоренный узел на группе Oracle.
У модуля управления хранением были проблемы, таким образом, мы нажали деинсталлировать кнопку с намерением повторно установить и скопировать конфигурацию с другого узла.
Хм, оказывается, что деинсталлировать кнопка относилась ко всей группе, таким образом, это бодро удалило модуль управления хранением из всех узлов в системе.
Порождение каждого узла в производственной группе потерпеть крах. И так как ни у одного из узлов не было менеджера по хранению, они wouldn' t подходят!
Here' s интересный факт о резервных копиях... самые старые резервные копии получают вращаемый прилегающий объект, и Вы знаете, каковы Ваши самые старые файлы на базе данных? Конфигурационные файлы, которые разбудили набор, когда система была установлена.
Таким образом, мы должны были сделать, чтобы удаленные люди послали курьера с той лентой, и несколько часов спустя нам повторно установили все и управление. Теперь мы держим местные копии установки и конфигурационных файлов!
Я don' t помнят все sql заявления, которые вышли из-под контроля, но мне изучили один урок - , делают это в сделке , если Вы можете (остерегаться большого logfiles!).
В производстве, если Вы можете, продолжаются старомодный путь:
Довольно распущенный, но вообще рабочий и даже возможный дать эту процедуру кому-то еще, чтобы управлять им во время их ночной смены, в то время как you' ре, получающее Ваш хорошо заслуженный сон:-)
Я думал, что работал в DB тестирования (который wasn' t случай, по-видимому), поэтому когда я закончил ' testing' я управляю сценарием, чтобы перезагрузить все данные назад к стандартным данным испытаний, которые мы используем... ай!
К счастью это произошло на базе данных, которая имела в распоряжении резервные копии, поэтому после выяснения, что я сделал что-то не так, что мы могли легко возвратить оригинальную базу данных.
Однако этот инцидент действительно учил компанию, что я работал на к действительно, отделяют производство и условия испытаний.
Я сделал точно, что Вы предложили. Я обновил все ряды в столе, который вместил потребительские документы, потому что я забыл добавлять " где ID = 5" в конце. Это было ошибкой.
Но я был умен и параноиком. Я знал, что вверну один день. Я выпустил " начните transaction". я выпустил обратную перемотку и затем проверил, что стол был в порядке.
Это wasn' t.
Урок учился в производстве: несмотря на факт нам нравится использовать таблицы InnoDB в MySQL для многих МНОГО причин... быть УВЕРЕННЫМИ Вы haven' t удалось найти одну из нескольких таблиц MyISAM этим doesn' t уважают сделки и Вас can' t откатываются назад на. Don' t доверяют MySQL при любых обстоятельствах и обычно изданию " начните transaction" хорошая вещь. Даже в худшем варианте развития событий (что произошло здесь), это didn' t повреждают что-либо, и это защитило бы меня на таблицах InnoDB.
Я должен был восстановить стол из резервной копии. К счастью у нас есть ночные резервные копии, данные почти никогда не изменяются, и стол - несколько дюжин рядов, таким образом, это было почти мгновенно. Для справки никто не знал, что у нас все еще были non-InnoDB столы вокруг, мы думали, что преобразовали их всех давно. Никто не сказал мне высматривать этот gotcha, никто не знал, что это было там. Мой босс сделал бы ту же точную вещь (если бы он совершил нападки, входят слишком рано прежде, чем напечатать где пункт также).
Я обнаружил, что не понимаю файлы повторного журнала Oracle (терминология? это было давно) и потерял торговые данные за неделю, которые пришлось вручную переписывать из бумажных билетов.
Была и положительная сторона - во время выходных, которые я провел за вводом данных, я узнал много нового об удобстве использования моего экрана ввода торговых данных, который после этого значительно улучшился.
Худший вариант развития событий для большинства людей - производственная потеря данных, но если they' ре, не бегущее ночью, делает копию или копирующий данные на сайт DR, тогда они заслуживают всего, что они получают!
Кит в T-SQL, isn' t ОТ ключевого слова, дополнительного для УДАЛЕНИЯ? Оба из тех заявлений делают точно то же самое...
Худшая вещь, которая произошла со мной, состояла в том, что Рабочий сервер занимает все место в HD. Я использовал SQL-сервер, таким образом, я вижу файлы базы данных и вижу, что регистрация составляла приблизительно 10 ГБ, таким образом, я решаю сделать то, что я всегда делаю, когда я хочу к trunc Файл системного журнала. Я сделал Отделение удаления файла системного журнала и затем свойственен снова. Хорошо я понимаю, что, если файл системного журнала не близок правильно, эта процедура не работает. таким образом, я заканчиваю с mdf файлом и никаким файлом системного журнала. К счастью я пошел на территорию Microsoft, которую я получаю способ восстановить базу данных как восстановление и переместить в другую базу данных.
Я сбросил живую базу данных и удалил ее.
Извлеченный урок: убедитесь, что вы знаете свой SQL - и убедитесь, что вы делаете резервные копии, прежде чем трогать что-то.
Обновление всех рядов потребительского стола, потому что Вы забыли добавлять где пункт.
Это было точно, я сделал: |. Я обновил колонку пароля для всех пользователей к типовой последовательности, которую я напечатал на пульт. Худшая часть его была, я получал доступ к рабочему серверу, и я проверял некоторые вопросы, когда я сделал это. Мои старшие тогда должны были вернуться старая резервная копия и должны были выставить некоторые требования от некоторых действительно раздраженных клиентов. Конечно, есть другое время, когда я действительно использовал удалить заявление, который я don' t даже хочу говорить о;-)
Усеченный стол T_DAT_STORE
T_DAT_STORE был таблицей факта отдела, в котором я работаю. Я думаю, что был связан с базой данных развития. К счастью, у нас есть ежедневная резервная копия, который hasn' t используемый до того дня и данных был восстановлен за шесть часов.
С тех пор я пересматриваю все перед усеченным, и периодически я прошу резервное восстановление незначительных столов только проверять, что резервная копия преуспевает (Сделайте копию isn' t сделанный моим отделом)
Этот didn' t происходят со мной, просто нашим клиентом, который является беспорядком, который я должен был очистить.
У них был SQL-сервер, работающий на дисковом множестве RAID5 - хорошие двигатели hotswap вместе с освещенными дисковыми индикаторами статуса. Зеленый = Хороший, Красный = Плохо.
Один из их двигателей повернулся от зеленого до красного и гения, которому сказали потянуть и заменить (Красный) плохой двигатель, вынимает (Зеленый) хороший вместо этого. Хорошо этот didn' t вполне умеют снизить набор набега полностью - выбирающий несколько удобочитаемого (Красного) против недоступного (Зеленого) в течение нескольких минут.. после понимания ошибки и обмена двигателей назад любые блоки данных, которые были написаны в это время, стали jyberish, поскольку дисковая синхронизация была потеряна)... Несколько 24-прямых часы спустя сочиняя meta программы, чтобы возвратить удобочитаемые данные и восстановить схему среднего размера они назад были в порядке.
Нравы этой истории включают... Никогда не используйте RAID5, всегда ведите резервные копии, тщательные, кого Вы нанимаете.
Я сделал главную ошибку на потребительской производственной системе однажды - к счастью, задаваясь вопросом, почему команда занимала много времени, чтобы выполнить реализованный, что я сделал и отменил ее, прежде чем мир закончился.
Мораль этой истории включает... всегда начинают новую сделку прежде, чем изменить ЧТО-ЛИБО, проверяют результаты, то, что Вы ожидаете и затем и только тогда передаете сделку.
Как общее наблюдение много классов комнаты-rf / ошибки типа могут быть предотвращены, правильно определив ограничения внешнего ключа на Вашу схему и оставшись далеко от любой команды labled ' CASCADE'