10
12/2010
0

OWB 10g migrációja 11g-re és a közben felmerülő problémák

Oracle 11g

Mivel Oracle 11g adatbázison csak és kizárólag OWB 11g futhat, egyértelmű volt, hogy az OWB 10g repository-t nem lesz egyszerű migrálni az új adatbázisra, nem voltak illúzióim. :)

A régi adatbázisból kimentettem a megfelelő sémákat DataPump-al, amelyeket olvastak-írtak az OWB map-ek (DW_STAGE, DW_MAIN, stb.), beimportáltam az új 11.2.0.1.0 adatbázisba (Microsoft 64bit-es környezet, XEON 8 processzorral) és kezdődött a móka. Kacagás nélkül. :)

Az egyik legmegdöbbentőbb dolog az volt, hogy míg 10g-ben az OWB teljes repository az OWB_REP sémában volt, addig 11g-ben az OWBSYS sémába került. Ez az egész jogosultságkezelést megbolygatta és jött a script írások korszaka. Létrehoztam az alábbi 10g-ből ismert ROLE-okat, amik az új sémára mutattak:

  • OWB_O_OWB_REP
  • OWB_D_OWB_REP
  • OWB_A_OWB_REP
  • OWB_OWB_REP
  • OWBR_OWB_REP

Vigyázat, a sorrend fontos, mert egymásra hivatkoznak. Szeretném itt megjegyezni, hogy a ROLE-okban szereplő GRANT-ekből jónéhányat elhagytam, mivel 11g-ben ezek megszűntek létezni. :)

OWB 11g new features

Első számú nagy újdonság az új séma és a megszűnt objektumok. 
Gyorsan létrehoztam az új Workspace-t és adtam az OWBRT_SYS és OWBRT_USER felhasználóknak jogosultságot az új repository-hoz.

Aztán természetesen a jogosultágkiosztás:

GRANT OWB_O_OWB_REP TO OWBRT_SYS;
GRANT OWB_O_OWB_REP TO OWBSYS WITH ADMIN OPTION;
GRANT OWB_O_OWB_REP TO DW_MAIN;
GRANT OWB_O_OWB_REP TO DW_STAGE;
GRANT OWB_O_OWB_REP TO OWB_D_OWB_REP;
GRANT OWB_O_OWB_REP TO OWB_A_OWB_REP;

GRANT OWB_D_OWB_REP TO DW_MAIN;
GRANT OWB_D_OWB_REP TO DW_STAGE;
GRANT OWB_D_OWB_REP TO OWB_A_OWB_REP;
GRANT OWB_D_OWB_REP TO OWBRT_SYS;
GRANT OWB_D_OWB_REP TO OWBSYS WITH ADMIN OPTION;

GRANT OWB_OWB_REP TO DW_MAIN;
GRANT OWB_OWB_REP TO OWBRT_SYS;
GRANT OWB_OWB_REP TO OWBSYS WITH ADMIN OPTION;
GRANT OWB_OWB_REP TO DW_STAGE;

GRANT OWBR_OWB_REP TO DW_STAGE;
GRANT OWBR_OWB_REP TO DW_MAIN;
GRANT OWBR_OWB_REP TO OWBRT_SYS;
GRANT OWBR_OWB_REP TO OWBSYS WITH ADMIN OPTION;

GRANT OWB_A_OWB_REP TO OWBSYS WITH ADMIN OPTION;

Na ezek után jöhetett a nagykönyvben leírt lépéssorozat, miután elolvastam a megfelelő szakirodalmat és kiexportáltam az OWB objektumokat metaadatként a régi repository-ból .mdl fájlba.

II. számú nagy újdonság a 11g-ben, hogy nem lehet importálni a 10g-ből a metaadatokat direktben. Először konvertálni kell őket, majd a konvertált új .mdl fájlt lehet csak importálni, de szerencsére ezt automatikusan felajánlja az OWB 11g.

És végül, mikor minden objektumunk megvan, minden jogosultság a helyére került és azt hinnénk készen vagyunk, fordítsuk le az összes beimportált objektumot és nyomjunk a Control Center-ben egy deploy-t!
Próbáljuk meg lefuttatni az összes map-et!

A legnagyobb újdonság OWB 11g-ben (MERGE utasítás)

A III. nagy újdonság számomra az volt, hogy a MERGE utasítás nem müködik 11g-ben ha nincs INSERT ága csak UPDATE ága. Egyszerűen elhalt ORA-600 Internal Error hibával:
ORA-00600: internal error code, arguments: [upsRowVec4], [], [], [], [], [], [], [], [], [], [], []

Megjegyezném, hogy ez egyébként az RDBMS hibája, mert a PLSQL csomagból kivágott MERGE utasítás sem fut le sqlplus-ban!

Az alábbi sql-ek segítenek lekérdezni a problémás map-eket:

SELECT e.creation_date
           ,a.rta_lob_name as job_name
           ,a.rta_primary_source
           ,a.rta_primary_target
           ,e.rte_statement
           ,e.rte_sqlerr
           ,e.rte_sqlerrm
  FROM OWBSYS.OWB$WB_RT_AUDIT a
         INNER JOIN OWBSYS.OWB$WB_RT_ERRORS e
           ON e.rta_iid = a.rta_iid
ORDER BY e.creation_date DESC;

SELECT m.creation_date
           ,a.execution_name
           ,ml.plain_text
  FROM OWBSYS.OWB$WB_RT_AUDIT_EXECUTIONS a
           INNER JOIN OWBSYS.OWB$WB_RT_AUDIT_MESSAGES m
             ON m.AUDIT_EXECUTION_ID = a.audit_execution_id
           INNER JOIN OWBSYS.OWB$WB_RT_AUDIT_MESSAGE_LINES ml
             ON ml.audit_message_id = m.audit_message_id
 ORDER BY 1 DESC;

Szóval maradt a kézi megoldás minden egyes map-et külön-külön megnyitni és a target táblán a műveletet UPDATE-ról átírni UPDATE/INSERT-re!

IV. nagy újdonságnak még megemlíteném azt, hogy ahol a mapek úgy vannak konfigurálva, hogy:
Set based fail over to row based, azt át kell írni kötelezően Set based -re (Oracle is ezt ajánlja!), különben számítani lehet -20101-es hibákra, mikor Set based módból Row based módra váltás történik.

A bejegyzés trackback címe:

https://dwbi.blog.hu/api/trackback/id/tr462506126

Kommentek:

A hozzászólások a vonatkozó jogszabályok  értelmében felhasználói tartalomnak minősülnek, értük a szolgáltatás technikai  üzemeltetője semmilyen felelősséget nem vállal, azokat nem ellenőrzi. Kifogás esetén forduljon a blog szerkesztőjéhez. Részletek a  Felhasználási feltételekben és az adatvédelmi tájékoztatóban.

Nincsenek hozzászólások.