ヘッダーをスキップ
Oracle® Database Heterogeneous Connectivityユーザーズ・ガイド
12cリリース1 (12.1)
E52376-02
  目次へ移動
目次
索引へ移動
索引

前
次へ
 

データ・ディクショナリ変換

ほとんどのデータベース・システムには、なんらかの形式のデータ・ディクショナリがあります。データ・ディクショナリは、システムの各種ユーザーにより作成されたデータベース・オブジェクトに関する情報のコレクションです。リレーショナル・データベースの場合、データ・ディクショナリはデータベース内のデータに関する情報を含む表およびビューのセットです。この情報には、システムを使用するユーザーやユーザーが作成したオブジェクト(表、ビュー、トリガーなど)に関する情報が含まれます。ほとんどすべてのデータ・ディクショナリには(データベース・システムに関係なく)同じ情報が含まれていますが、情報の編成方法はデータベース・システムごとに異なります。

たとえば、Oracleのデータ・ディクショナリ・ビューALL_CATALOGには、データベース内の表、ビューおよび順序のリストが表示されます。これには3つの列があり、1列目はオブジェクトの所有者名を示すOWNER、2列目はオブジェクト名を示すTABLE_NAME、3列目はデータ型を示すTABLE_TYPEです。このフィールドの値は、オブジェクト型に応じてTABLEVIEWSEQUENCEなどです。ただし、Sybaseの場合、同じ情報がsysusersおよびsysobjectsという2つの表に格納され、その列名はOracleのALL_CATALOG表の列名とは異なります。また、Oracle Databaseでは、テーブルのタイプはTABLEまたはVIEWの値で始まります。たとえば、Sybaseでは、Uはユーザー表、Sはシステム表、Vはビューを意味します。

クライアント・プログラムがSybaseシステムにあるALL_CATALOG表からの情報を必要とする場合は、ALL_CATALOG@database_linkを参照する問合せをゲートウェイに送信します。この問合せは、異機種間サービスによりsystablesの該当する問合せに変換されてから、たとえば、Sybaseシステムに送信されます。

SELECT SU."name" OWNER, SO."name" TABLE_NAME,
   DECODE(SO."type", 'U ','TABLE', 'S ', 'TABLE', 'V ', 'VIEW')
TABLE_TYPE
FROM "dbo"."sysusers"@remote_db  SU, "dbo"."sysobjects"@remote_db SO
WHERE SU."uid" = SO."uid" AND
   (SO."type" = 'V' OR SO."type" = 'S' OR SO."type" = 'U');

Oracleデータ・ディクショナリ表に対する問合せの変換を、Oracle以外のシステムのデータ・ディクショナリ表に対する同等の問合せに反映するには、そのOracle以外のシステムのためのデータ・ディクショナリ変換が異機種間サービスで必要です。データ・ディクショナリ変換は、Oracle以外のシステムの1つ以上のデータ・ディクショナリ表(Oracleのデータ・ディクショナリ表と列名や形式が同じ)に対するビューの定義(すなわちSELECT文)です。ほとんどのデータ・ディクショナリ変換はこの例ほど単純ではありません。多くの場合、情報は多数の表に分散しているため、データ・ディクショナリ変換はそれらの表の複雑な結合になります。

場合によっては、Oracle以外のシステムに情報が存在していないため、Oracleデータ・ディクショナリ表に変換が含まれないこともあります。このような場合、ゲートウェイは変換をアップロードできないため、疑似実行と呼ばれる別のアプローチを実装することがあります。ゲートウェイがデータ・ディクショナリ表を疑似実行する場合、ゲートウェイは異機種間サービスに情報を提供し、異機種間サービスはローカル・データベースを問い合せてデータ・ディクショナリ表の説明を取得します。データの取得を求められると、行が選択されなかったとレポートします。