はじめに
Oracle Cloudデータベースは、Oracleウォレットのセキュリティを使用します。 Oracle Walletには、OracleクライアントとターゲットOracleデータベースサーバー間の安全な暗号化された通信を確立するために使用される暗号化証明書とキーが含まれています。 Pentaho Data Integrationは、Oracle Walletを使用して、PDIとOracleクラウドサーバー間の安全な通信を確立するように構成できます。
このチュートリアルでは、次のコンポーネントが設定されていることを前提としています。
- 少なくとも1つのOracleデータベースインスタンスが実行されているOracleCloudアカウント。このチュートリアル(リンクはこちら)では、OracleCloudアカウントと自律型データベースを設定する手順を説明します。 OracleSQLDeveloperなどのクライアントと自律型データベース間の接続をテストおよび確認する必要があります。
- WindowsまたはMacOSXにインストールされているPentahoDataIntegrationバージョン7.xまたは8.x。最新バージョンのPDIをインストールする手順は、ここ(Windows)およびここ(MacOSX)にあります。使用するJavaDevelopmentKitのバージョンに特に注意してください。 2019年1月の時点で、Java DevelopmentKit1.8で実行されているPentahodataIntegration 8.3がテストされ、正しく機能することが確認されています。
このチュートリアルでは、PDIがWindowsのC:\ Pentaho\data-integrationまたはMacOSXの/Users/
次のセクションでは、OracleJDBCDriversをダウンロードしてインストールする手順について説明します。
Pentahoデータ統合へのOracleJDBCドライバーのインストール
Pentaho Data Integrationでは、Oracleデータベースに接続するためにOracleJDBCDriversをインストールする必要があります。メインのojdbc8.jarファイルに加えて、完全なJDBCディストリビューションの一部であるいくつかの追加ファイルも必要です。 JDK1.8用にコンパイルされたJDBCドライバコンポーネントのみをダウンロードしてインストールするようにしてください。これらのファイル名には「8」が含まれます。
開始するには、次のOracle 12c JDBCDriverDownloadsページにアクセスしてください。
https://www.oracle.com/database/technologies/jdbc-ucp -122-downloads.html
個々のダウンロードが配置されているセクションまで下にスクロールします。
ダウンロードするファイルは次のとおりです。
ojdbc8.jar oraclepki.jar osdt_cert.jar osdt_core.jar
これらの各ファイルをダウンロードして、Pentaho data-integration\libフォルダーにコピーする必要があります。
いつものように、新しいjarファイルが認識されるように、必ずPentahoデータ統合を再起動してください。
次のページで、OracleWalletがクラウドサーバーからダウンロードされます。
OracleCloudからのOracleWalletのダウンロード
注:MacOSXでSafariを使用している場合は、Safariの設定を変更して、ダウンロード後に「安全な」ファイルが自動的に開かないようにします。 Safari>設定>ダウンロード後に「安全な」ファイルを開くチェックボックスをオフにします。
Oracle Cloudコンソールにログインし、AutonomousDatabaseページに移動します。 表示名の下のリンクをクリックします データベースの1つ。
詳細画面が表示されたら、DB接続をクリックします。 ボタン。
[データベース接続]ウィンドウが表示されたら、[ウォレットのダウンロード]をクリックします ボタン。
ウォレットに一致するパスワードを入力し、青いダウンロードをクリックします ボタン。
ウォレットファイル名は、自律データベースの名前が追加された作品「ウォレット」で構成されていることに注意してください。この例のファイルは次のとおりです。Wallet_ATPDatabase1.zip。
ウォレットファイルは必ず安全な場所に保存してください。
[データベースの詳細]画面に戻り、DB接続をクリックします。 もう一度ボタンを押します。 接続文字列というタイトルのセクションが表示されるまで下にスクロールします 。接続文字列は、ウォレットに含まれているtnsnames.oraファイルに保存されている特定の接続タイプに対応していることに注意してください。末尾に_HIGHが付いている名前など、これらの名前をメモします。これらの名前は、データベースの名前(スペースなし)の後に_HIGH、_MEDIUM、または_LOWのいずれかが続くものである必要があります。この例では、データベースの名前は「ATP Database1」であるため、最初の接続文字列の名前はATPDatabase1_HIGHです。 TNS名の下のエントリを書き留めるかコピーして保存します データベース用。
OracleWalletをPDIに統合する手順は次のページに記載されています。
OracleCloudWalletのPentahoデータ統合への統合
Pentahoデータ統合にOracleWalletを使用するように指示するには、いくつかの手順に従う必要があります。
必要なOracleJDBCドライバーとともに、PentahoDataIntegrationがインストールされていることを確認します。この時点では、PDIは実行されていません。
custom.propertiesを編集します ファイル
data-integration \ system \ karaf \etc\フォルダーにあるcustom.propertiesファイルを見つけます。
メモ帳(Windows)またはテキストエディット(MacOSX)を使用してcustom.propertiesファイルを編集し、ファイルの下部に次の行を追加します(まだ存在しない場合)。
org.apache.karaf.security.providers =oracle.security.pki.OraclePKIProvider
custom.propertiesファイルを保存して、テキストエディタを終了します。
Spoon.batを編集します またはspoon.sh ファイル
Windowsインストールの場合は、Spoon.batファイルを編集します(メモ帳またはその他のテキストエディターを使用します)。 直前の約112行目まで下にスクロールします REMのあるセクション**実行…**
次の行を追加します(黄色で強調表示されています)。
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 ***************
soap.batファイルを保存して、テキストエディタを終了します。
MacOSXで、spoon.shファイルを右クリックし、プログラムから開くを強調表示します。 次に、テキストエディットアプリを選択します 。
「デバッガーを接続するための#オプション行」のセクションが見つかるまで、ファイルを下にスクロールします。追加するコードは、直前のスペースに配置されます この行。
次の行を追加します(下の画像で青色で強調表示されています):
# 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}"
スプーン.shファイルを保存して、テキストエディットアプリを終了します。
ウォレットファイルをPDIにコピー
Oracleウォレットがクラウドからダウンロードされていることを確認してください(前のページを参照)。この例では、データベースの名前は「ATPDatabase1」で、ウォレットファイル名は次のとおりです。Wallet_ATPDatabase1.zip
Walletファイルを解凍し、次の4つのファイルを見つけます。
cwallet.sso sqlnet.ora tnsnames.ora trustore.jks
これらのファイルは、次の図にも示されています。
これらの4つのファイルを強調表示して、コピーします。
PentahoDataIntegrationフォルダーに移動します。 「Wallet」という名前のサブフォルダを作成します。以下に示すように、4つのOracle WalletファイルをこのWalletフォルダーに貼り付けます(Windows):
MacOSXでは、4つのウォレットファイルをコピーして/ Users /
PDIの実行
これらのファイルが配置されたら、Spoon.batファイル(またはMacOSXユーザーの場合はspoon.sh)を実行することで、通常どおりPentahoDataIntegrationを開始できます。
WindowsでPentahoDataIntegrationを実行するには、スプーンをダブルクリックします。バットプログラム。
MacOSXでPentahoDataIntegrationを実行するには、spoon.shプログラムを右クリックし、 Open with> Other ...を選択します。 フィルタを「すべてのアプリケーション」に変更してから、ユーティリティ内に変更します フォルダはターミナルを選択します 。次に、開くをクリックします ボタン。
次のセクションでは、PentahoDataIntegration内からの新しいデータベース接続の設定について説明します。
Pentahoデータ統合での新しいデータベース接続の作成
Pentaho DataIntegrationでOracleWalletを使用するには、「汎用データベース」タイプの接続を構成する必要があります。次の手順でこのプロセスの概要を説明します。
テーブル入力、テーブル出力、またはディメンションのルックアップ/更新ステップを設定するときは、新しいデータベース接続を作成します。
- 新しい接続に名前を付けます(構成します)。
- 接続タイプを変更します 汎用データベースへ。
- 方言を変更します Oracleへ。
- カスタム接続URLを入力します 次のようになります。
jdbc:oracle:thin:@ atpdatabase1_high
Where atpdatabase1_high Oracle Cloudデータベースへの接続の1つの名前です(前のページで確認)。これは、データベース名に_highが付加されたもので構成されます。たとえば、データベース名が「DB 123456789」の場合、可能な接続URLは次のようになります。
jdbc:oracle:thin:@ DB123456789_high - カスタムドライバークラス名を入力します 次のように:
oracle.jdbc.driver.OracleDriver - OracleCloudデータベースのユーザー名とパスワードを入力します。
- テストをクリックします 接続をテストするためのボタン。
以下に示すように、テスト結果は成功したように見えるはずです。
OKをクリックします ボタンをクリックして、接続テストを閉じます。 OKをクリックします このデータベース接続を保存するためのボタン。
いくつかの一般的な接続エラーは次のページに記載されています。
一般的なOracleWallet接続のエラーと問題
PDIとOracleCloudを使用するときに発生する可能性のある一般的なエラーと問題がいくつかあります。エラーと解決策/回避策を以下に示します。
IOエラー:接続識別子を解決できませんでした
「IOエラー:接続識別子を解決できませんでした」などのエラーが表示された場合は、tnsnames.oraファイルが見つからないか、指定されたTNS名がいずれかの接続と一致していません。例:
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"
tnsnames.oraファイルを再確認し、tnsnames.oraファイルに表示されている接続名を使用していることを確認してください。 Windowsオペレーティングシステムでは、メモ帳プログラムを使用してtnsnames.oraファイルを開きます。 MacOSXでは、テキストエディットプログラムを使用してtnsnames.oraファイルを開きます。
ORA-01017:ユーザー名/パスワードが無効です。ログオンが拒否されました
「ORA-01017:ユーザー名/パスワードが無効です。ログオンが拒否されました」とは、指定されたOracleユーザー名またはパスワードが無効であることを意味します。例:
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
Oracleデータベースインスタンスのユーザー名とパスワードをチェックして、正しいことを確認します。 Oracleデータベースのユーザー名とパスワードは、OracleCloudWebサイトのアカウントとは異なることに注意してください。通常、テストにはADMINユーザーを使用します。このパスワードは、AutonomousDatabaseまたはAutonomousDataWarehouseの作成時に設定されました。たとえば、このチュートリアルの4ページにあります。
パスワードに次の文字が含まれていないことを確認してください: @ / \?
テストでは、 Pw123Pw123Pw123などの比較的「わかりやすい」パスワードでADMINユーザーを使用するのが最も簡単な場合があります。 。
テストが完了したら、パスワードをより安全なものに変更してください。
ドライバクラス'oracle.jdbc.driver.OracleDriver'が見つかりませんでした
「ドライバクラス「oracle.jdbc.driver.OracleDriver」が見つかりませんでした」などのエラーが発生した場合は、JDBCドライバがdata-integration \ libフォルダにコピーされ、PDIが再起動されていることを確認してください。また、 oracle.jdbc.driver ...の「o」の前にスペースを入れないようにしてください。 例:
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:現在のフィルタリングルールに基づいて接続要求が拒否されました
次のようなエラーが表示されます:「 ORA-12529TNS:現在のフィルタリングルールに基づいて接続要求が拒否されました データベースに接続するとき、自律型データベースのネットワークセキュリティ設定が接続を妨げている可能性があります。完全なエラーメッセージは次のように表示される場合があります。
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
Oracle Cloud管理インターフェースにサインインし、データベースの「自律データベース情報」画面を確認します。 アクセスタイプを確認してください およびアクセス制御リスト お住まいの地域からのリモートログインセッションが許可されていることを確認します。データベースの再起動が必要になる場合があります
IOエラー:致命的なアラートを受信しました:handshake_failure、接続経過188ミリ秒、認証経過0ミリ秒。
このエラーは、JavaDevelopmentKitのバージョンとOracleサーバーのバージョンが一致していない場合に発生する可能性があります。これは、クライアントとサーバー間の通信チャネルを保護するために使用されるコードライブラリ(TLSなど)に関連している可能性があります。 Oracle Java Development Kit 8の最新リリースを使用していることを確認してください。例:
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.
IOエラー:ピアのclose_notifyを受信する前にインバウンドが閉じられました
変換の実行中に「IOエラー:ピアのclose_notifyを受信する前にインバウンドが閉じられました」などのエラーが表示された場合は、Oracleサーバーへの開いているデータベース接続が多すぎる可能性があります。これは、OracleCloudで「AlwaysFree」サービスを使用している場合に当てはまる可能性があります。これらのサービスの同時接続数には制限があります。
開いている余分な変換タブをすべて閉じます。 Spoonを終了し、再起動します。作業中のトランスフォーメーションを開いて、もう一度実行してみてください。たとえば、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.
まれに、使用されているJDKのリビジョンの不一致が原因である可能性もあります。 JavaDevelopmentKitバージョン1.8のPKIサポートで導入されたいくつかの非互換性がありました。更新された1.8JDKをインストールすると、これらの問題に対処できるようです。
問題が解決しない場合(および非実稼働サーバーに接続している場合)、Oracle自律データベースを再起動してみてください。これにより、残りの接続が解放される可能性があります。
ORA-00018:セッションの最大数を超えました
ORA-00018:セッションの最大数を超えました データベースで使用可能な接続が不足すると、エラーが発生する可能性があります。これは、OracleAutonomousデータベースの「AlwaysFree」層で作業する場合に問題になる可能性があります。エラーは次のように表示される場合があります:
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
開いている余分な変換タブをすべて閉じます。 Spoonを終了し、再起動します。作業中のトランスフォーメーションを開いて、もう一度実行してみてください。
問題が解決しない場合(および非本番サーバーに接続している場合)、Oracle自律データベースを再起動してみてください。接続。
テーブル作成時のデータ型が正しくありません
PDIは、ディメンションのルックアップ/更新またはテーブル出力の手順でテーブルを作成するときに、適切なOracleデータ型(INTEGER、NUMBER、DATE、VARCHAR)を使用する必要があります。 BIGSERIALやその他のOracle以外のデータ型などのデータ型が使用されている場合は、次のことを試してください。
- CSV読み取りステップなどのソースステップに戻り、[遅延変換]のチェックボックスをオフにします
- ディメンションの検索/更新またはテーブル出力の手順に戻り、データベース接続を編集します。 方言を確認してください Oracleに設定されています 。
[テスト]ボタンをクリックして、資格情報が引き続き機能していることを確認します。 [データベース接続]ダイアログボックスを閉じます。 - [SQL]ボタンをクリックし、提案されたSQL CREATE TABLEステートメントをチェックして、データ型が正しいことを確認します。
- それでもデータ型が正しくない場合は、PDIを再起動して、上記の手順を再度実行してください。
OracleCloudでPDIデータベースエクスプローラを使用すると応答が遅くなる
[ツール]>[データベース]>[探索]を使用すると、Pentaho Data Integrationに長い時間がかかる(クラッシュする可能性がある)ことに気付くかもしれません。 OracleCloudデータベースを探索する機能。主な理由は、ほとんどのOracle Cloudインスタンスには、PDIデータベースエクスプローラが読み取ろうとする多数の組み込みデータベーススキーマがあるためです。
PDIのデータベースエクスプローラを使用する代わりに、OracleのSQL Developerツールを使用してスキーマを探索し、古いテーブルとクエリデータを削除して、変換がどのように機能しているかを確認します。 Oracle Cloudには、この目的で簡単に使用できるSQLDeveloperWebアプリケーションが組み込まれています。
行からバイト配列へのシリアル化エラーが原因で発生したディメンションルックアップ/更新ステップでの無効なキャッシュ
ディメンションルックアップ/更新ステップを使用してデータを更新しているときに、テクニカルキー(代理キー)に関連するエラーと行からバイト配列へのシリアル化エラーが発生する場合があります。 。このエラーの一例は次のとおりです。
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)]に対応していません
このエラーは、キャッシュ内の誤ったテクニカルキー値、またはディメンションルックアップ/更新ステップが一意のテクニカルキー値のキャッシュにアクセスできないことが原因である可能性があります。
この問題に対処するには、キャッシュを有効にするを使用して変換を再試行してください ディメンションのルックアップ/更新ステップでオプションがオフになっています。 SQLをクリックしてキャッシュをクリアすることもできます。 ボタンをクリックしてから、キャッシュのクリアをクリックします。 ボタン。