4 リバースエンジニアリング戦略
この章の内容は次のとおりです。
カスタマイズ・リバースエンジニアリング・プロセス
Oracle Data Integratorの標準リバースエンジニアリングでは、指定されたデータ・サーバーへの接続に使用されるドライバの機能に依存して、データ構造を記述したリッチ・メタデータを返します。
このメタデータが正確でないか、データ・サーバーから特定のメタデータを取得してリッチ化する必要がある場合は、カスタマイズ・リバースエンジニアリングを使用します。
SNP_REV表
Oracle Data Integratorリポジトリには、SNP_REV表と呼ばれるメタデータ・ステージング表のセットが含まれています。
これらのSNP_REV表の内容は、次のツールを使用して管理されます。
-
OdiReverseResetTableは、指定されたモデルに対してこれらの表の内容をリセットします。
-
OdiReverseGetMetadataは、標準のJDBCリバースエンジニアリングと同じプロセスを使用してこれらの表をロードします。
-
OdiReverseSetMetadataは、これらのステージング表の内容を、データストア、列、制約などを記述するリポジトリ表に適用します。このアクションによってOracle Data Integratorモデルが変更されます。
SNP_REV表の詳細はSNP_REV表のリファレンスを、リバースエンジニアリング・ツールの詳細はOracle Data Integrator開発者ガイドを参照してください。
カスタマイズ・リバースエンジニアリング戦略
カスタマイズ・リバースエンジニアリング戦略は、すべてのRKMで共通のパターンに従います。
このパターンには次のステップが含まれます。
RKMでは、ソース・コマンドとターゲット・コマンドは次のように機能します。
-
「自動コミット」トランザクションで「未定義」テクノロジにより指定された「ターゲットに対するコマンド」は、リポジトリのSNP_REV表をターゲットとします。
-
「自動コミット」トランザクションで「未定義」スキーマにより指定された「ソースに対するコマンド」は、リバースエンジニアリングのデータ構造を含むデータサーバーからデータを取得します。メタデータ・プロバイダ(たとえば、Excelスプレッドシート)を使用する場合は、特定のテクノロジと論理スキーマを指定する必要があります。
-
ツール(OdiReverseSetMetadataなど)のコールは、ODIツール・テクノロジにより、「ターゲットに対するコマンド」で指定されます。
ケース・スタディ
この項では、リバースエンジニアリング戦略の例を示します。
RKM Oracle
RKM Oracleは、データベース・ディクショナリをメタデータ・プロバイダとして使用するリバースエンジニアリング・プロセスの一般的な例です。
次のコマンドは、OracleのRKMから抽出したもので、ここに例として示します。このナレッジ・モジュールのコードはOracle Data Intagrator Studioで編集して確認できます。
SNP_REV表のリセット
このタスクは、現在のモデルに対してSNP_REV表の内容をリセットします。
ターゲットに対するコマンド(ODIツール)
OdiReverseResetTable -MODEL=<%=odiRef.getModel("ID")%>
表の取得
このタスクは、Oracleシステム表から表のリストを取得し、その内容をSNP_REV表にロードします。
ソースに対するコマンド
Select t.TABLE_NAME TABLE_NAME, t.TABLE_NAME RES_NAME, replace(t.TABLE_NAME,'<%=odiRef.getModel("REV_ALIAS_LTRIM")%>','') TABLE_ALIAS, substr(tc.COMMENTS,1,250) TABLE_DESC, 'T' TABLE_TYPE, t.NUM_ROWS R_COUNT, SUBSTR(PARTITIONING_TYPE ,1,1) PARTITIONING_TYPE, SUBSTR(SUBPARTITIONING_TYPE,1,1) SUBPARTITIONING_TYPEFrom ALL_TABLES t, ALL_TAB_COMMENTS tc, ALL_PART_TABLES tp Where ... ...
ターゲットに対するコマンド
insert into SNP_REV_TABLE( I_MOD, TABLE_NAME, RES_NAME, TABLE_ALIAS, TABLE_TYPE, TABLE_DESC, IND_SHOW, R_COUNT, PARTITION_METH, SUB_PARTITION_METH)values( <%=odiRef.getModel("ID")%>, :TABLE_NAME, :RES_NAME, :TABLE_ALIAS, 'T', :TABLE_DESC, '1', :R_COUNT, :PARTITIONING_TYPE, :SUBPARTITIONING_TYPE)