bash.im ithappens.me zadolba.li

Базы данных

6837

АхПочемуНеSQL

Хотя беду предвещало многое, новый виток практики отправил меня в нокаут.

Чтобы повысить оценку, нам предложили БДТам оформить карточки со всевозможными произведениями народного творчества. Что ж, хорошо, а как оформлять? Надо создать папки областей, в папках областей — папки районов, в папках районов — вордовские файлы с названиями деревень и городков. Первый раз в жизни я искренне радовалась, что живу в маленькой стране. Какой шрифт? Какое оформление? Да нам всё равно!

К своему стыду и позору признаюсь, что не сразу оценила размер катастрофы. Перепечатав дома около двух сотен карточек и оформив их по предложенному шаблону, пришла сдавать свои труды. Понеслось!

Попытка № 1. «У вас шрифт не тот, поменяйте».

Попытка № 2. «Почему размер 12-й? Надо 14-й!» Двести карточек, помним?

Попытка № 3. «Ах да, забыли вас предупредить: надо бы ещё жанры всех произведений проставить».

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

Ещё немного — опять уйду в технари, напишу нормальную базу и вернусь. Честно-честно.

6646

Глюки без инъекций

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

Свинью подложил абонент по фамилии Логинов. Передаём пламенный привет разработчику-индусу!

6383

Жрёт как не в себя

Стоит у нас прога для учёта бюджета на Oracle 9. База пухнет просто нереально — видимо, сделана на редкость криво. После серии сбоев вызываем представителя разработчиков. Для таких своя прога — кладезь всех достижений человечества в программировании, а в проблемах могут быть виноваты все, кроме них.

Пришёл паренёк, долго искал, к чему придраться. Не найдя ничего, начал нести пургу, что мы в БД накосячили. Предложили показать, что и где не так. Копался ещё два часа, наконец выдал, что во всём виновата антивируска: проге, мол, не хватает ресурсов. Мы офигеваем: в сервере НР четыре нехилых проца и дюжина гигов оперативки. Что ж, говорим, делать? Он начинает загибать пальцы: типа, всё снести, попробовать БД установить заново и ничего больше на сервер не ставить, кроме этой БД — ей и так здесь не развернуться.

Он ушёл, а мы только руками развели. Запуск человека в космос, высадка на Луну, сложнейшие расчёты термоядерных взрывов — всё было сделано на машинах в тысячу раз слабее, а посчитать муниципальный бюджет нам ресурсов не хватает.

6381

LTFO

Девяносто дремучий год. Огромный по тем временам супермаркет. 3000 квадратных метров, 4000 наименований товаров. Сеть на коаксиале, клиент-серверная система (фронт-энд на новомодной на тот момент Delphi, бэк-энд — SQL-база) и я, молодой админ. Кассы — обычные PC под девяносто пятой виндой. Это сейчас сети супермаркетов, специализированные POS-устройства, а по тем временам сканер штрих-кодов можно было увидеть либо в зарубежных фильмах, либо у нас. Бизнес шёл неплохо, с размахом: под праздники образовывались очереди во все двадцать касс.

Что я делал на той кассе в тот день, за давностью лет совершенно не помню. Факт заключается в том, что я, закончив, просто уступил место кассиру, не сделав злополучный логаут. Под админскими правами интерфейс не сильно-то и отличался, особенно в той части, с которой работал кассир. Как показало расследование, было там окошко ручного ввода цифрового значения штрих-кода, если вдруг сканер сбоит или код плохо пропечатан. Набираешь первые цифры кода или первые буквы названия товара, в окошке высвечивается список товаров, и нужный можно выбрать мышкой или с клавиатуры. Красота! А вот если нажать клавишу Del, выскакивает диалог: «Вы действительно хотите удалить бла-бла-бла?» Кто будет читать, что там написано, когда очередь над душой? А база-то реляционная…

Да, товар каскадом удалился из всех расходных и приходных накладных. Приходные-то — бог с ними, за пять минут восстановили. А вот с продажами вышел ой. Немного повезло, что товар был новый, три недели как закупленный; не повезло, что ходовой. В итоге подняли тысячи накладных, все продажи за эти недели, и сверяли суммы, пропечатанные на бумаге, с суммами накладных в компьютере. Дюжина девчонок осталась после смены и занималась дурной работой. К чести моей и IT-отдела могу сказать, что бэкап за прошлую ночь был, но забивать расходы-приходы за день вышло бы ещё дольше.

Самое смешное, что меня никто не винил. В народном сознании крайней и виноватой оказалась бедная девочка-кассир — то ли от компьютерной безграмотности, то ли у меня были со всеми отношения хорошие. Самому ходить разъяснять народу, что виноват я и только я, было бы ужасно глупо. Я так и не узнал, сколько часов та смена кассиров фиксила проблему. До сих пор как вспомню — перед людьми неудобно.

6281

Селёдка с йогуртом

Ох уж эти конкурсы школяров по информатике!

Кратенькое отступление: мой отец — айтишник. С малых лет он приобщил меня к волшебному миру компьютеров. Теперь, будучи старшеклассником, я не прочь поковыряться в конфигах Апача и прописать пару запросов в базу. Смущает возраст? Меня — ничуть.

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

Настал час «X». В моей презентации было подробно рассказано, какие БД бывают и как писать простенькие запросы. После этого объяснялось понятие триггера. Затем представлялся алгоритм и демонстрировался сам триггер. Потом выполнялись «правильный» и «неправильный» запросы.

Спокойно рассказав, я сел на своё место. Прослушав другие презентации (обычные тесты на VB в пару строчек), решил, что у меня более чем неплохо. Хотя юношеский максимализм никто не отменял, согласен.

Члены жюри, рассказывая о распределении по местам, радостно сообщили мне, что разработка БД — это «вообще не то», и прочая, и прочая. В голову прибежала мысль: «Не поняли. Ну и ладно, зато триггер заработал».

Выходя из кабинета, тётушка, которая присутствовала на защите проектов, произнесла просто обалденную фразу: «Вот если бы ты использовал макросы, то было бы наглядней, и оценку поставили бы выше». Наверное, дома селёдку она потребляет с йогуртом. Съедобно ведь!

6170

WHERE timestamp=420

В последнее время пишу много SQL-запросов. Часто вместо JOIN руки сами печатают JOINT. Пора в отпуск?

6095

Я бился головой о стенки кластера

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

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

Вот такие сны у программистов. Непонятно только, почему БД оказалась такая жёсткая.

6025

Приходите со своим

Работаю PHP-разработчиком. Как обычно, суета, горящие таски и нервные заказчики. На продакшн-сервере клиент обновляет схему БД; мне надо обновить её на стейджинге и на своей машине. Запускаю dbForge, подключаюсь и вижу свою локальную БД. Я грохнул базу на продакшне?!

Морально готовлюсь делать харакири. Проверяю хосты, переподключаюсь — та же картина. Седею. Прошу коллегу подключиться с его машины. Приходит ответ: «Access denied for user xxx@localhost». Как это localhost?..

Nslookup расставил всё на свои места. Доблестные админы решили защитить свою базу: DNS при обращении к хосту с БД возвращал 127.0.0.1. Естественно, о нововведениях нам не было сказано ни слова.

5917

Поадминил — и будет

Устроился работать админом на предприятие. Всегда интересовался цисками, серверными операционками, из никсов вообще не вылезаю — интересно же. С первых дней меня посадили за управление софтиной, под которой крутится местная база данных, и за «программирование СУБД» (на деле — формирование отчётов).

Долго ли, коротко ли — пришёл на предприятие новый мощный сервер. От руководства поступил приказ: внедряем виртуализацию! Полтора месяца я работал без выходных и оставался на ночь. С превеликим удовольствием окунулся в свой привычный мир, где не было столь ненавистных мне «SELECT %неведомая_х#@ня% FROM %tablename%» и тому подобного. Перенёс физические сервера на виртуальные машины, перелопатил AD, перевёл контроллер домена на версию винды посвежее, поднял второй и третий, настроил систему резервного копирования, для чего запустил два сервера на FreeBSD, свалил всю файлопомойку с разных мест на отдельный сервер… В общем, работа была — мёд с малиной пополам. Однако время в раю подошло к концу; задачу я выполнил, и меня отправили обратно — выгружать всякую ерунду из БД.

Первые дни я чувствовал себя, как котёнок, перед которым поставили блюдце со сметаной, дали попробовать и за шкирку оттащили обратно. Я едва не скрипел зубами в трубку телефона, когда юзеры просили «сделать отчётик». «Отчётики» эти элементарно генерировались клиентом той самой управляющей софтины, что стоял у каждого. «Мать вашу за ногу! — думал я, — как же вы, @#$, раньше делали эти „отчётики“, когда я серверами занимался?» Оказалось, никак. Весь наш отдел лишили премии: без «отчётиков» никто не знал, что делать дальше, а самостоятельно делать «отчётики» никто не умел. Генеральный даже не разбирался — просто внял воплям юзверей, что «компьютерщики не сделали нам», и вся недолга.

Сегодня я получил выстрел в голову. Меня предупредили, что заниматься серверами теперь будет новый админ, а на мою долю выпадает… правильно, @#$, создание отчётов! Дескать, ты научился — вот и будешь пользователям помогать.