asteria warp運用tips「rdb連携時のトラブルシューティング 」
TRANSCRIPT
.
ASTERIA 運用 Tips「 RDB 連携時のトラブルシューティング コネクションの作成から運用まで!」
インフォテリア株式会社 ASTERIA 事業本部 製品技術部
車 淳一
2016/02/23©1998-2017 Infoteria Corporation
.
アジェンダ 2
©1998-2017 Infoteria Corporation
ASTERIA と RDB 連携処理における
コネクション作成時のトラブルシューティング
フローの作成とテスト時のトラブルシューティング
運用時のトラブルシューティング
01
02
03
.
コネクション作成後、接続テスト時のエラー 4
©1998-2017 Infoteria Corporation
1. 「 No suitable driver found for ~ 」というエラー
.
コネクション作成後、接続テスト時のエラー
• 確認事項• JDBC ドライバーファイルが設置されているかを確認
• JDBC ドライバーの配置場所• ASTERIA WARP 4.9.1 以下の場合
[INSTALL_DIR]/jre/lib/ext
• ASTERIA WARP 1610 からは [DATA_DIR]/system/lib/drivers
※ デザイナーの「外部ライブラリの追加・削除」機能を使うと便利!
• 接続 URL が正しく設定されているかを確認• 空白文字に注意を!!
例えば、接続文字列の先頭に空白文字があるなど
• 設置後に FlowService を再起動したかを確認• JDBC ドライバーを設置した後にフローサービスの再起動を
忘れずに!
5
©1998-2017 Infoteria Corporation
.
コネクション作成後、接続テスト時のエラー
• 確認事項• ユーザー ID ,及びパスワードが間違ってないかを確認
• データベースツールなどで確認
• ネットワーク環境には問題ないかを確認• 接続文字列に間違いないかを確認
ちなみに、 Oracle の場合は、• Oracle11g 以下では
jdbc:oracle:thin:@<Hostname>:<Port>:<SID>
• Oracle12c ではjdbc:oracle:thin:@<Hostname>:<Port>/<ServiceName>
8
©1998-2017 Infoteria Corporation
.
コネクション作成後、接続テスト時のエラー
• 同じドライバークラスのドライバーの複数設置は行わない
• 複数あると最初に見つかったもののみが使用される
• 適切な JDBC ドライバーを使用する• RDB ベンダーが提供し、動作を保証する最新版を使用
• ASTERIA WARP にバンドルされている JavaVM のバージョンで動作確認された JDBC ドライバーを使用
• ASTERIA WARP 4.9 〜 1610 : Java 8• ASTERIA WARP 4.7 ~ 4.8.1 : Java 7• ASTERIA WARP 4.6 以下: Java 6
10
©1998-2017 Infoteria Corporation
CAUTION
.
コネクション作成後、接続テスト時のエラー
• 同じドライバークラスのドライバーの複数設置は行わない!
• JDBC ドライバーは正しい配置場所に設置を!• 接続文字列を指定するには間違いないようにご注意を!• 適確な JDBC ドライバーのご利用を!• JDBC ドライバーを設置した後にフローサービスの再起動を
忘れずに!
11
©1998-2017 Infoteria Corporation
コネクション作成時の注意点(まとめ)
.
フローの作成、およびテスト時のエラー
• 確認事項• 該当テーブルがログインユーザーの既定のデータベース内に
存在するかを確認• ログインユーザー名と該当テーブルのスキーマが同じで
あるかを確認• コネクションプールを利用する場合、 RDB 側の設定を
変更した時には、 FSMC でデータベース接続プールをクリアする必要がある
• ASTERIA WARP 4.8 以降FSMC > ツール > サービス > FlowService 画面
• ASTERIA WARP 4.7.1 以前FSMC > ツール > サービス > フロー画面
※ 特に接続先が SQLServer の場合、ご注意を!
14
©1998-2017 Infoteria Corporation
.
フローの作成、およびテスト時のエラー
• 複数のスキーマのテーブルを1つの RDBGetコンポーネントで JOIN して使いたい!
17
©1998-2017 Infoteria Corporation
Tip!!
.
フローの作成、およびテスト時のエラー 20
©1998-2017 Infoteria Corporation
2. RDBPut コンポーネントの Update/Insert 処理にて 一意制約エラーが発生する
.
フローの作成、およびテスト時のエラー
• テーブルの構成を確認
22
©1998-2017 Infoteria Corporation
CHAR 型だと「 abc 」が「 abc 」で登録されてしまう!!
.
フローの作成、およびテスト時のエラー
• 確認事項• キーフィールドのデータ型が固定長 (CHAR 型 ) で
あるかを確認
• 対応方法• CHAR 型ではなく VARCHAR 型を使用する• 予めスペースを補ったデータを RDBPut コンポーネントへ
マッピングする
23
©1998-2017 Infoteria Corporation
.
フローの作成、およびテスト時のエラー 25
©1998-2017 Infoteria Corporation
3. シーケンス作成時、 START 番号をパラメーターで 作成すると「 ORA-01722 」エラーとなる
.
フローの作成、およびテスト時のエラー
• 対応方法• ASTERIA WARP のパラメーター
• ? パラメーター名 ? : SQL パラメーター• $ パラメーター名 $ :置換文字列
• 今回の場合は、「 $ パラメーター名 $ 」を利用することで回避できる
26
©1998-2017 Infoteria Corporation
.
フローの作成、およびテスト時のエラー
• データベースによっては接続ユーザーとテーブルの所有ユーザー、若しくはスキーマ名が異なる場合があることに注意を!
• 固定長( CHAR 型)カラムの場合、指定文字数に満たないと不足分はスペースが補われて保存されることに注意を!
• ASTERIA WARP 側で提供する2つのパラメーターを適切に使うと便利!
28
©1998-2017 Infoteria Corporation
フロー作成とテスト時の注意点(まとめ)
.
フローの作成、およびテスト時のエラー
• 確認事項、および対応方法• 設定した最大メモリが不足していないかを確認→最大メモリを設定し直す
• RDBGet コンポーネントでループ処理をしているかを確認→「ループする」を「はい」に設定し、「取出す件数」を 適切な値に設定※ただし、処理がループされるので後続の処理は その分繰り返されることに注意が必要!
• ASTERIA が 4.5.1 以前で、データベースが MySQL の場合→接続文字列にフェッチサイズを指定する 例 ) jdbc:mysql://[hostname]:[port]/[dbname]? useCursorFetch=true&defaultFetchSize=1000
31
©1998-2017 Infoteria Corporation
.
運用時のトラブルシューティング 33
©1998-2017 Infoteria Corporation
2. ASTERIA WARP の移行後、 RDB の連携処理で OutOfMemory エラーが発生する
バージョンアップ
ASTERIA WARP 4.5.1 ASTERIA WARP 4.9.1
Out Of Memory エラー発生!!
Oracle 11g
.
運用時のトラブルシューティング
• JDBC ドライバーで動作確認済みの Java バージョンの確認
35
©1998-2017 Infoteria Corporation
ASTERIA WARP 4.9.1 はJava8!!
.
運用時のトラブルシューティング
• メモリ使用量の確認
37
©1998-2017 Infoteria Corporation
JDBC ドライバー: 11.1.0.6.0
Java8用の JDBC ドライバー: 12.1.0.2.0
.
運用時のトラブルシューティング
• ちなみに、最大メモリを増やしてみると。。。
38
©1998-2017 Infoteria Corporation
[2017-02-11T21:10:57.631 JST] INFO [GetJDBCDriverData,FlowService.FlowService-Engine.worker.32] FLEX_I_0001: [4051db13-80fc-4e12-87c1-99b86a8aab08] フローの実行を開始します : /augtipswg.AUGTipsWG_20170223.GetJDBCDriverData [2017-02-11T21:15:14.717 JST] INFO [GetJDBCDriverData,FlowService.FlowService-Engine.worker.32] FLEX_I_0002: [4051db13-80fc-4e12-87c1-99b86a8aab08] フローの実行が終了しました : /augtipswg.AUGTipsWG_20170223.GetJDBCDriverData [257086ms]
・使用メモリ: 3GB
・処理時間: 4 分以上という結果に!!
.
運用時のトラブルシューティング
• 運用時に処理するデータ量が増える可能性を考慮し、適切な最大メモリの設定、およびフローの構成を!
• 適切な JDBC ドライバーのご利用を!
39
©1998-2017 Infoteria Corporation
運用時の注意点(まとめ)
.
他にも注意が必要な点
• JDBC Forward Only ドライバーに登録が必要な場合Amazon Redshift JDBC ドライバーを使うと「 [Amazon][JDBC](10220) ドライバが機能しません。」というエラーが発生しますhttps://support.asteria.com/hc/ja/articles/229384208
Oracle を使用して取得した文字列が途中で切れてしまいますhttps://support.asteria.com/hc/ja/articles/229382948
• JDBC ドライバーによってデータ登録結果が異なるOracle の DATE 型の値を取得すると時分秒の値が "00:00:00" となってしまいますhttps://support.asteria.com/hc/ja/articles/228983527
SQL Server から DATE 型で取得した日付が間違っていますhttps://support.asteria.com/hc/ja/articles/229383548
40
©1998-2017 Infoteria Corporation
CAUTION