0&&parent.frames.length) { d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);} if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<(args.length-2); i+=3) if ((obj=findObj(args[i]))!=null) { v=args[i+2]; if (obj.style) { obj=obj.style; v=(v=='show')?'visible':(v='hide')?'hidden':v; } obj.visibility=v; } } //Define function to show one layer and hide others: function show(whichLayer) { if(layerDisp) { showHide(layerDisp,'','hide'); } showHide(whichLayer,'','show'); layerDisp = whichLayer; } //Define function to keep score and display feedback: function Engine(question, answer, layerSuffix) { if (answer != ans[question]) { show('incorrect'+layerSuffix); } else { if (!done[question]) { score++; } show('correct'+layerSuffix); } done[question] = -1; } //Define function to verify answer for checkbox: function checkAnswer(question, whichform, whichbox) { var checkTotal = 0; with (whichform) { for (i = 0; i < whichbox.length; i++) { if (whichbox[i].checked == true) { checkTotal = checkTotal + eval(whichbox[i].value); } } } Engine(question,checkTotal,question*10); } //Define function to show correct answer for checkbox: function showAnswer(question, whichform, whichbox) { var residue = ans[question]; var currAnswer = 1; if(layerDisp) { showHide(layerDisp,'','hide'); } with (whichform) { for (i = 0; i < whichbox.length; i++) { if ((residue>0) && (residue%(currAnswer*2)==currAnswer)){ whichbox[i].checked = true; residue-=currAnswer; } else { whichbox[i].checked = false; } currAnswer*=2; } } } //Define function to init a form function clearForm(form) { //Set all checkboxes and radio buttons on form to unchecked: for (xx=0; xx < form.elements.length; xx++) { if (form.elements[xx].type == 'checkbox' | form.elements[xx].type == 'radio') { form.elements[xx].checked = false; } } } //Define function to init all forms on reload: function InitForm() { clearForm(document.form1) clearForm(document.form2) clearForm(document.form3) } // End --> function MM_findObj(n, d) { //v4.01 var p,i,x; if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) { d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);} if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i
ETLデータ・フロー・マッピングの設計
目的
このレッスンでは、マッピングとプロセス・フローの設計方法とそれらを使用してOracle Warehouse Builderでデータの移動および変換を定義する方法を説明します。 Oracle Warehouse Builderでマッピングを設計する場合、マッピング・エディタ・インタフェースを使用します。 マッピング・エディタ内で多数のマッピング演算子を使用できます。 Oracle Warehouse Builderを使用すると、電子メール、FTPコマンド、オペレーティング・システムの実行可能ファイルなどのOracle Warehouse Builder外部のアクティビティを使用できます。 外部アクティビティは、このコースで説明しません。 プロセス・フロー・エディタを使用して、マッピングと他のアクティビティの相互に関連するプロセス・フローの設計方法を学習します。
このレッスンでは、ソースからのデータの抽出、データの変換、およびターゲットへのデータのロードを実行するためにマッピングの作成方法を学習します。 マッピング・エディタのデータ・フローをデバッグするデバッグ・エディタも簡単に説明します。
所要時間:
約60分
注:
このチュートリアルとセットアップ・スクリプトは、Oracle Warehouse Builder 11g
Release 1だけに対応しています。
このOracle By Exampleチュートリアルの前のバージョンは、Oracle Warehouse Builder 10g
Release 1および2に対応しています。
トピック
このチュートリアルでは、以下のトピックについて説明します。
スクリーンショットの表示
このアイコンの上にカーソルを置くと、すべてのスクリーンショットがロード、表示されます。 (警告: すべてのスクリーンショットが同時にロードされるため、ご使用のインターネット接続によってはレスポンス・タイムが遅くなる場合があります。)
注: 各手順に関連したスクリーンショットのみを表示する場合は、それぞれの手順にある各アイコンの上にカーソルを置いてください。
概要
ここまでで、ソースおよびターゲットのモジュールを定義したので、データの移動および変換ロジックの作成方法を学習します。 ETLは、Extract、Transform、Loadの略称です。 ETLには、ソースからターゲットへのデータの移動および変換が含まれます。 Oracle Warehouse Builderのほとんどの設計作業は、ETLロジックを定義することです。
トピック・リストに戻る
前提条件
このチュートリアルを始める前に次のことを確認してください。
| 3.
|
下記の注と手順4に示されているように、
Oracle Workflow Server
2.6.4をインストール済みであること。
注:Oracle Warehouse Builder 11g
とともに
Oracle Database 10g
Release 2(10.2.0.3)
インスタンスを使用している場合、Oracle Warehouse Builder 11g
インストールの<
OWB 11g Home>\owb\wf\installディレクトリからOracle Workflow Server 2.6.4をインストールして、UNIXプラットフォームではwfinstall.csh、Windowsプラットフォームではwfinstall.batを起動してください。 OWBなどのホームではなくOracle
データベース
・ホームにOracle Workflow Serverをインストールする必要があります。
Oracle Warehouse Builder 11g
とともに
Oracle Database 11g
インスタンスを使用している場合、Oracle Database 11g
の変更とともにOracle Workflow Server 2.6.4のバージョンをインストールする必要があります。 Oracle Database 11g
インストールの<
Oracle11g Database Home>\owb\wf\installディレクトリへ移動して、UNIXプラットフォームではwfinstall.csh、Windowsプラットフォームではwfinstall.batを起動してください。 OWBなどのホームではなくOracle
データベース
・ホームにOracle Workflow Serverをインストールする必要があります。
|
| 4.
|
Windowsのインストールおよび構成スクリプトを開始するには、以下の手順を実行します。
コマンド・プロンプト・ウィンドウで、
owb_home/owb/wfディレクトリに変更してwfinstall.batを実行します。 次に例を示します。
C:\> cd
owb_home\owb\wf\install
c:\cd
owb_home/owb/wf\install> wfinstall.bat
Linuxのインストールおよび構成スクリプトを開始するには、以下の手順を実行します。
UNIXシェルで、
owb_home/owb/wfディレクトリに変更してwfinstall.cshを実行します。 次に例を示します。
$ cd
owb_home /owb/wf/install
$ wfinstall.csh
Oracle Workflow Configuration Assistantダイアログ・ボックスが表示されます。
次の値を入力します。
- Install Optionに「
Server Only」を選択します
- Workflow Accountに
owf_mgrと入力します
- Workflow PasswordにWorkflow Account用に選択したパスワード(
owf_mgrなど)を入力します
- SYS Passwordに、Oracle WorkflowをインストールしているデータベースのSYSパスワードを入力します
- TNS Connect Descriptorで、データベースに対応している
ホスト名:
ポート:
サービス名を入力します
注: データベースのtnsnames.oraファイルに提供されているネット・サービス名を使用しないでください。 Oracle Workflow Configuration Assistantは、このインストール・シナリオでtnsnames.oraファイルを参照しません。
必要なすべての値を入力した後、「
Submit」をクリックして、ワークフロー構成プロセスを開始します。
構成プロセスには数分かかります。
構成プロセスの進捗状況に従うメッセージ用に
owb_home/owb/wf/install/wf.logを確認できます。
プロセスが完了すると、Oracle Workflow Configuration Assistantは、"Workflow Configuration has completed successfully"メッセージとともにダイアログ・ボックスを表示します。 「
OK」をクリックします。 インストール・スクリプトが終了します。
最後に、"EXECUTE ANY PROCEDURE"権限を
owf_mgrユーザーに付与する必要があります。 "SYS as sysdba"としてSQL Plusに接続し、次のコマンドを発行します。
grant execute any procedure to owf_mgr
|
トピック・リストに戻る
マッピングの設計
マッピングによって、ソースからのデータの抽出、データの変換、およびターゲット・モジュール(以前のレッスンで定義したEXPENSE_WH)へのデータのロードが実行されます。
このトピックでは、以下の内容を学習します。
リレーショナル表とディメンション間の事前定義のマッピングの確認
このサブトピックでは、CHANNELSリレーショナル表とCHANNELSディメンション間の事前定義のLOAD_CHANNELSマッピングを確認します。 この例では、別のターゲット・モジュールのSALES_WHと以前に定義したものと異なるソースおよびターゲットを使用します。 マッピング・エディタに精通するには、以下の手順を実行します。
| 1.
|
Design CenterのProject Explorerパネルで、「
OWB_DEMO」を開きます。 「
Databases」→「
Oracle」→「
SALES_WH」→「
Mappings」を開きます。「
LOAD_CHANNELS」をダブルクリックします。
マッピング・エディタは、LOAD_CHANNELSマッピングを起動します。
|
| 2.
|
マッピング・エディタ・インタフェースを使用して、Oracle Warehouse Builderでマッピングを設計します。 マッピングを設計する場合、Mapping Editor Paletteパネルから演算子を選択して、キャンバスに配置します。
ヒント:以下のスクリーンショットのようにすべてのオブジェクトを表示できない場合、マッピング・エディタのツールバーの自動レイアウト・アイコン
をクリックして、マッピングをデフォルト・サイズにします。 最大化アイコン
をクリックして、キャンバスの演算子を最大化します。
マッピング・エディタで、キャンバスの次の演算子を確認します。
a)CHANNELS_IN表演算子
b)TOTALS定数演算子
c)CHANNELS_OUTディメンション演算子
d)属性間の接続線
|
| 3.
|
LOAD_CHANNELSマッピングで、表演算子の「
CHANNELS_IN」ヘッダーをクリックします。 これによって、このオブジェクトが選択されます。 表演算子の「
CHANNELS_IN」ヘッダーを右クリックして、「
Open Details」を選択します。 これによって、タブ形式の表エディタが起動します。
各タブは、演算子に関連するタスクの実行をサポートします。 たとえば、Nameタブを使用すると、演算子の名前とオプションの説明を指定できます。
「
Cancel」をクリックして、表エディタを閉じます。
|
| 4.
|
LOAD_CHANNELSマッピングで、CHANNELS_IN表演算子が選択されていることを確認します。 (表演算子CHANNELS_INヘッダーをクリックします。) 演算子にバインドされた名前を決定するには、Table Operator PropertiesパネルのBound Nameプロパティを下方向にスクロールします。 この演算子は、XSALESスキーマのCHANNELS表にバインドされています。
ヒント:または、演算子のヘッダーにマウスを移動します。 演算子がバインドされている場合、次の形式ですべての詳細を確認できます。 Operator <演算子名>: bound to <ワークスペース名>/<プロジェクト名>/モジュール名/演算子にバインドされた名前(たとえば、Operator CHANNELS_IN: bound to MY_WORKSPACE/OWB_DEMO/XSALES/CHANNELS)
注:バインドされた名前は、マッピングのオブジェクト演算子に接続されているオブジェクトの物理的な名前です。 バインドされた名前は、コードの生成中にオブジェクトを参照するために使用されます。
|
| 5.
|
LOAD_CHANNELSマッピングのディメンション演算子は、CHANNELS_OUTです。 この演算子は、SALES_WHターゲット・スキーマのCHANNELSディメンションにバインドされています。
|
| 6.
|
LOAD_CHANNELSマッピングの定数演算子は、TOTALSです。 定数演算子によって、定数値を定義できます。 定数は、マッピングのどこでも使用できます。 定数演算子は、1つ以上の定数属性を含む単一の出力グループを作成します。 キャンバスに定数演算子を追加するには、Paletteから定数演算子をドラッグしてください。
ヒント:定数演算子の使用例は、現在のシステムの日付の値を表演算子にロードすることです。
属性をTOTALS定数オブジェクトに追加するには、TOTALS定数演算子のヘッダーを右クリックして、「
Open Details」を選択します。 「
Output Attributes」タブをクリックします。 Addをクリックすると、属性がTotals定数オブジェクトに追加されます。 スクリーンショットでは、2つの属性が追加されています。
「
Cancel」をクリックして、定数エディタを閉じます。
|
| 7.
|
LOAD_CHANNELSマッピングで、TOTALS定数演算子の「
TOT」属性を選択します。 マッピング・エディタの左側のAttribute Propertiesパネルで、Expressionプロパティを確認します。 Attribute Propertiesパネルで、
Expressionプロパティの横のフィールドをクリックします。 右にあるボタン
をクリックします。 Expression Builderが起動します。 TOT属性の値は、"Channels Total"です。 式エディタを閉じます。
|
| 8.
|
LOAD_CHANNELSマッピングで、次の接続線を確認します。
- CHANNELS_IN表演算子の属性とCHANNELS_OUTディメンション演算子の属性
- TOTALS定数演算子の属性とCHANNELS_OUTディメンション演算子の属性
この例では、相互に個別の演算子属性を接続して演算子を接続しています。 接続線は、演算子を使用したソースからターゲットへのデータの流れをグラフィカルに表します。
マッピング・エディタを閉じます。
|
トピックに戻る
外部表とディメンション間のマッピングの設計
このサブトピックでは、EXPENSE_CATEGORIES_CSV外部表をREL_CATEGORYディメンションにマップするREL_CATEGORY_MAPマッピングを作成する演習を行います。
| 1.
|
Project Explorerで、「
OWB_DEMO」を開きます。 「
Databases」→「
Oracle」→「
EXPENSE_WH」→「
Mappings」を開きます。 TimeウィザードでREL_TIME時間ディメンションを作成した際にOracle Warehouse Builderによって自動的に作成されたREL_TIME_MAPマッピングを確認します。
「
Mappings」を右クリックして、「
New」を選択します。
Create Mappingウィンドウが表示されます。
|
| 2.
|
Create Mappingウィンドウで、マッピングの名前に
REL_CATEGORY_MAPと入力します。
「
OK」をクリックします。
Project Explorerパネルで、EXPENSE_WHモジュールの下のREL_CATEGORY_MAPマッピングのエントリを確認します。 マッピング・エディタは、REL_CATEGORY_MAPマッピングを起動します。
|
| 3.
|
Paletteの「
Dimension
Operator」をキャンバスにドラッグします。 Add Dimension Operatorウィンドウが表示されます。
Add Dimension Operatorウィンドウで、「
EXPENSE_WH」モジュールへ移動して、「
REL_CATEGORY」ディメンションを選択します。 「
OK」をクリックします。
|
| 4.
|
REL_CATEGORYディメンション・オブジェクトがキャンバスにドロップされます。
|
| 5.
|
また、マッピング・エディタの左側にあるExplorerパネルで既存のソースとターゲットをマッピングに追加できます。 Explorerパネルで、Available Objectsタブが選択されていることを確認します。 「
Oracle」→「
EXPENSE_WH」→「
External Tables」を開きます。 「
EXPENSE_CATEGORIES」をキャンバスにドラッグします。
EXPENSE_CATEGORIES外部表とREL_CATEGORYディメンションの2つのオブジェクトがキャンバスに配置されています。
ヒント:マッピング・エディタのツールバーの自動レイアウト・アイコン
をクリックして、マッピングをデフォルトのサイズに変更します。 ドラッグ操作で、EXPENSE_CATEGORIES外部表をREL_CATEGORYディメンションの左側に移動します。 最大化アイコン
をクリックして、EXPENSE_CATEGORIES外部表を最大化します。 同様に、REL_CATEGORYディメンションを最大化します。
|
| 6.
|
次の操作を実行して、ソース(EXPENSE_CATEGORIES外部表)をターゲット(REL_CATEGORYディメンション)に接続します。
- EXPENSE_CATEGORIES.OUTGRP1.EXPENSE_TYPEから
REL_CATEGORY.TYPE.NAMEに接続線をドラッグします
- EXPENSE_CATEGORIES.OUTGRP1.EXPENSE_TYPEから
REL_CATEGORY.TYPE.DESCRIPTIONに接続線をドラッグします
- EXPENSE_CATEGORIES.OUTGRP1.EXPENSE_CATEGORYから
REL_CATEGORY.CATEGORY.NAMEに接続線をドラッグします
- EXPENSE_CATEGORIES.OUTGRP1.EXPENSE_CATEGORYから
REL_CATEGORY.CATEGORY.DESCRIPTIONに接続線をドラッグします
- EXPENSE_CATEGORIES.OUTGRP1.EXPENSE_CATEGORYから
REL_CATEGORY.TYPE.CATEGORY_NAMEに接続線をドラッグします
ヒント:接続線は、演算子を使用したソースからターゲットへのデータの流れをグラフィカルに表します。
注: 接続線をREL_CATEGORYターゲット・ディメンションにドロップする場合に注意してください。 このディメンションにはCATEGORYとTYPEの2つのレベルがあり、それぞれ同じ名前の属性(ID、NAME、DESCRIPTION)があります。
たとえば、手順6の最初の箇条書きの接続線を
REL_CATEGORY.
TYPE.NAME
にドラッグする場合、接続線を
TYPEレベルのNAME属性にドロップする必要があります。
|
| 7.
|
マッピングの設計が完了しました。 これで、マッピングのコードを生成できます。 マッピング・エディタのメニューから「
Mapping」→「
Generate」を選択します。 これで、ディメンションをロードするコードが生成されました。 マッピングで設計したETLロジックに基づいて、Oracle Warehouse Builderは、設計の実装に必要なコードを生成します。
Generation Resultsウィンドウが表示されます。 Generation Resultsウィンドウは、生成されたコードを表示します。
マッピング・エディタを
閉じます。
|
トピックに戻る
外部表とキューブ間のマッピングの設計
このサブトピックでは、EXPORT_CSV外部表をREL_EXPENSEキューブにマップするREL_EXPENSE_MAPマッピングを作成する演習を行います。
| 1.
|
Project Explorerで、「
OWB_DEMO」を開きます。 「
Databases」→「
Oracle」→「
EXPENSE_WH」→「
Mappings」を開きます。「
Mappings」ノードを右クリックして、「
New」を選択します。
Create Mappingウィンドウが表示されます。
|
| 2.
|
Create Mappingウィンドウで、マッピングの名前に
REL_EXPENSE_MAPと入力します。
「
OK」をクリックします。
Project Explorerで、EXPENSE_WHモジュールの下のREL_EXPENSE_MAPマッピングのエントリを確認します。 マッピング・エディタが起動します。
|
| 3.
|
マッピング・エディタの左側のExplorerパネルで、Available Objectsタブが選択されていることを確認します。 「
Oracle」→「
EXPENSE_WH」→「
External Tables」を開きます。 「
EXPENSE_DATA」外部表をキャンバスにドラッグします。
EXPENSE_DATA外部表オブジェクトがキャンバスに配置されます。
|
| 4.
|
Explorerパネルで、Available Objectsタブが選択されていることを確認します。 「
Oracle」→「
EXPENSE_WH」→「
Cubes」を開きます。 「
REL_EXPENSE」キューブをキャンバスにドラッグします。
EXPENSE_DATA外部表演算子とREL_EXPENSEキューブ演算子の2つのオブジェクトがキャンバスに配置されています。
ヒント:マッピング・エディタのツールバーの自動レイアウト・アイコン
をクリックして、マッピングをデフォルトのサイズにします。
EXPENSE_DATA外部表演算子がREL_EXPENSEキューブ演算子の左側にあることを確認します。 最大化アイコン
をクリックして、EXPENSE_DATA外部表を最大化します。 同様に、REL_EXPENSEキューブ演算子を最大化します。
|
| 5.
|
マッピング・エディタのPaletteパネルの「
Expression」演算子をキャンバスにドラッグします。
この例では、式演算子を使用して、日付データ型から数値データ型にEXPENSE_DATA外部表のEXPENSE_DATE属性を変換しています。 キューブのターゲット属性は、数値データ型です。このため、データ型を一致させるためにデータ型の変換が必要です。
|
| 6.
|
EXPENSE_DATA.OUTGRP1.EXPENSE_DATEから
EXPRESSION.INGRP1に接続線をドラッグします。
|
| 7.
|
式演算子の「
EXPRESSION」ヘッダーを右クリックして、「
Open Details」を選択します。
|
| 8.
|
式エディタの「
Output Attributes」タブをクリックします。 「
Add」をクリックします。
|
| 9.
|
OUTPUT1属性の名前を
EXPENSE_DATEに変更します。 データ型がNUMBERであることを確認します。 「
OK」をクリックします。
|
| 10.
|
マッピング・エディタの式演算子の「
EXPRESSION」ヘッダーをクリックして、「
OUTGRP1.EXPENSE_DATE」を選択します。 Attribute Propertiesパネルで、
Expressionプロパティの横のフィールドをクリックします。 右にあるボタン
をクリックします。
Expression Builderが起動します。
|
| 11.
|
Expression Builderの
Expression for EXPENSE_DATEに次の文を入力します。
TO_NUMBER(TO_CHAR(INGRP1.EXPENSE_DATE , 'YYYYMMDD'), '99999999')
「
Validate」をクリックします。 Validation resultsパネルに成功が通知されるまで待機します。 「
OK」をクリックします。
|
| 12.
|
次のようにソース演算子をターゲット演算子に接続します。
- EXPRESSION.OUTGRP1.EXPENSE_DATEから
REL_EXPENSE.REL_EXPENSE.REL_TIME_DAY_CODEに接続線をドラッグします
- EXPENSE_DATA.OUTGRP1.EXPENSE_TYPEから
REL_EXPENSE.REL_EXPENSE.REL_CATEGORY_NAMEに接続線をドラッグします
- EXPENSE_DATA.OUTGRP1.REIMBURSABLE_AMOUNT
から
REL_EXPENSE.REL_EXPENSE.EXPENSE
に接続線をドラッグします
マッピングの設計が完了しました。 これで、マッピングのコードを生成できます。
|
| 13.
|
マッピング・エディタのメニューから「
Mapping」→「
Generate」を選択します。 Oracle Warehouse Builderは、
設計の実装に必要なコードを生成します。 Generation Resultsウィンドウが表示されます。 Generation Resultsウィンドウは、生成されたコードを表示します。
ヒント:生成されたこれらの結果を後で表示する場合、WindowメニューのGeneration Resultsを選択します。
ツールバーから
Save Allアイコン
をクリックして、作業をコミットします。 マッピング・エディタを閉じます。
|
トピックに戻る
トピック・リストに戻る
プロセス・フローの設計
ソースからターゲットにデータを移動する操作を定義するマッピングを作成した後、プロセス・フローを作成して定義できます。 プロセス・フローは、マッピングとOracle Warehouse Builder外部のアクティビティ(たとえば、電子メール)を相互に関連付けます。 Oracle Warehouse Builderでは、マッピングと関連するアクティビティ(FTPを使用したウェアハウス・マシンへのファイルのアップロードやロード・プロセスでエラーが発生した場合の管理者への通知など)の実行の管理にプロセス・フローが使用されます。
この例で使用されるシナリオは、非常に一般的です。 キューブがディメンション値を参照するため、キューブ(REL_EXPENSE)をロードする前にディメンション(REL_TIMEとREL_CATEGORY)をロードする必要があります。 すべてのディメンションが正しくロードされた後にのみ、キューブのロードが開始されます。 次に、プロセス・フローの設計方法を学習します。
プロセス・フロー・エディタには、フローを設計するために追加し、トランジション(遷移)で接続されるさまざまなアクティビティが含まれます。アクティビティは、プロセス・フローの作業単位を表します。 これらの作業単位には、Oracle Warehouse Builderの内部または外部のコンポーネントが含まれます。 トランジションは、アクティビティを起動する順序と条件を示します。
このトピックでは、以下の内容を学習します。
Oracle Workflowユーザーの登録
コントロール・センターでプロセス・フローを実行する権限が必要なため、特定のロールをOracle Workflow(OWF)ユーザーの
owf_mgrに付与する必要があります。
OWFユーザーが所有するデータベース・リンクにコントロール・センター用のパスワードを組み込む必要はありません。 コントロール・センター・ユーザーは強力な特権ユーザーで、パスワードは厳密に管理されます。
OWFユーザーを登録するには、Global ExplorerパネルのSecurity→UsersノードからRegister Warehouse Builder Usersウィザードを使用します。 Securityノードにアクセスするには、リポジトリ所有者としてDesign Centerにログインします。
| 1.
|
ログインしていない場合、ユーザー名/パスワードに
rep_owner/rep_ownerを使用してDesign Centerにログインします。
Global Explorerパネルで、「
Security」ノードを開きます。 「
Users」ノードを右クリックして、「
New」を選択します。
注:新しいユーザーを作成する前に、変更を保存するか元に戻す必要があります。 以前の変更を保存するには、Designメニューから「
Save All」を選択するか、ツールバーの
をクリックします。
Create Userダイアログが表示されます。
|
| 2.
|
Create Userダイアログで、使用できるデータベース・ユーザーのリストから選択するかOracle Warehouse Builderユーザーとして自動的に登録される新しいユーザーを作成できます。
このレッスンの前半のOracle Workflow Serverのインストールを指示された箇所で、Oracle Workflow Configuration Assistantを使用してワークフロー・アカウントにowf_mgrを指定しています。 このため、データベース・ユーザーとしてowf_mgrが作成されます。 Available DB Usersリストから
owf_mgrを選択し、ボタン
>をクリックしてSelected Usersリストに移動します。 「
OK」をクリックします。
owf_mgrユーザーがGlobal Explorerパネルの
Security→
Usersノードに追加されていることを確認します。
|
トピックに戻る
プロセス・フローの設計
| 1.
|
プロセス・フローの設計を開始する前に、プロセス・フロー・パッケージを含むプロセス・フロー・モジュールを作成する必要があります。
注:プロセス・フロー・モジュールには、プロセス・フローを含むプロセス・フロー・パッケージが含まれます。 プロセス・フロー・パッケージは、相互に関連付けるプロセス・フローを決定するグループ化メカニズムです。 実行時に、同じプロセス・フロー・パッケージに存在する他のプロセス・フローを起動する単一のプロセス・フローを起動できます。
MY_PF_MODULEプロセス・フロー・モジュール、PKプロセス・フロー・パッケージ、およびMY_PROCプロセス・フローを作成します。 プロセス・フロー・モジュールは、プロセス・フローのグループを検証、生成、および配置できるコンテナとして動作します。
Project Explorerで、「
OWB_DEMO」プロジェクト→「
Process Flows」ノードを開きます。 「
Process Flow Modules」を右クリックして、メニューから「
New」を選択します。
Create Moduleウィザードが起動します。 Welcomeページで「
Next」をクリックします。
|
| 2.
|
Name and Descriptionページで、プロセス・フロー・モジュールの名前に
MY_PF_MODULEと入力します。 「
Next」をクリックします。
|
| 3.
|
MY_PF_MODULEプロセス・フロー・モジュールのOracle Workflowの場所を作成します。
注:
Oracle Workflowの場所を定義して、プロセス・フローを配置する場所を指定します。 Oracle Workflowの場所は、ターゲット・データベースで実行されるワークフロー・スキーマ(OWF_MGR)を示します。 Oracle Warehouse Builderプロセス・フローは、XMLプロセス定義言語(XPDL)に準拠します。 プロセス・フローを生成すると、Oracle Warehouse Builderは、XPDL形式でXMLファイルを生成します。 生成したXMLファイルをXPDL標準に準拠するワークフロー・エンジンに接続できます。
Connection Informationページで、Oracle Warehouse Builderがデフォルト名のMY_PF_MODULE_LOCATION1の場所を作成していることを確認します。 「
Edit」をクリックして、ワークフローの場所の詳細を指定します。
Edit Oracle Workflow Locationウィンドウで、場所の名前を
WH_OWF_LOCATIONに変更します。 Oracle Workflowスキーマへの接続の詳細を指定します。 このコースでは、スキーマ名にowf_mgr、パスワードにowf_mgrを使用します。 Oracle Workflowスキーマに異なる名前とパスワードを使用する場合は、適宜置き換えてください。
Password:
owf_mgr
Host:
localhost
Port:
1521
Service:
orcl
Schema:
owf_mgr
Version:
2.6.4
「
Test Connection」をクリックします。 接続が成功している場合、「
OK」をクリックします。 接続が成功していない場合、接続の詳細を確認して再度実行してください。
「
OK」をクリックした後、ウィザードのConnection Informationページに戻ります。
「
Next」をクリックします。 Summaryページで詳細を確認して、「
Finish」をクリックします。
|
| 4.
|
Create Process Flow Packageウィンドウが起動します。 名前に
PKを指定して、「
OK」をクリックします。
|
| 5.
|
Create Process Flowウィンドウが起動します。 プロセス・フローの名前に
LOAD_EXPENSE_WHを指定します。
「
OK」をクリックします。
Oracle Warehouse Builderは、プロセス・エディタを起動して、StartアクティビティとEnd_Successアクティビティのプロセス・フローを表示します。 次に、アクティビティとトランジションを使用したプロセス・フローの設計方法を学習します。
|
| 6.
|
プロセス・エディタのPaletteパネルの「
Fork」アクティビティをキャンバスにドラッグします。 アクティビティの完了後に、Forkアクティビティを使用して複数の同時アクティビティを起動できます。 ExplorerパネルのSelected ObjectsタブからForkアクティビティをドラッグすることもできます。
|
| 7.
|
プロセス・エディタのExplorerパネルで、「
Available Objects」タブをクリックします。 EXPENSE_WHターゲット・モジュールの「
REL_CATEGORY_MAP」マッピングをキャンバスにドラッグします。
|
| 8.
|
Explorerパネルで、Available Objectsタブが選択されていることを確認します。 「
REL_TIME_MAP」マッピングをキャンバスにドラッグします。
キャンバスにREL_TIME_MAPとREL_CATEGORY_MAPの2つのマッピング・アクティビティが配置されていることを確認します。 STARTアクティビティの右側に垂直方向にマッピング・アクティビティを再配置します。
注:キャンバスにマッピング・アクティビティをドロップする際に"Unable to determine if the map is a PLSQL or SQLLDR map........"エラーが表示された場合、Design Centerで適切なマッピングを右クリックして、「
Configure」を選択します。 Configuration PropertiesウィンドウのLanguageプロパティに「
PL/SQL」を選択します。
|
| 9.
|
Paletteパネルから「
AND」アクティビティをキャンバス(REL_TIME_MAPおよびREL_CATEGORY_MAPマッピング・アクティビティの右側)にドラッグします。
|
| 10.
|
Explorerパネルで、
Available Objectsタブが選択されていることを確認します。 「
REL_EXPENSE_MAP」マッピング・アクティビティをキャンバスにドラッグします。
「
REL_EXPENSE_MAP」をANDアクティビティの右側に再配置します。
|
| 11.
|
Paletteパネルの「
END with ERRORS」アクティビティをキャンバスにドラッグします。 REL_EXPENSE_MAPキューブ・マッピングの右、END_SUCCESSアクティビティの上にドラッグします。
|
| 12.
|
Paletteパネルの「
END with WARNINGS」アクティビティをキャンバスにドラッグします。 REL_EXPENSE_MAPマッピング・アクティビティの右、END_SUCCESSアクティビティの下にドラッグします。 スクリーンショットのようにプロセスが表示されます。
次に、アクティビティの接続方法を学習します。
|
| 13.
|
STARTアクティビティにカーソルを合わせます。 カーソルが(
)に変更されていることを確認します。 STARTアクティビティからFORKアクティビティに線(これらの線をこれからトランジションと呼びます)をドラッグします。
注:トランジションを使用して、プロセス・フローのアクティビティの順序と条件を示します。 トランジションを使用すると、前のアクティビティの完了状態に基づいてアクティビティを実行できます。
トランジションをドラッグするには、マウス・ポインタを(
)に変更する必要があります。
-
FORKアクティビティから
REL_CATEGORY_MAPマッピング・アクティビティにトランジションをドラッグします。
-
FORKアクティビティから
REL_TIME_MAPマッピング・アクティビティにトランジションをドラッグします。
-
REL_CATEGORY_MAPマッピング・アクティビティから
AND1アクティビティにトランジションをドラッグします。
-
REL_TIME_MAPマッピング・アクティビティから
AND1アクティビティにトランジションをドラッグします。
-
AND1アクティビティから
REL_EXPENSE_MAPマッピング・アクティビティにトランジションをドラッグします。
-
REL_EXPENSE_MAPマッピング・アクティビティから
END_ERRORアクティビティにトランジションをドラッグします。
-
REL_EXPENSE_MAPマッピング・アクティビティから
END_SUCCESSアクティビティにトランジションをドラッグします。
-
REL_EXPENSE_MAPマッピング・アクティビティから
END_WARNINGアクティビティにトランジションをドラッグします。
トランジションですべてのアクティビティを接続した後、プロセス・フローが次のスクリーンショットのように表示されます。
上記の手順で学習および追加したトランジションは、無条件のトランジションです。 デフォルトのトランジションは無条件です。 前のアクティビティの終了状態に関係なく、前のアクティビティの完了後にプロセス・フローが継続します。
注:特定のアクティビティから別のアクティビティにトランジションをドラッグすると、<0>や<1>などの無効な文字を取得する場合があります。 配置中または実行中に問題が発生するわけではないので、これらの文字を無視できます。
|
| 14.
|
トランジションを使用すると、前のアクティビティの完了状態に基づいてアクティビティを実行できます。 次に、トランジションに条件を適用する方法を学習します。
REL_EXPENSE_MAPマッピング・アクティビティからEND_SUCCESSアクティビティへのトランジション(線)を選択します。
注: Object Detailsパネルのトランジション名を気にする必要はありません。 以下のスクリーンショットのトランジション名はTransition_6です。 作業環境のトランジション名がTransition_7やTransition_9のようにスクリーンショットのトランジション名と異なる場合があります。 名前の違いを気にする必要はありません。
|
| 15.
|
REL_EXPENSE_MAPマッピング ・アクティビティとEND_SUCCESSアクティビティのトランジション(線)が選択されていることを確認します。
Object Detailsパネルで、Conditionプロパティの横のフィールドをクリックします。 右にあるボタン
をクリックします。 トランジション条件エディタが表示されます。 トランジション条件エディタで、「
Enumerated Conditions」オプション・ボタンを選択します。 ドロップダウン・リストから「
SUCCESS」を選択します。 「
OK」をクリックします。
|
| 16.
|
REL_EXPENSE_MAPマッピング・アクティビティとEND_ERRORアクティビティのトランジションを選択します。 トランジションがハイライトされます。
Object Detailsパネルで、Conditionプロパティの横のフィールドをクリックします。 ボタン
をクリックします。 トランジション条件エディタが表示されます。 トランジション条件エディタで、「
Enumerated Conditions」オプション・ボタンを選択します。 ドロップダウン・リストから「
ERROR」を選択します。 「
OK」をクリックします。
これは、前のアクティビティがエラーで終了した場合でもプロセス・フローが継続することを示します。
|
| 17.
|
REL_EXPENSE_MAPマッピング・アクティビティとEND_WARNINGアクティビティのトランジションを選択します。
Object Detailsパネルで、Conditionプロパティの横のフィールドをクリックします。 ボタン
をクリックします。 トランジション条件エディタで、「
Enumerated Conditions」オプション・ボタンを選択します。 ドロップダウン・リストから「
WARNING」を選択します。 「
OK」をクリックします。
これは、前のアクティビティ(REL_EXPENSE_MAP)が警告で終了した場合でもプロセス・フローが継続することを示します。
|
| 18.
|
これで、このプロセス・フローの設計は完了です。 「
Process Flow」メニューから「
Generate」を選択して、LOAD_EXPENSE_WHプロセス・フローを生成します。
プロセス・フロー定義から生成されるコードには、業界標準のXMLプロセス定義言語(XPDL)が使用されます。
Process Flowメニューから「
Close」を選択して、プロセス・エディタを終了します。
Design Centerのツールバーの
Save Allアイコン
をクリックして、作業をコミットします。
|
トピックに戻る
トピック・リストに戻る
マッピングのテストおよびデバッグ
Oracle Warehouse Builderには、グラフィカル・インタフェースでマッピングを使用したデータ・フローを確認できるグラフィカル・マッピング・デバッガがあります。 マッピング・デバッガは、マッピング・エディタに組み込まれています。
この項では、演習ではなくテキストとスクリーンショットを使用してマッピングをデバッグするためのデバッガの使用方法を説明します。
| 1.
|
手順1から手順8は、読取り専用です。実行しないでください。
前提条件: REL_CATEGORYディメンションがターゲット・スキーマに配置されている。 EXPENSE_CATEGORIES外部表が配置されていない。 デバッグ対象がREL_CATEGORY_MAPマッピングである。
「
OWB_DEMO」→「
Databases」→「
EXPENSE_WH」を開いて、「
REL_CATEGORY_MAP」をダブルクリックします。
REL_CATEGORY_MAPマッピングがマッピング・エディタで開かれます。 ウィンドウを最大化します。
|
| 2.
|
Oracle Warehouse Builderは、マッピング・エディタ内のデータ・フローのデバッグ機能を提供します。 デバッグ機能は、ツールバーとDebugメニューで使用できます。
ツールバーの
Debug Startアイコン
をクリックして、デバッグ・セッションを開始します。
マッピング・エディタがデバッグ・モードに切り替わって、エディタの下部にデバッグ・パネルが表示されます。
|
| 3.
|
デバッガは、演算子の名前に基づいてターゲット・スキーマのオブジェクトを検索します。 最初にデバッグ・モードでマッピングを実行する場合、Oracle Warehouse Builderはすべてのソース表のリンクを識別できないので、次のエラー・メッセージを表示します。
|
| 4.
|
マッピングの各ソースまたはターゲットの演算子がDebug InfoパネルのTest Dataタブに表示されます。 このタブには、オブジェクト名とデータベース・オブジェクトがソースまたはターゲットの演算子にバインドされていることを示すチェック・マークが含まれます。 デバッグ・モードでマッピングを実行する前に、すべてのソースまたはターゲットの演算子がバインドされチェック・マークが表示されている必要があります。 通常、すべてのソース演算子のデータをテストする必要があります。
|
| 5.
|
「
Edit」ボタンをクリックすると、Bind Debug Test Dataページが起動します。このページでは、演算子のバインディングおよびバインドされたデータベース・オブジェクトのテスト・データの追加または変更を実行できます。
|
| 6.
|
各データ演算子のテスト・データ接続を定義した後、Debugメニューから「
Re-initialize」を選択するかツールバーの「
Re-initialize」ボタンをクリックして、最初にデバッグ・コードを生成できます。
Debug InfoパネルのMessagesタブのSuccessful Debug initializationは、すべての演算子でテスト・データが使用できることを示しています。
|
| 7.
|
特定の演算子のデータ処理方法に関心のある場合、その演算子にブレーク・ポイントを設定できます。 デバッグ・ツールバーからブレーク・ポイントを設定します。 これによって、デバッグ・セッションが中断します。
マッピング・エディタの左下隅のDebug Infoパネルに
Breakpointsタブが表示されていることを確認します。 ブレーク・ポイントは、マッピング・デバッグの実行中に設定できます。また、マッピングの実行時にアクティブ化および非アクティブ化できます。
|
| 8.
|
ツールバーの
Stepアイコンを使用して、マッピングの手順を段階的に実行して選択したオブジェクトのデータ・フローを監視します。
「
Step」ボタンを数回クリックして、デバッグ中の行を取得します。 マッピング・エディタの右下のDebug DataパネルにあるStep Dataタブのデータ行を確認します。
|
トピック・リストに戻る
まとめ
このレッスンで学習した内容は、以下のとおりです。
|
マッピングの設計
|
|
データの配置、実行、およびロードを行うプロセス・フローの設計
|
|
マッピング・デバッガを使用したOracle Warehouse Builderでのテストおよびデバッグ |
トピック・リストに戻る
このアイコンの上にカーソルを置くと、すべてのスクリーンショットが非表示になります。
|