вторник, 25 декабря 2012 г.

Яблоки и BMW X5

Добрый день!
Заканчивается год... На работе все текущие задачи выполнены, контракты закрыты. Неожиданно появилось немного свободного времени и я решил описать случай, который реально произошел со мной и моим директором этой осенью.
Он не имеет никакого отношения ни к BI, ни управлению собственностью, ни к IT-технологиям. Но события, которые произошли, достаточно веселые и, я надеюсь, помогут кому-то на минуту отвлечься и поднять настроение перед Новым Годом.
Как Вы думаете, могут ли яблоки (их не пихали в выхлопную трубу) стать причиной поломки BMW X5?...
Могут.
Итак, события развивались так....

Не знаю, как у других, а у моей мамы на даче  Ленинградской области в этом году урожай яблок существенно превысил потребительские способности нашей семьи.
Поэтому яблоки распространялись абсолютно бесплатно и по всем знакомым.
Я взял за правило пару раз в неделю привозить пакет с яблоками на работу. В нашей компании работает около 40 человек. И пакет яблок съедался еще до обеда.
Так мы съели урожай ранних яблок (белый налив). А потом созрели осенние сорта. Этих яблонь на даче у моей мамы не одна, а четыре. Объемы существенно возросли, и коллеги уже не справлялись.
Тогда кому-то в голову пришла мысль, что не обязательно поедать все на работе. Можно же утащить домой и дома накормить жену, детей, сварить компот или варенье.
Эта мысль мне понравилась. Такой подход избавлял меня от необходимости есть все самому (я уже был близок к "яблочной аллергии").
В выходные я съездил на дачу и набрал 6-7 коробок яблок, чтобы раздать на работе желающим.
В понедельник все притащили на работу и раздали желающим. А одну коробку я уговорил взять своего директора. Он был рад и перегрузил эту коробку на заднее сиденье своего X5,
чтобы не таскать коробку в офис и из офиса.
Перегрузили мы ее утром и оставили в машине.
Вечером он выходит с работы как обычно, часов в 21. Садиться, заводит и не может тронуться с места. Вернее тронуться-то он может, но руль повернуть не может. Он поворачивается, но буквально на миллиметры. Вообщем, ехать он может, но только по прямой. А дорога домой изобилует поворотами)). Делать нечего, время уже позднее, сервисы закрыты. Машина оставляется у работы, вызывается такси и директор едет домой. Без машины и без яблок.

Компания у нас небольшая, какого-то своего специалиста, который бы мог посмотреть внутрь машины и решить, что лучше делать, просто нет. Поэтому следующее утро начинается со звонка на сервис.
Механики на сервисе, естественно, по телефону лечить отказываются. Говорят, что нам туда (внутрь высокотехнологичной техники) соваться не следует. Следует вызвать эвакуатор и бережно доставить машину к ним для обследования и ремонта. Делать нечего...
Яблоки извлекаются из машины директора и перегружаются мне обратно в машину. Решаем, что я их немного покатаю, пока директорский транспорт в ремонте.
Эвакуатор увозит машину на ремонт в сервис. На следующее утро смена механиков на сервисе должна ее взять в ремонт, а директор уезжает в Москву на день в командировку.

На следующий день (третий день эпопеи) звонит мне из Москвы директор...
И со смехом говорит, что только что разговаривал с механиком.
А он поведал ему страшную историю... Дело было так.
Во дворе стояла машина с яблоками. Они так вкусно пахли, что не оставили равнодушной крысу, которая шла мимо по своим делам. Она решила залезть в машину за яблоками, но никаких дырок, кроме дырок в моторный отсек не нашла. Полезла через него. Дальше не понятно. Толи она застряла, толи просто так совпало. Вышел директор, сел в машину и завел ее. Крыса попала между ремнем усилителя руля и шкивом, и своим телом скинула ремень со шкива.
В результате - усилитель не работает, руль не повернуть.
Крысу внутри измолотило в капусту... Я даже не представляю, что испытывали механики на фирменном BMWшном сервисе, когда чистили моторный отсек от крысиных останков ))... Я видел их ремонтные боксы... Многие больницы могут позавидовать их чистоте и стерильности. И сколько это стоило, я тоже не знаю ))

В итоге, коробка яблок обошлась компании в 6000р. (2 на такси и 4 за эвакуатор). Сколько стоил ремонт, я не спрашивал )))

Такая вот история.

PS. А коробка с яблоками после долгих путешествий все-таки досталась директору. Только у себя в машине он их уже не оставлял ))








среда, 26 сентября 2012 г.

Oracle BI 11g. nQSError: 59021


На днях разрабатывал один отчет.
На тестовой инфраструктуре (MS Win x86) все работало отлично.
А вот после переноса на Production (Oracle Linux x64) при выполнении одного отчета стали появляться ошибки

[nQSError: 59021] CASE conditional expressions have mismatching data types. [[
[nQSError: 43119] Query Failed:

Долго не мог понять проблему... Тем более, что нигде CASE не использовал. И в конце концов выявил источник...))
Оказалось, что проблема кроется в использовании LOOKUP в логической модели.
Краткая инструкция и польза от использования  lookup tables описана в блоге RittmanMead  http://www.rittmanmead.com/2010/08/oracle-bi-ee-11g-lookup-tables-sparse-and-dense-lookups/

Так вот... Оказалось, что ошибка возникает в случае, если я возвращаю поле с типом DATETIME, а в качестве DefaultValue в Sparse lookups возвращаю null.

Выглядела функция примерно так:

LOOKUP
(
SPARSE
"Модель".."Реестр"."Дата отправки",
null,
"Модель".."Запрос"."ProcessUnid"
)

Я совсем забыл, что по умолчанию значение NULL имеет тип varchar и его надо преобразовывать.
После того, как я изменил функцию и добавил явное преобразование, все заработало

LOOKUP
(
SPARSE
"Модель".."Реестр"."Дата отправки",
to_datetime(null, 'dd.mm.yyyy'),
"Модель".."Запрос"."ProcessUnid"
)

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





понедельник, 24 сентября 2012 г.

Перенос репозитария BI

Каждый раз, перенося репозитарий со среды разработки на production, я мучительно ищу главу, в которой описывается процедура upgrade guid пользователей.
Сегодня чаша моего терпения иссякла.
И я решил записать для себя ссылку - http://docs.oracle.com/cd/E21764_01/core.1111/e10105/testprod.htm#BABFIHFJ 

To refresh the user GUIDs:
  1. Open the NQSConfig.INI file for editing. For information, see "Where are Configuration Files Located?" in Oracle Fusion Middleware System Administrator's Guide for Oracle Business Intelligence Enterprise Edition.
  2. Locate the setting FMW_UPDATE_ROLE_AND_USER_REF_GUIDS = NO and change its value to YES.
  3. Modify the instanceconfig.xml file to instruct Presentation Services to refresh GUIDs on restart. Edit the file to add the last line in the following instruction.
    <ps:Catalog xmlns:ps="oracle.bi.presentation.services/config/v1.1">
    <ps:UpgradeAndExit>false</ps:UpgradeAndExit>
    <ps:UpdateAccountGUIDs>UpdateAndExit</ps:UpdateAccountGUIDs>
    
  4. From a terminal window, stop and restart the managed processes using the opmnctl parameters stopall and startall. You can use the parameter status to verify process status throughout.
    The following components are involved: Presentation Services, Oracle BI Server, Oracle BI Scheduler, Oracle BI Cluster Controller, and Oracle BI JavaHost.
    For information about using opmnctl commands, see "Using the OPMN command line to Start and Stop Oracle Business Intelligence System Components" in Oracle Fusion Middleware System Administrator's Guide for Oracle Business Intelligence Enterprise Edition.
  5. Edit the NQSConfig.INI file to reset the FMW_UPDATE_ROLE_AND_USER_REF_GUIDS = YES to NO and restart the Oracle BI Servers.
  6. Remove, set to none, or comment out the last line added to the instanceconfig.xml file (that instructs Presentation Services to refresh GUIDs on restart, as specified in Step 3).
    <ps:Catalog xmlns:ps="oracle.bi.presentation.services/config/v1.1">
    <ps:UpgradeAndExit>false</ps:UpgradeAndExit>
    <ps:UpdateAccountGUIDs>none</ps:UpdateAccountGUIDs>
    
  7. Restart Presentation Services for the instanceconfig.xml file that was updated.
  8. Ensure that Oracle WebLogic Server and the system components are also running. If they are not running, then restart them.
    For information, see "Starting and Stopping the Oracle Business Intelligence Components" in Oracle Fusion Middleware System Administrator's Guide for Oracle Business Intelligence Enterprise Edition.

четверг, 12 января 2012 г.

Перечень "личных" проблем

Странный заголовок... Не правда, ли
Но это действительно так.
Здесь я хочу обозначить перечень проблем в областях ORACLE SOA & BI, решить которые мне пока не удается. Наверняка, эти проблемы возникают передо мной в силу либо собственных неправильных действий, либо в связи с неправильным пониманием используемого инструментария, либо из-за несоответствующего применения инструментария.

Однако, проблемы существуют. И когда-нибудь я их обязательно решу и о решении напишу здесь.
1. Проблема долгого логина при внешней авторизации в ORACLE BI 11g.
В нашей системе мы используем авторизацию пользователей, построенную на основе хранения сведений о пользователях в таблицах Oracle DB.
Настройка авторизации на базе внешних таблиц описана здесь. Но при применении данного способа авторизации у нас СУЩЕСТВЕННО упала производительность операций с webservice BIPublisher.

2. Проблема переноса курсива в таблицах отчетов BIPublisher для пустого значения
Наблюдаю странное поведение BIP.
Есть отчет rtf. В нем таблица. Одна из колонок этой таблицы (поле результирующего набора) выделяется курсивом.
Так   вот...
ЕСЛИ мы будем формировать отчет в формате rtf, и в результирующем наборе значение поля, которое выделяется курсивом, имеет значение NULL,
ТО после NULLового поля вся оставшаяся таблица становится курсивом.
Такой эффект наблюдается ТОЛЬКО для КУРСИВА и ТОЛЬКО при формировании отчета в формате RTF.
Если формируем HTML, PDF и прочее - все ОК. Курсив не распространяется далее по таблице.
Если в шаблоне курсив меняем на BOLD или на подчеркивание, то при формировании отчета в RTF тоже все OK. Просто чудеса какие-то.


3. Как тестировать BPELпроцесс

4. Функции преобразования даты в текст в BIPublisher уменьшают дату на один день.


PS. Может кто-то сможет мне помочь?