OLAP 11g: Instalacija AWM (Analytic Workspace Manager)

Tuesday, 23.10.2012 – Dejan

Pošto se u zadnje vrijeme intenzivno bavim DWH (Data WareHouse) tehnologijama, odlučio sam isprobati nove OLAP opcije u verziji 11g.

U sklopu toga, krenuh instalirati AWM (Analytic Workspace Manager) prateći uputstvo korak po korak kao što piše u tutorijalu “Building OLAP 11g Cubes“. Downloadao sam i instalirao sve šta je bilo potrebno, ali nisam morao čekati dugo na prvu grešku….

U poglavlju “Creating an Analytic Workspace” fino piše:
Enter Oracle11g in the Description field and <hostname>:1521:<SID> in the Connection Information field and click Create.“, a ja se pravim pametan i umjesto toga, upisujem tnsnames connection string (u mom slučaju DWHTEST). Naravno da nije radilo – dobio sam grešku:
oracle.jdbc.driver.T2CConnection.getLibraryVersionoNumber()

Dakle, ispravih to na localhost:1521:DWHTEST i mogao sam nastaviti dalje…

Čitav proces tekao je glatko dok nisam došao do dijela “Loading and Viewing Cube Data” i koraka “Maintain Cube SALES_CUBE” … E tu su nastale muke…

Konstantno sam dobijao grešku (kod mene na njemačkom jeziku, jer su mi lokalna podešavanja tako postavljena):

INI: Fehler beim Erstellen eines Definition Managers, Allgemein in TxsOqConnection::generic<BuildProcess>INI: XOQ-01600: OLAP-DML-Fehler “ORA-01858: Ein nicht-numerisches Zeichen wurde gefunden, während ein numerisches Zeichen erwartet wurde
” bei der Ausführung von DML “SYS.AWXML!R11_LOAD_MEASURES(‘SALES_CUBE.CUBE’  SYS.AWXML!___R11_LONG_ARG_VALUE(SYS.AWXML!___R11_LONG_ARG_DIM 1)  SYS.AWXML!___R11_LONG_ARG_VALUE(SYS.AWXML!___R11_LONG_ARG_DIM 2)  SYS.AWXML!___R11_LONG_ARG_VALUE(SYS.AWXML!___R11_LONG_ARG_DIM 3) ‘NO’)”, Allgemein in TxsOqStdFormCommand::execute

error_maintain_sales_cube

Dole u popisu svih operacija, pored naziva “failed” koraka stoji i nepotpun SQL kôd, tako da ga ne mogu kopirati i izvršiti u SQL Developeru, TOAD-u ili SQL Plusu. I ajd sad ti znaj u čemu je problem !?

E sad na scenu stupa iskustvo – u TOAD-u nađem ovaj session od AWM programa, pokrenem tracing za taj session i opet u AWM kliknem na “Maintain SALES_CUBE”. Očekivano, u trace datoteci sam pronašao kompletan SQL kôd:

PARSING IN CURSOR #46 len=11771 dep=1 uid=91 oct=3 lid=91 tim=215623360605 hv=3267082949 ad=’7ff86cb22c0′ sqlid=’a4nh9jm1brfq5′
SELECT /*+  bypass_recursive_check  cursor_sharing_exact  no_expand  no_rewrite */   T44_CHANNEL_KEY ALIAS_237,   T41_MONTH_ID ALIAS_238,   T38_STATE_PROVINCE_KEY ALIAS_239,   T35_ITEM_KEY ALIAS_240,   SUM(T47_SALES)  ALIAS_241,   SUM(T47_QUANTITY)  ALIAS_242 FROM   (  SELECT /*+  no_rewrite */     T1.”QUANTITY” T47_QUANTITY,     T1.”SALES” T47_SALES,     T1.”DAY_KEY” T47_DAY_KEY,     T1.”PRODUCT” T47_PRODUCT,     T1.”CHANNEL” T47_CHANNEL,     T1.”CUSTOMER” T47_CUSTOMER   FROM     OLAPTRAIN.”SALES_FACT” T1   )   T47,   (  SELECT /*+  no_rewrite */     T1.”CHANNEL_KEY” T44_CHANNEL_KEY   FROM     OLAPTRAIN.”CHANNELS” T1   )   T44,   (  SELECT /*+  no_rewrite */     T1.”DAY_KEY” T41_DAY_KEY,     T1.”MONTH_ID” T41_MONTH_ID   FROM     OLAPTRAIN.”TIMES” T1   )   T41,   (  SELECT /*+  no_rewrite */     T1.”CUSTOMER_KEY” T38_CUSTOMER_KEY,     T1.”STATE_PROVINCE_KEY” T38_STATE_PROVINCE_KEY   FROM     OLAPTRAIN.”CUSTOMERS” T1   )   T38,   (  SELECT /*+  no_rewrite */     T1.”ITEM_KEY” T35_ITEM_KEY   FROM     OLAPTRAIN.”PRODUCTS” T1   )   T35 WHERE   ((T47_CHANNEL = T44_CHANNEL_KEY)     AND (T47_DAY_KEY = T41_DAY_KEY)     AND (T47_CUSTOMER = T38_CUSTOMER_KEY)     AND (T47_PRODUCT = T35_ITEM_KEY)     AND ((T47_DAY_KEY)  IN ((TO_DATE(’06-FEB-2010′) ) , (TO_DATE(’20-JAN-2010′) ) , (TO_DATE(’14-NOV-2010′) ) , (TO_DATE(’21-APR-2010′) ) , (TO_DATE(’02-APR-2010′) ) , (TO_DATE(’11-JAN-2010′) ) , (TO_DATE(’29-JAN-2010′) ) , (TO_DATE(’27-JUN-2010′) ) , (TO_DATE(’30-NOV-2010′) ) , (TO_DATE(’11-AUG-2010′) ) , (TO_DATE(’30-JAN-2010′) ) , (TO_DATE(’25-JAN-2010′) ) , (TO_DATE(’26-NOV-2010′) ) , (TO_DATE(’26-OCT-2010′) ) ,
— … ostatak obrisan radi preglednosti …
(TO_DATE(’21-JAN-2010′) ) , (TO_DATE(’02-JUN-2010′) ) , (TO_DATE(’14-JUN-2010′) ) , (TO_DATE(’16-MAR-2010′) ) , (TO_DATE(’27-JUL-2010′) ) , (TO_DATE(’27-MAR-2010′) ) , (TO_DATE(’22-NOV-2010′) ) , (TO_DATE(’19-SEP-2010′) ) ) ) )  GROUP BY   (T35_ITEM_KEY, T38_STATE_PROVINCE_KEY, T41_MONTH_ID, T44_CHANNEL_KEY)  ORDER BY   T35_ITEM_KEY ASC NULLS LAST ,   T38_STATE_PROVINCE_KEY ASC NULLS LAST ,   T41_MONTH_ID ASC NULLS LAST ,   T44_CHANNEL_KEY ASC NULLS LAST
END OF STMT

Obratite pažnju na crveno označeni tekst! Dakle, kopiram čitav SQL upit i pokrenem ga u SQL Plusu. Naravno – greška:

sqlplus_ora-01858
Prva asocijacija je odmah bila na drugačije NLS postavke, jer su ovdje vrijednosti hardkodirane u formatu DD-MON-YYYY (hardkodiranje bez format maske je idiotski!! čisti amaterizam!!).

Prvo sam pokušao sa “AFTER LOGON ON DATABASE” triggerom postaviti NLS_DATE_FORMAT na DD-MON-YYYY, ali nije dalo očekivani rezultat…
Potom sam u registry promijenio NLS_LANG na AMERICAN_AMERICA.AL32UTF8, no ni to nije dalo rezultat…

Čak mi ni moj prijatelj Google nije pomogao 🙁

Međutim!!!! (sad malo dramaturgije uz zvuke fanfara…)

Daaaaavno sam se nešto bio patio sa JDeveloperom i u podsvijesti mi je sinula ideja sa dodatnim Java parametrima za AWM! Naime, u direktorijumu gdje je instaliran AWM, nalazi se i datoteka awm.bat. E u toj datoteci se nalazi slijedeća linija:

start javaw -mx1024m -jar awm11.2.0.3.0.jar

Dodao sam opcije -Duser.language=en -Duser.country=US, tako da je ta linija izgledala onda ovako:

start javaw -mx1024m -Duser.language=en -Duser.country=US -jar awm11.2.0.3.0.jar

Pokrenuo sam AWM, kliknuo na “Maintain SALES_CUBE” i sve je prošlo bez ijedne greške!!! Mojoj sreći nije bilo kraja…

Dakle, ovu grešku vjerovatno većina “english speaking” korisnika neće nikad dobiti, a nas non-english ko **** …

  1. 5 Responses to “OLAP 11g: Instalacija AWM (Analytic Workspace Manager)”

  2. RAdim na OBI-ju duže vrijeme i znam da nema hardcodiraniih dijelova NLS postavki tako da sam suspektan da ima primjera koji to rade suprotno. Stoga, ne znam da li sam shvatio, no ratovanja sa NLS i Apex-om imam dosta, pa bih postavio pitanje.
    Ako se u “awm.bat” stavi red prije poziva jave:

    setlocal
    SET NLS_LANG=CROATIAN_CROATIA.AL32UTF8
    ...i na kraju
    enlocal

    koji output daje onda ovaj primjer?

    Evo kompletnog dijela:

    setlocal
    SET NLS_LANG=CROATIAN_CROATIA.AL32UTF8
    start javaw -mx1024m -jar awm11.2.0.3.0.jar
    enlocal

    By Damir Vadas on Oct 23, 2012

  3. I ovo … kako mislim da prethodno neće dati rezultata jer je problem u sessiji a ne u instanc epostavkama, sada pogađam dalje …
    Negdje na konzoli se mora moći postavit NLS setting pa time i datum.
    Ako baš nigdje nema te postavke, pokušati staviti u browseru language na neki drugi i probati (recim hrvatski) … da li sad amijenja datum?

    Ne mogu vjerovati da je NLS tako hardcodiran-čak i za indolentne amere to je previše.
    🙂

    By Damir Vadas on Oct 23, 2012

  4. Ima jedna notica:
    When you are designing bidirectional applications, you may wish to use the language environment variables DEVELOPER_NLS_LANG and USER_NLS_LANG rather than NLS_LANG.
    For example, if you want to use an American interface while developing an Arabic application in a Windows environment, set these environment variables as follows:
    DEVELOPER_NLS_LANG=AMERICAN_AMERICA.AR8MSWIN1256
    USER_NLS_LANG=ARABIC_territory.charset

    By Damir Vadas on Oct 23, 2012

  5. Probao – pojavljuje se opet greska…
    I mene zanima, odakle dolazi onaj SQL upit i zasto je vrijednost hardkodirana, ali nisam imao volje traziti dalje…

    By Dejan on Oct 24, 2012

  6. Probaj u onu awm.bat staviti
    set NLS_DATE_FORMAT=’dd.mm.yyyy hh24:mi:ss’
    Rg
    Damir

    By Damir Vadas on Oct 28, 2012

Post a Comment