domenica 23 agosto 2015

ODI 11g-12c - Groovy come verificare che un file contenga una determinata stringa

Supponiamo di dover trovare una stringa all'interno di un file ed a seguito del risultato occorre bloccare o meno il processo in esecuzione.
Per bloccare l'esecuzione usciamo con un errore fittizio.

//Created by ODI Studio

package odi.sdk;
import java.sql.*;

import java.io.FileWriter;
import java.util.List;
import java.util.ArrayList;

 /************** export *************/

import java.io.File;
import java.io.IOException;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Collection;
import java.util.Date;
import java.util.Iterator;
import java.io.BufferedReader;
import java.io.FileReader;
import java.lang.Object;
import java.lang.Runtime;

import java.io.FileNotFoundException;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class From_File{

    private static int   count=0;
     
       /** Please change these Parameters *************/    
 static String Find_Frase = "#V_1"
 static String File_input = "#V_FILE_INPUT" 
 static String Path_ril ="#V_PATH_EXPORT"; 
 static def file_output =  new File(Path_ril+"/EXP_LOG/AOG_FindInFile.log");
 static PrintWriter out2 = new PrintWriter(new FileWriter(file_output));
 
public static void main(String [] args) {


 /************** Please change these Parameters *************/
// def File_Input = File_input.replace("/","\\");
 def file_input =  new File(File_input);
 def s = 0

      out2.println("§*********************   Repository Info ******************")
      out2.println("§***  File Input: "+File_input)   
      out2.println("§***  File Output: "+file_output.getAbsolutePath())   
      out2.println("§**********************************************************")
      out2.println(" ");

   out2.println("******************************************************")
           out2.println("--------------Current Line --------------------------");
               
       BufferedReader br = null;

try 
{

String sCurrentLine;
br = new BufferedReader(new FileReader(file_input));
                        out2.println("--count "+ count);  

while ((sCurrentLine = br.readLine()) != null) {  
                        Pattern pat = Pattern.compile(Find_Frase);
       // Pattern pat = Pattern.compile(Find_Frase,Pattern.CASE_INSENSITIVE);
                        Matcher mat = pat.matcher(sCurrentLine);
                          if(mat.find()){

                              mat.start();
                              count++;         
out2.println("lookingAt(): "+mat.lookingAt()+" "+sCurrentLine+" --- "+Find_Frase);
out2.println("matches(): "+mat.matches()+" "+sCurrentLine+" --- "+Find_Frase);

                           if (count>0) { out2.println("--count "+ count);
                 out2.println("--CurrentLine OK"); 
  }else{
              out2.println("--count "+ count);  
       out2.println("--CurrentLine KO");  
out2.close();
exit();
}  
  } //if
}//while

             if (count==0){
   out2.println("--count "+ count);  
       out2.println("--CurrentLine KO");  
out2.close();
exit();
}  

} catch (IOException e_1) {
out2.println("Exception thrown  :" + e_1.getMessage());  
e_1.printStackTrace(out2);
out2.close();
exit();  
}catch(Exception  e_6){
out2.println("Exception thrown  :" + e_6.getMessage());  
e_6.printStackTrace(out2);
out2.close();
exit();      
                }   out2.println("*****************************************************************")
out2.println(" ");
out2.close(); 
}


// End Main

sabato 22 agosto 2015

ODI 12c - Groovy come testare la connessione di un Agent con relativo Update

Di seguito un semplice script per effettuare il test di connessione ad un agent ODI e per effettuarne l'update.

import oracle.odi.runtime.agent.invocation.RemoteRuntimeAgentInvoker;

def RemoteRuntimeAgentInvoker agent = new
String IPADD="<inserire ip address o logical name host dell'agent>"
String PORTA="10011"
String PWD="<password dell'utente ODI di connessione>
RemoteRuntimeAgentInvoker("http://"+IPADD+":"+PORTA+"/oraclediagent", "SUPERVISOR", PWD.toCharArray());

String Name=agent.getAgentURL();
String User=agent.getUser();
String Pwd=agent.getCharArrayPassword();
String Invokealive=agent.invokeIsAlive();
 
       


// output con info su connessione al repository
      println("§*********************   Repository Info *****************************")
      println("§***  Name: "+Name)
      println("§***  User: "+User)
      println("§***  Pwd: "+Pwd)
      println("§***  Invokealive: "+Invokealive)
      println("§*********************************************************************")
   
try{
agent.invokeComputePlanning();
println("§***  AgentComputePlanning: Ok")
}
catch(Exception e){
println(e.getMessage());
}


ODI 12c - ODI Standalone Installation

Prima di partire con l'installazione di Oracle Data Integrator 12cR1 (12.1.3.0.0) e relativa patch Oracle Data Integrator 12cR1 (12.1.3.0.1) cerchiamo di capire dove reperire il sw e cosa più importante quali altri software sono necessari.

1. Step 0 - Download del software necessario:

A questo punto occorre capire il tipo di installazione che dobbiamo fare, in quanto nel caso di ODI Enterprise (JEE) abbiamo il seguente prerequisito che è quello di installare una Oracle Fusion Middleware Infrastracture. Questo prerequisito non è richiesto per una ODI Standalone Installation.

Analizziamo di seguito il caso di una ODI Standalone Installation, Per effettuare questo tipo di installazione seguiamo il seguente documento Oracle® Fusion Middleware Installing and Configuring Oracle Data Integrator .

2. Step 1 - Installazione JDK
  • Una volta effettuato il download della JDK occorre installarla. Se abbiamo scaricato il file tar.gz occorre solo scompattarlo e poi definire una variabile di ambiente JAVA_HOME che punta a questa directory:
    • export JAVA_HOME=/app/product/oracle/jdk1.7.0_51
    • export PATH=$JAVA_HOME/jre/bin:$PATH
    • export LD_LIBRARY_PATH=$JAVA_HOME/lib/amd64:$LD_LIBRARY_PATH
  • Gli export indicati sopra li possiamo inserire nel .profile dell'utente di installazione.
3. Step 2 - Installazione software ODI Standalone
  • Una volta installata la JDK e settata la JAVA_HOME possiamo procedere eseguendo l'installazione del sw ODI il che significa lanciare un file jar.
    • java -jar <fmw_12.1.3.0.0_odi>.jar

  • A questo punto possiamo seguire quanto indicato nel manuale di installazione e se sulla macchina non è mai stato installato un prodotto ORACLE apparirà una schermata la Inventory Directory fornire quella indcata ed andare avanti. Se l'installazione come abbiamo detto è di tipo Standalone indicare una nuova e vuota ORACLE_HOME in quanto solo nel caso di installazione J2EE è necessario fornire quella della infrastruttura. 
  • Adesso occorre scegliere il tipo di installazione:
    • Nel caso occorra creare una topologia per un JAVA EE o collocotaed standalone Agent allora dobbiamo scegliere  Enterprise Installationinto ed una ORACLE HOME esistente, quella della infrastruttura.
    • Se dobbiamo creare uno uan topology per uno standalone agents allora selezioniamo Standalone Installation.
  • Una volta scelta l'installazione partono i check per i prerequisiti e la richiesta per un security update da evitare declinando l'offerta di ricevere gli update da Support.
  • La schermata che adesso dovrebbe apparire è quella su summary alla quale possiamo dare l'ok e quindi cliccare su install.
  • Partita l'installazione occorre solo aspettare che finisca.
4. Step 3 - Installazione Master e Work Repository utilizzando l'utility RCU
  • Terminata l'installazione Step 2 occorre creare il master e work repository, per crearlo esistono due metodi, noi analizziamo il primo:
    • Installazione utilizzando l'utility RCU
    • Installazione utilizzando ODI STUDIO
  • Posizionarsi sulla directory in cui è presente l'eseguibile rcu:
    • cd $ODI_HOME/oracle_common/bin
    • ./rcu
Prima di procedere, parlare col DBA perchè occorre avere 
  1. le info di connessione all'istanza oracle su cui creare lo schema che conterrà il master ed il work repository 
  2. utenza con credenziali di sysdba in quanto deve creare alcuni schema oracle e relativi tablespaces
  • La prima schermata che appare vi chiede che cosa volete fare a questo punto occorre spuntare:
    • Create Repository
      • System Load and Product load
  • A questo punto a seconda di dove facciamo partire l'rcu abbiamo info diverse:
    • Se partiamo da una Standalone Installazione (nostro caso) verrà visualizzato solo AS COMMON SCHEMA (necessario _STB) ed il nome del MASTER E WORK REPOSITORY.
    • Se partiamo da una Enterprise Installazione appariranno anche altri schema nella AS COMMON SCHEMA oltra a quello _STB.
  • Step successivo occorre definire le password degli utenti, possibilmente la stessa per tutti
  • Altro Step adesso è quello della configurazione delle "custom variables for the Master and Work Repository." . Come valore di Encryption Algorithm indicare quello di default AES-128, mentre come Repository Type indicare D. A questo punto NEXT
  • Appariranno le indicazioni dei nuovi tablespaces se non siete sicuri di dove li  metta potete verificarne la locazione clicclando su MANAGE TABLESPACE. 
  • A questo punto andate di next fino alla fine dell'installazione.
5 Step 4 - Installazione Standalone Agent
  • Terminato lo step precedente creiamo il dominio dell'agent Stadalone:
    • cd  $ODI_HOME/oracle_common/common/bin
    • ./config.sh
  • Partita la schermata scegliere creazione di un nuovo dominio fornendo una directory vuota o lasciare quella di default indicata ed andare avanti.
  • Selezionare Stand Alone Agent e lasciare cliccato il secondo e premere Next
  • Indicare la corretta posizione della JAVA_HOME e Next
  • A questo punto appare la scheramata di autoconfigurazione che ricerca quanto installato con l'utility rcu, Configurare il database dove è installato lo schema _STB e cliccare su GetRCU Configuration. Al termine se tutto OK andare avanti col famoso Next
  • Verificare che nella schermata le informazioni siano corrette, ma dovrebbe averle prese in automatico leggendo lo schema _STB ed andare avanti alla schermata successiva nella quale potete fare un test di connessione se tutto ok Next
  • A questo punto configurate l'agent con nome, porta ecc e fate Next
  • Lasciate cliccato in Node Manager Type - Domain Default Location ed inserite le credenziali relative al NodeManager (memorizzatele da qualche parte)  e cliccate Next ed alla schermata successiva Create.
  • A questo punto aspettate fino a che non termina.
6 Step 5 - Start Agent StandAlone
  • Posizionarsi nella directory bin dell'agent ed effettuarne lo start
    • ./agent.sh -NAME=OracleDIAgent_SA -PORT=20910
7 Step 6 - Creare l'agent in ODI  Studio
  • Per questo step basta seguire la documentazione una volta creato effettuare un test di connessione se tutto ok.

A questo punto se l'ultimo step è ok possiamo considerare terminata l'installazione di Oracle Data Integrator 12cR1 (12.1.3.0.0).

8 Step 7 - Installazione Oracle Data Integrator 12cR1 (12.1.3.0.1) - solo nel caso di BigData

Per quanto riguarda l'installazione della patch Oracle Data Integrator 12cR1 (12.1.3.0.1) questa si installa sul software della 12.1.3.0.0 come una normale patch one/off, solo che non è una sola ma sono invece 3 patch. Effettuare l'unzip dei tre pacchetti e seguire l'installation note. La seconda patch in questo caso essendo una installazione di tipo standalone non deve essere installata.
Dopo aver installato le 3 patch avendo creato il master e work repository con la versione precedente occorre far girare l'utility di upgrade ua.
Per installare le patch one/off ricordarsi di effettuare l'unzip delle patch sotto la directory opatch e di valorizzare correttamente le seguenti variabili:

                    export ORACLE_HOME=<odi_home>
           export JAVA_HOME=/oramw/ODI/jdk1.7.0_55
           export PATH=$ORACLE_HOME:$PATH
           export PATH=$ORACLE_HOME/OPatch:$PATH
           export PATH=$JAVA_HOME/bin:$PATH

Per verificare che le variabili siano settate correttamente lanciare il seguente comando:

           opatch lsinventory

Se tutto ok vi dovrebbero apparire le patch installate su ODI in questo caso nessuna:

Oracle Interim Patch Installer version 13.2.0.0.0
Copyright (c) 2014, Oracle Corporation.  All rights reserved.


...
-------------------------------------------------------------------

There are no Interim patches installed in this Oracle Home.

-------------------------------------------------------------------

OPatch succeeded.

Ogni volta che installate un patch vi deve uscire la scritta in rosso.

Vediamo i passi relativi all'installazione delle singole Patch, creare una directory PATCH_TOP:


  • unzip -d PATCH_TOP p20042369_121300_Generic.zip
    • Verificare che le variabili di ambiente indicate sopra siano settate correttamente e posizionarsi nella prima delle directory contenenti le patch.
    • cd PATCH_TOP/20042369
    • opatch apply

  • La patch 20674616 richiede che l'installazione sia di tipo Enterprise se cosi non fosse possiamo non installarla altrimenti si avrebbe un errore.

  • unzip -d PATCH_TOP p20562777_121300_Generic.zip
    • Verificare che le variabili di ambiente indicate sopra siano settate correttamente e posizionarsi nella directory contenenti la patch.
    • cd PATCH_TOP/20562777
    • opatch apply

  • A questo punto se i repository Master e Work sono stati già creati con la versione precedente occorre effettuarne l'upgrade con l'utility ua. 
Per l'installazione di questa patch ricordatevi di seguire il relativo Readme.txt di cui ho fatto un rapido sunto.

martedì 11 agosto 2015

HFM - RDBMS ORACLE - Come estrarre una gerarchia da HFM 11

Di seguito una query per estrarre una gerarchia da HFM 11 che ha le sue tabelle delle dimensioni sul DB.


// TABELLA gerarchia
CREATE VIEW v_hfm_entity_gr AS
SELECT A.*
FROM
  (SELECT e.*,
    f.description
  FROM
    (SELECT *
    FROM
      (SELECT PARENTID,ITEMID,
        sys_connect_by_path(LABEL, '.') CB_LABEL,
        sys_connect_by_path(itemid, '.') CB_ITEMID,
        LEVEL G_LEVEL
      FROM
        (SELECT a.itemid,a.parentid,b.LABEL
          FROM 

HFM.ENTITY_LAYOUT a,HFM.ENTITY_ITEM b
         WHERE a.itemid=b.itemid
         ORDER BY 1
        ) C
        START WITH PARENTID             =-1
        CONNECT BY NOCYCLE PRIOR itemid = parentid
      )
    ) e,
    HFM.ENTITY_DESC f
  WHERE e.itemid  =f.itemid
  AND f.languageid=0
  ) A;

In questo esempio abbiamo considerato la Entity.
Un risultato simile si ottiene con la seguente query:

// TABELLA gerarchia
CREATE view v_hfm_entity_gm as
  SELECT distinct g.itemid,
  h.label||'.'||g.label label, g.description
 FROM
  (SELECT c.*,d.description
    FROM
     (SELECT a.itemid,
      a.parentid,
      b.label
    FROM HFM.ENTITY_LAYOUT a,
      HFM.PRIMO_ENTITY_ITEM b
    WHERE a.itemid=b.itemid
    ) c,
    HFM.ENTITY_DESC d
  WHERE c.itemid  =d.itemid
  AND d.languageid=0
  ) g,
  HFM.ENTITY_ITEM h
WHERE g.parentid=h.itemid ;


Il risultato dovrebbe essere equivalente.

Lasciate se vi va qualche commento....