sql >> Base de Datos >  >> RDS >> Oracle

Configuración de Pentaho Data Integration para utilizar Oracle Wallet para Oracle Cloud

Introducción

Las bases de datos de Oracle Cloud utilizan la seguridad de la cartera de Oracle. Oracle Wallet contiene certificados criptográficos y claves que se utilizan para establecer comunicaciones cifradas y seguras entre un cliente de Oracle y el servidor de la base de datos de Oracle de destino. Pentaho Data Integration se puede configurar para usar Oracle Wallet para establecer comunicaciones seguras entre PDI y un servidor en la nube de Oracle.

Este tutorial asume que tiene los siguientes componentes configurados:

  • Una cuenta de Oracle Cloud con al menos una instancia de base de datos de Oracle en ejecución. Este tutorial (enlace aquí) proporciona los pasos para configurar una cuenta de Oracle Cloud y Autonomous Database. La conectividad entre un cliente como Oracle SQL Developer y la base de datos autónoma debe probarse y confirmarse.
  • Pentaho Data Integration versión 7.x u 8.x instalada en Windows o MacOSX. Las instrucciones para instalar la última versión de PDI se pueden encontrar aquí (Windows) y aquí (MacOSX). Preste especial atención a la versión del kit de desarrollo de Java utilizada. A partir de enero de 2019, Pentaho data Integration 8.3 que se ejecuta en Java Development Kit 1.8 se probó y se encontró que funciona correctamente.

Este tutorial asume que PDI se instaló en C:\Pentaho\data-integration en Windows o /Users//Pentaho/data-integration en MacOSX.

En la siguiente sección, se proporcionan instrucciones para descargar e instalar los controladores Oracle JDBC.

Instalación de los controladores Oracle JDBC en Pentaho Data Integration

Pentaho Data Integration requiere la instalación de los controladores JDBC de Oracle para conectarse a cualquier base de datos de Oracle. Además del archivo principal ojdbc8.jar, también se requieren varios archivos adicionales que forman parte de la distribución completa de JDBC. Asegúrese de descargar e instalar únicamente los componentes del controlador JDBC compilados para JDK 1.8. Estos tendrán un "8" en el nombre del archivo.
Para comenzar, visite la página de descargas del controlador Oracle 12c JDBC en:
https://www.oracle.com/database/technologies/jdbc-ucp -122-descargas.html

Desplácese hacia abajo hasta la sección donde se encuentran las descargas individuales.

Los archivos a descargar son:

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

Cada uno de estos archivos debe descargarse y copiarse en la carpeta Pentaho data-integration\lib.

Como siempre, asegúrese de reiniciar Pentaho Data Integration para que se reconozcan los nuevos archivos jar.

En la página siguiente, Oracle Wallet se descargará del servidor en la nube.

Descarga de Oracle Wallet desde Oracle Cloud

Nota:si usa Safari en MacOSX, cambie las preferencias en Safari para evitar que los archivos "seguros" se abran automáticamente después de la descarga. Safari> Preferencias> Desmarque la casilla de verificación Abrir archivos "seguros" después de descargarlos.

Inicie sesión en su consola de Oracle Cloud y vaya a la página de Autonomous Database. Haga clic en el enlace debajo del Nombre para mostrar para una de sus bases de datos.

Cuando aparezca la pantalla Detalles, haga clic en Conexión de base de datos botón.

Cuando aparezca la ventana Conexión a la base de datos, haga clic en Descargar monedero botón.

Proporcione una contraseña que coincida con Wallet y luego haga clic en el botón azul Descargar botón.

Tenga en cuenta que el nombre del archivo de la billetera consiste en el trabajo "Wallet" con el nombre de las bases de datos autónomas agregadas. Para este ejemplo, el archivo es:Wallet_ATPDatabase1.zip.
Asegúrese de guardar su archivo de Wallet en un lugar seguro.

Vuelva a la pantalla Detalles de la base de datos, haga clic en Conexión de base de datos botón de nuevo. Desplácese hacia abajo hasta que vea la sección titulada Cadenas de conexión . Tenga en cuenta que una cadena de conexión corresponde a un tipo de conexión específico guardado en el archivo tnsnames.ora que se incluye en la billetera. Tome nota de estos nombres, como el que tiene _HIGH al final. Estos nombres deben consistir en el nombre de su base de datos (sin espacios) seguido de _HIGH, _MEDIUM o _LOW. En este ejemplo, el nombre de la base de datos es "ATP Database1", por lo que la primera cadena de conexión se llama:ATPDatabase1_HIGH. Anote o copie y guarde la entrada bajo Nombre TNS para su base de datos.

Los pasos para integrar Oracle Wallet en PDI se proporcionan en la página siguiente.

Integración de Oracle Cloud Wallet en Pentaho Data Integration

Se deben seguir una serie de pasos para dirigir la integración de datos de Pentaho para utilizar Oracle Wallet.

Asegúrese de que Pentaho Data Integration esté instalado, con los controladores Oracle JDBC necesarios. PDI no debería estar ejecutándose en este punto.

Edite las propiedades.personalizadas archivo

Localice el archivo custom.properties que se encuentra en la carpeta data-integration\system\karaf\etc\.

Utilice el Bloc de notas (Windows) o TextEdit (MacOSX) para editar el archivo custom.properties y agregue la siguiente línea al final del archivo (si aún no está allí).
org.apache.karaf.security.providers =oracle.security.pki.OraclePKIProvider

Guarde el archivo custom.properties y salga del editor de texto.

Edite el Cuchara.bat o cuchara.sh archivos

Para instalaciones de Windows, edite el archivo Spoon.bat (Use el Bloc de notas u otro editor de texto). Desplácese hacia abajo hasta la línea 112 justo antes la sección con REM ** Ejecutar… **

Agregue las siguientes líneas (resaltadas en amarillo).

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 ***************

Guarde el archivo spoon.bat y salga del editor de texto.

En MacOSX, haga clic derecho en el archivo spoon.sh, resalte Abrir con y luego seleccione aplicación TextEdit .

Desplácese hacia abajo en el archivo hasta que localice la sección con "# línea opcional para adjuntar un depurador". El código que se agregará irá en el espacio justo antes esta línea.
Agregue las siguientes líneas (resaltadas en azul en la siguiente imagen):

# 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}"

Guarde el archivo spoon.sh y salga de la aplicación TextEdit.

Copiar los archivos de la billetera a PDI

Asegúrese de tener la billetera de Oracle descargada de la nube (consulte la página anterior). Para este ejemplo, la base de datos se llama "ATPDatabase1" y el nombre del archivo de la billetera es:Wallet_ATPDatabase1.zip
Descomprima el archivo de la billetera y localice los siguientes cuatro archivos dentro:

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

Estos archivos también se muestran en la siguiente figura:

Resalte estos cuatro archivos y cópielos.

Navegue a la carpeta Integración de datos de Pentaho. Crea una subcarpeta llamada "Wallet". Pegue los cuatro archivos de Oracle Wallet en esta carpeta Wallet como se muestra a continuación (Windows):

En MacOSX, copie los cuatro archivos de la billetera y péguelos en la carpeta /Users//Pentaho/data-integration/Wallet.

Ejecución de PDI

Una vez que esos archivos estén en su lugar, puede iniciar Pentaho Data Integration normalmente ejecutando el archivo Spoon.bat (o spoon.sh para usuarios de MacOSX).
Para ejecutar Pentaho Data Integration en Windows, haga doble clic en la cuchara. programa murciélago.

Para ejecutar Pentaho Data Integration en MacOSX, haga clic derecho en el programa spoon.sh, seleccione Abrir con> Otro... Cambia el filtro a "Todas las aplicaciones" y luego dentro de Utilidades carpeta elige Terminal . Luego haga clic en Abrir botón.

La siguiente sección discutirá la configuración de una nueva conexión de base de datos desde Pentaho Data Integration.

Crear una nueva conexión de base de datos en Pentaho Data Integration

Para utilizar Oracle Wallet en Pentaho Data Integration, se debe configurar una conexión de tipo “Base de datos genérica”. Los siguientes pasos describen este proceso.

Al configurar un paso de entrada de tabla, salida de tabla o búsqueda/actualización de dimensión, cree una nueva conexión de base de datos.

  • Dé un nombre a la nueva conexión (usted lo inventa).
  • Cambiar el tipo de conexión a la base de datos genérica.
  • Cambiar el dialecto a Oráculo.
  • Complete la URL de conexión personalizada de la siguiente manera:
    jdbc:oracle:thin:@atpdatabase1_high
    Donde atpdatabase1_high es el nombre de una de sus conexiones a su base de datos de Oracle Cloud (revisado en la página anterior). Estará compuesto por el nombre de su base de datos con _high adjunto. Por ejemplo, si el nombre de su base de datos es "DB 123456789", una posible URL de conexión será:
    jdbc:oracle:thin:@DB123456789_high
  • Complete el nombre de clase de controlador personalizado de la siguiente manera:
    oracle.jdbc.driver.OracleDriver
  • Ingrese su nombre de usuario y contraseña para su base de datos de Oracle Cloud.
  • Haga clic en Prueba botón para probar la conexión.

El resultado de la prueba debería aparecer como exitoso, como se muestra a continuación.

Haga clic en Aceptar para cerrar la prueba de conexión. Haga clic en Aceptar botón para guardar esta conexión de base de datos.

En la página siguiente se proporcionan algunos errores de conexión comunes.

Errores y problemas comunes de conexión de Oracle Wallet

Hay varios errores y problemas comunes que puede experimentar al usar PDI y Oracle Cloud. Los errores y las soluciones / alternativas se presentan a continuación.

Error de E/S:no se pudo resolver el identificador de conexión

Si recibe un error como "Error de IO:no se pudo resolver el identificador de conexión", entonces no se puede encontrar su archivo tnsnames.ora o el nombre TNS proporcionado no coincide con una de las conexiones. Por ejemplo:

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"

Verifique dos veces su archivo tnsnames.ora y asegúrese de que está usando un nombre de conexión que aparece en el archivo tnsnames.ora. En el sistema operativo Windows, utilice el programa NotePad para abrir el archivo tnsnames.ora. En MacOSX, utilice el programa TextEdit para abrir el archivo tnsnames.ora.

ORA-01017:nombre de usuario/contraseña no válidos; inicio de sesión denegado

Si recibe un error como “ORA-01017:nombre de usuario/contraseña no válidos; inicio de sesión denegado” significa que el nombre de usuario o la contraseña de Oracle proporcionados no son válidos. Por ejemplo:

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

Verifique el nombre de usuario y la contraseña en la instancia de la base de datos de Oracle para asegurarse de que sea correcto. Tenga en cuenta que el nombre de usuario y la contraseña de la base de datos de Oracle serán diferentes a los de su cuenta del sitio web de Oracle Cloud. Por lo general, para las pruebas usamos el usuario ADMIN y esta contraseña se estableció cuando se creó la base de datos autónoma o el almacén de datos autónomo. Por ejemplo, en la página 4 de este tutorial.
Asegúrese de que la contraseña no contenga ninguno de los siguientes caracteres:@ / \ ?

Puede ser más fácil para las pruebas usar el usuario ADMIN con una contraseña relativamente "simple" como Pw123Pw123Pw123 .
Asegúrese de cambiar la contraseña a algo más seguro después de completar la prueba.

No se pudo encontrar la clase de controlador 'oracle.jdbc.driver.OracleDriver'

Si recibe un error como:"No se pudo encontrar la clase de controlador 'oracle.jdbc.driver.OracleDriver'", asegúrese de que los controladores JDBC se hayan copiado en la carpeta data-integration\lib y que se haya reiniciado PDI. También asegúrese de no colocar ningún espacio antes de la 'o' en oracle.jdbc.driver... Por ejemplo:

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:solicitud de conexión rechazada según las reglas de filtrado actuales

Si recibe un error como:"ORA-12529 TNS:solicitud de conexión rechazada según las reglas de filtrado actuales ” al conectarse a la base de datos, es posible que la configuración de seguridad de su red para la base de datos autónoma esté impidiendo las conexiones. El mensaje de error completo puede aparecer de la siguiente manera:


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

Inicie sesión en la interfaz de administración de Oracle Cloud y revise la pantalla de información de la base de datos autónoma para su base de datos. Compruebe el Tipo de acceso y Lista de control de acceso para garantizar que se permitan sesiones de inicio de sesión remotas desde su ubicación. Es posible que deba reiniciar la base de datos

Error de E/S:Alerta fatal recibida:error de protocolo de enlace, lapso de conexión de 188 ms, lapso de autenticación de 0 ms.

Este error puede ocurrir cuando hay una discrepancia entre la versión de Java Development Kit y el servidor de Oracle. Puede estar relacionado con las bibliotecas de códigos utilizadas para proteger el canal de comunicaciones entre el cliente y el servidor (por ejemplo, TLS). Asegúrese de tener la versión más reciente de Oracle Java Development Kit 8. Por ejemplo:

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.

Error de E/S:entrada cerrada antes de recibir la notificación de cierre del compañero

Si recibe un error como:"Error de E/S:entrada cerrada antes de recibir la notificación de cierre del par" al ejecutar una transformación, es posible que tenga demasiadas conexiones de base de datos abiertas con el servidor de Oracle. Este puede ser el caso si está utilizando los servicios "Siempre gratuitos" en Oracle Cloud. estos servicios tienen un número limitado de conexiones simultáneas.

Cierra cualquier pestaña de transformación adicional que tengas abierta. Salga de Spoon y reinícielo. Solo abra la transformación en la que ha estado trabajando e intente ejecutarla nuevamente. Por ejemplo en el registro de 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.

En algunos casos raros, esto también podría deberse a una falta de coincidencia en la revisión del JDK que se está utilizando. Se introdujeron algunas incompatibilidades con el soporte de PKI en el kit de desarrollo de Java versión 1.8. La instalación de un JDK 1.8 actualizado parece solucionar estos problemas.

Si el problema persiste (y se está conectando a un servidor que no es de producción), intente reiniciar la base de datos autónoma de Oracle, ya que esto puede liberar las conexiones persistentes.

ORA-00018:número máximo de sesiones excedido

El ORA-00018:número máximo de sesiones excedido Puede aparecer un error si su base de datos se queda sin conexiones disponibles. Esto puede ser un problema cuando se trabaja con el nivel "Siempre gratuito" de la base de datos autónoma de Oracle. El error puede aparecer de la siguiente manera:

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

Cierra cualquier pestaña de transformación adicional que tengas abierta. Salga de Spoon y reinícielo. Abra solo la transformación en la que ha estado trabajando e intente ejecutarla nuevamente.
Si el problema persiste (y se está conectando a un servidor que no es de producción), intente reiniciar la base de datos autónoma de Oracle, ya que esto puede liberar conexiones.

Tipos de datos incorrectos al crear tablas

PDI debe usar los tipos de datos de Oracle apropiados (INTEGER, NUMBER, DATE, VARCHAR) al crear tablas a través de los pasos de búsqueda/actualización de dimensión o salida de tabla. Si ve el uso de tipos de datos como BIGSERIAL u otros tipos de datos que no son de Oracle, intente lo siguiente:

  • Vuelva a su paso de origen, como el paso de lectura de CSV, y desmarque la casilla "Lazy Conversion"
  • Regrese a su paso de búsqueda/actualización de dimensión o salida de tabla y edite la conexión de la base de datos. Asegúrese de que el dialecto está configurado para Oracle .
    Haga clic en el botón PRUEBA para asegurarse de que las credenciales aún funcionan. Cierre el cuadro de diálogo de conexión de la base de datos.
  • Haga clic en el botón SQL y verifique la instrucción SQL CREATE TABLE propuesta para asegurarse de que los tipos de datos ahora sean correctos.
  • Si los tipos de datos aún no son correctos, intente reiniciar PDI y siga los pasos anteriores nuevamente.

Respuesta lenta al usar PDI Database Explorer con Oracle Cloud

Es posible que observe que la integración de datos de Pentaho llevará mucho tiempo (y puede fallar) cuando utilice Herramientas> Base de datos> Explorar para explorar una base de datos de Oracle Cloud. La razón principal es que la mayoría de las instancias de Oracle Cloud tienen una gran cantidad de esquemas de base de datos integrados que PDI Database Explorer intenta leer.

En lugar de usar el Explorador de bases de datos de PDI, use la herramienta SQL Developer de Oracle para explorar su esquema, eliminar tablas antiguas y consultar datos para ver cómo funcionan las transformaciones. Oracle Cloud tiene una aplicación web SQL Developer incorporada que es fácil de usar para este propósito.

Caché no válido con paso de actualización/búsqueda de dimensión causado por Error al serializar fila a matriz de bytes

Al actualizar los datos mediante un paso de búsqueda/actualización de dimensiones, es posible que encuentre un error relacionado con la clave técnica (clave sustituta) y Error al serializar la fila en la matriz de bytes . Un ejemplo de este error sería:


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)]

Este error puede deberse a un valor de clave técnica incorrecto en la memoria caché o a la incapacidad del paso de búsqueda/actualización de dimensiones para acceder a la memoria caché de valores de clave técnica únicos.

Para solucionar este problema, vuelva a intentar la transformación con Habilitar el caché opción desactivada en el paso de búsqueda/actualización de dimensiones. También puede borrar el caché haciendo clic en SQL y luego haga clic en Borrar caché botón.