oder: wie eine sinnvolle Bereinigung des OWB Repository vor einer Migration durchgeführt werden sollte.

Übergepäck

Um den Umfang einer OWB Migration auf das Notwendige zu reduzieren, sollte man versuchen, das OWB Repository um nicht mehr genutzte Objekte zu bereinigen.

Hierbei kann man folgenden Fragen nachgehen:

  • Welche OWB Mappings wurden längere Zeit nicht mehr ausgeführt?
  • Welche OWB Mappings transferieren keine Daten?
  • Welche OWB Mappings existieren nur im Design Repository?
  • Welche OWB Mappings werden von Anwenderseite nicht mehr benötigt?

Bezüglich der gefundenen Objekte ist zu überlegen, ob diese stillgelegt oder gelöscht werden können. Vor dem Löschen sollte man allerdings aufgrund von Murphy’s law unbedingt eine Sicherung der betroffenen Objekte erstellen.

Zu den oben genannten Punkten sind verschiedene Abfragen auf das Repository hilfreich. Nachfolgend einige Beispiele (11g):

1) Mappings im Design Repository, die noch nie oder seit einem Jahr nicht mehr ausgeführt wurden, findet man z.B. mit folgendem Statement:

exec OWBSYS.WB_RT_SCRIPT_UTIL.SET_WORKSPACE('&&Workspaceowner..&&Workspacename.');
select mo.PROJECT_NAME
     , m.INFORMATION_SYSTEM_NAME as module_name
     , m.MAP_NAME
     , max(e.CREATION_DATE) as zuletzt_gestartet
from OWBSYS.ALL_IV_MODULES mo
join OWBSYS.ALL_IV_XFORM_MAPS m
     on (mo.INFORMATION_SYSTEM_ID = m.INFORMATION_SYSTEM_ID)
left outer join OWBSYS.WB_RT_AUDIT_EXECUTIONS e
     on (    m.MAP_NAME = e.EXECUTION_OBJECT_NAME
         and mo.LOCATION_NAME = e.EXECUTION_OBJECT_STORE_NAME
        )
group by mo.PROJECT_NAME
       , m.INFORMATION_SYSTEM_NAME
       , m.MAP_NAME
having nvl(max(e.CREATION_DATE), date'1900-01-01') < sysdate - interval '1' year
order by zuletzt_gestartet asc nulls last;

2) Mappings, die bei ihrer letzten Ausführung keine Daten transferierten:

exec OWBSYS.WB_RT_SCRIPT_UTIL.SET_WORKSPACE('&&Workspaceowner..&&Workspacename.');
select a.mapping_name
     , a.startzeitpunkt
     , a.endezeitpunkt
     , a.dauer_sekunden
     , sum (d.rtd_insert + d.rtd_update + d.rtd_delete + d.rtd_merge) as rows_changed
from (select rtrim(ltrim(ra.RTA_LOB_NAME,'"'),'"') as mapping_name
            , ra.CREATION_DATE as startzeitpunkt
            , ra.LAST_UPDATE_DATE as endezeitpunkt
            , round ((ra.LAST_UPDATE_DATE - ra.CREATION_DATE)*24*60*60) as dauer_sekunden
            , ra.RTA_IID
            , dense_rank() over
              (partition by ra.RTA_LOB_NAME
               order by ra.RTA_IID desc
              ) as dr
         from OWBSYS.WB_RT_AUDIT ra
      ) a
join OWBSYS.WB_RT_AUDIT_DETAIL d
   on (a.RTA_IID = d.RTA_IID)
where a.dr = 1 -- betrachte nur die letzte Ausführung
group by a.mapping_name
       , a.startzeitpunkt
       , a.endezeitpunkt
       , a.dauer_sekunden
having sum (d.rtd_insert + d.rtd_update + d.rtd_delete + d.rtd_merge) = 0  -- keine Daten transferiert
order by 2 desc;

3) Mappings, die nur im Design Repository existieren, weil sie entweder noch nie deployed wurden (diese findet man auch mit Statement 1) oder weil sie durch ein Drop-Deployment wieder entfernt wurden:

exec OWBSYS.WB_RT_SCRIPT_UTIL.SET_WORKSPACE('&&Workspaceowner..&&Workspacename.');
select mo.PROJECT_NAME
     , m.INFORMATION_SYSTEM_NAME as module_name
     , m.MAP_NAME
     , max(e.CREATION_DATE) as zuletzt_gestartet
from OWBSYS.ALL_IV_MODULES mo
join OWBSYS.ALL_IV_XFORM_MAPS m
     on (mo.INFORMATION_SYSTEM_ID = m.INFORMATION_SYSTEM_ID)
left outer join OWBSYS.WB_RT_AUDIT_EXECUTIONS e
     on (    m.MAP_NAME = e.EXECUTION_OBJECT_NAME
         and mo.LOCATION_NAME = e.EXECUTION_OBJECT_STORE_NAME
        )
where not exists (select 1
                    from OWBSYS.WB_RTV_DEPLOYED_OBJECTS do
                   where do.OBJECT_NAME = m.MAP_NAME
                     and do.STORE_NAME = mo.LOCATION_NAME
                 )
group by mo.PROJECT_NAME
       , m.INFORMATION_SYSTEM_NAME
       , m.MAP_NAME
order by zuletzt_gestartet asc nulls last;

4) Mappings, die von der Anwenderseite nicht mehr benötigt werden, findet man nicht allein mit einer Abfrage auf das Repository. Folgende Vorgehensweise ist denkbar:

  • Erstellen einer Liste mit allen Informationsprodukten (z.B. Berichte, etc.).
  • Befragen der Anwender, welche Informationsprodukte nicht mehr benötigt werden.
  • Analyse der den Informationsprodukten vorausgehenden Datenflüsse (wie ensteht das Informationsprodukt?).
  • Identifikation derjenigen Mappings, die ausschließlich Daten für die nicht mehr benötigten Informationsprodukte bereitstellen.

Die genannten Statements sind als Beispiele zu sehen. Auf Basis des OWB Repository sind natürlich eine Reihe mehr Analysen möglich, wobei wir Sie gerne unterstützen.

Alle Beiträge von Achim Stump

Schreibe einen Kommentar