mercoledì 21 gennaio 2015

OWM - Oracle Workspace Manager


Uno dei prodotti Oracle meno conosciuti è sicuramente OWM,  features del database presente già in oracle RDBMS dalla versione 9.0.
Questo prodotto permette il versionamenteo delle tabelle ORACLE fornendo una serie di API per la gestione dei dati versionati. Il versionamento invece di packages avviene tramite l'EDITION che una volta attivata non è più possibile disattivare.
Supponiamo di voler effettuare delle prove su dati di esercizio, ma non possiamo portarli su altri sistemi o esportarli, OWM ci permette di manipolare questi dati senza modificarne il loro valore per chi esegue query in ambiente di produzione.
Di seguito una breve panoramica del prodotto.


Le tipologie di versionamento utilizzate sono indicate di seguito e dipendono dalle funzionalità richieste ed implementate.
Nel momento in cui si pone una struttura dati in modalità versioning occorre definirie la tipologia di versionamento che deve essere effettuata, al momento lo strumento mette a disposizione le seguenti tipologie:
·         NONE
·         VIEW_W_OVERWRITE
·         VIEW_WO_OVERWRITE

Questa tipologia di versionamento memorizza sulla <tabella> _LT ogni singola riga che subisce una qualsiasi variazione.  La discard delle righe da un WS o meno avviene in fase di MergeTable utilizzando l’opzione removedata.
Questa tipologia di versionamento memorizza sulla <tabella>_LT solo l’ultimo stato della riga. Avremo quindi non tutti gli stati ma solo quello per il quale è avvenuta la commit.

Questo tipo di tabelle _LT, possono essere paragonate a SCD di tipo 2.


Attenzione:
Nel caso di utlizzo dell’opzione VIEW_W_OVERWRITE in fase di merge non rimuovere i dati, altrimenti anche se la promote avviene correttamente il valore invece assunto nel WS è relativo non al valore corrente del LIVE  ma a quello precendente nel WS.
Inoltre se si elimina il record risulta difficile il recupero dell’informazione storica nel caso di un WS diverso da quello di Live.

Esistono alcune restrizioni al versionamento implementato sulle tabelle:
·         La tabella deve avere una chiave primaria
·         La tabella può essere versionata solo se l’utente ha il ruolo di WM_ADMIN_ROLE
·         Le tabelle di sys non possono essere versionate.
·         Vi sono restrizioni sulle tabelle che hanno constraints
o    Se sulla tabella padre è abilitato il versioning questo lo deve essere anche su quella figlia
o    Una tabella versionata non può essere sia un padre che figlio in una catena di vincoli a meno di self referencing
o    Nelle versioni 9 e 10 non era possibile aggiungere constraints se la tabella era versionata. Sulla 11 è da verificare.
o    Su una tabella posta sotto versioning non può essere effettuata una truncate table. Occorre ricorrere alla procedura PurgeTable del package DBMS_WM. (solo 11g)
o    Su una tabella posta sotto versioning non si possono effettuare operazioni di ddl. Occorre ricorrere alla procedura BeginDll del package DBMS_WM.
o    Su una tabella posta sotto versioning non si possono effettuare operazioni in bulk. Occorre ricorrere alla procedura BeginBulkLoading del package DBMS_WM.

Il versioning di una o più tabelle comporta la modifica strutturale della stessa. Nel momento in cui si sottopone una tabella a versionig questa viene eliminata e ricreata come vista. Le grant associate alla tabella vengono riportati sulla vista. A valle della creazione della vista nello schema appaiono due nuove tabella una con estensione _LT ed una con _AUX e contemporaneamente vengono create una quindicina di viste utilizzate per la gestione del versioni fra i differenti workspace e tre trigger di tipologia for heac row per la gestione del versioning dei dati.
Di seguito le strutture che vengono create :

Estensione
Tipologia
Note
<table_name>_AUX
Table

<table_name>_LT 
Table
Tabella che contiene tutte le righe versionate per workspace e versione
<table_name>_PKD
View
Mostra le differenze tra 2 arbitrari WS/Savepoints
<table_name>_PKC
View
Mostra i conflitti tra WS e multiparent WS
<table_name>_MW 
View
Può essere usata per visualizzare i cambi in multipli WS.
<table_name>_LOCK
View
Mostra tutte le righe per le quali è attivo un lock versioning. Questa vista dipende dal WS
<table_name>_HIST
View
Mostra la storia dei cambi di versione sulle tabelle su cui è abilitato il versioning
<table_name>_DIFF
View
Mostra le differenze tra 2 arbitrari WS/Savepoints
<table_name>_CONS
View
Vista interna per individuare violazioni di constraint
<table_name>_CONF
View
Mostra i conflitti tra WS e multiparent WS
<table_name>_BPKC
View
Mostra i conflitti tra WS e multiparent WS
<table_name>_BASE
View

<table_name>
View

<table_name>_PKDC
View
Mostra le differenze tra 2 arbitrari WS/Savepoints
<table_name>_PKDB
View
Mostra le differenze tra 2 arbitrari WS/Savepoints
<table_name>_LTS
Table
Presente nel momento in cui si esegue la procedura BeginDdl, le modifiche apportate a questa tabella vengono propoagate sull <table_name>_LT.
<table_name>_PRG
Table
Tabelle contenente i dati nel caso in cui viene effettuata una Purge dei dati utilizzando il package DBMS_WS.PurgeTable
<table_name>_STG
Table
Tabella utilizzata per l’applicazione di operazione di DDL creata nel momento in cui viene utilizzato il package DBMS_WS.BeginDDL
<table_name>_DIS
Table
Tabella creata quando viene richiamato il package DBMS_WS.BeginBulkLoading



Di seguito l’architettura relativa ad OWM 11g:





Di seguito le operazioni che vengono implementate su un OWM:

Struttura
Operazione
Table
EnableVersioning, DisableVersioning, DL, merge, refresh, rollback, topologies
Workspace
create, goto, refresh, merge, rollback, remove, multiparent, compress, alter, events
Savepoints
create, alter, goto, rollback
History
goto date
Valid Time
valid from & till, set session valid time
Privileges
access, create, delete, rollback, merge
Access Mode
read, 1 writer, WS operations, none
Locks
exclusive and shared
Differences
compares savepoints and workspaces
Detect / Resolve Conflicts
choose version to merge
Bulk Data Movement
SQL*Loader, Import/Export, Replication



[1] Per ulteriori informazioni si rimanda alla documentazione oracle relativa alla versione dell’RDBMS utilizzato. Workspace Manager Developer’s  Guide.

Nessun commento:

Posta un commento