Oracle
 sql >> Database >  >> RDS >> Oracle

Configurazione di Pentaho Data Integration per utilizzare Oracle Wallet per Oracle Cloud

Introduzione

I database Oracle Cloud utilizzano la sicurezza del portafoglio Oracle. Oracle Wallet contiene certificati crittografici e chiavi utilizzati per stabilire comunicazioni crittografate e sicure tra un client Oracle e il server di database Oracle di destinazione. Pentaho Data Integration può essere configurato per utilizzare Oracle Wallet per stabilire comunicazioni sicure tra PDI e un server cloud Oracle.

Questo tutorial presuppone che tu abbia configurato i seguenti componenti:

  • Un account Oracle Cloud con almeno un'istanza di database Oracle in esecuzione. Questo tutorial (link qui) fornisce i passaggi per configurare un account Oracle Cloud e un database autonomo. La connettività tra un client come Oracle SQL Developer e il database autonomo deve essere testata e confermata.
  • Pentaho Data Integration versione 7.xo 8.x installata su Windows o MacOSX. Le istruzioni per l'installazione dell'ultima versione di PDI sono disponibili qui (Windows) e qui (MacOSX). Prestare particolare attenzione alla versione di Java Development Kit utilizzata. A partire da gennaio 2019 Pentaho data Integration 8.3 in esecuzione su Java Development Kit 1.8 è stato testato e riscontrato che funziona correttamente.

Questo tutorial presuppone che PDI sia stato installato in C:\Pentaho\data-integration su Windows o /Users//Pentaho/data-integration su MacOSX.

Nella sezione successiva vengono fornite le istruzioni per il download e l'installazione dei driver Oracle JDBC.

Installazione dei driver Oracle JDBC in Pentaho Data Integration

Pentaho Data Integration richiede l'installazione dei driver Oracle JDBC per la connessione a qualsiasi database Oracle. Oltre al file principale ojdbc8.jar, sono necessari anche diversi file aggiuntivi che fanno parte della distribuzione JDBC completa. Assicurati di scaricare e installare solo i componenti del driver JDBC compilati per JDK 1.8. Questi avranno un "8" nel nome del file.
Per iniziare, visita la pagina dei download dei driver JDBC per Oracle 12c all'indirizzo:
https://www.oracle.com/database/technologies/jdbc-ucp -122-downloads.html

Scorri verso il basso fino alla sezione in cui si trovano i singoli download.

I file da scaricare sono:

ojdbc8.jar
oraclepki.jar
osdt_cert.jar
osdt_core.jar

Ognuno di questi file deve essere scaricato e copiato nella cartella Pentaho data-integration\lib.

Come sempre, assicurati di riavviare l'integrazione dei dati di Pentaho in modo che i nuovi file jar vengano riconosciuti.

Nella pagina seguente, Oracle Wallet verrà scaricato dal server cloud.

Download di Oracle Wallet da Oracle Cloud

Nota:se utilizzi Safari su MacOSX, modifica le preferenze in Safari per evitare che i file "sicuri" vengano aperti automaticamente dopo il download. Safari> Preferenze> Deseleziona la casella di controllo Apri file "sicuri" dopo il download.

Accedi alla tua console Oracle Cloud e vai alla pagina Database autonomo. Fare clic sul collegamento sotto il Nome visualizzato per uno dei tuoi database.

Quando viene visualizzata la schermata Dettagli, fai clic su Connessione DB pulsante.

Quando viene visualizzata la finestra Connessione al database, fai clic su Scarica portafoglio pulsante.

Fornisci una password corrispondente per il Portafoglio, quindi fai clic sul Download blu pulsante.

Si noti che il nome del file del portafoglio è costituito dall'opera "Wallet" con il nome dei database autonomi aggiunti ad esso. Per questo esempio il file è:Wallet_ATPDatabase1.zip.
Assicurati di salvare il tuo file Wallet in un luogo sicuro.

Torna alla schermata Dettagli database visualizzata, fai clic su Connessione DB pulsante di nuovo. Scorri verso il basso fino a visualizzare la sezione intitolata Stringhe di connessione . Si noti che una stringa di connessione corrisponde a un tipo di connessione specifico salvato nel file tnsnames.ora incluso nel portafoglio. Prendi nota di questi nomi come quello con _HIGH alla fine. Questi nomi dovrebbero essere costituiti dal nome del database (senza spazi) seguito da _HIGH, _MEDIUM o _LOW. In questo esempio, il nome del database è “ATP Database1”, quindi la prima stringa di connessione è denominata:ATPDatabase1_HIGH. Annota o copia e salva la voce in Nome TNS per il tuo database.

I passaggi per l'integrazione di Oracle Wallet in PDI sono forniti nella pagina successiva.

Integrazione di Oracle Cloud Wallet in Pentaho Data Integration

È necessario seguire una serie di passaggi per indirizzare l'integrazione dei dati di Pentaho all'utilizzo di Oracle Wallet.

Assicurati che Pentaho Data Integration sia installato, con i driver Oracle JDBC necessari. PDI non dovrebbe essere in esecuzione a questo punto.

Modifica le proprietà.personalizzate file

Individua il file custom.properties che si trova nella cartella data-integration\system\karaf\etc\.

Usa Blocco note (Windows) o TextEdit (MacOSX) per modificare il file custom.properties e aggiungi la seguente riga in fondo al file (se non è già presente).
org.apache.karaf.security.providers =oracle.security.pki.OraclePKIProvider

Salva il file custom.properties ed esci dall'editor di testo.

Modifica Spoon.bat o spoon.sh file

Per le installazioni Windows, modifica il file Spoon.bat (usa Blocco note o un altro editor di testo). Scorri verso il basso fino alla riga 112 appena prima la sezione con REM ** Esegui… **

Aggiungi le seguenti righe (evidenziate in giallo).

REM ******************************************************************
REM ** Set java runtime options                                     **
REM ** Change 2048m to higher values in case you run out of memory  **
REM ** or set the PENTAHO_DI_JAVA_OPTIONS environment variable      **
REM ******************************************************************

if "%PENTAHO_DI_JAVA_OPTIONS%"=="" set PENTAHO_DI_JAVA_OPTIONS="-Xms1024m" "-Xmx2048m" "-XX:MaxPermSize=256m"

set OPT=%OPT% %PENTAHO_DI_JAVA_OPTIONS% "-Dhttps.protocols=TLSv1,TLSv1.1,TLSv1.2" "-Djava.library.path=%LIBSPATH%" "-DKETTLE_HOME=%KETTLE_HOME%" "-DKETTLE_REPOSITORY=%KETTLE_REPOSITORY%" "-DKETTLE_USER=%KETTLE_USER%" "-DKETTLE_PASSWORD=%KETTLE_PASSWORD%" "-DKETTLE_PLUGIN_PACKAGES=%KETTLE_PLUGIN_PACKAGES%" "-DKETTLE_LOG_SIZE_LIMIT=%KETTLE_LOG_SIZE_LIMIT%" "-DKETTLE_JNDI_ROOT=%KETTLE_JNDI_ROOT%"

@REM Java options to support Oracle Wallet secure connections
@REM Assumes that the cwallet.sso file is in data-integration\Wallet\ folder
set OPT="-Djavax.net.ssl.trustStore=%KETTLE_DIR%\Wallet\cwallet.sso" %OPT%
set OPT="-Djavax.net.ssl.trustStoreType=SSO" %OPT%
set OPT="-Djavax.net.ssl.keyStore=%KETTLE_DIR%\Wallet\cwallet.sso" %OPT%
set OPT="-Djavax.net.ssl.keyStoreType=SSO" %OPT%
set OPT="-Doracle.net.tns_admin=%KETTLE_DIR%\Wallet" %OPT%

REM ***************
REM ** Run...    **
REM ***************

Salva il file cucchiaio.bat ed esci dall'editor di testo.

Su MacOSX, fai clic con il pulsante destro del mouse sul file cucchiaio.sh, evidenzia Apri con quindi seleziona App TextEdit .

Scorri verso il basso nel file fino a individuare la sezione con "# riga opzionale per allegare un debugger". Il codice da aggiungere andrà nello spazio appena prima questa riga.
Aggiungi le seguenti righe (evidenziate in blu nell'immagine sotto):

# Java options to support Oracle Wallet secure connections
# Assumes that the cwallet.sso file is in data-integration/Wallet/ folder
OPT="-Djavax.net.ssl.trustStore=${BASEDIR}/Wallet/cwallet.sso ${OPT}"
OPT="-Djavax.net.ssl.trustStoreType=SSO ${OPT}"
OPT="-Djavax.net.ssl.keyStore=${BASEDIR}/Wallet/cwallet.sso ${OPT}"
OPT="-Djavax.net.ssl.keyStoreType=SSO ${OPT}"
OPT="-Doracle.net.tns_admin=${BASEDIR}/Wallet ${OPT}"

Salva il file cucchiaio.sh ed esci dall'app TextEdit.

Copia i file del portafoglio su PDI

Assicurati di aver scaricato il portafoglio Oracle dal cloud (vedi pagina precedente). Per questo esempio, il database è denominato "ATPDatabase1" e il nome del file del portafoglio è:Wallet_ATPDatabase1.zip
Decomprimi il file del portafoglio e individua i seguenti quattro file all'interno:

cwallet.sso
sqlnet.ora
tnsnames.ora
trustore.jks

Questi file sono mostrati anche nella figura seguente:

Evidenzia questi quattro file e copiali.

Vai alla cartella Pentaho Data Integration. Crea una sottocartella denominata "Wallet". Incolla i quattro file Oracle Wallet in questa cartella Wallet come mostrato di seguito (Windows):

Su MacOSX copia i quattro file del wallet e incollali nella cartella /Users//Pentaho/data-integration/Wallet.

Esecuzione PDI

Una volta che questi file sono a posto, puoi avviare Pentaho Data Integration normalmente eseguendo il file Spoon.bat (o spoon.sh per utenti MacOSX).
Per eseguire Pentaho Data Integration su Windows, fai doppio clic sul cucchiaio. programma pipistrello.

Per eseguire Pentaho Data Integration su MacOSX, fai clic con il pulsante destro del mouse sul programma spoon.sh, seleziona Apri con> Altro... Modifica il filtro in "Tutte le applicazioni" e poi in Utilità cartella scegli Terminale . Quindi fai clic su Apri pulsante.

La prossima sezione discuterà la configurazione di una nuova connessione al database dall'interno di Pentaho Data Integration.

Creazione di una nuova connessione al database in Pentaho Data Integration

Per utilizzare Oracle Wallet in Pentaho Data Integration, è necessario configurare una connessione di tipo "Database generico". I seguenti passaggi descrivono questo processo.

Quando si imposta un passaggio di input tabella, output tabella o ricerca/aggiornamento dimensione, creare una nuova connessione al database.

  • Assegna un nome alla nuova connessione (lo inventi tu).
  • Cambia il Tipo di connessione al database generico.
  • Cambia il dialetto a Oracle.
  • Compila l'URL di connessione personalizzato come segue:
    jdbc:oracle:thin:@atpdatabase1_high
    Dove atpdatabase1_high è il nome di una delle tue connessioni al tuo database Oracle Cloud (Rivisto nella pagina precedente). Sarà composto dal nome del tuo database con _high collegato ad esso. Ad esempio, se il nome del database è "DB 123456789", un possibile URL di connessione sarà:
    jdbc:oracle:thin:@DB123456789_high
  • Compila il Nome della classe di guida personalizzata come segue:
    oracle.jdbc.driver.OracleDriver
  • Inserisci il tuo nome utente e password per il tuo database Oracle Cloud.
  • Fai clic su Test pulsante per testare la connessione.

Il risultato del test dovrebbe apparire positivo come mostrato di seguito.

Fai clic su OK per chiudere il test di connessione. Fai clic su OK pulsante per salvare questa connessione al database.

Alcuni errori di connessione comuni sono forniti nella pagina successiva.

Errori e problemi comuni di connessione a Oracle Wallet

Esistono diversi errori e problemi comuni che potresti riscontrare durante l'utilizzo di PDI e Oracle Cloud. Gli errori e le soluzioni / soluzioni alternative sono presentati di seguito.

Errore IO:impossibile risolvere l'identificatore di connessione

Se ricevi un errore come "Errore IO:impossibile risolvere l'identificatore di connessione", il tuo file tnsnames.ora non può essere trovato o il nome TNS fornito non corrisponde a una delle connessioni. Ad esempio:

Error connecting to database [OracleCloud] :org.pentaho.di.core.exception.KettleDatabaseException: 
Error occurred while trying to connect to the database
Error connecting to database: (using class oracle.jdbc.driver.OracleDriver)
IO Error: could not resolve the connect identifier  "atpdatabase1_hig"

Ricontrolla il tuo file tnsnames.ora e assicurati di utilizzare un nome di connessione che appare nel file tnsnames.ora. Sul sistema operativo Windows utilizzare il programma NotePad per aprire il file tnsnames.ora. Su MacOSX, usa il programma TextEdit per aprire il file tnsnames.ora.

ORA-01017:nome utente/password non validi; accesso negato

Se ricevi un errore come “ORA-01017:nome utente/password non validi; accesso negato” significa che il nome utente o la password Oracle forniti non sono validi. Ad esempio:

Error connecting to database [OracleCloud] :org.pentaho.di.core.exception.KettleDatabaseException: 
Error occurred while trying to connect to the database
Error connecting to database: (using class oracle.jdbc.driver.OracleDriver)
ORA-01017: invalid username/password; logon denied

Controllare il nome utente e la password sull'istanza del database Oracle per assicurarsi che siano corretti. Tieni presente che il nome utente e la password del database Oracle saranno diversi dall'account del tuo sito Web Oracle Cloud. Tipicamente per i test utilizziamo l'utente ADMIN e questa password è stata impostata al momento della creazione dell'Autonomous Database o Autonomous Data Warehouse. Ad esempio a pagina 4 di questo tutorial.
Assicurati che la password non contenga nessuno dei seguenti caratteri:@ / \ ?

Potrebbe essere più semplice per i test utilizzare l'utente ADMIN con una password relativamente "semplice" come Pw123Pw123Pw123 .
Assicurati di cambiare la password con qualcosa di più sicuro al termine del test.

Impossibile trovare la classe di driver 'oracle.jdbc.driver.OracleDriver'

Se viene visualizzato un messaggio di errore del tipo:"Impossibile trovare la classe driver 'oracle.jdbc.driver.OracleDriver'", assicurati che i driver JDBC siano stati copiati nella cartella data-integration\lib e che PDI sia stato riavviato. Assicurati inoltre di non inserire spazi prima della "o" in oracle.jdbc.driver... Ad esempio:

Error connecting to database [OracleCloud] :org.pentaho.di.core.exception.KettleDatabaseException: 
Error occurred while trying to connect to the database
Driver class 'oracle.jdbc.driver.OracleDriver' could not be found, make sure the 
'Generic database' driver (jar file) is installed. oracle.jdbc.driver.OracleDriver

ORA-12529 TNS:Richiesta di connessione rifiutata in base alle regole di filtraggio correnti

Di voi viene visualizzato un errore del tipo:“ORA-12529 TNS:Richiesta di connessione rifiutata in base alle regole di filtro correnti ” quando ci si connette al database, è possibile che le impostazioni di sicurezza della rete per il database autonomo impediscano le connessioni. Il messaggio di errore completo potrebbe apparire come segue:


Error connecting to database [OracleCloud] :org.pentaho.di.core.exception.KettleDatabaseException:
Error occurred while trying to connect to the database
Error connecting to database: (using class oracle.jdbc.driver.OracleDriver)
Listener refused the connection with the following error:
ORA-12529, TNS:connect request rejected based on current filtering rules

Accedi all'interfaccia di gestione di Oracle Cloud ed esamina la schermata Informazioni sul database autonomo per il tuo database. Controlla il Tipo di accesso e Elenco di controllo accessi per garantire che le sessioni di accesso remoto siano consentite dalla tua posizione. Potrebbe essere necessario riavviare il database

Errore IO:Ricevuto avviso fatale:handshake_failure, lasso di connessione 188 ms., Autenticazione scaduto 0 ms.

Questo errore può verificarsi in caso di mancata corrispondenza tra la versione di Java Development Kit e il server Oracle. Potrebbe essere correlato alle librerie di codice utilizzate per proteggere il canale di comunicazione tra client e server (ad es. TLS). Assicurati di avere l'ultima versione di Oracle Java Development Kit 8. Ad esempio:

Error connecting to database [oracle_cloud_atp] :org.pentaho.di.core.exception.KettleDatabaseException:
Error occurred while trying to connect to the database
Error connecting to database: (using class oracle.jdbc.driver.OracleDriver)
IO Error: Received fatal alert: handshake_failure, connect lapse 188 ms., Authentication lapse 0 ms.
org.pentaho.di.core.exception.KettleDatabaseException:
Error occurred while trying to connect to the database
Error connecting to database: (using class oracle.jdbc.driver.OracleDriver)
IO Error: Received fatal alert: handshake_failure, connect lapse 188 ms., Authentication lapse 0 ms.

Errore IO:Inbound chiuso prima di ricevere close_notify del peer

Se si riceve un errore come:"Errore IO:Inbound chiuso prima della ricezione di close_notify del peer" durante l'esecuzione di una trasformazione, è possibile che siano presenti troppe connessioni database aperte al server Oracle. Questo potrebbe essere il caso se stai utilizzando i servizi "Sempre gratuiti" su Oracle Cloud. questi servizi hanno un numero limitato di connessioni simultanee.

Chiudi tutte le schede di trasformazione aggiuntive che hai aperto. Esci da Spoon e riavvialo. Apri solo la trasformazione su cui hai lavorato e prova a eseguirla di nuovo. Ad esempio nel registro PDI:


2020/01/19 15:44:43 - Promotion Dim Lookup.0 - ERROR (version 8.2.0.0-342, 
build 8.2.0.0-342 from 2018-11-14 10.30.55 by buildguy) : An error occurred, 
processing will be stopped:
2020/01/19 15:44:43 - Promotion Dim Lookup.0 - Error occurred while trying to 
connect to the database
2020/01/19 15:44:43 - Promotion Dim Lookup.0 - IO Error: Inbound closed before 
receiving peer's close_notify: possible truncation attack?, Authentication lapse 0 ms.

In alcuni rari casi, ciò potrebbe anche essere causato da una mancata corrispondenza nella revisione del JDK in uso. Sono state introdotte alcune incompatibilità con il supporto PKI in Java Development Kit versione 1.8. L'installazione di un JDK 1.8 aggiornato sembra risolvere questi problemi.

Se il problema persiste (e ti stai connettendo a un server non di produzione), prova a riavviare il database autonomo Oracle in quanto ciò potrebbe liberare eventuali connessioni residue.

ORA-00018:numero massimo di sessioni superato

ORA-00018:numero massimo di sessioni superato può apparire un errore se il database esaurisce le connessioni disponibili. Questo può essere un problema quando si lavora con il livello "Sempre gratuito" del database Oracle Autonomous. L'errore potrebbe apparire come segue:

org.pentaho.di.trans.steps.dimensionlookup.DimensionLookupMeta@75df4b1d -
 ERROR (version 8.2.0.0-342, build 8.2.0.0-342 from 2018-11-14 10.30.55 by buildguy) : 
A database error occurred:
org.pentaho.di.trans.steps.dimensionlookup.DimensionLookupMeta@75df4b1d - 
    Error occurred while trying to connect to the database
org.pentaho.di.trans.steps.dimensionlookup.DimensionLookupMeta@75df4b1d -
org.pentaho.di.trans.steps.dimensionlookup.DimensionLookupMeta@75df4b1d - 
      Error connecting to database: (using class oracle.jdbc.driver.OracleDriver)
org.pentaho.di.trans.steps.dimensionlookup.DimensionLookupMeta@75df4b1d - 
       ORA-00018: maximum number of sessions exceeded

Chiudi tutte le schede di trasformazione aggiuntive che hai aperto. Esci da Spoon e riavvialo. Apri solo la trasformazione su cui hai lavorato e prova a eseguirla di nuovo.
Se il problema persiste (e ti stai connettendo a un server non di produzione), prova a riavviare il database autonomo Oracle in quanto ciò potrebbe liberare qualsiasi residuo connessioni.

Tipi di dati errati durante la creazione di tabelle

PDI deve utilizzare i tipi di dati Oracle appropriati (INTEGER, NUMBER, DATE, VARCHAR) durante la creazione di tabelle tramite i passaggi di Ricerca/Aggiornamento dimensione o Output tabella. Se vedi l'uso di tipi di dati come BIGSERIAL o altri tipi di dati non Oracle, prova quanto segue:

  • Torna al passaggio di origine, ad esempio il passaggio di lettura CSV e deseleziona la casella "Conversione pigra"
  • Torna al passaggio Ricerca/Aggiornamento dimensione o Output tabella e Modifica la connessione al database. Assicurati il ​​dialetto è impostato su Oracle .
    Fare clic sul pulsante TEST per assicurarsi che le credenziali funzionino ancora. Chiudi la finestra di dialogo Connessione al database.
  • Fare clic sul pulsante SQL e controllare l'istruzione SQL CREATE TABLE proposta per assicurarsi che i tipi di dati siano corretti.
  • Se i tipi di dati non sono ancora corretti, prova a riavviare PDI e segui nuovamente i passaggi precedenti.

Risposta lenta quando si utilizza PDI Database Explorer con Oracle Cloud

Potresti notare che Pentaho Data Integration richiederà molto tempo (e potrebbe bloccarsi) quando usi Strumenti> Database> Esplora funzione per esplorare un database Oracle Cloud. Il motivo principale è che la maggior parte delle istanze Oracle Cloud dispone di un numero elevato di schemi di database integrati che PDI Database Explorer tenta di leggere.

Invece di utilizzare Database Explorer di PDI, utilizza lo strumento SQL Developer di Oracle per esplorare il tuo schema, eliminare le vecchie tabelle e interrogare i dati per vedere come funzionano le trasformazioni. Oracle Cloud ha un'applicazione Web SQL Developer integrata che è facile da usare per questo scopo.

Cache non valida con passaggio di ricerca/aggiornamento dimensione causato da Errore di serializzazione da riga a matrice di byte

Durante l'aggiornamento dei dati utilizzando un passaggio Ricerca dimensione/Aggiornamento, è possibile che si verifichi un errore relativo alla chiave tecnica (chiave surrogata) e Errore durante la serializzazione da riga a matrice di byte . Un esempio di questo errore potrebbe essere:


Dimension lookup/update.0 - ERROR (version 8.2.0.0-342, build 8.2.0.0-342 from 
    2018-11-14 10.30.55 by buildguy) : Unexpected error
Dimension lookup/update.0 - ERROR (version 8.2.0.0-342, build 8.2.0.0-342 from 
    2018-11-14 10.30.55 by buildguy) : java.lang.RuntimeException: 
    Error serializing row to byte array
Dimension lookup/update.0 - at org.pentaho.di.core.row.RowMeta.extractData(RowMeta.java:1134)
Dimension lookup/update.0 - at org.pentaho.di.trans.steps.dimensionlookup.DimensionLookup.addToCache(DimensionLookup.java:1522)
Dimension lookup/update.0 - at org.pentaho.di.trans.steps.dimensionlookup.DimensionLookup.lookupValues(DimensionLookup.java:754)
Dimension lookup/update.0 - at org.pentaho.di.trans.steps.dimensionlookup.DimensionLookup.processRow(DimensionLookup.java:232)
Dimension lookup/update.0 - at org.pentaho.di.trans.step.RunThread.run(RunThread.java:62)
Dimension lookup/update.0 - at java.lang.Thread.run(Thread.java:748)
Dimension lookup/update.0 - Caused by: java.lang.RuntimeException: CUSTOMER_DIM_ID BigNumber(38) : 
     There was a data type error: the data type of java.lang.Long object 
     [320] does not correspond to value meta [BigNumber(38)]

Questo errore potrebbe essere causato da un valore di chiave tecnica errato nella cache o dall'impossibilità del passaggio Ricerca/Aggiornamento dimensione di accedere alla cache di valori di chiave tecnica univoci.

Per risolvere questo problema, riprova la trasformazione con Abilita la cache opzione disattivata nel passaggio Ricerca/Aggiornamento dimensione. Potresti anche voler svuotare la cache facendo clic su SQL e quindi fai clic su Cancella cache pulsante.