Introdução
Os bancos de dados Oracle Cloud usam a segurança da carteira Oracle. A Oracle Wallet contém certificados criptográficos e chaves usadas para estabelecer comunicações seguras e criptografadas entre um cliente Oracle e o servidor de banco de dados Oracle de destino. O Pentaho Data Integration pode ser configurado para usar o Oracle Wallet para estabelecer comunicações seguras entre o PDI e um servidor em nuvem Oracle.
Este tutorial pressupõe que você tenha os seguintes componentes configurados:
- Uma conta do Oracle Cloud com pelo menos uma instância de banco de dados Oracle em execução. Este tutorial (link aqui) fornece as etapas para configurar uma conta do Oracle Cloud e o Autonomous Database. A conectividade entre um cliente como o Oracle SQL Developer e o banco de dados autônomo deve ser testada e confirmada.
- Pentaho Data Integration versão 7.x ou 8.x instalado no Windows ou MacOSX. As instruções para instalar a versão mais recente do PDI podem ser encontradas aqui (Windows) e aqui (MacOSX). Preste atenção especial à versão do kit de desenvolvimento Java usado. Em janeiro de 2019, o Pentaho data Integration 8.3 executado no Java Development Kit 1.8 foi testado e funcionou corretamente.
Este tutorial pressupõe que o PDI foi instalado em C:\Pentaho\data-integration no Windows ou /Users/
Na próxima seção, são fornecidas instruções para fazer download e instalar os Drivers Oracle JDBC.
Instalando os Drivers Oracle JDBC no Pentaho Data Integration
O Pentaho Data Integration requer que os Drivers JDBC Oracle sejam instalados para se conectar a qualquer banco de dados Oracle. Além do arquivo ojdbc8.jar principal, também são necessários vários arquivos adicionais que fazem parte da distribuição JDBC completa. Certifique-se de baixar e instalar apenas os componentes do driver JDBC que são compilados para o JDK 1.8. Eles terão um “8” no nome do arquivo.
Para começar, visite a página Oracle 12c JDBC Driver Downloads em:
https://www.oracle.com/database/technologies/jdbc-ucp -122-downloads.html
Role para baixo até a seção onde os downloads individuais estão localizados.
Os arquivos para download são:
ojdbc8.jaroraclepki.jarosdt_cert.jarosdt_core.jar
Cada um desses arquivos deve ser baixado e copiado para a pasta Pentaho data-integration\lib.
Como sempre, certifique-se de reiniciar o Pentaho Data Integration para que os novos arquivos jar sejam reconhecidos.
Na página seguinte, o Oracle Wallet será baixado do servidor em nuvem.
Fazendo download da Oracle Wallet do Oracle Cloud
Nota:Se você estiver usando o Safari no MacOSX, altere as preferências no Safari para evitar que arquivos “seguros” sejam abertos automaticamente após o download. Safari> Preferências> Desmarque a caixa de seleção Abrir arquivos “seguros” após o download.
Faça login no console do Oracle Cloud e navegue até a página Autonomous Database. Clique no link abaixo do Nome de exibição para um de seus bancos de dados.
Quando a tela Detalhes aparecer, clique em Conexão DB botão.
Quando a janela Database Connection aparecer, clique em Download Wallet botão.
Forneça uma senha correspondente para a Carteira e clique no botão azul Download botão.
Observe que o nome do arquivo wallet consiste no trabalho “Wallet” com o nome dos bancos de dados autônomos adicionados a ele. Para este exemplo, o arquivo é:Wallet_ATPDatabase1.zip.
Certifique-se de salvar seu arquivo Wallet em um local seguro.
Volte para a tela Database Details, clique em DB Connection botão novamente. Role para baixo até ver a seção intitulada Strings de conexão . Observe que uma cadeia de conexão corresponde a um tipo de conexão específico salvo no arquivo tnsnames.ora que está incluído na carteira. Anote esses nomes, como aquele com _HIGH no final. Esses nomes devem consistir no nome do seu banco de dados (sem espaços) seguido por _HIGH, _MEDIUM ou _LOW. Neste exemplo, o nome do banco de dados é “ATP Database1”, então a primeira string de conexão é denominada:ATPDatabase1_HIGH. Anote ou copie e salve a entrada em Nome TNS para seu banco de dados.
As etapas para integrar o Oracle Wallet ao PDI são fornecidas na próxima página.
Integrando o Oracle Cloud Wallet na Integração de Dados Pentaho
Uma série de etapas devem ser seguidas para direcionar a integração de dados do Pentaho para usar o Oracle Wallet.
Certifique-se de que o Pentaho Data Integration esteja instalado, com os drivers Oracle JDBC necessários. O PDI não deve estar em execução neste momento.
Edite as custom.properties arquivo
Localize o arquivo custom.properties localizado na pasta data-integration\system\karaf\etc\.
Use o Bloco de Notas (Windows) ou TextEdit (MacOSX) para editar o arquivo custom.properties e adicione a seguinte linha na parte inferior do arquivo (se ainda não estiver lá).
org.apache.karaf.security.providers =oracle.security.pki.OraclePKIProvider
Salve o arquivo custom.properties e saia do editor de texto.
Edite o Spoon.bat ou colher.sh arquivos
Para instalações do Windows, edite o arquivo Spoon.bat (Use o Bloco de Notas ou outro editor de texto). Role para baixo até a linha 112 apenas antes a seção com REM ** Executar… **
Adicione as seguintes linhas (destacadas em amarelo).
REM ************************************************** ********************REM ** Defina as opções de tempo de execução java **REM ** Altere 2048m para valores mais altos caso você fique sem memória **REM ** ou defina a variável de ambiente PENTAHO_DI_JAVA_OPTIONS **REM ****************************************** ************************se "%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%" "- Dkkettle_repository =%kettle_repository%"" -dkettle_user =%kettle_user%"" -dkettle_password =%kettle_password%"-dkettle_plugin_packages =%kettle_plugin_packages%" "-gtle_log_s para suportar conexões seguras do Oracle Wallet@REM Presume que o arquivo cwallet.sso está no conjunto de pastas data-integration\Wallet\ 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 ** Executar... **REM ****************
Salve o arquivo colher.bat e saia do editor de texto.
No MacOSX, clique com o botão direito do mouse no arquivo colher.sh, realce Abrir com e selecione aplicativo TextEdit .
Role para baixo no arquivo até localizar a seção com “# linha opcional para anexar um depurador”. O código a ser adicionado ficará no espaço antes esta linha.
Adicione as seguintes linhas (destacadas em azul na imagem abaixo):
# Opções Java para suportar conexões seguras do Oracle Wallet# Assume que o arquivo cwallet.sso está em data-integration/Wallet/ folderOPT="-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}"
Salve o arquivo colher.sh e saia do aplicativo TextEdit.
Copie os arquivos da carteira para PDI
Certifique-se de ter a carteira Oracle baixada da nuvem (consulte a página anterior). Para este exemplo, o banco de dados é denominado “ATPDatabase1” e o nome do arquivo wallet é:Wallet_ATPDatabase1.zip
Descompacte o arquivo Wallet e localize os quatro arquivos a seguir dentro:
cwallet.ssosqlnet.oratnsnames.oratrustore.jks
Esses arquivos são mostrados também na figura abaixo:
Realce esses quatro arquivos e copie-os.
Navegue até a pasta Pentaho Data Integration. Crie uma subpasta chamada “Wallet”. Cole os quatro arquivos do Oracle Wallet nesta pasta do Wallet, conforme mostrado abaixo (Windows):
No MacOSX, copie os quatro arquivos da carteira e cole-os na pasta /Users//Pentaho/data-integration/Wallet.
Executando PDI
Uma vez que esses arquivos estão no lugar, você pode iniciar o Pentaho Data Integration normalmente executando o arquivo Spoon.bat (ou colher.sh para usuários MacOSX).
Para executar o Pentaho Data Integration no Windows, clique duas vezes na colher. programa bat.
Para executar o Pentaho Data Integration no MacOSX, clique com o botão direito do mouse no programa spoon.sh, selecione Abrir com> Outro... Altere o filtro para "Todos os aplicativos" e depois em Utilitários pasta escolha Terminal . Em seguida, clique no botão Abrir botão.
A próxima seção discutirá a configuração de uma nova conexão de banco de dados dentro do Pentaho Data Integration.
Criando uma nova conexão de banco de dados no Pentaho Data Integration
Para utilizar o Oracle Wallet no Pentaho Data Integration, uma conexão do tipo “Banco de Dados Genérico” deve ser configurada. As etapas a seguir descrevem esse processo.
Ao configurar uma etapa de entrada de tabela, saída de tabela ou pesquisa/atualização de dimensão, crie uma nova conexão de banco de dados.
- Dê um nome à nova conexão (você a inventa).
- Alterar o Tipo de conexão para banco de dados genérico.
- Alterar o dialeto para a Oracle.
- Preencha o URL de conexão personalizado da seguinte forma:
jdbc:oracle:thin:@atpdatabase1_high
Onde atpdatabase1_high é o nome de uma de suas conexões com o banco de dados Oracle Cloud (revisado na página anterior). Ele será composto pelo nome do seu banco de dados com _high anexado a ele. Por exemplo, se o nome do banco de dados for “DB 123456789”, uma possível URL de conexão será:
jdbc:oracle:thin:@DB123456789_high- Preencha o Nome da classe de driver personalizado da seguinte forma:
oracle.jdbc.driver.OracleDriver- Preencha seu nome de usuário e senha para seu banco de dados Oracle Cloud.
- Clique em Testar botão para testar a conexão.
O resultado do teste deve parecer bem-sucedido, conforme mostrado abaixo.
Clique em OK botão para fechar o teste de conexão. Clique em OK botão para salvar esta conexão de banco de dados.
Alguns erros comuns de conexão são fornecidos na próxima página.
Erros e problemas comuns de conexão do Oracle Wallet
Existem vários erros e problemas comuns que você pode enfrentar ao usar o PDI e o Oracle Cloud. Os erros e soluções / soluções alternativas são apresentados abaixo.
Erro de E/S:não foi possível resolver o identificador de conexão
Se você receber um erro como “Erro de E/S:não foi possível resolver o identificador de conexão”, seu arquivo tnsnames.ora não pode ser encontrado ou o nome TNS fornecido não corresponde a uma das conexões. Por exemplo:
Erro ao conectar ao banco de dados [OracleCloud] :org.pentaho.di.core.exception.KettleDatabaseException:Erro ao tentar conectar ao banco de dadosErro ao conectar ao banco de dados:(usando a classe oracle.jdbc.driver.OracleDriver)IO Error:não foi possível resolver o identificador de conexão "atpdatabase1_hig"
Verifique novamente seu arquivo tnsnames.ora e certifique-se de estar usando um nome de conexão que aparece no arquivo tnsnames.ora. No sistema operacional Windows, use o programa NotePad para abrir o arquivo tnsnames.ora. No MacOSX, use o programa TextEdit para abrir o arquivo tnsnames.ora.
ORA-01017:nome de usuário/senha inválidos; logon negado
Se você receber um erro como “ORA-01017:nome de usuário/senha inválidos; logon negado” significa que o nome de usuário ou senha da Oracle fornecido é inválido. Por exemplo:
Erro ao conectar ao banco de dados [OracleCloud] :org.pentaho.di.core.exception.KettleDatabaseException:Ocorreu um erro ao tentar conectar ao banco de dadosErro ao conectar ao banco de dados:(usando a classe oracle.jdbc.driver.OracleDriver)ORA-01017 :nome de usuário / senha inválidos; logon negado
Verifique o nome de usuário e a senha na instância do banco de dados Oracle para certificar-se de que estejam corretos. Observe que o nome de usuário e a senha do banco de dados Oracle serão diferentes da sua conta do site Oracle Cloud. Normalmente, para testes, usamos o usuário ADMIN e essa senha foi definida quando o Autonomous Database ou Autonomous Data Warehouse foi criado. Por exemplo, na página 4 deste tutorial.
Certifique-se de que a senha não contenha nenhum dos seguintes caracteres:@ / \ ?
Pode ser mais fácil para testar usar o usuário ADMIN com uma senha relativamente “simples”, como Pw123Pw123Pw123 .
Certifique-se de alterar a senha para algo mais seguro após a conclusão do teste.
A classe de driver 'oracle.jdbc.driver.OracleDriver' não foi encontrada
Se você receber um erro como:"A classe do driver 'oracle.jdbc.driver.OracleDriver' não pôde ser encontrada", certifique-se de que os drivers JDBC foram copiados para a pasta data-integration\lib e que o PDI foi reiniciado. Certifique-se também de não colocar espaços antes do 'o' em oracle.jdbc.driver... Por exemplo:
Erro ao conectar ao banco de dados [OracleCloud] :org.pentaho.di.core.exception.KettleDatabaseException:Erro ao tentar conectar ao banco de dados A classe 'oracle.jdbc.driver.OracleDriver' não foi encontrada, verifique se o O driver 'banco de dados genérico' (arquivo jar) está instalado. oracle.jdbc.driver.OracleDriver
ORA-12529 TNS:solicitação de conexão rejeitada com base nas regras de filtragem atuais
De você receber um erro como:“ORA-12529 TNS:Connect request rejeitado com base nas regras de filtragem atuais ” ao se conectar ao banco de dados, pode ser que suas configurações de segurança de rede para o banco de dados autônomo estejam impedindo as conexões. A mensagem de erro completa pode aparecer da seguinte forma:
Erro ao conectar ao banco de dados [OracleCloud] :org.pentaho.di.core.exception.KettleDatabaseException:Ocorreu um erro ao tentar conectar ao banco de dadosErro ao conectar ao banco de dados:(usando a classe oracle.jdbc.driver.OracleDriver)O ouvinte recusou o conexão com o seguinte erro:ORA-12529, TNS:connect request rejeitado com base nas regras de filtragem atuais
Entre na interface de gerenciamento do Oracle Cloud e revise a tela Autonomous Database Information do seu banco de dados. Verifique o Tipo de acesso e Lista de controle de acesso para garantir que as sessões de login remoto sejam permitidas de sua localização. Pode ser necessário reiniciar o banco de dados
Erro de E/S:alerta fatal recebido:handshake_failure, lapso de conexão de 188 ms., lapso de autenticação de 0 ms.
Este erro pode ocorrer quando há uma incompatibilidade entre a versão do Java Development Kit e o servidor Oracle. Pode estar relacionado às bibliotecas de código usadas para proteger o canal de comunicação entre cliente e servidor (por exemplo, TLS). Certifique-se de ter a versão mais recente do Oracle Java Development Kit 8. Por exemplo:
Erro ao conectar ao banco de dados [oracle_cloud_atp] :org.pentaho.di.core.exception.KettleDatabaseException:Ocorreu um erro ao tentar conectar ao banco de dadosErro ao conectar ao banco de dados:(usando a classe oracle.jdbc.driver.OracleDriver)IO Error:Alerta fatal recebido:handshake_failure, connect lapse 188 ms., Authentication lapse 0 ms.org.pentaho.di.core.exception.KettleDatabaseException:Ocorreu um erro ao tentar se conectar ao banco de dadosErro ao conectar ao banco de dados:(usando a classe oracle.jdbc.driver .OracleDriver)Erro IO:Alerta fatal recebido:handshake_failure, lapso de conexão de 188 ms., lapso de autenticação de 0 ms.
Erro de E/S:entrada fechada antes de receber close_notify do par
Se você receber um erro como:“Erro de E/S:Entrada fechada antes de receber o close_notify do par” ao executar uma transformação, pode ser que você tenha muitas conexões de banco de dados abertas com o servidor Oracle. Este pode ser o caso se você estiver usando os serviços “Sempre Gratuitos” no Oracle Cloud. esses serviços têm um número limitado de conexões simultâneas.
Feche todas as guias de transformação extra que você abriu. Saia do Spoon e reinicie-o. Abra apenas a transformação na qual você está trabalhando e tente executá-la novamente. Por exemplo no log PDI:
2020/01/19 15:44:43 - Promotion Dim Lookup.0 - ERRO (versão 8.2.0.0-342, build 8.2.0.0-342 de 2018-11-14 10.30.55 por buildguy):um erro ocorreu, o processamento será interrompido:2020/01/19 15:44:43 - Promotion Dim Lookup.0 - Ocorreu um erro ao tentar se conectar ao banco de dados2020/01/19 15:44:43 - Promotion Dim Lookup.0 - IO Erro:Entrada fechada antes de receber o close_notify do peer:possível ataque de truncamento?, Lapso de autenticação 0 ms.
Em alguns casos raros, isso também pode ser causado por uma incompatibilidade na revisão do JDK que está sendo usado. Houve algumas incompatibilidades introduzidas com o suporte a PKI no Java Development Kit versão 1.8. A instalação de um JDK 1.8 atualizado parece resolver esses problemas.
Se o problema persistir (e você estiver se conectando a um servidor que não seja de produção), tente reiniciar o banco de dados autônomo Oracle, pois isso pode liberar conexões remanescentes.
ORA-00018:número máximo de sessões excedido
O ORA-00018:número máximo de sessões excedido erro pode aparecer se seu banco de dados ficar sem conexões disponíveis. Isso pode ser um problema ao trabalhar com a camada “Sempre Livre” do banco de dados Oracle Autonomous. O erro pode aparecer da seguinte forma:
org.pentaho.di.trans.steps.dimensionlookup.DimensionLookupMeta@75df4b1d - ERRO (versão 8.2.0.0-342, compilação 8.2.0.0-342 de 2018-11-14 10.30.55 por buildguy):Um erro de banco de dados ocorreu:org.pentaho.di.trans.steps.dimensionlookup.DimensionLookupMeta@75df4b1d - Ocorreu um erro ao tentar se conectar ao banco de dadosorg.pentaho.di.trans.steps.dimensionlookup.DimensionLookupMeta@75df4b1d -org.pentaho.di.trans. steps.dimensionlookup.DimensionLookupMeta@75df4b1d - Erro ao conectar ao banco de dados:(usando a classe oracle.jdbc.driver.OracleDriver)org.pentaho.di.trans.steps.dimensionlookup.DimensionLookupMeta@75df4b1d - ORA-00018:número máximo de sessões excedido
Feche todas as guias de transformação extra que você abriu. Saia do Spoon e reinicie-o. Abra apenas a transformação em que você está trabalhando e tente executá-la novamente.
Se o problema persistir (e você estiver se conectando a um servidor que não seja de produção), tente reiniciar o banco de dados autônomo Oracle, pois isso pode liberar qualquer remanescente conexões.
Tipos de dados incorretos ao criar tabelas
O PDI deve usar os tipos de dados Oracle apropriados (INTEGER, NUMBER, DATE, VARCHAR) ao criar tabelas por meio das etapas de Pesquisa/Atualização de Dimensão ou Saída de Tabela. Se você vir o uso de tipos de dados como BIGSERIAL ou outros tipos de dados não Oracle, tente o seguinte:
- Volte para a etapa de origem, como a etapa de leitura de CSV, e desmarque a caixa "Conversão lenta"
- Retorne à etapa de pesquisa/atualização de dimensão ou saída de tabela e edite a conexão de banco de dados. Certifique-se de que o Dialeto está definido como Oracle .
Clique no botão TEST para certificar-se de que as credenciais ainda estão funcionando. Feche a caixa de diálogo Conexão do banco de dados.- Clique no botão SQL e verifique a instrução SQL CREATE TABLE proposta para garantir que os tipos de dados estejam corretos.
- Se os tipos de dados ainda não estiverem corretos, tente reiniciar o PDI e siga as etapas acima novamente.
Resposta lenta ao usar o PDI Database Explorer com Oracle Cloud
Você pode notar que o Pentaho Data Integration levará muito tempo (e pode travar) ao usar as Ferramentas> Banco de Dados> Explorar recurso para explorar um banco de dados Oracle Cloud. A principal razão é que a maioria das instâncias do Oracle Cloud tem um grande número de esquemas de banco de dados integrados que o PDI Database Explorer tenta ler.
Em vez de usar o Database Explorer do PDI, use a ferramenta SQL Developer da Oracle para explorar seu esquema, descartar tabelas antigas e consultar dados para ver como as transformações estão funcionando. O Oracle Cloud possui um aplicativo Web SQL Developer integrado que é fácil de usar para essa finalidade.
Cache inválido com etapa de pesquisa/atualização de dimensão causada por Erro ao serializar linha para matriz de bytes
Ao atualizar dados usando uma etapa de pesquisa/atualização de dimensão, você pode encontrar um erro relacionado à chave técnica (chave substituta) e Erro ao serializar linha para matriz de bytes . Um exemplo desse erro seria:
Dimension lookup/update.0 - ERROR (versão 8.2.0.0-342, build 8.2.0.0-342 de 2018-11-14 10.30.55 por buildguy):Erro inesperadoDimension lookup/update.0 - ERROR (versão 8.2) .0.0-342, build 8.2.0.0-342 de 2018-11-14 10.30.55 por buildguy):java.lang.RuntimeException:Erro ao serializar linha para byte arrayDimension lookup/update.0 - em org.pentaho.di.core .row.RowMeta.extractData(RowMeta.java:1134)Dimension lookup/update.0 - em org.pentaho.di.trans.steps.dimensionlookup.DimensionLookup.addToCache(DimensionLookup.java:1522)Dimension lookup/update.0 - em org.pentaho.di.trans.steps.dimensionlookup.DimensionLookup.lookupValues(DimensionLookup.java:754)Dimension lookup/update.0 - em org.pentaho.di.trans.steps.dimensionlookup.DimensionLookup.processRow(DimensionLookup.java :232)Pesquisa/atualização de dimensão.0 - em org.pentaho.di.trans.step.RunThread.run(RunThread.java:62)Pesquisa/atualização de dimensão.0 - em java.lang.Thread.run(Thread.java :748)Pesquisa/atualização de dimensão.0 - Causada por:java.l ang.RuntimeException:CUSTOMER_DIM_ID BigNumber(38) :Ocorreu um erro de tipo de dados:o tipo de dados do objeto java.lang.Long [320] não corresponde ao valor meta [BigNumber(38)]
Esse erro pode ser causado por um valor de chave técnica incorreto no cache ou pela incapacidade da etapa de pesquisa/atualização de dimensão de acessar o cache de valores de chave técnica exclusivos.
Para resolver esse problema, tente novamente a transformação com Ativar o cache opção desativada na etapa Dimension Lookup/Update. Você também pode limpar o cache clicando no botão SQL botão e, em seguida, clique no botão Limpar cache botão.