bash.im ithappens.me zadolba.li

Базы данных

10505

Вы все уволены

Понедельник, полчаса до конца рабочего дня. Только что словил нехилый выброс адреналина, а заодно и проснулся окончательно. А всё потому, что внимательнее надо быть.

Есть у MS SharePoint 2010 одна не очень приятная особенность, если на сервере не включена синхронизация пользователей. Чтобы прибить пользователя на «шарике», дабы ему больше нельзя было назначать задачи, недостаточно просто удалить пользователя в домене — нужно ещё выполнить пару запросов к базе данных «шарика». Метод подобран чисто эмпирическим путём, так что, скорее всего, не очень правильный, но зато работает. После удаления пользователя таким образом его задачи никуда не деваются, просто в списке задач в столбце «Кому назначено» будет пустое место.

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

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

Зато проснулся.

10397

Враги номер один

Я много лет проработал в департаменте IT на заводе крупной западной компании под Питером. Мы там с утра до вечера только и занимались тем, что внедряли что-то новое и улучшали старое. Естественно, не всегда всё было гладко — и далеко не всегда по нашей вине. Точнее, почти всегда причины были за пределами наших возможностей, знаний или полномочий, нам лишь оставалось разгребать всё дерьмо и получать все шишки. Удивить меня тем, что что-то перестало работать в самый ответственный момент, уже, наверное, невозможно. Поэтому, как выглядит подобная проблема изнутри, я знаю не понаслышке. Пинать ногами — самое последнее, что стоит делать. Сначала надо разобраться, а уж потом рубить головы с плеч. Или не рубить.

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

Завод производил кирпич и сухие смеси, а основными покупателями были строительные компании разных масштабов, от крупных застройщиков до бригады дяди Васи, которая строила один коттедж где-нибудь под Пушкином. Вся эта публика с самого утра выстраивала вереницы шаланд, запряжённых в «камазы» у здания второго заводоуправления, где находился отдел обработки заказов. Так как база падала не в первый раз, то на этот случай была инструкция отгрузки не останавливать, а документы выписывать от руки. Девять раз сотрудницы отдела терпели это дело, а на десятый пошли к своему начальнику и объявили забастовку. Мало того, что накладные им приходилось заполнять от руки (а это нереальный геморрой), так ещё они были вынуждены каждый раз оставаться после работы и вместо ужина с мужем и детьми допоздна вводить данные за день в систему. Поэтому в тот раз они встали в позу и сообщили всем, что отгрузки производиться не будут, пока мы всё не починим.

Тут надо понимать специфику. Товар по накладным получают водители грузовиков, мелкие предприниматели или бригадиры, у которых арендована машина с почасовой оплатой. И у всех у них день расписан. Чем больше ходок сделаешь, тем больше заработаешь. А тут какая-то баба с завода заявляет им, что нечто с загадочным названием «база данных» изменило привычное течение их жизни, и вместо того, чтобы ритмично подпрыгивать на сидении своего «камаза», двигаясь в направлении строительного объекта под ласкающие слух звуки шансона и бодрящий запах солярки и папирос, им придётся провести неизвестно сколько времени в ожидании приезда двух дебилов — молодых сотрудников из департамента IT, а потом ещё неизвестно сколько ждать, пока те починят ту загадочную штуку. Для людей, арендовавших машины, мы автоматом стали личными врагами номер один и были поставлены на счётчик.

Так как именно в это утро мы уехали по делам, то узнали о случившимся только из звонка на сотовый. Звонящий с весёлой загадочностью предупредил нас, чтобы мы были очень внимательны, и повесил трубку. До завода мы добрались только в районе обеда. Когда вдалеке показалось здание заводоуправления, стало понятно, чего именно нам стоило так опасаться. У главного входа стояла рассерженная толпа «камазистов» с чем-то похожим на монтировки в руках. Было понятно, что взяли их явно не для ремонта машин. За «камазистами» виднелись мелкие предприниматели с накладными в руках, яростно пытавшиеся переспорить друг друга, кто же из них попал на большую сумму в тот день. В их взгляде читалось, что деньги они терять не намерены, и кому-то придётся за всё это платить. Стояние на свежем воздухе в течение пяти часов привело к тому, что к моменту нашего появления все они хотели только одного — найти и покарать виновных. Сам кирпич им был уже не так интересен. Они честно пытались отдубасить тётенек из отдела обработки заказов, но это было трудно сделать из-за высокой стойки и охранника на входе. Поэтому оставался единственный шанс. К моменту нашего появления им было известно, как мы выглядим, на какой машине ездим, где живём и что предпочитаем в столовой на обед. Не удивлюсь, если у них были наши фото.

Единственное, что спасло нас от суда Линча, это их неправильная позиция на местности. Зная, что у нас нет пропуска, и мы паркуем машину снаружи, они поджидали на ступенях главного входа. Мы же, сообразив, что будем биты, смогли уговорить охранника пустить нас на территорию через ворота для грузового транспорта. Хорошо, что в тот день дежурил охранник, знавший нас в лицо. Когда они заметили наш манёвр, было уже поздно. Ворота закрылись, а мы оказались на охраняемой территории. В итоге нам пришлось поднимать сервер, прячась за шкафом, под проклятья и угрозы, сыпавшиеся на нас с другого конца зала.

Эти люди знали толк в изысканных ругательствах и умели достучаться до глубин души собеседника. Иногда до нас долетал степлер или ручка, ловко подцепленная ими со стойки и брошенная в нашу сторону. Один особо ловкий предприниматель в дублёнке и меховой кепке смог каким-то чудом просочиться через охрану и полчаса прессовал нас, пытаясь выставить счёт за логистические услуги, простой транспорта и моральный ущерб. Правда, в разговоре он использовал более простые и понятные слова, которые я, к сожалению, не могу здесь привести. Пытался он и взять наши паспорта в залог. В итоге мы смогли избавиться от него, лишь сообщив, что он мешает нам восстанавливать работу базы и что из-за него ждать будут все остальные. Толпа призвала его обратно в свои ряды и решила, что сначала нам стоит всё починить, а уж потом они займутся тем, о чём мечтали все утро.

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

10093

Неспешно витая в облаках

Жил да был программист, он же сисадмин, он же «компьютерщик». Писал он базы данных на известном и популярном одно время языке Clipper, ещё под DOS. А тем временем вокруг шёл прогресс, DOS уступал дорогу Windows, появлялись программы с более красивым на тот момент интерфейсом — WinAPI, все дела. Новые программы для работы с базами всё чаще писали на Delphi. Программиста тоже не обошло стороной: Clipper был отложен как устаревший, пользователей новых версий старых баз активно перетаскивали на новый, красивый интерфейс (разумеется, не без помощи руководства — оно оценило современность и красоту), несмотря на всё сопротивление. Тупые юзеры никак не хотели ценить прогресс и всё время норовили остаться в «старой программе» до последнего. Приходилось идти на подкуп, подсовывая им «косынку» с «сапёром» в качестве компенсации.

А потом программист по воле случая был вынужден поработать в качестве оператора баз данных. Проще говоря, вбивать в базу простые цифры: серийный номер, год выпуска, место на стеллаже. Десяток, сотню, тысячу записей. Щёлкнуть мышкой на поле ввода, ввести цифры, щёлкнуть мышкой на другом поле ввода, ввести цифры, щёлкнуть на третьем поле ввода, щёлкнуть на кнопке «Сохранить», щёлкнуть на кнопке «ОК», щёлкнуть на кнопке «Добавить», щёлкнуть на первом поле ввода… И всё это время возить мышой по экрану туда-сюда между кнопками и полями. Стало понятно, почему ценили старую, некрасивую, устаревшую программу: там было достаточно шлёпать по кнопке Enter.

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

Программисты и веб-дизайнеры! Вы не охренели? Каждый раз, как вам придёт в голову заменить что-то старое и примитивное на что-то новое и красивое, попробуйте с этим потом поработать! А то бессмысленное мышевождение по экрану сводит все реальные преимущества на нет.

10038

Авадус кедаврус

Будучи магистром, веду в университете лабораторные работы по курсу «Базы данных» у третьего курса.

Вопрос:
Дана таблица с полями ID (int), Name (varchar(25)), Course (int), Date (datetime). В таблице 3 строки. Необходимо вывести строку с ID = 2.

Ответ студента:
SELECTUS Stroke 2

Звучит, словно заклинание.

9686

Бешеному юзеру семь вёрст не крюк

Жили-были два сервера с промышленными базами данных. На каждом своя, но есть одинаковая табличка и схема. Один сервер принадлежит головной конторе, второй филиалу. К филиальскому подцеплена хитровыдуманная система статистики, а скрипт сбора пишет в таблицу на сервере головной конторы. Ведущий программист четыре месяца не может написать автоимпорт данных из одноимённой таблички базы головной конторы в филиальскую. Больше ни у кого прямого доступа к серверу нет. Филиальское начальство грозит премии отдел лишить, если данные не появятся.

Оставшиеся программисты чешут репу. Debian, Apache, PHP, библиотека OCI… Каждые 12 часов кроном запускается PHP-скрипт, который забирает данные из таблички на сервере головной конторы и вставляет их в одноимённую филиальскую. Все счастливы и довольны. Осталось только выражение лица ведущего программиста увидеть.

9592

Мне только спросить

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

Взялись за работу. Установили эту самую зелёную, месячный триал. Будучи запущенной, зелёная программа становится ODBC-драйвером. То да сё, то недельный перерыв, то более важные дела — месяца не хватило. Что делать дальше?

Напарник на своём ноуте нашёл двухнедельный триал более старой версии. А я заметил такое: программе что-то сносило крышу, и перед запуском она выводила дурацкое сообщение. Сообщение висит, а драйвер уже работает. Работал он и после окончания срока: висит окошко «Купите меня», а я в это время сосу данные через ODBC. К тому времени все запросы мы отладили, так что большего и не требовалось.

9286

Недокументированная функция подмигивания

Распутываю макаронный код довольно большой программы, хранящей большие объёмы данных в MS SQL Server. Доступ к данным организуется через интерфейс программы, но я для ускорения, естественно, чаще правлю данные через базу ручками вместо постоянной компиляции и загрузки программы.

Еду как-то вечером с работы, прикрыла глаза. Время от времени приоткрываю один, чтобы оценить обстановку. В какой-то момент проскакивает шальная мысль: «Надо же, я могу управлять глазом напрямую, а не через базу…»

9019

Сикуэль перегорел

В филиале по мере разрастания базы 1С возникли проблемы со скоростью работы пользователей. Решение лежало на поверхности: установка MS SQL Server и перенос базы 1С туда, но затраты на него не соответствовали бюджету филиала. Перевод всех юзеров в терминал тоже по ряду причин был плохим решением.

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

Я, конечно, руководителю всё объяснил, и вопрос был закрыт. Вечером за кружкой пива поведал эту историю товарищу. И наше больное пьяное воображение стало выдавать дикие вещи: PCI SQL, SQL с USB-интерфейсом, FireWire SQL…

9018

Не грузите меня выгрузками

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

Что же делал их специалист? Скидывал наши файлы к себе на рабочий стол и открывал DBF-файл с данными в Экселе. Показывает мне:

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

Спец закрывает окно, и чудо-юдо-программа спрашивает так ехидно: «Сохранить?» — «Да». Эксель услужливо сохраняет абракадабру вместо дат. Я в шоке перевариваю увиденное. Спец продолжает — само собой, данные не грузятся. Начинаю объяснять ему, что так делать нельзя. Прошу сделать ещё раз, но уже не сохранять. Повторяется всё в точности так, как и в первый раз. Я начинаю закипать. Читаю ему целую лекцию по поводу форматов, но и в третий раз получаю тот же результат.

Забираю флешку, ухожу в потрясённом состоянии, мозг кипит. Слова напоследок:

— Не вешайте мне лапшу на уши! Какой еще формат DBF?! Несите нормальные выгрузки!

Красное от напряжения лицо и брызги слюней в мою сторону. Вот так и работаем.