mercoledì 27 maggio 2015

OWM - Come verificare le differenze su una stessa tabella tra workspace diversi - parte I

Quando si utilizza OWM è possibile modificare i dati di una tabella a seconda del Workspace in cui ci troviamo, se però volessimo individuare le differenze presenti in due differenti Workspace (WS) su una stessa tabella come possiamo fare?
Per rispondere a questa domanda vi sono due soluzioni, una di prodotto ed una di fantasia o meglio di tipo applicativo svincolata dal prodotto stesso.
Oggi vediamo la prima soluzione.
Se si guardano le funzioni messe a disposizione dal prodotto ne troviamo una che ci viene in aiuto, la SetDiffVersions che ci permette di abilitare la selezione sulle viste xxx_DIFF che contengono le differenze tra due differenti WS su di una tabella.
Questa funzione permette di fare la differenza tra due WS o anche tra due WS a differenti valori di SavePoints. Per abilitare la valorizzazione delle variabili del contesto che permettono la lettura delle viste xxx_DIFF occorre quindi eseguire la seguente funzione:

  1. DBMS_WM.SetDiffVersions(workspace1 IN VARCHAR2,workspace2 IN VARCHAR2);
    or
  2. DBMS_WM.SetDiffVersions(workspace1 IN VARCHAR2,savepoint1 IN VARCHAR2, workspace2 IN VARCHAR2, savepoint2 IN VARCHAR2);
Vediamo un esempio di utilizzo.
Se non effettuo alcuna chiamata alle funzioni del punto 1 o 2 nel momento in cui vado ad interrogare la vista xxx_diff questa mi risulterà vuota.




A questo punto eseguiamo la funzione 1 fornendo due WS in input.
Come si può vedere abbiamo la valorizzazione delle variabili del contesto che permettono la visualizzazione dei dati nella vista xxx_DIFF.



Se eseguiamo nuovamente la select sulla vista xxx_DIFF questa volta verrano visualizzati i dati che sono stati movimentati in entrambi i WS con l'indicazione di una terza riga che nella colonna WM_DIFFVER riporta il valore DiffBase.  Questa riga rappresenta il contenuto per quella chiave di quanto presente al momento sulla vista xxx se venisse interrogata nel WS padre dei WS di cui stiamo facendo le differenze. In questo caso essendo il LIVE il padre di entrambi i WS la riga si riferisce a ciò che è presente in quel momento sul LIVE. Logicamente i WS devono avere in comune lo stesso padre. Nel campo invece WM_CODE appare l'indicazione del tipo di operazione che quella riga ha subito nei tre differenti WS.
I valori assunti sono i seguenti:
U (updated), D (deleted), I (inserted), NC (no change), NE (nonexistent).



 Analizzando il contenuto di questa vista possiamo verificare che cosa sia cambiato tra i due WS, logicamente vengono riportati solo quei record che sono stati movimentati nei WS indicati all'inizio.
Le colonne che il prodotto aggiunge alla tabella originale nella vista sono le seguenti:



Il secondo metodo, un pò + fantasioso lo vedremo la prossima volta... se avrò tempo.

Nessun commento:

Posta un commento