В который раз ловлю себя на мысли, что мне страшно апдейтить продуктивную базу. У вас есть такое? Ну я понимаю, что если перед каждым апдейтом бекап делать (как оно по уму и делается), то ничего страшного нет и быть не может, а как быть, когда надо вот здесь и сразу, а ентер ведь рядом с '? Т.е. одним неловким движением update X set Y=' ' enter. мы отправляем пару тысяч строк данных в небытие? Что вообще за редиска ' рядом с Enter расположил? Конечно, всё это потом восстановится, хотя и с лагом, но в моей компании неосторожный SQL update может отправить в нокаут тысячи сайтов. Есть такое дело или я навыдумывал? На себе проверять не хочу.
Коплю на ланцер
Re: Страшно ли вам апдейтить продуктивную базу без бекапов?
Здравствуйте, opt1k, Вы писали:
O>В который раз ловлю себя на мысли, что мне страшно апдейтить продуктивную базу. У вас есть такое?
Конечно. Не боятся обычно те, кто ещё не грохал базу.
> Ну я понимаю, что если перед каждым апдейтом бекап делать (как оно по уму и делается), то ничего страшного нет и быть не может
Поэтому очень важно иметь очень быстрые и удобные бэкапы/восстановления и автоматизировать выполнение кастомных скриптов с автоматическим бэкапов перед ними. Сильно снижает уровень стресса.
> а как быть, когда надо вот здесь и сразу, а ентер ведь рядом с '? Т.е. одним неловким движением update X set Y=' ' enter. мы отправляем пару тысяч строк данных в небытие?
1. Транзакции. Это обязательно, никогда нельзя работать на продакшне с авто-коммитом, даже на тесте не стоит, чтобы привычки не менять.
2. Нормальные инструменты. Enter не должен выполнять запрос. Должно быть подтверждение в каком-то виде. Хотя бы ";" поставить в конце (когда уже уверен, что опечаток нет).
3. Проверки перед коммитом. Посмотри, сколько строк изменилось апдейтом, сделай селект, убедись что всё нормально.
> Есть такое дело или я навыдумывал? На себе проверять не хочу.
Ну знакомый один раз в одной важной базе грохнул важную таблицу. Там бэкапы на ленточку делались, но восстанавливать это умеют особые спецы, которые по заявке приходят не в ту же минуту, процесс восстановления занимает несколько дней, в общем в Казахстане ряд госорганов в эти дни получил выходные вне графика По-моему там на выходные это всё выпало, так что не всё так страшно, но всё равно очень неприятно.
Re: Страшно ли вам апдейтить продуктивную базу без бекапов?
Здравствуйте, opt1k, Вы писали:
O>В который раз ловлю себя на мысли, что мне страшно апдейтить продуктивную базу. У вас есть такое? Ну я понимаю, что если перед каждым апдейтом бекап делать (как оно по уму и делается), то ничего страшного нет и быть не может...
Если не проверить востанавливается ли из бекапа база, то может
... << RSDN@Home 1.0.0 alpha 5 rev. 0>>
Re: Страшно ли вам апдейтить продуктивную базу без бекапов?
O>Есть такое дело или я навыдумывал? На себе проверять не хочу.
Клонируешь продуктивную базу, накатываешь апдейт на клон, проверяешь, если всё ОК, то два варианта: либо переключаешь клон в продуктив, если такое возможно, либо накатываешь апдейт на продуктив.
Счастье — это Glück!
Re: Страшно ли вам апдейтить продуктивную базу без бекапов?
Здравствуйте, opt1k, Вы писали:
O>В который раз ловлю себя на мысли, что мне страшно апдейтить продуктивную базу. У вас есть такое?
Конечно, мне вообще страшно бой трогать. И не только базу. O> Ну я понимаю, что если перед каждым апдейтом бекап делать (как оно по уму и делается), то ничего страшного нет и быть не может,
Страшного — нет, но неприятного — масса. бекапы-то тоже не мгновенно ресторятся. O> а как быть, когда надо вот здесь и сразу, а ентер ведь рядом с '? Т.е. одним неловким движением update X set Y=' ' enter. мы отправляем пару тысяч строк данных в небытие?
Во-первых, транзакции — наше все. Как уже написали выше — все и всегда заворичивай в транзакции.
А во-вторых, надо объяснять начальству, что здесь и сразу можно только все данные похерить. А что-то путное делать надо по уму.
Re: Страшно ли вам апдейтить продуктивную базу без бекапов?
O>В который раз ловлю себя на мысли, что мне страшно апдейтить продуктивную базу. У вас есть такое? Ну я понимаю, что если перед каждым апдейтом бекап делать (как оно по уму и делается), то ничего страшного нет и быть не может, а как быть, когда надо вот здесь и сразу, а ентер ведь рядом с '? Т.е. одним неловким движением update X set Y=' ' enter. мы отправляем пару тысяч строк данных в небытие? Что вообще за редиска ' рядом с Enter расположил? Конечно, всё это потом восстановится, хотя и с лагом, но в моей компании неосторожный SQL update может отправить в нокаут тысячи сайтов. Есть такое дело или я навыдумывал? На себе проверять не хочу.
В очередной раз убеждаюсь, что представление о том, что "ну вот где-то там процессы поставлены" — миф. Везде бардак
От твоего поста больно становится.
Во-первых, отключить автокоммит, за такое вообще надо по голове бить, больно.
Во-вторых, вы что, вручную производите изменения на продуктиве?! Отлаживаешь скрипт на тестовом окружении и запускаешь уже проверенный код на продуктиве.
Одно неловкое движение кладет тысячи сайтов, бог ты мой...
Re: Страшно ли вам апдейтить продуктивную базу без бекапов?
Здравствуйте, opt1k, Вы писали:
O>В который раз ловлю себя на мысли, что мне страшно апдейтить продуктивную базу. У вас есть такое? Ну я понимаю, что если перед каждым апдейтом бекап делать (как оно по уму и делается), то ничего страшного нет и быть не может, а как быть, когда надо вот здесь и сразу, а ентер ведь рядом с '? Т.е. одним неловким движением update X set Y=' ' enter. мы отправляем пару тысяч строк данных в небытие? Что вообще за редиска ' рядом с Enter расположил? Конечно, всё это потом восстановится, хотя и с лагом, но в моей компании неосторожный SQL update может отправить в нокаут тысячи сайтов. Есть такое дело или я навыдумывал? На себе проверять не хочу.
БД и любые важные данные нужно бэкапить.
Прежде, чем накатывать изменения на продуктивную БД, нужно проверить на тестовой БД, какое влияние окажет обновление.
Постарайся делать коммит только после всех изменений (без промежуточных коммитов).
Прежде чем накатывать изменения, подготовь скрипт для отката сделанных изменений.
Re[2]: Страшно ли вам апдейтить продуктивную базу без бекапов?
AN>БД и любые важные данные нужно бэкапить. AN>Прежде, чем накатывать изменения на продуктивную БД, нужно проверить на тестовой БД, какое влияние окажет обновление. AN>Постарайся делать коммит только после всех изменений (без промежуточных коммитов). AN>Прежде чем накатывать изменения, подготовь скрипт для отката сделанных изменений.
Теоретик? На практике базы могут быть такого огромного размера что для тестовой БД нужно новый датацентр строить.
Re[3]: Страшно ли вам апдейтить продуктивную базу без бекапов?
Здравствуйте, turbocode, Вы писали:
T>Теоретик? На практике базы могут быть такого огромного размера что для тестовой БД нужно новый датацентр строить.
В таких случаях режут данные, но тестовые среды как раз всегда есть, а обновления накатывает
подготовленный персонал по специально разработанному регламенту, а не рядовой кодер в течение
дня.
Ну, это всё разумеется, если данные не представляют собой мусор, который потерять не жалко.
Но если хранится мусор, то непонятно, зачем тратятся деньги на целый датацентр для его хранения...
Re[4]: Страшно ли вам апдейтить продуктивную базу без бекапов?
_AB>В таких случаях режут данные, но тестовые среды как раз всегда есть,
Порезали данные и тестовая среда перестала покрывать всевозможные варианты поведения: ты написал скрипт который работает на тестовом но завалится на проде.
_AB> а обновления накатывает подготовленный персонал по специально разработанному регламенту, а не рядовой кодер в течение дня.
Кто скрипт пишет? Накатить готовый скрипт любой дурак сможет.
Re[5]: Страшно ли вам апдейтить продуктивную базу без бекапов?
Здравствуйте, turbocode, Вы писали:
T>Порезали данные и тестовая среда перестала покрывать всевозможные варианты поведения: ты написал скрипт который работает на тестовом но завалится на проде.
Значит, бездумно порезали.
T>Кто скрипт пишет? Накатить готовый скрипт любой дурак сможет.
Вопрос не в том, чтобы скрипт накатить.
Первый вопрос в том, чтобы справиться с последствиями неудачного наката.
Второй вопрос в том, чтобы удостовериться, что накат прошел успешно.
Re[3]: Страшно ли вам апдейтить продуктивную базу без бекапов?
Здравствуйте, turbocode, Вы писали:
AN>>БД и любые важные данные нужно бэкапить. AN>>Прежде, чем накатывать изменения на продуктивную БД, нужно проверить на тестовой БД, какое влияние окажет обновление. AN>>Постарайся делать коммит только после всех изменений (без промежуточных коммитов). AN>>Прежде чем накатывать изменения, подготовь скрипт для отката сделанных изменений.
T>Теоретик? На практике базы могут быть такого огромного размера что для тестовой БД нужно новый датацентр строить.
Практик. На текущем месте работы так и сделано. БД огромная, есть несколько серверов, работает 24/7. А для тестирования развёрнуты отдельные серверы. Тестовая система не является точной копией боевой (серверов намного меньше, характеристики "железа" хуже), но прежде, чем накатывать изменения в боевую БД, они тестируются.
На предыдущем месте, прежде, чем накатывать изменения на БД клиентов, изменения тестировались сначала нами, потом клиентом.
А если в твой компании от неправильного апдейта могут лечь тысячи сайтов и нет тестовой среды, то однажды — неправильное обновление БД будет сделано. Подумай, какие убытки от этого будут, не разбегутся ли клиенты и не превысят ли убытки затраты на развёртывание тестовой системы.
Re[6]: Страшно ли вам апдейтить продуктивную базу без бекапов?
T>>Порезали данные и тестовая среда перестала покрывать всевозможные варианты поведения: ты написал скрипт который работает на тестовом но завалится на проде. _AB>Значит, бездумно порезали.
А если думно то выйдет что нужна полная копия, чего сделать нельзя.
Re[4]: Страшно ли вам апдейтить продуктивную базу без бекапов?
AN>А если в твой компании от неправильного апдейта могут лечь тысячи сайтов и нет тестовой среды, то однажды — неправильное обновление БД будет сделано. Подумай, какие убытки от этого будут, не разбегутся ли клиенты и не превысят ли убытки затраты на развёртывание тестовой системы.
У авиадиспетчеров тоже есть тестовые самолетики? Не пиши ерунды.
Re[7]: Страшно ли вам апдейтить продуктивную базу без бекапов?
Здравствуйте, turbocode, Вы писали:
AN>>А если в твой компании от неправильного апдейта могут лечь тысячи сайтов и нет тестовой среды, то однажды — неправильное обновление БД будет сделано. Подумай, какие убытки от этого будут, не разбегутся ли клиенты и не превысят ли убытки затраты на развёртывание тестовой системы.
T>У авиадиспетчеров тоже есть тестовые самолетики? Не пиши ерунды.
Самолётов нет, а какой-нибудь имитатор, моделирующий входные данные для диспетчерской системы, наверняка есть.
Re[5]: Страшно ли вам апдейтить продуктивную базу без бекапов?
Здравствуйте, turbocode, Вы писали:
T>У авиадиспетчеров тоже есть тестовые самолетики?
Вообще говоря, есть. Примерно в той же степени, в какой у системы есть тестовые клиенты.
В целом же авиадиспетчеры являются не администраторами системы, не создателями, а всего лишь операторами, пользователями.
Поэтому твой пример абсолютно нерелевантен и показывает твоё полное непонимание сути вопроса.
T>Не пиши ерунды.
Последуй собственному совету.
Re[6]: Страшно ли вам апдейтить продуктивную базу без бекапов?
AN>Самолётов нет, а какой-нибудь имитатор, моделирующий входные данные для диспетчерской системы, наверняка есть.
Вот видишь если начать думать то оказывается что всё можно делать.
Re: Страшно ли вам апдейтить продуктивную базу без бекапов?
Здравствуйте, opt1k, Вы писали:
O>В который раз ловлю себя на мысли, что мне страшно апдейтить продуктивную базу. У вас есть такое? Ну я понимаю, что если перед каждым апдейтом бекап делать (как оно по уму и делается), то ничего страшного нет и быть не может, а как быть, когда надо вот здесь и сразу, а ентер ведь рядом с '? Т.е. одним неловким движением update X set Y=' ' enter. мы отправляем пару тысяч строк данных в небытие? Что вообще за редиска ' рядом с Enter расположил? Конечно, всё это потом восстановится, хотя и с лагом, но в моей компании неосторожный SQL update может отправить в нокаут тысячи сайтов. Есть такое дело или я навыдумывал? На себе проверять не хочу.
Да и это нормально. Вначале все отлаживается на тесте, а потом накатывается и как правило это разные люди, т.е. работа разработчика проверяется тестером и/или DBA.
Здравствуйте, turbocode, Вы писали:
AN>>БД и любые важные данные нужно бэкапить. AN>>Прежде, чем накатывать изменения на продуктивную БД, нужно проверить на тестовой БД, какое влияние окажет обновление. AN>>Постарайся делать коммит только после всех изменений (без промежуточных коммитов). AN>>Прежде чем накатывать изменения, подготовь скрипт для отката сделанных изменений.
T>Теоретик? На практике базы могут быть такого огромного размера что для тестовой БД нужно новый датацентр строить.
Если данные важные, то
— либо апдейты накатывают по частям, инкрементально: изменять не все записи, а только по 0.1% из них, с возможностью отката в виде бэкапов, проверяя корректность данных на каждом шагу.
— либо делают поэтапно, через неломающие совместимые изменения: добавить новое поле с новым значением, обновить все системы, чтобы они стали использовать новое поле вместо старого, грохнуть старое поле.
А просто набирать код SQL-скрипта прямо на прод базе — это просто цирк.
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
Re[7]: Страшно ли вам апдейтить продуктивную базу без бекапов?
Здравствуйте, turbocode, Вы писали:
AN>>Самолётов нет, а какой-нибудь имитатор, моделирующий входные данные для диспетчерской системы, наверняка есть. T>Вот видишь если начать думать то оказывается что всё можно делать.
Можно. Если подумать, то окажется, что развернуть тестовую систему можно. Будут ли в тестовой системе реальные данные или их имитация — вопрос, решаемый в каждом случае отдельно, исходя из важности системы, особенностей реализации, возможностей по развёртыванию тестовой системы и допустимой степени похожести тестовой системы на продуктивную.
Re[8]: Страшно ли вам апдейтить продуктивную базу без бекапов?
AN>Можно. Если подумать, то окажется, что развернуть тестовую систему можно. Будут ли в тестовой системе реальные данные или их имитация — вопрос, решаемый в каждом случае отдельно, исходя из важности системы, особенностей реализации, возможностей по развёртыванию тестовой системы и допустимой степени похожести тестовой системы на продуктивную.
Тестовая не актуальна, запрос который на первый взгляд шустро работает на тестовом может реально медленно работать в реале.
Re[6]: Страшно ли вам апдейтить продуктивную базу без бекапов?
_AB>В целом же авиадиспетчеры являются не администраторами системы, не создателями, а всего лишь операторами, пользователями.
Тогда почему их судят за авиакатастрофы? Они ж всего лишь пользователи. _AB>Поэтому твой пример абсолютно нерелевантен и показывает твоё полное непонимание сути вопроса.
Иди полетай.
Re[7]: Страшно ли вам апдейтить продуктивную базу без бекапов?
Здравствуйте, turbocode, Вы писали:
T>Тогда почему их судят за авиакатастрофы? Они ж всего лишь пользователи.
Пользователя медицинской системы, неправильно использовавшего её, тоже засудят.
Как и оператора АЭС, например.
T>Иди полетай.
К чему тут этот совет?
Re[2]: Страшно ли вам апдейтить продуктивную базу без бекапов?
Здравствуйте, turbocode, Вы писали:
T>Тестовая не актуальна, запрос который на первый взгляд шустро работает на тестовом может реально медленно работать в реале.
Может быть и такое. Например — в тестовой таблице намного меньше данных, отличаются индексы или нагрузка на БД. Результаты тестирования производительности нужно правильно пересчитать из параметров тестовой системы на продуктивную. Тестирование, в том числе нагрузочное, это отдельная сложная задача.
Re[10]: Страшно ли вам апдейтить продуктивную базу без бекапов?
В общем я так понимаю, что у более современных систем писать в базу напрямую нельзя? Или всё-таки можно при наличии должных прав? Странно мне всё это. Одно неловкое движение и пиши пропало.
Коплю на ланцер
Re[3]: Страшно ли вам апдейтить продуктивную базу без бекапов?
Это основа основ нашей корпорации. На ней всё и крутится. А рассказывать про софт, который написан только под нашу контору и только в оной и существует смысла нету.
Коплю на ланцер
Re[5]: Страшно ли вам апдейтить продуктивную базу без бекапов?
Здравствуйте, opt1k, Вы писали:
O>А рассказывать про софт, который написан только под нашу контору и только в оной и существует смысла нету.
Самописная РСУБД с SQL синтаксисом? Ну да, ну да.
Re[3]: Страшно ли вам апдейтить продуктивную базу без бекапов?
Здравствуйте, opt1k, Вы писали:
O>Здравствуйте, Gradiens, Вы писали:
G>>Во-первых, транзакции — наше все. Как уже написали выше — все и всегда заворичивай в транзакции.
O>Что в данном случае имеется ввиду под транзакциями?
Я имею в виду, что в начале любого разрабатываемого скрипта должна начитаться транзакция, а в конце — транзакция должна откатываться.
одно неловкое движение, и... ничего, транзакция откатилась.
А после того, как все отлажено и проверено — откат транзакции заменить на накат.
Например, в сиквеле любой скрипт писать внутри конструкции
BEGIN TRY
BEGIN TRAN
-- Тут пишем всякое опасное
ROLLBACK TRAN
END TRY
BEGIN CATCH
ROLLBACK TRAN
THROW
END CATCH
А потом, когда все отлажено и проверено, первый ROLLBACK заменить на COMMIT
Re[2]: Страшно ли вам апдейтить продуктивную базу без бекапов?
Здравствуйте, TMU_1, Вы писали:
TMU>Отлаживаешь скрипт на тестовом окружении и запускаешь уже проверенный код на продуктиве.
А там у клиента фамилия с хитрым юникодом, который SQL Engine вдруг решает заменить на кавычку или апостроф. Или рекордсет, который недавно импортировали из БД партнёров и он чутка более "вольный" чем ожидаемая структура данных, причём Ваш отдел про это никто не удосужился оповестить. И всё, приплыли, скрипт прокатался без ошибки, но не так как надо — база неконсистентна, система не взлетает.
В общем, бэкапить, бэкапить и ещё раз бэкапить, как говорил В.И.Ленин.
Re[6]: Страшно ли вам апдейтить продуктивную базу без бекапов?
Здравствуйте, _ABC_, Вы писали:
_AB>Самописная РСУБД с SQL синтаксисом? Ну да, ну да.
База DB2. Но писать в базу можно как раз через нашу ERP через консоль. Конечно, есть и более человеческие методы, но в данном случае вопрос именно про запись в лоб.
Коплю на ланцер
Re[4]: Страшно ли вам апдейтить продуктивную базу без бекапов?
Здравствуйте, opt1k, Вы писали:
O>В который раз ловлю себя на мысли, что мне страшно апдейтить продуктивную базу. У вас есть такое?
Не, не бывает. Вот например, мы в Амазоне не так давно базу биллинга для S3 правили. Ой....
Sapienti sat!
Re[2]: Страшно ли вам апдейтить продуктивную базу без бекапов?
Здравствуйте, Cyberax, Вы писали:
C>Здравствуйте, opt1k, Вы писали:
O>>В который раз ловлю себя на мысли, что мне страшно апдейтить продуктивную базу. У вас есть такое? C>Не, не бывает. Вот например, мы в Амазоне не так давно базу биллинга для S3 правили. Ой....
Ну и каков результат? Полетели головы? Я для себя решил поуменьшить писанину в базу, буду только в экстренных ситуациях этим заниматься, а остальное пусть через джиру идёт, с бэкапами и недельными ожиданиями. Мне такой гемор ни к чему, рука дрогнет и готово. Хотя можно использовать эккаунт срини.
Коплю на ланцер
Re[5]: Страшно ли вам апдейтить продуктивную базу без бекапов?
G>>А потом, когда все отлажено и проверено, первый ROLLBACK заменить на COMMIT
O>И всё это я могу провернуть прямо в консоли?
Я приводил пример для сиквела. Там нет нужды что-то проворачивать в консоли.
Допускаю, что для вашей СУБД нет нормальных IDE. Это было бы странно, но допускаю. Но это же не повод апдейтить боевую базу прямо из консоли! Написать скрипт, отладить его на тесте, откатывая транзакцию (или в вашей субд нет транзакций?). Потом накатить на тест. И только потом накатывать на прод.
Допускаю также, что начальство требует результатов прямо здесь и сейчас. Тогда — мои сочувствия.
Но это ваше начальство — вам его и обучать. Начальство же не хочет обедать у повора, который руки после туалета не моет? Ну так объясните ему, что в разработке также нужо соблюдать гигиену.
Re[7]: Страшно ли вам апдейтить продуктивную базу без бекапов?
Здравствуйте, opt1k, Вы писали:
O>Здравствуйте, _ABC_, Вы писали:
_AB>>Самописная РСУБД с SQL синтаксисом? Ну да, ну да.
O>База DB2. Но писать в базу можно как раз через нашу ERP через консоль. Конечно, есть и более человеческие методы, но в данном случае вопрос именно про запись в лоб.
Дам-с, месье знает толк в извращениях!
Тыкать льва палочкой тоже можно, но зачем?
А в чем проблема использовать "более человеческие методы"?
Re[5]: Страшно ли вам апдейтить продуктивную базу без бекапов?
Здравствуйте, opt1k, Вы писали:
G>>А потом, когда все отлажено и проверено, первый ROLLBACK заменить на COMMIT O>И всё это я могу провернуть прямо в консоли?
Можешь, конечно.
Если у вас уж средства совсем фиговые, то напечатать begin tran и только потом печатать запросы
тебе никто не может помешать. Если накосячил, то rollback.
Если и этого нельзя, то ты не консолью пользуешься в фиг знает чем.
Re[3]: Страшно ли вам апдейтить продуктивную базу без бекапов?
Здравствуйте, opt1k, Вы писали:
C>>Не, не бывает. Вот например, мы в Амазоне не так давно базу биллинга для S3 правили. Ой.... O>Ну и каков результат? Полетели головы?
Ввели buddy-систему. Перед запуском любой потенциально мутирующей команды на production-системе — её должен подтвердить второй разработчик.
Sapienti sat!
Re[8]: Страшно ли вам апдейтить продуктивную базу без бекапов?
Здравствуйте, Cyberax, Вы писали: C>Ввели buddy-систему. Перед запуском любой потенциально мутирующей команды на production-системе — её должен подтвердить второй разработчик.