12/20100
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:
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.