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.
|
·
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