martedì 15 ottobre 2019

OWB 11.2.0.4 - OMBPLUS come estrarre il valore delle DB_LOCATION da un mapping

Sono anni che non programmo in OMBPLUS  e pensavo che orma OWB fosse desupportato, invece gli scheletri ritornano. Come zombi ecco che qualche cliente ancora ha come prodotto OWB, di seguito un semplice script in tcl per estrarre le location delle tabelle presenti in un mapping.

set OMBLOG <path>/tcl/transf_map_Location_BI_STAGE.log
OMBCONNECT <user>/<password>@<host>:<porta>:<SERVICE_NAME>
OMBCC '<folder>'
OMBCONNECT CONTROL_CENTER 
<user>/<password>@<host>:<porta>:<SERVICE_NAME> USE REPOSITORY '<workspace>'
OMBCAC 'control_center_configuration'


set pflist [OMBLIST MAPPINGS]
foreach procname $pflist {
set ptlist [OMBRETRIEVE MAPPING '$procname' GET TABLE OPERATORS]
foreach tabname $ptlist {
OMBRETRIEVE MAPPING '$procname' OPERATOR '$tabname'   GET PROPERTIES (DB_LOCATION)
}
}


Questo occorre salvarlo in un file tcl e poi eseguirlo fornendolo in input ad OMBPLUS.

Il risultato  è un file che contiene al suo interno ogni singola istruzione esplosa del suo output.

Nel caso in cui la LOCATION non è valorizzata troverete questo valore.

  • {Unknown value}

mercoledì 4 settembre 2019

OBIEE 12C - Purge Usage Tracking

Una volta attivato lo Usage Tracking su OBIEE occorre tenere sotto controllo le tabelle in cui vengono memorizzate le query e pensare ad uno svecchiamento delle stesse. Nelle tabelle vengono memorizzate in dei campi CLOB le query effettuate ed a lungo andar questo provoca un aumento dello spazio occupato.
Le tabelle impattate fondamentalmente sono s_nq_db_acct e s_nq_acct, collegate tra loro tramite FK.

Per verificare l'effettiva dimensione occupata dalla due tabelle si può utilizzare la seguente query:

SELECT SUM(BYTES)/1024/1024 "Real Meg" FROM DBA_SEGMENTS
WHERE SEGMENT_NAME IN (
  SELECT VAL FROM (
    SELECT TABLE_NAME, SEGMENT_NAME, INDEX_NAME FROM DBA_LOBS
    WHERE TABLE_NAME = :TABLE_NAME AND OWNER= :OWNER
  )
  UNPIVOT(VAL FOR COL IN(TABLE_NAME, SEGMENT_NAME, INDEX_NAME))
)


Per effettuare la purge dei dati si può procedere nel seguente modo:

begin
   execute immediate 'delete from <SCHEMA>.s_nq_db_acct where start_dt < (sysdate - 90);
   commit;
 
   execute immediate 'delete from
<SCHEMA>.s_nq_acct where start_dt < (sysdate - 90);
   commit;

   -- Enable row_movement
   execute immediate 'alter table
<SCHEMA>.s_nq_db_acct enable row movement';
   execute immediate 'alter table
<SCHEMA>.s_nq_acct enable row movement';
 
   -- Shrink space tables and Indexes
   execute immediate 'alter table
<SCHEMA>.s_nq_db_acct shrink space cascade';
   execute immediate 'alter table
<SCHEMA>.s_nq_acct shrink space cascade';
 
   -- Shrink space LOB segments
   execute immediate 'alter table
<SCHEMA>.s_nq_db_acct modify lob (query_blob) (shrink space)';
   execute immediate 'alter table
<SCHEMA>.s_nq_acct modify lob (query_blob) (shrink space)';
 
end;


 Al termine si potrebbe anche pensare di fare una resize dei datafiles associati al tablespace in modo da recuperare spazio disco.


mercoledì 3 luglio 2019

RDBMS ORACLE - To_Char Function di oracle perde lo zero

Di seguito un comportamento un pò strano della funzione TO_CHAR di oracle in presenza della conversione di number.
In Oracle, quando si converte un numero con uno zero iniziale in un carattere, il numero iniziale scompare.

Per ovviare a questo piccolo problema si può impostare la mask nel TO_CHAR, un esempio potrebbe essere il seguente:


La mask  'FM99999999999999.99999' utilizzata non va bene, occorre quindi esplicitare lo zero nelle mask.


La mask corretta è 'FM999999999999990.99999', come si vede sopra, peccato che se si effettua lo spool su file il problema rimane. A questo punto facciamo una piccola modifica ed il problema è risolto.



Soluzione ottenuta grazie, come al solito alla documentazione, ma in questo caso particolare grazie a Matteo Iacari.


Qui trovate ulteriori informazioni sulla Funzione TO_CHAR(number, format)







venerdì 15 febbraio 2019

ODI 12c - Utilizzo di variabili che richiamano operazioni di sistema operativo

Spesso nasce il problema di dover effettuare una wc -l su un file e poi verificarne il risultato, su ODI è facile l'utilizzo di variabili che accedono al database ma come si fa per estrarre valori da un file senza effettuare una load di un file in tabella?
Quanto indicheremo sotto è valido solo per l'estrazione di una riga da un file.
Vediamo passo passo come effettuare.

  1. Creazione di una variabile che effettui una select da sistema operativo.
  2. Creazione di una variabile di tipo testo che contenga in maniera dinamica il nome del file.
  3. Creazione di un package che richiama:
    1. la variabile indicata al passo 2 come set 
    2. la variabile indicata al passo 1 come refresh
  •  Come primo passo occorre creare una varibiale che effettui una select su sistema operativo e ce abbia la seguente sintassi, un pò ostica.
      select    COUNT_FILE.MAX_LEVEL    MAX_LEVEL
    from     #TI_INFOBOARD.V_FILE_AND_PATH COUNT_FILE
 /*$$SNPS_START_KEYSNP$CRDWG_TABLESNP$CRTABLE_NAME=#TI_INFOBOARD.INPUT_FILE_CC.txt

 SNP$CRLOAD_FILE=#TI_INFOBOARD.V_FILE_AND_PATHSNP$CRFILE_FORMAT=D
 SNP$CRFILE_SEP_FIELD=0x002cSNP$CRFILE_SEP_LINE=0x000A
 SNP$CRFILE_FIRST_ROW=0SNP$CRFILE_ENC_FIELD=SNP$CRFILE_DEC_SEP=SNP$CR
 SNP$CRDWG_COLSNP$CRCOL_NAME=MAX_LEVELSNP$CRTYPE_NAME=STRINGSNP$CRORDER=1
 SNP$CRLENGTH=0SNP$CRACTION_ON_ERROR=NULLSNP$CR$$SNPS_END_KEY*/


          Di seguito una piccola legenda di quanto indicato tra /* e */



  •  Creazione della variabile di tipo testo che contiene il path dinamico.


  • Creazione del comando di sistema operativo che effettua la wc -l di un file ed inserisce il risultato in un altro file che poi contiene il valore da leggere.
            wc -l <PATH_FILE_1> | awk '{print $1}' > <PATH_FILE_1>_CC.txt


 
  •  Creazione Package che richiama le variabili.


giovedì 27 settembre 2018

Dynamic Converter Engine (DCE) - Migration IBM DataStage to Oracle Data Integrator (ODI)

Ciao a tutti oggi riprendo a scrivere condividendo il mio lavoro degli ultimi mesi.
La creazione di un software per la migrazione automatica da IBM DataStage ad Oracle Data Integrator ODI versione 12c.