вторник, 16 марта 2010 г.

Крах хранилища данных КУГИ

Привет.
Как я уже говорил ранее, я работаю над проектом автоматизации деятельности КУГИ Санкт-Петербурга. И основное направление этой деятельности - управление городской собственностью. Задач много, и все их перечислять сейчас нет никакой необходимости.
А конкретно сегодня мне хотелось остановиться на событии, которое произошло еще в начале марта... Числа эдак 2 или 3.
Событие это можно было обозначить одним емким словом, которое в переводе с русского на русский означает
"полное прекращение какой-либо полезной деятельности".
Субъектов деятельности был сервер хранилища данных КУГИ.
Остановлюсь на этом понятии подробнее.
КУГИ, как орган государственной власти, подчиняется вышестоящим властным структурам. А как реализуются функции управления???? ВЕРНО. По-разному. Но один из способов - периодический контроль деятельности подчиненных, основанный на предоставлении отчетов о деятельности.
Для получения такой отчетности наша проектная группа разработала и внедрила в КУГИ Хранилище данных.
Принцип его формирования виден на рисунке.

Что можно понять из этого наскального рисунка? Автор вложил следующий смысл.
  1. Имеем несколько оперативных баз данных. С ними работают пользователи и регистрируют в них результаты своей повседневной деятельности.
  2. Наша задача заключается в том, чтобы сведения об этих результатах были превращены в отчеты о деятельности. При этом эти отчеты должны быть:
  • согласованы между собой - этого сложно добиться, если формирование отчетов производиться по информации из оперативных баз данных. Данные меняются и два отчета об одном и том же, но представляющие данные в различных разрезах могут дать различные итоговые результаты, т.к. пользователи работают с данными.
  • содержать одинаковые результаты при формировании их в разное время с одинаковыми входными параметрами.
Этого можно добиться, если информацию их оперативных баз данных перенести в нужный момент времени в отчетную базу и сохранять там эту информацию без изменения.
Так мы ввели понятие "СРЕЗ".

Срез - это обработанная процедурами ETL(extract, transform, load) и загруженная в хранилище данных информация из оперативных баз данных. В последствии информация среза не модифицируется и сохраняется в неизменном виде. Эта информация будет отражать состояние дел на момент в области управления имуществом на момент ее обработки и загрузки. Если в последствии для формирования того или иного отчета мы будем использовать "срез" к примеру от 01.04.2009, то получим согласованные данные на эту дату. И сколько раз бы мы не запускали один и тот же отчет для одного и того же среза  в разное время, мы всегда будем получать одинаковые данные.

Для построения хранилища мы используем Oracle WareHouse Builder. Это средство позволяет проектировать хранилище и процедуры преобразования данных из источников в целевую базу данных. Подробнее см. здесь www.oracle.com/global/ru/solutions/business_intelligence/dw_home.html Как показано на рисунке, процедуры ETL очищают данные, согласуют их между собой (оперативных баз-то много) и переносят в целевую базу или хранилище данных.
Вся эта кухня успешно функционировала с 2008 года. Пока не случился физический крах сервера хранилища.
Знающий человек скажет, ну и что... Должен быть backup, можно восстановиться на момент падения и т.п.
ВСЕ ВЕРНО, но ... вообще дело было так.

Хронология событий..
1. Объема своего дискового массива на сервере для хранения срезов стало не хватать.
2.  Системные админы КУГИ (которые должны обеспечивать эксплуатацию оборудования и серверного хозяйства) подключили сервер к внешнему дисковому массиву и выделили для хранилища на внешнем массиве какой-то раздел (гигов 300- 400).
3. Базовый админ КУГИ добавил в TBS еще пару datafiles, которые расположил на внешнем массиве.
4. В эти файлы началась писаться какая-то информация процедурами ETL при снятии срезов.
5. Пользователи счастливы..
<skipped>
6. Системный админ перегружает внешний массив, забыв что у него есть новый потребитель в виде сервера базы данных храналища.
7. Сервер Oracle хранилища начинает ругаться в alert_log, что произошел error операционной системы и два datafiles не доступны для чтения. И, как следствие, переводит из в OFFLINE.
8. У базового админа много дел и в alert_log он не смотрит...
9. Пользователи уже сдали свои годовые отчеты, хранилище до середины марта им не нужно и они счастливы.
10. Не установленный следствием "нехороший человек" удаляет все архивные логи, за период 3 недель, которые необходимы для восстановления двух переведенных в offline файлов.
<skipped> проходит 3 недели
11. Первое обращение в системе отчетности выявляет проблему. Один TBS, в котором хранятся срезы по финансовой тематике, содержит offline файлы данных.
12. Пользователи перестают быть счастливы.
13. Админы перестают быть счастливы.
14. "Нехороший человек" затаился...
 
Всех "спасло" только следующее:
1. Наша проектная группа не стала впадать в отчаянье.
2. Мы понимали, что datafiles, которые переведены в OFFLINE, на самом деле содержат хорошие и согласованные данные, т.к. записи в эти файлы до падения не производилось в течении двух недель (слои никто не формировал).
3. Надо было объяснить нашу позицию из п.2 серверу ORACLE, который упорно считал, что данные NEED RECOVERY. Его мнение основывалось на SCN, которые у двух файлов отличались от всех остальных.
Покопавшись в инете мы нашли структуру DATFILES и определили, где надо изменить байты, поправив SCN.
15. После тайных манипуляций и корректировки файлов СЛУЧИЛОСЬ ЧУДО - база открылась. За чудо СПАСИБО нашему сотруднику.
16. Мы сопоставили ряд отчетов, получаемых из восстановленного хранилища с бумажными копиями, сохранившимися у пользователей. Результаты совпадали.
17. Пользователи счастливы.
18. Админы счастливы.
19. "Нехороший человек" затаился.
20. Ждем выводы по п.6.и 8.

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

суббота, 13 марта 2010 г.

Управление собственностью

Привет!
Это я....

А в коляске - моя дочь. Есть еще старший сын. Он уже подрос и может двигать ногами сам.

Этот приятный городок с с восточным колоритом - Линдос на греческом острове Родос.  Мы всей семьей отдыхали там в летом 2008 года. Рекомендую...
На этом можно считать,что знакомство состоялось, и можно перейти основной теме, которой мне хотелось бы поделиться с вами.
Я вот уже 10 лет работаю в одной небольшой IT компании. И все эти 10 лет я занимался сначала разработкой, а теперь руковожу этим процессом. И разрабатывает наша проектная группа информационную систему Комитета по управлению городским имуществом Санкт-Петербурга.
Система эта постоянно совершенствуется, развивается, модернизируется и, как маленький ребенок, требует постоянного присмотра. Вот этим мы и занимаемся.
За прошедшее время сфромировалось кое-какое представление о деятельности органов управления имущестовом и о том, как эту деятельность можно облегчить средствами автоматизации.
Это мне и хотелось бы рассказать. Вы спросите - "Кому эта хрень может быть интересна?".
И я отвечу - "Прежде всего мне". Я напишу это все для себя, чтобы

КОГДА-НИБУДЬ ПОТОМ В ДАЛЕКОМ БУДУЩЕМ (а может и не в таком далеком),
посмотреть на эти заметки и вспомнить путь, которым шел и те развилки, на которых пошел нитуда.

Сейчас я скажу себе "Пока, до встречи".

В следующий раз я расскажу себе о том, как был спасен сервер ORACLE, содержащий аналитическую информацию (хранилище данных) о деятельности КУГИ за прошедшие два года.