Я случайно уронил и воссоздал всю схему базы данных. Это означает, что все строки таблицы данных в схеме были потеряны.

Подождите, что? Как ты мог? Вас уволили? Ты в тюрьме? Вы забыли ГДЕ в УДАЛИТЬ ОТ?

Это не фантастика ужасов, а реальная история. Я совершил ошибку и не могу изменить прошлое. Но, возможно, это может быть вам полезно. Папа всегда говорил мне:

Мудрый человек учится на своих ошибках, но более мудрый человек учится на ошибках других.

О проекте

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

Поставленная задача

В некоторых клиентских базах данных отсутствует столбец в таблице X в схеме Y. В этом случае измените таблицу X, чтобы в ней был нужный столбец. Есть и другие клиенты, в базе данных которых отсутствует вся схема Y. Создайте схему Y со всеми ее таблицами с помощью нашего сценария SQL.

Они предоставили мне несколько строк подключения к разным серверам баз данных. Некоторые из них размещали более одной клиентской базы данных. В общей сложности мне пришлось проверить и внести соответствующие изменения в список из 15 клиентских баз данных.

Что я сделал

С предоставленными мне учетными данными я подключился ко всем серверам БД. Затем, один за другим, я открыл нужную базу данных и схему и выяснил, какую задачу следует выполнять в каждой базе данных: запустить сценарий создания или запустить сценарий модификации.

У меня были оба сценария на странице редактора запросов, и я запускал их по одному. Первая база данных, готово. Вторая БД, готово. И так далее. По мере того, как я заканчивал каждую базу данных, моя уверенность росла. По мере того как моя уверенность росла, росла и моя скорость. Через некоторое время я выполнял задачи как машина - полностью погруженный в поток.

Я допустил ошибку

Угадайте, что - несмотря на то, что я чувствую себя хорошо отлаженной машиной, я все еще человек. В 10-й базе данных я неправильно щелкнул раскрывающееся меню, в котором вы выбираете базу данных. Я был настолько погружен в поток, что вместо этого выполнял действия 10-й базы данных с 9-й базой данных. Девятый требовал доработок, а десятый - скрипт создания. Когда я выполнил это действие, на выходе консоли я несколько раз прочитал «ТАБЛИЦА УДАЛЕНА».

Я едва читал сценарий создания. Я открыл его снова и, как я себе представлял, перед созданием схемы и таблиц он сначала отбросил существующие таблицы, чтобы начать все сначала. О нет. Я удалил данные из всех таблиц в схеме. Я глубоко вздохнул и подумал: Я совершил ошибку. Что теперь?

Что теперь?

Я поговорил с другим разработчиком, назначенным для этого проекта. Он поддержал меня, и мы оба искали решения. Как восстановить из резервной копии? Какой клиент зависел от этой конкретной базы данных? Можем ли мы восстановить данные?

Похоже, в базе данных не было никакой резервной копии, и мы не смогли выяснить, чей клиент владел этой конкретной базой данных. Это вселило в нас надежду - возможно, это была фиктивная база данных. Кроме того, в этих базах данных хранится только обработанная информация из других систем, но не транзакционные данные. Это означает, что в худшем случае мы могли бы выполнить новые извлечения и снова заполнить эти клиентские базы данных. Однако это приведет к потере драгоценного времени.

Нам нужно было проинформировать о ситуации и клиента, и руководителя группы. Почему? Потому что, если данные отсутствовали, какое-то другое приложение, зависящее от них, вылетало из строя или, по крайней мере, отображало пустые отчеты. Если это произойдет, последний клиент свяжется с нашим клиентом, чтобы выяснить, что случилось. Было бы гораздо лучше, если бы наш клиент первым узнал о проблеме от нас.

Мы проинформировали нашего клиента через Slack, но он был оффлайн. Затем мы проинформировали руководителя нашей группы. Он внимательно слушал и был сосредоточен на том, что делать дальше, чтобы смягчить удар. Он позаботился о том, чтобы все, с кем мог связаться клиент, знали о ситуации.

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

Дерьмо случается

Люди делают ошибки. Ваши коллеги сделали ошибки. Вы сделали ошибки. Вы снова будете в будущем. Ошибки случаются не только при разработке программного обеспечения, они случаются в любом контексте. Мы можем узнать о человеческих ошибках на опыте других профессий.

Например, в Японии разработан механизм безопасности под названием Указание и вызов, который сокращает количество ошибок до 85 процентов и сокращает количество несчастных случаев на 30 процентов, и для этого требуется только указать и сказать громкая информация, связанная с выполняемой вами задачей.

В девяти больницах Мичигана реализована еще одна процедура, которая за 18 месяцев сэкономила 75 миллионов долларов на медицинских расходах, связанных с человеческими ошибками. Эта потрясающая процедура, хотите верьте, хотите нет, всего лишь контрольный список.

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

Теперь, очень сознательно, я нарисовал в своей записной книжке простой набросок всего, что мне нужно было проверить в БД, и следующих шагов, которые нужно выполнить в виде контрольного списка. После этого я сказал своему партнеру-разработчику, чтобы он контролировал меня, пока я завершал задачу. Я шаг за шагом просматривал контрольный список, указывая и громко называя то, что я видел, и связанные с этим действия.

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

Последствия

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

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

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

TL;DR

Если ты ошибся

  • Примите это, примите свою ответственность и уменьшите ущерб
  • Внедряйте изменения, чтобы было сложнее повторить ту же ошибку и легче было сделать лучший выбор.
  • Учитесь на этом и развивайтесь
  • Расскажите другим о своем опыте, чтобы помочь им избежать той же ошибки.

Большое спасибо Шеннон Таул и Джордано Москосо за вычитку и отзывы.

На платформе Тектон Лабс