Oracle® Database

Heterogeneous Connectivityユーザーズ・ガイド

11g リリース2 (11.2)

E94922-01(原本部品番号:E11050-01)

2009年7月

Oracle Database Heterogeneous Connectivityユーザーズ・ガイド, 11gリリース2 (11.2)

E94922-01

Copyright © 2001, 2009, Oracle and/or its affiliates. All rights reserved.

このソフトウェアおよび関連ドキュメントの使用と開示は、ライセンス契約の制約条件に従うものとし、知的財産に関する法律により保護されています。ライセンス契約で明示的に許諾されている場合もしくは法律によって認められている場合を除き、形式、手段に関係なく、いかなる部分も使用、複写、複製、翻訳、放送、修正、ライセンス供与、送信、配布、発表、実行、公開または表示することはできません。このソフトウェアのリバース・エンジニアリング、逆アセンブル、逆コンパイルは互換性のために法律によって規定されている場合を除き、禁止されています。

ここに記載された情報は予告なしに変更される場合があります。また、誤りが無いことの保証はいたしかねます。誤りを見つけた場合は、オラクル社までご連絡ください。

このソフトウェアまたは関連ドキュメントが、米国政府機関もしくは米国政府機関に代わってこのソフトウェアまたは関連ドキュメントをライセンスされた者に提供される場合は、次のNoticeが適用されます。

U.S. GOVERNMENT RIGHTS Programs, software, databases, and related documentation and technical data delivered to U.S. Government customers are "commercial computer software" or "commercial technical data" pursuant to the applicable Federal Acquisition Regulation and agency-specific supplemental regulations.As such, the use, duplication, disclosure, modification, and adaptation shall be subject to the restrictions and license terms set forth in the applicable Government contract, and, to the extent applicable by the terms of the Government contract, the additional rights set forth in FAR 52.227-19, Commercial Computer Software License (December 2007).Oracle USA, Inc., 500 Oracle Parkway, Redwood City, CA 94065.

このソフトウェアは様々な情報管理アプリケーションでの一般的な使用のために開発されたものです。このソフトウェアは、危険が伴うアプリケーション(人的傷害を発生させる可能性があるアプリケーションを含む)への用途を目的として開発されていません。このソフトウェアを危険が伴うアプリケーションで使用する際、このソフトウェアを安全に使用するために、適切な安全装置、バックアップ、冗長性(redundancy)、その他の対策を講じることは使用者の責任となります。このソフトウェアを危険が伴うアプリケーションで使用したことに起因して損害が発生しても、オラクル社およびその関連会社は一切の責任を負いかねます。

OracleはOracle Corporationおよびその関連企業の登録商標です。その他の名称は、それぞれの所有者の商標または登録商標です。

このソフトウェアおよびドキュメントは、第三者のコンテンツ、製品、サービスへのアクセス、あるいはそれらに関する情報を提供することがあります。オラクル社およびその関連会社は、第三者のコンテンツ、製品、サービスに関して一切の責任を負わず、いかなる保証もいたしません。オラクル社およびその関連会社は、第三者のコンテンツ、製品、サービスへのアクセスまたは使用によって損失、費用、あるいは損害が発生しても一切の責任を負いかねます。

目次

図一覧

表一覧

タイトルおよび著作権情報

はじめに

- 対象読者

- ドキュメントのアクセシビリティについて

- 関連ドキュメント

- 表記規則

このマニュアルに記載されている新機能

- Oracle Database 11g リリース2(11.2)の新機能

- Oracle Database 11gリリース1(11.1)の新機能

1 概要

- 1.1 情報統合の課題

- 1.2 同期的な情報統合へのOracleの対処方法

- 1.3 Oracleによる同期的な情報統合ソリューションのメリット

- 1.3.1 リモート・データに透過的にアクセス可能

- 1.3.2 不要なデータ複製の排除

- 1.3.3 SQL文で複数の異なるデータベースに問合せ可能

- 1.3.4 Oracleのアプリケーション開発ツールおよびエンド・ユーザー・ツールが使用可能

- 1.3.5 ユーザーは独自言語によりリモート・データベースとの通信が可能

2 異機種間サービス・コンポーネントの役割

- 2.1 異機種間接続プロセスのアーキテクチャ

- 2.2 異機種間サービス・エージェント

- 2.3 異機種間サービス・エージェントのタイプ

- 2.3.1 Oracle Database Gateway

- 2.3.2 Oracle Database Gateway for ODBCエージェント

- 2.4 異機種間サービス・コンポーネント

- 2.4.1 トランザクション・サービス

- 2.4.2 SQLサービス

- 2.5 異機種間サービス構成情報

- 2.5.1 データ・ディクショナリ変換ビュー

- 2.5.2 異機種間サービスの初期化パラメータ

- 2.5.3 機能

- 2.6 異機種間サービスのデータ・ディクショナリ

- 2.6.1 クラスとインスタンス

- 2.6.2 データ・ディクショナリ・ビュー

- 2.7 ゲートウェイのプロセス・フロー

3 Oracle Database Gatewayの機能

- 3.1 SQLとPL/SQLのサポート

- 3.2 異機種間レプリケーション

- 3.3 パススルーSQL

- 3.3.1 DBMS_HS_PASSTHROUGHパッケージの使用

- 3.3.2 パススルーSQLの使用による影響の検討

- 3.3.3 パススルーSQL文の実行

- 3.3.3.1 非問合せの実行

- 3.3.3.1.1 バインド変数の使用: 概要

- 3.3.3.1.2 INバインド変数の使用

- 3.3.3.1.3 OUTバインド変数の使用

- 3.3.3.1.4 IN OUTバインド変数の使用

- 3.3.3.2 問合せの実行

- 3.4 結果セットのサポート

- 3.4.1 Oracle以外のシステムでの結果セットのサポート

- 3.4.2 異機種間サービスでの結果セットのサポート

- 3.4.2.1 結果セット: カーソル・モード

- 3.4.2.2 結果セット: 逐次モード

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

- 3.6 日時データ型

- 3.7 2フェーズ・コミット・プロトコル

- 3.8 ピース単位のLONGデータ型

- 3.9 SQL*PlusのDESCRIBEコマンド

- 3.10 分散環境におけるSQLの制約

- 3.10.1 リモート参照と異機種間参照

- 3.10.2 重要な制限事項

- 3.11 Oracleのオプティマイザと異機種間サービス

- 3.11.1 例: 索引統計と表統計の使用

- 3.11.2 例: リモート結合の最適化

- 3.11.3 Oracle以外のアクセスに対するオプティマイザの制限

4 異機種間サービス・エージェントの使用

- 4.1 初期化パラメータ

- 4.1.1 初期化パラメータの暗号化

- 4.1.1.1 dg4pwdユーティリティの使用

- 4.1.2 ゲートウェイ初期化パラメータ

- 4.2 バルク・フェッチを使用したデータ転送の最適化

- 4.2.1 OCI、Oracleプリコンパイラまたは他のツールを使用した配列フェッチ

- 4.2.2 Oracle Databaseとエージェント間の配列フェッチの制御

- 4.2.3 エージェントとOracle以外のシステム間の配列フェッチの制御

- 4.2.4 配列フェッチの再ブロック化の制御

- 4.3 パラレル・ロードを使用したデータ・ロードの最適化

- 4.4 エージェントの登録

- 4.4.1 エージェント自動登録の有効化

- 4.4.1.1 エージェント自動登録を使用した構成不一致の回避

- 4.4.1.2 エージェント自動登録の概要

- 4.4.1.2.1 FDS_CLASSおよびFDS_CLASS_VERSION

- 4.4.1.2.2 FDS_INST_NAME

- 4.4.1.3 HS_AUTOREGISTERの指定

- 4.4.2 エージェント自動登録の無効化

- 4.5 Oracleデータベース・サーバーのSQL構文の処理

- 4.5.1 リモート・マップ文に対するデータ型チェックのサポート

- 4.6 Oracle以外のデータベースに対するユーザー定義関数の実行

- 4.7 シノニムの使用

- 4.7.1 分散問合せの例

- 4.8 Oracleデータベース・サーバーからOracle以外のデータベース・システムへのデータのコピー

- 4.9 Oracle以外のデータベース・システムからOracleデータベース・サーバーへのデータのコピー

- 4.10 異機種間サービスのデータ・ディクショナリ・ビューの使用

- 4.10.1 ビューのタイプ

- 4.10.2 データ・ディクショナリ情報のソース

- 4.10.3 汎用ビューの使用

- 4.10.4 トランザクション・サービス・ビューの使用

- 4.10.5 SQLサービス・ビューの使用

- 4.10.5.1 機能と変換に関するビューの使用

- 4.10.5.2 データ・ディクショナリ変換に関するビューの使用

- 4.11 異機種間サービスの動的パフォーマンス・ビューの使用

- 4.11.1 ホストで実行されているエージェントの判別: V$HS_AGENTビュー

- 4.11.2 オープン状態の異機種間サービス・セッションの判別: V$HS_SESSIONビュー

- 4.11.3 異機種間サービスのパラメータの判別: V$HS_PARAMETERビュー

5 パフォーマンスに関する推奨事項

- 5.1 異機種間の分散SQL文の最適化

- 5.2 分散問合せのパフォーマンスの最適化

索引

図一覧

- 2-1 Oracleの異機種間接続プロセスのアーキテクチャ

- 2-2 Oracle以外の複数インスタンスへのアクセス

- 2-3 ゲートウェイのプロセス・フロー

- 3-1 非問合せ用パススルーSQLのフロー図

- 3-2 問合せ用パススルーSQL

- 4-1 データ転送の最適化

表一覧

- 4-1 異機種間サービスのデータ・ディクショナリ・ビュー

- 4-2 V$HS_AGENTビューの重要な列

- 4-3 V$HS_SESSIONビューの重要な列

- 4-4 V$HS_SESSIONビューの重要な列

はじめに

このマニュアルでは、異機種間環境での情報統合に対するOracleのアプローチについて説明します。特にOracle Database Gatewayについて説明します。

内容は次のとおりです。

- 対象読者

- ドキュメントのアクセシビリティについて

- 関連ドキュメント

- 表記規則

対象読者

このマニュアルは次のユーザーを対象としています。

- OracleからOracle以外へのデータベース・リンクを含む分散データベース・システムを管理するデータベース管理者

- Oracleデータベースの異機種間接続機能を使用するアプリケーション開発者

- 異機種間接続のためのOracleのアーキテクチャやその方法の概要を理解しようとする読者

このマニュアルを使用するには、リレーショナル・データベースの概念と基本的なデータベースまたはアプリケーションの管理についての知識が必要です。また、データベース管理者がOracleソフトウェアを実行するオペレーティング・システム環境をよく理解している必要があります。

ドキュメントのアクセシビリティについて

オラクル社は、障害のあるお客様にもオラクル社の製品、サービスおよびサポート・ドキュメントを簡単にご利用いただけることを目標としています。オラクル社のドキュメントには、ユーザーが障害支援技術を使用して情報を利用できる機能が組み込まれています。HTML形式のドキュメントで用意されており、障害のあるお客様が簡単にアクセスできるようにマークアップされています。標準規格は改善されつつあります。オラクル社はドキュメントをすべてのお客様がご利用できるように、市場をリードする他の技術ベンダーと積極的に連携して技術的な問題に対応しています。オラクル社のアクセシビリティについての詳細情報は、Oracle Accessibility ProgramのWebサイトhttp://www.oracle.com/accessibility/を参照してください。

ドキュメント内のサンプル・コードのアクセシビリティについて

スクリーン・リーダーは、ドキュメント内のサンプル・コードを正確に読めない場合があります。コード表記規則では閉じ括弧だけを行に記述する必要があります。しかし、一部のスクリーン・リーダーは括弧だけの行を読まない場合があります。

外部Webサイトのドキュメントのアクセシビリティについて

このドキュメントにはオラクル社およびその関連会社が所有または管理しないWebサイトへのリンクが含まれている場合があります。オラクル社およびその関連会社は、それらのWebサイトのアクセシビリティに関しての評価や言及は行っておりません。

聴覚に障害があるお客様のOracleサポート・サービスへのアクセス

Oracleサポート・サービス に連絡するために、電気通信リレー・サービス(TRS)を使用して、1.800.223.1711でOracle Supportに電話してください。Oracle Support Servicesのエンジニアは、技術的な問題を処理し、Oracleサービス・リクエスト処理に応じてカスタマ・サポートを提供します。TRSの詳細については、http://www.fcc.gov/cgb/consumerfacts/trs.htmlを参照し、電話番号の一覧については、http://www.fcc.gov/cgb/dro/trsphonebk.htmlを参照してください。

関連ドキュメント

詳細は、次を参照してください。

- 『Oracle Database概要』

- 『Oracle Database管理者ガイド』

- 『Oracle Databaseアドバンスト・アプリケーション開発者ガイド』

このガイドでは、サンプル・スキーマを例として多用していますが、これらのサンプル・スキーマは、Oracle Databaseのインストール時に「基本インストール」オプションを選択した場合に、デフォルトでインストールされています。これらのスキーマの作成方法および使用方法については、『Oracle Databaseサンプル・スキーマ』を参照してください。

表記規則

このマニュアルでは次の表記規則を使用します。

規則

意味

太字

太字は、操作に関連するGraphical User Interface要素、または本文中で定義されている用語および用語集に記載されている用語を示します。

イタリック体

イタリックは、ユーザーが特定の値を指定するプレースホルダ変数を示します。

固定幅フォント

固定幅フォントは、段落内のコマンド、URL、サンプル内のコード、画面に表示されるテキスト、または入力するテキストを示します。

このマニュアルに記載されている新機能

この章では、Oracle Database 11gリリース2 (11.2)の新機能と追加情報の参照先について説明します。現在のリリースへ移行するユーザーのため、前のリリースの新機能の説明が残されています。

次の各項では、このマニュアルに記載されている新機能について説明します。

- Oracle Database 11g リリース2(11.2)の新機能

- Oracle Database 11gリリース1(11.1)の新機能

Oracle Database 11g リリース2(11.2)の新機能

『Oracle Database Heterogeneous Connectivityユーザーズ・ガイド』に記載されているOracle Database 11gリリース2 (11.2)の新機能は次のとおりです。

- ゲートウェイのCHARセマンティクス
この機能により、HSベース・ゲートウェイで、必要に応じてCHARセマンティクス・モードで実行できるようになります。この新しい機能は、常にOracle以外のデータベース列をCHAR(n BYTE)として記述するのではなく、CHAR(n CHAR)およびVARCHAR(n CHAR)として記述します。概念は、Oracle Database CHARセマンティクスと同様です。

- マルチバイト文字セットの比率の抑制
この機能は、必要に応じてマルチバイト文字セット(たとえば、US7ASCIIからAL32UTF8またはKO16MSWIN949からKO16KSC5601)を含むOracle以外のデータベースから比率が拡張されるのを抑制します。デフォルトでは、Oracle Gatewayは、データが切り捨てられたり、不十分なバッファ・サイズにならないように最低比率を想定します。

- IPv6
このリリースでは、Oracle DatabaseおよびOracle Database Gateway間のIPv6を完全にサポートしています。一部のゲートウェイの場合、IPv6はOracle Database GatewayとOracle以外のターゲット間でもサポートされています。

- ゲートウェイ・アイドル・タイムアウト
このリリースでは、ゲートウェイでセッション・アイドル・タイムアウト制限を指定できます。ゲートウェイ・セッションは、指定された時間制限を超えてアイドル状態になると、保留中の更新をロールバックして自動的に終了します(ゲートウェイに適切なロールバック機能がある場合)。

関連項目:
詳細は、個別のゲートウェイのOracleドキュメントを参照してください

Oracle Database 11gリリース1(11.1)の新機能

『Oracle Database Heterogeneous Connectivityユーザーズ・ガイド』に記載されているOracle Database 11gリリース1 (11.1)の新機能は次のとおりです。

- パラレル・データ取得
異機種間サービス・エージェントのアーキテクチャは、Oracle以外のリモート・データベースからデータをパラレル取得できるよう、強化されました。この機能で、データ取得およびロードの経過時間が改善されます。

この機能には、新しいDBMS_HS_PARALLELパッケージが含まれています。このパッケージでは、4つの新しいプロシージャが導入されています。

- LOAD_TABLE
このプロシージャは、リモートの表からローカルのOracle表にデータを並列にロードします。ローカルのOracle表が存在しない場合は、自動的に作成されます。

- CREATE_TABLE_TEMPLATE
このプロシージャはリモート表から集めた情報に基づき、CREATE TABLEテンプレートを作成します。この情報を使用すると、最適なOracleのCREATE TABLE句を追加できます。

- CREATE_OR_REPLACE_VIEW
このプロシージャは、リモート表からデータをパラレル取得するために参照される、読取り専用のビューを作成(または置換)します。

- DROP_VIEW
このプロシージャは、CREATE_OR_REPLACE_VIEWプロシージャによって作成されたビューおよび内部オブジェクトを削除します。CREATE_OR_REPLACE_VIEWプロシージャによってビューが作成されていない場合は、エラー・メッセージが戻されます。

関連項目:
『Oracle Database PL/SQLパッケージ・プロシージャおよびタイプ・リファレンス』

- オプティマイザ・インタフェースの改善
異機種間サービスの統計インタフェースが強化され、リモートのOracleデータベースおよびエージェントを扱う場合、Oracleオプティマイザは分散SQLと同等の実行計画が得られます。この機能により、経過時間がゲートウェイ間で分散SQLと同等以上となります。

1 概要

この章では、異機種間環境における運用上の課題について説明します。オラクル社はこの課題を認識し、企業における異機種間環境での運用を容易にする、同期ソリューションと非同期ソリューションの両方を提供しています。このマニュアルでは、同期ソリューションであるOracle Database Gatewayについて説明します。

この章には、次の項目が含まれます。

- 情報統合の課題

- 同期的な情報統合へのOracleの対処方法

- Oracleによる同期的な情報統合ソリューションのメリット

関連項目:
特定のOracle Database Gatewayの詳細は、そのゲートウェイのOracleマニュアルを参照してください。

1.1 情報統合の課題

情報の統合は、多数の組織に影響のある課題です。それらの組織では、複数の異なるデータベース・システムを実行している可能性があるためです。これらの各システムにはデータが格納されており、データに対して一連のアプリケーションが実行されます。このデータはファイル・システム上では単なるビットやバイトであり、それをビジネス情報に変換できるのはデータベースのみです。すべてのビジネス情報を統合し連結することで、組織はビジネス情報本来の相乗効果を活用できます。

通常、すべてのデータを1つのデータベース・システムに連結するのは困難です。主として、あるデータベースに対して実行されるアプリケーションの多くには、他のデータベースに対して実行される同等のアプリケーションがない場合があるためです。1つに連結されたデータベース・システムへのデータの移行が実現可能になるまでは、異機種間データベース・システムを共存させる必要があります。

相互運用性が実現可能になるまでに克服すべき問題が複数あります。アクセスのためのインタフェース、データ型、各機能、およびエラーの処理方法は、データベース・システムごとに異なる場合があります。あるリレーショナル・データベースから他のリレーショナル・データベースへのアクセスを試みる場合でさえ、大きな相違があります。このような状況下でのデータベースの共通機能には、SQLを介したデータ・アクセス、2フェーズ・コミット・プロトコルおよび類似のデータ型などがあります。

大きな違いもあります。トランザクションのセマンティクスが異なるように、SQL言語も異なる場合があります。一部のデータ型は、あるデータベースに存在する一方、他のデータベースには存在しない場合があります。最も重要な相違点が存在するのは、2つのデータベースのデータ・ディクショナリです。ほとんどのデータ・ディクショナリには類似する情報が含まれていますが、情報の構造はそれぞれのデータ・ディクショナリで異なります。この問題を克服するには複数の方法があります。このマニュアルでは、複数のソースの情報に同期的にアクセスするためのOracleのアプローチについて説明します。

1.2 同期的な情報統合へのOracleの対処方法

クライアント・プログラムが複数のOracleデータベースのデータにアクセスしたりデータを変更したりする必要がある場合、各データベースとの接続を開く必要があります。ただし、このアプローチには次のようなデメリットがあります。

- 複数のデータベースのデータを結合するには、そのためのロジックがクライアントにあることが必要です。

- データ整合性を保証するには、トランザクション調整ロジックがクライアントにあることが必要です。

Oracleでは、分散処理と呼ばれるもう1つのアプローチも提供され、ここではクライアントが1つのOracleデータベースに接続し、データの結合とトランザクション調整の負荷をそのデータベースに移します。クライアント・プログラムが接続するデータベースは、ローカル・データベースと呼ばれます。これ以外のすべてのデータベースはリモート・データベースです。クライアント・プログラムは、データベース・リンクを使用して任意のリモート・データベースのオブジェクトにアクセスできます。Oracle問合せプロセッサが結合を処理し、トランザクション・エンジンがトランザクション調整を行います。

異機種間接続に関するOracleの問題解決アプローチは、前述の使用例でOracle以外のシステムをリモート・ノードの1つとして使用可能にすることです。Oracle以外のリモート・システムは、リモートのOracleシステムと同様に機能します。Oracle以外のシステムは、Oracleシステムと同じSQL言語と同じデータ・ディクショナリ構造を使用します。Oracle以外のシステムへのアクセスは、異機種間サービスによって行われます。

異機種間サービス・コンポーネントにより実行される処理のほとんどの部分は、エンド・ユーザーに対して完全に透過的です。少数の例外(後述)はありますが、Oracle以外のシステムにも、Oracleシステムの場合と同じ方法でアクセスできます。異機種間サービス・コンポーネントは、OracleからOracle以外のデータベースへのアクセスを実装する基盤として使用されます。

Oracle Database Gatewayは、Oracle Databaseの異機種間サービス・コンポーネントとともに機能し、そのOracle Database Gatewayが対応しているOracle以外の特定の市販システムにアクセスします。たとえば、Sybaseデータベースにアクセスするには、Oracle Database Gateway for Sybaseを使用します。また、ODBCドライバを使用してOracle以外のデータベースにアクセスできるようにするOracle Database Gateway for ODBCもあります。

Oracle Database Gatewayを使用すると、データの位置や格納方法を知らなくても、分散データベース・システム上のあらゆる場所にあるデータにアクセスできます。

注意:
オラクル社は、Oracle Database Gateway for ODBCに必要なODBCドライバを提供していません。ドライバは他のベンダーから入手する必要があります。

また、オラクル社では非同期情報統合製品も提供しています。これらの製品はこのマニュアルでは説明しません。製品の概略のみ次に示します。

- Oracle Streams
Oracle Streamsを使用すると、単一のデータベース内または複数のデータベース間で単一のデータ・ストリームまたはキューにより、データ、トランザクションおよびイベントを伝播できます。Oracle Streamsでは、データに対する変更を取得、伝播および適用できるのみでなく、データ構造の変更(DDL)とユーザー定義イベントも処理できます。変更はそのままの形で取得して適用する方法と、取得、伝播および適用処理の任意の時点で変換する方法があります。

- メッセージ・ゲートウェイ
メッセージ・ゲートウェイにより、Oracle DatabaseとOracle以外のメッセージ・システム間の通信が可能になります。

- オープン・システム・インタフェース
オラクル社はOCI、JDBCおよびODBCなど、多数のオープン・インタフェースを提供しており、顧客はサード・パーティ・アプリケーションを使用するか独自のクライアント・アプリケーションを記述して、Oracle Databaseにアクセスできます。

1.3 Oracleによる同期的な情報統合ソリューションのメリット

Oracle Database Gatewayの処理能力の大部分はデータベースに統合されます。これにより効率的な情報統合ソリューションが提供され、Oracleデータベースの処理能力と機能を全面的に活用できます。これには、強力なSQL解析や分散最適化などの機能が含まれます。

以降の各項では、異機種間環境におけるOracleの課題解決アプローチのメリットについて説明します。

- リモート・データに透過的にアクセス可能

- 不要なデータ複製の排除

- SQL文で複数の異なるデータベースに問合せ可能

- Oracleのアプリケーション開発ツールおよびエンド・ユーザー・ツールが使用可能

- ユーザーは独自言語によりリモート・データベースとの通信が可能

1.3.1 リモート・データに透過的にアクセス可能

Oracle Database Gatewayには、Oracle環境からOracle以外のデータベースのデータに透過的にアクセスする機能が用意されています。Oracle以外のデータベース内のオブジェクトについてシノニムを作成して、物理位置を指定せずに参照できます。この透過性により、アプリケーション開発者がアプリケーションをカスタマイズしてOracle以外の他のシステムのデータにアクセスできるようにする必要はなくなるため、開発の労力は減り、アプリケーションの移動性は高まります。

アプリケーションで(アプリケーション側処理への集中を招く可能性のある)システム固有のインタフェースを使用してOracle以外のシステムと相互操作する必要がなく、OracleシステムとOracle以外のシステムの両方に使用可能な一貫したOracleインタフェースに基づくアプリケーションを作成できます。

1.3.2 不要なデータ複製の排除

Oracle Database Gatewayにより、アプリケーションからOracle以外のデータベースのデータに直接アクセスできます。これにより、大量のデータを異なる場所にアップロードおよびダウンロードする必要がなくなるため、データ複製が減少し、ディスク記憶領域の節約になります。大量のデータのアップロードおよびダウンロードが行われないため、同期化されていないデータや一貫性のないデータに伴うリスクが低減します。

1.3.3 SQL文で複数の異なるデータベースに問合せ可能

Oracleデータベースは、複数の異なるデータベースに格納されたデータを問い合せるSQL文を受け入れます。異機種間サービス・コンポーネントがインストールされているOracleデータベースでは、SQL文が処理されて他のOracleデータベースには直接、Oracle以外のデータベースにはゲートウェイを介して、該当するSQLコードが渡されます。Oracleデータベースにより結果が結合されてクライアントに戻されます。

1.3.4 Oracleのアプリケーション開発ツールおよびエンド・ユーザー・ツールが使用可能

Oracle Database Gatewayにより、Oracleのデータベースおよびアプリケーション開発ツールの範囲が拡張されます。Oracleには、プロトタイプ、開発およびメンテナンス時間の短縮によりアプリケーション開発とユーザーの生産性を高めるツールが用意されています。

Oracle以外のデータベースに格納されているデータにアクセスするために、新規ツールを開発したり他のツールの使用方法を学習する必要はありません。かわりに、1セットのOracleツールを使用してOracleデータとOracle以外のデータにアクセスできます。これらのツールは、Oracle Netを介してOracleデータベースに接続されているリモート・システム上で実行できます。

1.3.5 ユーザーは独自言語によりリモート・データベースとの通信が可能

Oracleでは、SQL文を使用してOracle以外のシステムに透過的にアクセスできます。ただし、Oracle以外のシステムにアクセスするために、そのシステムのSQLの使用が必要になる場合があります。その場合は、異機種間サービスのパススルー機能を使用すると、Oracleの問合せプロセッサを迂回して、リモート・データベースと、そのデータベース独自の言語で通信できます。

2 異機種間サービス・コンポーネントの役割

異機種間環境で運用するためのオラクル社の同期ソリューションは、Oracle Database Gatewayです。これらのソリューションをサポートするためのOracle Databaseの共通コンポーネントは、異機種間サービスです。この章では、異機種間サービス・コンポーネントのアーキテクチャと機能、およびOracle Database Gatewayとの対話について説明します。

この章には、次の項が含まれます。

- 異機種間接続プロセスのアーキテクチャ

- 異機種間サービス・エージェント

- 異機種間サービス・エージェントのタイプ

- 異機種間サービス・コンポーネント

- 異機種間サービス構成情報

- 異機種間サービスのデータ・ディクショナリ

- ゲートウェイのプロセス・フロー

2.1 異機種間接続プロセスのアーキテクチャ

図2-1に、Oracleの異機種間接続プロセスのアーキテクチャの概要を示します。

図2-1 Oracleの異機種間接続プロセスのアーキテクチャ

Oracle Databaseの異機種間サービス・コンポーネントは異機種間サービス・エージェント・プロセスと通信し、異機種間サービス・エージェント・プロセスはOracle以外のシステムと通信します。コードは、概念上次の3つの部分に分けることができます。

- Oracle Databaseの異機種間サービス・コンポーネント。
このモジュールが、異機種間接続関連のほとんどの処理を実行します。

- エージェントの汎用コード
これは、エージェント内にある、すべての異機種間サービス製品に対する汎用コードです。このコードはデータベースと通信し、マルチスレッド・サポートを提供します。

- ドライバ
このモジュールはOracle以外のシステムと通信します。これは異機種間サービスからのコールを、Oracle以外のシステムのネイティブAPIにマッピングするために使用されます。また、これはOracleシステムに固有ではありません。

2.2 異機種間サービス・エージェント

異機種間サービス・エージェントとは、Oracle DatabaseでOracle以外のシステムへの接続に使用されるプロセスです。Oracle以外のシステムにアクセスするエージェント・プロセスを、ゲートウェイと呼びます。すべてのゲートウェイへのアクセスはOracle Databaseの異機種間サービス・コンポーネントを経由し、すべてのゲートウェイに同じエージェント汎用コードが含まれます。各ゲートウェイには異なるドライバがリンクされており、異機種間サービスがOracle以外のシステムのクライアントAPIにマップされます。

エージェント・プロセスは2つのコンポーネントで構成されます。一方はエージェント汎用コード、他方はOracle以外のシステム固有のドライバです。エージェントは、主としてOracle Databaseをサード・パーティ・コードから分離するために存在します。プロセスがOracle以外のシステムにアクセスするには、そのシステムのクライアント・ライブラリをリンクする必要があります。エージェント・プロセスがなければ、これらのライブラリをOracleデータベースに直接リンクする必要があり、このコードに問題があるとOracle Databaseで障害が発生する可能性があります。エージェント・プロセスによって、Oracle Databaseがサード・パーティ・コードの問題から切り離されます。致命的なエラーがサード・パーティ・コードで発生した場合でも、エージェント・プロセスのみが終了します。

エージェントは、次のいずれかに配置できます。

- Oracle以外のシステムと同じコンピュータ

- Oracle Databaseと同じコンピュータ

- 前述のどちらでもないコンピュータ

エージェント・プロセスは、ユーザー・セッションがデータベース・リンクを介してOracle以外のシステムにアクセスすると起動されます。このような接続は、Oracleのリモート・データ・アクセス・ソフトウェアOracle Net Servicesを使用して確立されます。このソフトウェアはクライアント/サーバーとサーバー/サーバー両方の通信に対応しています。エージェント・プロセスは、ユーザー・セッションが切断されるかデータベース・リンクが明示的にクローズされるまで実行を続けます。

マルチスレッド・エージェントの動作はそれぞれ異なります。この種のエージェントは、Oracle Net Servicesにより自動的に起動されるのではなく、データベース管理者が明示的に起動および停止する必要があります。

2.3 異機種間サービス・エージェントのタイプ

異機種間サービス・エージェントには、次の2つのタイプがあります。

- Oracle Database Gateway

- Oracle Database Gateway for ODBCエージェント

2.3.1 Oracle Database Gateways

Oracle Database Gatewayは、Oracle以外の特定システムへのアクセス用に設計されたゲートウェイです。Oracle以外のいくつかの市販システムにアクセスするためにゲートウェイが提供されています。たとえば、Sybaseデータベースにアクセスするように設計されたOracle Database Gateway for Sybaseです。

Oracle Database Gatewayを使用すると、データの位置や格納方法を知らなくても、分散データベース・システム上のあらゆる場所にあるデータにアクセスできます。Oracle Databaseから問合せ結果が戻される場合は、取得元のデータ・ストアがすべてOracle分散データベースのリモート・インスタンスに常駐する場合と同様に表示されます。

2.3.2 Oracle Database Gateway for ODBCエージェント

様々なOracle以外のデータベース・システム用のOracle Database Gatewayに加えて、Oracle Database Gateway for ODBCエージェントがあります。このエージェントには汎用コードのみが含まれており、顧客は必要なドライバを提供する必要があります。Oracle Database Gateway for ODBCにより、ODBCドライバを使用して、ODBCインタフェースを持つOracle以外のシステムにアクセスできます。

Oracle Database Gateway for ODBCを使用してOracle以外の特定システムにアクセスするには、そのシステムに対してODBCドライバを構成する必要があります。Oracleではこれらのドライバを提供していません。ただし、Oracle以外のシステムでODBCプロトコルがサポートされていれば、ODBCドライバを使用してアクセス可能な任意のOracle以外のシステムに、Oracle Database Gateway for ODBCを使用してアクセスできます。

Oracle Database Gateway for ODBCにはいくつかの制限があります。特に、特定のターゲットと比較した場合、機能とパフォーマンスが制限されます。

2.4 異機種間サービス・コンポーネント

この項では、Oracle Databaseの異機種間サービスのコンポーネントについて説明します。次のコンポーネントがあります。

- トランザクション・サービス

- SQLサービス

2.4.1 トランザクション・サービス

異機種間サービス・コンポーネントのトランザクション・サービス・コンポーネントは、Oracle以外のシステムとOracle Databaseのトランザクションやセッションとの統合を可能にします。Oracleユーザー・セッションでデータベース・リンクを使用してOracle以外のシステムに初めてアクセスするときに、Oracle以外のシステムで認証済セッションを透過的に設定します。Oracleユーザー・セッションの終了時には、Oracle以外のデータベース・システムでの認証済セッションがクローズされます。

また、Oracle以外の1つ以上のシステムがOracle分散トランザクションに関連づけられます。アプリケーションがトランザクションをコミットすると、Oracleの2フェーズ・コミット・プロトコルがOracle以外のデータベース・システムにアクセスし、分散トランザクションを透過的に調整します。Oracle以外のシステムがOracleの2フェーズ・コミット・プロトコルを全面的にサポートしていない場合にも、Oracleはそのシステムとの分散トランザクションを(制限付きで)サポートできます。

2.4.2 SQLサービス

Structured Query Language (SQL)サービスは、すべてのSQL関連操作の処理を受け持ちます。SQLサービスにより、次のような処理が実行されます。

- Oracle内部のSQL関連コールの異機種間サービス・ドライバ・アプリケーション・プログラム・インタフェース(API)へのマッピング。その後、このAPIはドライバによってOracle以外のシステムのクライアントAPIにマッピングされます。

- SQL文をOracleのSQL言語からOracle以外のシステムのSQL言語に変換します。

- Oracleデータ・ディクショナリ表を参照する問合せを、Oracle以外のシステムのデータ・ディクショナリから必要な情報を抽出する問合せに変換します。

- データをOracle以外のシステムのデータ型とOracleのデータ型の間で変換します。

- 必要なデータを取得するために複数の問合せを発行し、必要な結果を得るために後処理を実行し、Oracle以外のシステムに含まれていない機能を補います。

2.5 異機種間サービス構成データ

異機種間サービス・コンポーネントは、汎用コードで構成されており、様々なOracle以外のシステムで機能するように構成する必要があります。構成情報は、各ゲートウェイのドライバ・モジュールに格納されます。この情報はゲートウェイへの接続が確立された直後にサーバーにアップロードされます。構成情報には次のものが含まれています。

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

- 異機種間サービスの初期化パラメータ

- 機能

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

データ・ディクショナリ変換は、Oracle以外のデータ・ディクショナリ表のビューです。このビューにより、異機種間サービスでは、Oracleデータ・ディクショナリ表への参照を、Oracle以外のシステムのデータ・ディクショナリから等価の情報を取得可能な問合せに変換できます。

2.5.2 異機種間サービスの初期化パラメータ

異機種間サービスの初期化パラメータには、次の2つの機能があります。

- ゲートウェイを詳細にチューニングし、ゲートウェイおよび異機種間サービス・コンポーネントのパフォーマンスとメモリー使用率を最適化する手段をユーザーに提供します。

- ユーザーはゲートウェイ(および異機種間サービス)に対して、Oracle以外のシステムの構成(そのシステムの実行に使用される言語など)を通知できます。Oracle以外のシステムの構成可能なプロパティに関する情報を異機種間サービスに提供できます。

V$HS_PARAMETERビューを問い合せると、セッションの異機種間サービスの初期化パラメータを確認できます。ユーザーは、初期化パラメータをゲートウェイ初期化ファイル内で設定できます。

2.5.3 機能

機能は異機種間サービスに対して、Oracle以外のシステムの制限事項(サポートされているSQL文のタイプなど)と、Oracleのデータ型とSQL式からOracle以外のシステムのデータ型および式へのマッピングを指示します。つまり、異機種間サービスに対して、Oracle以外のシステムの構成不可のプロパティを指示します。ユーザーは機能を変更できません。

2.6 異機種間サービスのデータ・ディクショナリ

構成情報は、エージェントへの接続が確立された直後にエージェントから異機種間サービス・コンポーネントにアップロードされます。構成情報は異機種間サービスのデータ・ディクショナリ表に格納されます。エージェントに変更(パッチの適用、エージェントの新バージョンへのアップグレードなど)がないかぎり、さらにアップロードされることはありません。

この項では、次の項目について説明します。

- クラスとインスタンス

- データ・ディクショナリ・ビュー

2.6.1 クラスとインスタンス

異機種間サービスを使用すると、1つのOracleデータベースから複数のOracle以外のシステムにアクセスできます。これを図2-2に示します。ここでは、Oracle以外の2つのシステムにアクセスしています。

図2-2 Oracle以外の複数インスタンスへのアクセス

両方のエージェントにより構成情報がアップロードされ、Oracle Databaseに異機種間サービスのデータ・ディクショナリ情報の一部として格納されます。

異機種間サービスのデータ・ディクショナリに、インスタンスごとの別個の定義を格納すると、データ・ディクショナリ情報を1つの粒度で格納できますが、それにより冗長なデータ・ディクショナリ情報が必要以上に大量になる可能性があります。この問題を回避するために、Oracleでは異機種間サービスのデータ・ディクショナリはクラスおよびインスタンスという2つの粒度で編成されます。

クラスは、Oracle以外の特定のシステム・タイプに関係します。たとえば、Oracle DatabaseでSybaseデータベース・システムのクラスにアクセスできます。インスタンスでは、クラス内での特殊性が定義されます。たとえば、Sybaseデータベース・システム内の複数の異なるインスタンスにアクセスできます。各クラスの定義(粒度1)は、そのクラスの全インスタンス(粒度2)により共有されます。さらに、インスタンス情報はクラス情報より優先され、クラス情報はサーバー指定のデフォルトより優先されます。

たとえば、Oracle DatabaseがSybaseの3つのインスタンスおよびIngres IIの2つのインスタンスにアクセスするとします。SybaseとIngres IIにはそれぞれ独自のコードがあり、Oracle Databaseからアクセスするには別個のクラス定義が必要です。そのため、異機種間サービスのデータ・ディクショナリには、Sybase用とIngres II用に1つずつ合計2つのクラス定義と、Oracle Databaseがアクセスするインスタンスごとに1つずつ、合計5つのインスタンス定義が含まれます。

インスタンス・レベルの機能とデータ・ディクショナリ情報はセッション固有であり、Oracle Databaseの異機種間サービスのデータ・ディクショナリには格納されないことに注意してください。ただし、インスタンス・レベルの初期化パラメータはデータベースに格納できます。

2.6.2 データ・ディクショナリ・ビュー

異機種間サービスのデータ・ディクショナリ・ビューには、次の種類の情報が含まれています。

- Oracleデータ・ディクショナリにアップロードされたインスタンスとクラスの名前

- 各クラスまたはインスタンスに対して定義済の機能(SQL変換など)

- 各クラスまたはインスタンスに対して定義済のデータ・ディクショナリ変換

- 各クラスまたはインスタンスに対して定義済の初期化パラメータ

Oracleデータ・ディクショナリからの情報には、固定ビューを使用してアクセスできます。各ビューは主に次の3タイプに分類されます。

- 汎用ビュー

- トランザクション・サービス用のビュー

- SQLサービス用のビュー

2.7 ゲートウェイのプロセス・フロー

図2-3に、典型的なゲートウェイのプロセス・フローを示します。各手順は、クライアント・アプリケーションがゲートウェイを介してOracle以外のデータベース・システムのデータベースに問い合せたときに発生するイベントの順序を示しています。

図2-3 ゲートウェイのプロセス・フロー

1. クライアント・アプリケーションは、Oracle Netを使用して問合せをOracle Databaseに送信します。

2. 異機種間サービスおよびゲートウェイは、SQL文をOracle以外のデータベース・システムで認識可能なSQL文に変換します。

3. Oracle Databaseが、Oracle Netを使用してゲートウェイに問合せを送信します。

4. セッションでの初めてのトランザクションの場合、ゲートウェイはOracle以外のデータベース・システムに、そのシステムで有効なユーザー名とパスワードを使用してログインします。

5. ゲートウェイがOracle以外のデータベース・システムのSQL文を使用してデータを取得します。

6. ゲートウェイが、取得されたデータをOracle Databaseと互換性のある形式に変換します。

7. ゲートウェイが、再びOracle Net Servicesを使用して問合せ結果をOracle Databaseに戻します。

8. Oracle Databaseが、Oracle Netを使用して問合せ結果をクライアント・アプリケーションに渡します。データベース・リンクは、ゲートウェイ・セッションが完了するか、データベース・リンクが明示的にクローズされるまでオープンされています。

3 Oracle Database Gatewayの機能

この章では、Oracle Database Gatewayの主要な機能について説明します。この章の内容は、次のとおりです。

- SQLとPL/SQLのサポート

- 異機種間レプリケーション

- パススルーSQL

- 結果セットのサポート

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

- 日時データ型

- 2フェーズ・コミット・プロトコル

- ピース単位のLONGデータ型

- SQL*PlusのDESCRIBEコマンド

- 分散環境におけるSQLの制約

- Oracleのオプティマイザと異機種間サービス

注意:
この章で説明する機能は、すべての異機種間サービスのゲートウェイで使用可能であるとはかぎりません。これらの機能に対する汎用サポート(異機種間サービスで提供)が必要であるのみでなく、そのドライバのサポートも追加する必要があります。ご使用のゲートウェイに特定の機能がサポートされているかどうかは、該当するゲートウェイのマニュアルを参照して判断してください。

3.1 SQLとPL/SQLのサポート

SQL文の変換とデータ型のマッピングは、機能に基づいて実行されます。PL/SQLコールは、Oracle以外のシステムのストアド・プロシージャにマップされます。SQL文に関してリモート・システムに機能がない場合は、単純な問合せが発行されるか、文が複数の問合せに分割されます。その後、Oracleデータベースでの後処理によって必要な結果が得られます。

異機種間サービスでは、ほとんどの場合はOracle以外のシステムをOracle分散セッションに取り込むことができますが、これにはいくつかの制限があります。一般的な制限事項を次に示します。

- SQL文のCONNECT BY句に対するサポートはありません。

- ROWIDのサポートには制限があります。詳細は、個々のゲートウェイのドキュメントを参照してください。Oracle Universal ROWIDデータ型は、異機種間サービスを使用するどのゲートウェイでもサポートされません。

- ラージ・オブジェクト(LOB)、抽象データ型(ADT)および参照データ型(REF)はサポートされません。

- リモート・パッケージはサポートされません。

- リモート・ストアド・プロシージャでは、REF CURSOR型のout引数は指定できますが、inまたはin-outオブジェクトは使用できません。

- Oracle異機種間サービス・エージェントでは、共有データベース・リンクはサポートされません。

注意:
各ゲートウェイには、前述の一般的な制限事項に加えて、付加的な制限事項が存在する場合があります。製品の制限事項の全リストは、個々のゲートウェイのマニュアルを参照してください。

3.2 異機種間レプリケーション

Oracle以外のシステムとOracle Databaseの間では、マテリアライズド・ビューを使用してデータをレプリケートできます。

注意:
OracleとOracle以外のデータベースの間で情報をレプリケートするには、Oracle Streamsと呼ばれる別の方法もあります。
Oracle Streamsの使用方法の詳細は、『Oracle Streams概要および管理』を参照してください。

マテリアライズド・ビューは、特定の時点でOracle以外のマスター・サイトの表からキャプチャされたデータをインスタンス化します。この時点はリフレッシュ操作によって定義され、リフレッシュ操作が、このデータをOracle Databaseにコピーし、Oracleシステム上のコピーをOracle以外のシステムのマスター・コピーと同期します。その後、マテリアライズド・データがOracle Databaseでビューとして使用できるようになります。

レプリケーション機能は、リフレッシュをスケジュールし、マテリアライズド・ビューを管理しやすいようにレプリケーション・グループに収集するためのメカニズムを提供します。リフレッシュ・グループにより、複数のマテリアライズド・ビューをシングル・オブジェクトと同様にリフレッシュできます。

異機種間レプリケーションのサポートは、必ずOracle間レプリケーション機能全体のサブセットに限定されます。

- プライマリ・サイトにすることができるのは、Oracle以外のシステムのみです。マテリアライズド・ビューはOracle Databaseにしか作成できないためです。

- マテリアライズド・ビューでは、完全リフレッシュを使用する必要があります。これは、高速リフレッシュを使用するには、Oracle以外のシステムでOracle固有の機能が必要になるためです。

- タイプによっては、Oracle以外のシステム上で表を参照する目的では作成できないマテリアライズド・ビューがあります。主キーと副問合せのマテリアライズド・ビューはサポートされますが、ROWIDとOBJECT IDのマテリアライズド・ビューはサポートされません。これは、ROWIDの書式と内容についてはSQL規格がなく、Oracle以外のシステムにはOracleオブジェクトが実装されていないためです。

Oracleの異機種間サービス機能を介したOracle以外のデータへのアクセスには、その他の制限が適用されます。次に最も重要な制限事項を示します。

- 固定ビューにマップされる表列のOracle以外のデータ型には、Oracleデータ型との互換性(つまりマッピング)が必要です。通常、このことは、ANSI SQL規格により定義されたデータ型について該当します。

- 副問合せのマテリアライズド・ビューでは、Oracle以外の個々のシステムにより制限される言語機能を使用できない場合があります。異機種間サービスは、多くのケースで、Oracle Database内で問合せを処理することでそのような言語機能をサポートします。場合によっては、異機種間サービスが問合せを実行するまで、Oracle以外のシステムに制限があることがわからないこともあります。

次の例に、Oracle以外のシステムからOracleデータ・ストアにデータをレプリケートする3つのマテリアライズド・ビューの基本設定と使用例を示します。

注意:
次の例で、remote_dbはOracle DatabaseからアクセスするOracle以外のシステムを指します。
これらの例を環境にあわせて変更してください。そのままの状態では実行しないでください。

例1: 異機種間レプリケーションに使用するマテリアライズド・ビューの作成

この例では、以降の例に使用する3つのマテリアライズド・ビューを作成します。

1. customer@remote_db表の主キーのマテリアライズド・ビューを作成します。

CREATE MATERIALIZED VIEW pk_mv REFRESH COMPLETE AS
SELECT * FROM customer@remote_db WHERE "zip" = 94555;

2. orders@remote_db表およびcustomer@remote_db表の副問合せのマテリアライズド・ビューを作成します。

CREATE MATERIALIZED VIEW sq_mv REFRESH COMPLETE AS
SELECT * FROM orders@remote_db o WHERE EXISTS
(SELECT c."c_id" FROM customer@remote_db c
WHERE c."zip" = 94555 and c."c_id"  = o."c_id" );

3. remote_db上の複数の表からのデータの複合マテリアライズド・ビューを作成します。

CREATE MATERIALIZED VIEW cx_mv
REFRESH COMPLETE AS
SELECT  c."c_id", o."o_id"
FROM customer@remote_db c,
orders@remote_db o,
order_line@remote_db ol
WHERE c."c_id" = o."c_id"
AND o."o_id" = ol."o_id";

例2: 異機種間レプリケーションに使用するリフレッシュ・グループの設定

BEGIN
dbms_refresh.make('refgroup1',
'pk_mv, sq_mv, cx_mv',
NULL, NULL);
END;
/

例3: 3つのマテリアライズド・ビューすべての強制リフレッシュ

BEGIN
dbms_refresh.refresh('refgroup1');
END;
/

関連項目:
マテリアライズド・ビューとレプリケーション機能の詳細は、『Oracle Databaseアドバンスト・レプリケーション』を参照してください。

3.3 パススルーSQL

パススルーSQL機能を使用すると、文を最初にOracle Databaseで解析せずに直接Oracle以外のシステムに送ることができます。この機能は、Oracle以外のシステムでOracleに等価文のない文での操作が見込まれる場合に役立ちます。

この項には、次の項目が含まれます。

- DBMS_HS_PASSTHROUGHパッケージの使用

- パススルーSQLの使用による影響の検討

- パススルーSQL文の実行

3.3.1 DBMS_HS_PASSTHROUGHパッケージの使用

PL/SQLのDBMS_HS_PASSTHROUGHパッケージを使用すると、Oracle以外のシステムで直接パススルーSQL文を実行できます。このパッケージで実行される文は、標準のSQL文と同じトランザクションで実行されます。

DBMS_HS_PASSTHROUGHパッケージは仮想パッケージです。概念上は、Oracle以外のシステムに常駐します。ただし、実際には、このパッケージのコールは異機種間サービスにより仲介され、1つ以上の異機種間サービス・コールにマップされます。次に、これらの異機種間サービス・コールは、ドライバによりOracle以外のシステムのAPIにマップされます。クライアント・アプリケーションは、Oracle以外のシステムのストアド・プロシージャをコールする場合と同じ方法で、データベース・リンクを介してパッケージ内のプロシージャをコールします。異機種間サービスにより実行される特殊処理は、ユーザーに対して透過的です。

関連項目:
このパッケージの詳細は、『Oracle Database PL/SQLパッケージ・プロシージャおよびタイプ・リファレンス』を参照してください。

3.3.2 パススルーSQLの使用による影響の検討

Oracle以外のシステムでトランザクションを暗黙的にコミットまたはロールバックするパススルーSQL文を実行すると、そのトランザクションに影響します。たとえば、一部のシステムでは、データ定義言語(DDL)文を含むトランザクションが暗黙的にコミットされます。Oracle Databaseは迂回されるため、トランザクションがOracle以外のシステムにコミットされたことを認識しません。そのため、Oracle Databaseではトランザクションがコミットされない間に、Oracle以外のシステムでデータがコミットされる可能性があります。

Oracle Databaseでトランザクションがロールバックされると、Oracle DatabaseとOracle以外のシステム間でデータに一貫性がなくなる可能性があります。このような状況では、グローバルなデータ非一貫性が発生します。

アプリケーションで通常のCOMMIT文を実行すれば、Oracle DatabaseはOracle以外のシステムと分散トランザクションを調整できることに注意してください。パススルー機能を使用して実行される文は、分散トランザクションの一部となります。

3.3.3 パススルーSQL文の実行

次の表に、DBMS_HS_PASSTHROUGHパッケージで提供されるファンクションとプロシージャを示します。これらを使用してパススルーSQL文を実行できます。

プロシージャ/ファンクション

説明

OPEN_CURSOR

カーソルのオープン。

CLOSE_CURSOR

カーソルのクローズ。

PARSE

文の解析。

BIND_VARIABLE

IN変数のバインド。

BIND_OUT_VARIABLE

OUT変数のバインド。

BIND_INOUT_VARIABLE

IN OUT変数のバインド。

EXECUTE_NON_QUERY

非問合せ文の実行。

EXECUTE_IMMEDIATE

バインド変数なしの非問合せ文の実行。

FETCH_ROW

問合せからの行のフェッチ。

GET_VALUE

SELECT文からの列値の取得、またはOUTバインド・パラメータの取得。

3.3.3.1 非問合せの実行

非問合せには、次の文および文のタイプが含まれます。

- INSERT

- UPDATE

- DELETE

- DDL

非問合せ文を実行するには、EXECUTE_IMMEDIATEファンクションを使用します。たとえば、データベース・リンクsalesdbを使用してアクセスできるOracle以外のシステムでDDL文を実行するには、次のように入力します。

DECLARE
num_rows INTEGER;

BEGIN
num_rows := DBMS_HS_PASSTHROUGH.EXECUTE_IMMEDIATE@salesdb
('CREATE TABLE dept1 (n SMALLINT, loc CHARACTER(10))');
END;

変数num_rowsには、実行された文によって影響を受ける行数が割り当てられます。DDL文の場合は、0(ゼロ)が戻されます。EXECUTE_IMMEDIATEファンクションでは問合せを実行できず、バインド変数を使用できないことに注意してください。

3.3.3.1.1 バインド変数の使用: 概要

バインド変数を使用すると、同じSQL文に様々な値を指定して複数回使用できるため、SQL文に必要な解析回数が減少します。たとえば、表に4行挿入する場合は、SQL文を1回解析し、行ごとにバインドして実行できます。1つのSQL文に0個以上のバインド変数を使用できます。

バインド変数を使用してパススルーSQL文を実行する手順は、次のとおりです。

1. カーソルをオープンします。

2. Oracle以外のシステムでSQL文を解析します。

3. 変数をバインドします。

4. Oracle以外のシステムでSQL文を実行します。

5. カーソルをクローズします。

図3-1に、バインド変数を使用した非問合せ実行のフロー図を示します。

図3-1 非問合せ用パススルーSQLフロー図

3.3.3.1.2 INバインド変数の使用

文でバインド変数を指定する方法は、Oracle以外のシステムの構文により決定されます。たとえば、Oracleシステムでは、先行コロンを使用してバインド変数を定義します。次に例を示します。

...
UPDATE emp
SET sal=sal*1.1
WHERE ename=:ename;
...

この文で、enameはバインド変数です。Oracle以外のシステムでは、バインド変数の指定に疑問符が必要になる場合があります。次に例を示します。

...
UPDATE emp
SET sal=sal*1.1
WHERE ename= ?;
...

バインド変数の手順では、ホスト・プログラム変数(この場合はPL/SQL)をこれらの各バインド変数と位置的に関連付ける必要があります。たとえば、前述の文を実行するには、次のPL/SQLプログラムを使用します。

DECLARE
c INTEGER;
nr INTEGER;
BEGIN
c := DBMS_HS_PASSTHROUGH.OPEN_CURSOR@salesdb;
DBMS_HS_PASSTHROUGH.PARSE@salesdb(c,
'UPDATE emp SET SAL=SAL*1.1 WHERE ename=?');
DBMS_HS_PASSTHROUGH.BIND_VARIABLE@salesdb(c,1,'JONES');
nr:=DBMS_HS_PASSTHROUGH.EXECUTE_NON_QUERY@salesdb(c);
DBMS_OUTPUT.PUT_LINE(nr||' rows updated');
DBMS_HS_PASSTHROUGH.CLOSE_CURSOR@salesdb(c);
END;

3.3.3.1.3 OUTバインド変数の使用

Oracle以外のシステムはOUTバインド変数をサポートできます。OUTバインド変数を使用すると、その値はSQL文の実行後まで認識されません。

OUTバインド変数はSQL文の実行後に移入されますが、Oracle以外のシステムでは、特定のバインド変数がOUTバインド変数であることをSQL文の実行前に認識する必要があります。バインド変数がOUTバインド変数であることを指定するには、BIND_OUT_VARIABLEプロシージャを使用します。

SQL文の実行後は、GET_VALUEプロシージャを使用してOUTバインド変数の値を取得できます。

3.3.3.1.4 IN OUTバインド変数の使用

1つのバインド変数でIN変数とOUT変数を兼ねることができます。つまり、SQL文の実行前にバインド変数の値がわかっている必要があります。また、SQL文の実行後に値を変更できます。

IN OUTバインド変数の場合は、BIND_INOUT_VARIABLEプロシージャを使用してSQL文の実行前に値を提供する必要があります。SQL文の実行後は、GET_VALUEプロシージャを使用してバインド変数の新規の値を取得します。

3.3.3.2 問合せの実行

問合せでは、非問合せとは異なり、SELECT文から結果セットが取得されます。結果セットは、カーソルの使用により取得されます。

図3-2に、パススルーSQL問合せのステップを示します。システムでSELECT文が解析された後、FETCH_ROWプロシージャで結果セットの各行を取得できます。行が取得された後、GET_VALUEプロシージャを使用してSELECT構文のリスト項目をプログラム変数に取り出します。すべての行が取得された後に、カーソルをクローズできます。

図3-2 問合せ用パススルーSQL

すべての行を取得する必要はありません。カーソルのオープン後は、いつでもカーソルをクローズできます。

注意:
取得するのは一度に1行ですが、異機種間サービスでは、複数行をバッファに入れて1回のラウンドトリップでOracle以外のデータ・システムからフェッチすることで、Oracle DatabaseとOracle以外のシステム間のラウンドトリップが最適化されます。

次の例では、問合せが実行されます。

DECLARE
val  VARCHAR2(100);
c    INTEGER;
nr   INTEGER;
BEGIN
c := DBMS_HS_PASSTHROUGH.OPEN_CURSOR@salesdb;
DBMS_HS_PASSTHROUGH.PARSE@salesdb(c,
'select ENAME
from   EMP
where  DEPTNO=10');
LOOP
nr := DBMS_HS_PASSTHROUGH.FETCH_ROW@salesdb(c);
EXIT WHEN nr = 0;
DBMS_HS_PASSTHROUGH.GET_VALUE@salesdb(c, 1, val);
DBMS_OUTPUT.PUT_LINE(val);
END LOOP;
DBMS_HS_PASSTHROUGH.CLOSE_CURSOR@salesdb(c);
END;

SELECT文の解析後は、FETCH_ROWファンクションが0(ゼロ)を戻すまで、ループ内で行がフェッチされて出力されます。

3.4 結果セットのサポート

各種リレーショナル・データベースでは、ストアド・プロシージャで結果セット(1つ以上の行セット)を戻すことができます。

従来、データベースのストアド・プロシージャの動作は、高水準プログラミング言語のプロシージャと同じでした。引数の数は一定で、IN、OUTまたはIN OUT型を使用できました。プロシージャにn引数が指定されている場合は、結果として最大n個の値が戻されます。ただし、ストアド・プロシージャでSELECT * FROM empなどの問合せを実行して結果を戻す必要がある場合があります。emp表の列数は固定ですが、プロシージャの作成時には行数を指示する手段がありません。このため、このような問合せの結果を戻す従来のストアド・プロシージャを作成できませんでした。その結果、複数のリレーショナル・データベース・ベンダーがストアド・プロシージャから結果セットを戻す機能を追加していますが、戻す方法はリレーショナル・データベースごとに異なっています。

Oracleには、REF CURSORというデータ型が用意されています。ストアド・プロシージャでは、他のすべてのOracleデータ型と同様に、このデータ型をINまたはOUT引数として使用できます。Oracle Databaseでは、ストアド・プロシージャにはREF CURSOR型の出力引数が必要です。次に、SQL文のカーソルをオープンし、その出力パラメータのそのカーソルにハンドルを置きます。これにより、コール元は他のカーソルの場合と同じ方法でREF CURSORから取得できます。

Oracle Databaseは、結果セットを戻す以外に多くの処理を行うことができます。REF CURSORデータ型をPL/SQLルーチンに入力引数として渡し、クライアント・プログラムとPL/SQLルーチン間、または複数のPL/SQLルーチン間でやり取りできます。

この項には、次の項目が含まれます。

- Oracle以外のシステムでの結果セットのサポート

- 異機種間サービスでの結果セットのサポート

3.4.1 Oracle以外のシステムでの結果セットのサポート

Oracle以外の複数のシステムで、ストアド・プロシージャにより結果セットを戻すことができますが、その方法は異なります。通常、Oracle以外のデータベースでの結果セットのサポートは次の2つのモデルのいずれかに基づいています。

- モデル1: 結果セットのサポート
ユーザーは、ストアド・プロシージャの作成時に、そのストアド・プロシージャが戻すことのできる結果セットの最大数を明示的に指定できます。実行時には、ストアド・プロシージャは0(ゼロ)から指定された最大数の範囲内で結果セットをオープンできます。ストアド・プロシージャの実行後に、クライアント・プログラムは埋込みSQLディレクティブを使用するか、クライアントのライブラリ・ファンクションをコールして、これらの結果セットへのハンドルを取得できます。その後、クライアント・プログラムは、通常のカーソルと同様に結果セットから取得できます。

- モデル2: 結果セットのサポート
このモデルでは、ストアド・プロシージャから戻される結果セット数の制限は指定されていません。モデル1とOracle Databaseにはどちらも制限があります。Oracle Databaseでは、ストアド・プロシージャから戻すことができる結果セットの数はREF CURSOR OUT引数の数以下です。モデル1では、ストアド・プロシージャ言語のディレクティブを使用して上限が指定されます。モデル2がOracle Databaseおよびモデル1と異なるもう1つの点は、これらでは結果セットに対するハンドルが戻されないことです。かわりに、これらはストアド・プロシージャから戻された結果セット全体を送信します。Oracle DatabaseではハンドルはREF CURSOR OUT引数です。モデル1では、これはストアド・プロシージャの実行後に別に取得されます。Oracle Databaseとモデル1の両方で、ハンドルが取得された後で、ハンドルに対するフェッチを実行して結果セットのデータが取得されます。複数のカーソルが開いており、任意の順序でフェッチすることができます。ただし、モデル2のケースでは、すべてのデータがすでに送信されています。ストアド・プロシージャによって決定された順序で結果セットが届き、プロシージャの出力引数が最後に届きます。最初の結果セット全体を取得してから2番目の結果セット全体を取得し、すべての結果セットを取得するまで続ける必要があります。最後に、ストアド・プロシージャのOUT引数が取得されます。

3.4.2 異機種間サービスでの結果セットのサポート

結果セットのサポートは、Oracle以外のデータベースではそれぞれ異なっています。これらすべてをOracleのREF CURSORモデルにマップする必要があります。Oracle以外のシステム間では動作が異なるため、異機種間サービスでの結果セットのサポートは、接続先となるOracle以外のシステムに応じて2つの方法のいずれかになります。

異機種間サービスでの結果セットのサポートについては、次の注意事項があります。

- 結果セットのサポートは異機種間サービスの汎用コードに含まれますが、この機能をゲートウェイで動作させるには、ドライバもこれを実装する必要があります。すべてのドライバが結果セットのサポートを実装しているわけではありません。ゲートウェイがサポートされることを確認する必要があります。

- 異機種間サービスでは、ストアド・プロシージャからのREF CURSOR OUT引数がサポートされます。INおよびIN OUT引数はサポートされません。

- REF CURSOR OUT引数は、すべて匿名参照カーソルです。異機種間サービスで戻されるREF CURSORには型がありません。

3.4.2.1 結果セット: カーソル・モード

Oracle以外のシステムのストアド・プロシージャから戻される各結果セットは、OracleドライバによりREF CURSOR型のOUT引数にマップされます。クライアント・プログラムは、REF CURSOR型の複数のOUT引数を持つストアド・プロシージャを検知します。ストアド・プロシージャの実行後に、クライアント・プログラムはOracleストアド・プロシージャにより戻されるREF CURSORの場合と同じ方法で、そのREF CURSORからフェッチできます。3.4.1.1項で説明したように、異機種間サービスはゲートウェイへの接続時にカーソル・モードになります。

3.4.2.2 結果セット: 逐次モード

特定のストアド・プロシージャが戻すことのできる結果セットには最大数があります。戻される結果セットの数は、ストアド・プロシージャのREF CURSOR OUT引数の数以下です。戻される結果セットの数は、この上限より少なくてもかまいませんが、上限を超えることはできません。

3.4.1.2項で説明したシステムの場合、戻すことのできる結果セットの最大数はありません。モデル1(3.4.1.1項)の場合は、プロシージャが戻すことのできる結果セットの最大数、およびドライバが異機種間サービスに戻すことのできる結果セットの最大数は、REF CURSOR OUT引数の数により、ストアド・プロシージャに指定されています。ストアド・プロシージャの実行時に、戻される結果セットが最大数より少なければ、その他のREF CURSOR OUT引数はNULLに設定されます。

モデル2のデータベース・サーバーのもう1つの問題は、データベースによって送信された順序で結果セットを取得する必要があることです。このため、異機種間サービスがこれらのデータベースに接続するときにカーソル・モードで実行できません。これらのストアド・プロシージャによって戻される結果セットにアクセスするには、異機種間サービスを逐次モードにする必要があります。

逐次モードでは、ドライバから戻されるプロシージャ記述に次の情報が含まれます。

- リモート・ストアド・プロシージャのすべての入力引数

- 出力引数はなし

- REF CURSOR型のOUT引数1つ(ストアド・プロシージャから戻される最初の結果セットに対応)

クライアントは、このREF CURSORからフェッチし、仮想パッケージ・ファンクションDBMS_HS_RESULT_SET.GET_NEXT_RESULT_SETをコールして、次の結果セットに対応するREF CURSORをフェッチします。すべての結果セットが取得されるまでこのファンクション・コールが繰り返されます。最後に戻される結果セットは、リモート・ストアド・プロシージャのOUT引数となります。

逐次モードの主な制限事項は、次のとおりです。

- リモート・ストアド・プロシージャから戻された結果セットは、送信された順に取得される必要があります。

- ストアド・プロシージャが実行されると、以前に実行されたストアド・プロシージャから戻された結果セットがすべて(データが取得されたかどうかに関係なく)クローズされます。

関連項目:
ゲートウェイを介した結果セットのサポート方法の詳細は、ご使用のゲートウェイ固有のマニュアルを参照してください。

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

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

たとえば、Oracleのデータ・ディクショナリ・ビューALL_CATALOGには、データベース内の表、ビューおよび順序のリストが表示されます。これには3つの列があり、1列目はオブジェクトの所有者名を示すOWNER、2列目はオブジェクト名を示すTABLE_NAME、3列目はデータ型を示すTABLE_TYPEです。このフィールドの値は、オブジェクト型に応じてTABLE、VIEW、SEQUENCEなどです。ただし、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データ・ディクショナリ表に変換が含まれないこともあります。このような場合、ゲートウェイは変換をアップロードできないため、疑似実行と呼ばれる別のアプローチを実装することがあります。ゲートウェイがデータ・ディクショナリ表を疑似実行する場合、ゲートウェイは異機種間サービスに情報を提供し、異機種間サービスはローカル・データベースを問い合せてデータ・ディクショナリ表の説明を取得します。データの取得を求められると、行が選択されなかったとレポートします。

3.6 日時データ型

Oracle Databaseには次の5つの日時データ型があります。

- TIMESTAMP

- TIMESTAMPWITHTIMEZONE

- TIMESTAMPWITHLOCALTIMEZONE

- INTERVALYEARTOMONTH

- INTERVALDAYTOSECOND

異機種間サービスの汎用コードは、SQLおよびストアド・プロシージャにおいてはOracle日時データ型をサポートします。ただし、異機種間サービスでは、データ・ディクショナリ変換やデータ・ディクショナリ変換を伴う問合せでは、これらのデータ型がサポートされません。

異機種間サービスの汎用コードで日時データ型がサポートされていても、特定のゲートウェイに対するサポートは、Oracle以外のシステム用のドライバに日時のサポートが実装されているかどうかによって異なります。Oracle以外のシステムに制限があるため、サポートがドライバに実装されていても、サポートは部分的になる場合があります。詳細は、ご使用のゲートウェイのドキュメントを参照してください。

ユーザーは、Oracle以外のシステムのタイムスタンプ書式をゲートウェイ初期化ファイル内で設定する必要があります。設定するパラメータは、HS_NLS_TIMESTAMP_FORMATおよびHS_NLS_TIMESTAMP_TZ_FORMATです。また、ユーザーは初期化ファイル内でHS_TIME_ZONEを設定し、Oracle以外のシステムのローカル・タイム・ゾーンも設定する必要があります。

関連項目:
日時データ型の詳細は、『Oracle Database SQL言語リファレンス』を参照してください。

3.7 2フェーズ・コミット・プロトコル

異機種間サービスは、2フェーズ・コミット・プロトコルを実装するためのインフラストラクチャを提供します。そのサポート範囲はゲートウェイおよびリモート・システムに応じて異なります。詳細は、ご使用のゲートウェイのドキュメントを参照してください。

関連項目:
2フェーズ・コミット・プロトコルの詳細は、『Oracle Database管理者ガイド』を参照してください。

3.8 ピース単位のLONGデータ型

以前のバージョンのゲートウェイでは、LONGデータ型のサポートが限定されていました。LONGは、最大2GBの文字またはRAWデータ(LONG RAW)を格納するOracleのデータ型です。これらの旧バージョンでは、LONGデータは単一のピースとして扱われていたため、LONGデータのサイズが4MBに制限されていました。このため、処理できるデータのサイズにメモリーとネットワーク帯域幅という制限が課されていました。現行のゲートウェイの機能は、異機種間で2GBのLONGデータ全体をサポートするように拡張されました。ゲートウェイによって、データがエージェントとOracle Database間でピース単位で処理されるようになり、大容量のメモリーとネットワーク帯域幅の要件がなくなりました。

異機種間サービスの初期化パラメータHS_LONG_PIECE_TRANSFER_SIZEを使用すると、転送されるピースのサイズを設定できます。たとえば、異機種間ソースから2GBのLONGデータを取得する場合を考えます。ピースを小さくすると、必要なメモリーは少なくなりますが、すべてのデータを取得するために必要なラウンドトリップは増加します。ピースを大きくすると、ラウンドトリップ回数は減少しますが、内部的に中間ピースを格納するために必要なメモリー容量が増大します。そのため、初期化パラメータを使用して最適のパフォーマンス(つまり、ラウンドトリップ回数とメモリー所要量との最適なトレードオフ)が得られるようにシステムをチューニングできます。初期化パラメータを設定しない場合、デフォルトのピース・サイズとして64KBが使用されます。

注意:
この機能を、クライアント側のLONGデータに対するピース単位操作と混同しないでください。クライアント側でのピース単位のFETCHおよびINSERT操作は、旧バージョンのゲートウェイで動作しており、今後も動作します。クライアント側での唯一の違いは、旧バージョンのゲートウェイでフェッチできるLONGデータは最大4MBのみであったのに対して、このバージョンでは2GBのLONGデータを取得できることです。4MBはこのデータ型の最大容量のわずか0.2%であるため、これは大幅な改善です。

3.9 SQL*PlusのDESCRIBEコマンド

SQL*Plus DESCRIBEコマンドを使用してOracle以外のシステムのオブジェクトを記述できます。ただし、いくつかの制限事項があります。たとえば、異機種間リンクを使用した場合には、パッケージ、順序、シノニムまたは型を記述できません。

3.10 分散環境におけるSQLの制約

この項では、分散環境におけるSQLに対する制約について説明します。これらの制約は、Oracle以外のシステムまたはリモートOracleデータベースへのアクセスが行われる分散環境に適用されます。

この項には、次の項目が含まれます。

- リモート参照と異機種間参照

- 重要な制限事項

3.10.1 リモート参照と異機種間参照

注意:
異機種間アクセスに関するルールの多くは、リモート参照にも適用されます。詳細は、『Oracle Database管理者ガイド』の分散データベースに関する項を参照してください。

文は、制限付きではありますが、その文で参照されているデータベース・ノードまたはローカル・ノード上で実行できます。参照されるオブジェクトすべてが1つの参照先ノードに解決される場合、Oracleはそのノードで問合せの実行を試みます。/*+ REMOTE_MAPPED */または/*+ DRIVING_SITE */ヒントを使用すると、参照先ノードで強制的に実行できます。文が発行された場所とは異なるノードに転送される場合、その文をリモート・マップ文と呼びます。

リモート・マップ文に対しては、完全なデータ型チェックのサポートがあります。チェックの結果により、一貫したデータ型チェックと完全なデータ型の強制が提供されます。

関連項目:
4.5項「Oracleデータベース・サーバーのSQL構文の処理」

文のリモート・マップを可能にする方法には、特定のルールまたは制限が適用されます。これらのルールが遵守されていない場合、エラーが発生します。発行される文にこれらのルールすべてとの一貫性があるかぎり、ルールの適用順序は関係ありません。ルールや制限については、3.10.2項を参照してください。

分散環境でのリモート・マッピングにSQLを使用する場合は、異なる制約が存在します。この分散環境には、Oracle Database Gatewayを介してアクセスされるOracle以外のデータベースのみでなく、リモートのOracleデータベースも含めることができます。

3.10.2 重要な制限事項

次の項では、分散環境でリモート・マッピングにSQLを使用する場合に存在する様々なルールまたは制限について説明します。

注意:
以降の例では、remote_dbはOracle以外のリモート・システム、remote_oracle_dbはリモートのOracle Databaseを指します。

ルールA: データ定義言語文はリモート・マップできません。

Oracleのデータ定義言語では、ターゲット・オブジェクトの構文にはリモート参照の位置がありません。リモート参照を含むデータ定義言語文は常にローカルに実行されます。異機種間サービスの場合、これは、SQLを使用してOracle以外のデータベースにデータベース・オブジェクトを直接作成できないことを意味します。

ただし、パススルーSQLを使用して間接的に作成する方法があります。次にその例を示します。

DECLARE
num_rows INTEGER;
BEGIN
num_rows := DBMS_HS_PASSTHROUGH.EXECUTE_IMMEDIATE@remote_db
(
'create table x1 (c1 char, c2 int)'
);
END;

ルールB: リモート・ターゲット表を使用するINSERT、UPDATEおよびDELETE文はリモート・マップする必要があります。

このルールは、リモートのOracleデータベースよりもOracle以外のリモート・データベースの場合に限定的です。これは、Oracle以外のシステムの表に対するデータ操作言語(DML)文の実行中は、リモート・システムで元のOracleデータベースからデータをフェッチできないためです。

たとえば、ローカルのemp表からローカルの全従業員をOracle以外のリモートのemp表に挿入するには、次の文を使用します。

INSERT INTO emp@remote_db SELECT * FROM emp;

この文は、リモート・データベースにリモート・マップされます。リモート・データベースに送信されるリモート・マップ文には、empに関する元のデータベースへのリモート参照が含まれます。このようにリモート・データベースが受信するリモート・リンクを、コールバック・リンクと呼びます。

注意:
コールバック・リンクは、汎用の異機種間サービスでサポートされていても、すべての異機種間サービス・エージェントに実装されているとはかぎりません。使用中のデータベース・ゲートウェイでコールバック・リンクが動作するかどうかは、データベース・ゲートウェイのマニュアルを参照して判断してください。

特定のゲートウェイにコールバック・リンクがサポートされていない場合、前述のINSERT文では次のエラーが戻されます。

ORA-02025: all tables in the SQL statement must be at the remote database

このエラーを回避するには、PL/SQLブロックを記述します。次に例を示します。

DECLARE
CURSOR remote_insert IS SELECT * FROM emp;
BEGIN
FOR rec IN remote_insert LOOP
INSERT INTO emp@remote_db (empno, ename, deptno) VALUES (
rec.empno,
rec.ename,
rec.deptno
);
END loop;
END;

もう1つの特殊な事例には、USER、USERENVおよびSYSDATEなど、セッション固有のSQL関数が関係します。これらの関数は、元のサイトで実行する必要があります。これらの関数を含むリモート・マップ文には、コールバック・リンクが含まれます。コールバックがサポートされていないOracle以外のデータベースの場合は、(デフォルトで)制限エラーになる可能性があります。

たとえば、次の文を考えてみます。

DELETE FROM emp@remote_db WHERE hiredate > sysdate;

この文は次のエラー・メッセージを戻します。

ORA-02070: database REMOTE_DB does not support special functions in this context

このエラーを解決するには、次のように特殊関数をバインド変数で置き換える必要があります。次に例を示します。

DELETE FROM emp@remote_db WHERE hiredate > :1;

ルールC: NESTED TABLE型の列、ユーザー定義型の列、不透明型の列またはREF型の列を含む表などのオブジェクト機能は、リモート・マップできません。

現在、異機種間アクセスの場合、これらの列型はサポートされていません。したがって、この制限が直接発生することはありません。

ルールD: リモート・サイトでサポートされていない演算子および構成メンバーを含むSQL文は、リモート・マップできません。

つまり、INSERT、UPDATE、DELETEの場合、SQL文は実行できません(ルールBを参照)。ただし、サポートされていない演算子または構成メンバーが、コールバック・リンクで実行できる場合、SQL文を実行できる場合があります。

SELECTの場合は、その他のルールが対象の文をリモート・マップするように要求していないかぎり、このルールの影響を受ける文でも常に実行できます。このルールの影響を受けるSELECT文は、リモートのSELECT操作を介して必要なすべてのデータをフェッチし、サポートされない演算子を処理するか、ローカルSQLエンジンを使用してローカルに構成することにより実行されます。

リモートのSELECT操作とは、ローカル表データの行を取得する操作とは異なり、リモート表データの行を取得する操作です。リモートSELECTの場合の最悪のケースは、全表スキャンです。全表スキャンは、リモート表のすべてのデータをネットワークを介してフィルタせずにフェッチすることです(SELECT * FROM EMPなど)。

全表スキャンは高コストであるため、Oracleでは回避するよう試みます。リモート表に使用可能な索引がある場合は、ネットワークでフェッチされる行の数を減らすために、これらの索引をWHERE句の条件で使用します。

Oracle Databaseにより生成されたSQL文をチェックするには、その文を記述し、REMOTE操作ごとにEXPLAIN PLAN表のOTHER列を問い合せます。

関連項目:
リモート参照を含むEXPLAIN PLANを解析する方法の詳細は、3.11.1項を参照してください。

たとえば、次の文を考えてみます。

SELECT COUNT(*) FROM emp@remote_db WHERE hiredate < sysdate;

この文では次の出力が戻されます。

COUNT(*)
----------
14
1 row selected.

リモート表スキャンは次のとおりです。

SELECT hiredate FROM emp;

sysdateはremote_dbまたは評価ルールでサポートされていないため、フィルタに変換される条件を生成してリモート操作に渡すことはできません。そのため、sysdateはローカルに実行する必要があります。

注意:
リモート表スキャン操作は元の問合せについては一部のみ関連するため、受信行数が予想より大幅に多くなり、パフォーマンスが大幅に低下する場合があります。

ルールE: 表の式を含むSQL文はリモート・マップできません。

異機種間アクセス・モジュールでは表の式がサポートされていないため、この制限が直接発生することはありません。

ルールF: SQL文でLONGデータが選択される場合は、その文をLONGを含む表が常駐するノードにマップする必要があります。

次のタイプの文を考えてみます。

SELECT long1 FROM table_with_long@remote_db, dual;

(コールバック・リンクがサポートされていない場合)前述の文は次のエラー・メッセージを戻します。

ORA-02025: all tables in the SQL statement must be at the remote database

ルールG: SQL文がSELECT...FOR UPDATE OF...形式の場合、その文はFOR UPDATE OF句で参照される列を持つ表が常駐するノードにマップする必要があります。

SQL文がSELECT...FOR UPDATE OF...形式の場合、その文はFOR UPDATE OF句で参照される列を持つ表が常駐するノードにマップする必要があります。

たとえば、次の文を考えてみます。

SELECT ename FROM emp@remote_db WHERE hiredate < sysdate FOR UPDATE OF empno;

前述の文は、リモート・マップが不可能な場合、次のエラー・メッセージを戻します。

ORA-02070: database REMOTE_DB does not support special functions in this context

ルールH: SQL文にSEQUENCEまたは順序が含まれている場合は、その文を各順序が常駐するサイトにマップする必要があります。

リモートではOracle以外の順序はサポートされないため、このルールが異機種間アクセス・モジュールに適用されることはありません。

ルールI: 文に1つ以上のユーザー定義演算子が含まれている場合は、その文を各演算子が定義されているノードにマップする必要があります。

文にユーザー定義演算子が含まれている場合は、その文全体をその演算子が定義されているデータベース・ノードにリモート・マップする必要があります。

ルールJ: 重複するバインド変数を含む文はリモート・マップできません。

この制限を回避するには、一意のバインド変数を使用して数値でバインドします。

3.11 Oracleのオプティマイザと異機種間サービス

Oracleのオプティマイザを異機種間サービスと併用できます。異機種間サービスは、Oracle以外のシステムのそれぞれの表について特定の表および索引統計情報を収集し、この情報をOracle Databaseに渡します。Oracleのコストベース・オプティマイザは、この情報を問合せ計画の作成時に使用します。

その他にも、コストベース・オプティマイザでは複数の最適化が実行されます。最も重要な最適化は、リモート・ソートの排除とリモート結合です。

この項には、次の項目が含まれます。

- 例: 索引統計と表統計の使用

- 例: リモート結合の最適化

- Oracle以外のアクセスに対するオプティマイザの制限

3.11.1 例: 索引統計と表統計の使用

Oracleデータベースに10行の表を作成する次の文を考えてみます。

CREATE TABLE T1 (C1 number);

DBMS_STATSパッケージを使用して表を分析します。次に例を示します。

DBMS_STATS.GATHER_TABLE_STATS ('SCOTT','T1');
DBMS_STATS.GENERATE_STATS ('SCOTT','T1');

前述の例では、スキーマ名をSCOTTとし、表名をT1としています。DBMS_STATSパッケージの詳細は、『Oracle Database PL/SQLパッケージ・プロシージャおよびタイプ・リファレンス』を参照してください。

Oracle以外のシステムに1000行を含む表を作成します。

次のSQL文を発行します。

SELECT a.* FROM remote_t1@remote_db a, T1 b
WHERE a.C1 = b.C1;

Oracleオプティマイザは、エージェントに対して次のSQL文を発行します。

SELECT C1 FROM remote_t1@remote_db;

この文は、Oracle以外のシステムから1000行すべてをフェッチし、Oracleデータベース内で結合を実行します。

remote_t1表のC1列に一意の索引を追加して同じSQL文を再発行すると、エージェントはローカルt1のC1の値ごとに次のSQL文を受信します。

...
SELECT C1 FROM remote_t1@remote_db WHERE C1 = ?;
...

注意:
?はバインド・パラメータ・マーカーです。また、Oracleにより生成されたバインド変数を含む結合条件は、ネステッド・ループ結合方法についてのみ生成されます。

SQL実行計画を確認するには、SQL文のEXPLAIN PLANを生成します。最初に、adminディレクトリにutlxplanをロードします。

次のように入力します。

EXPLAIN PLAN FOR SELECT a.* FROM remote_t1@remote_db a, T1 b
WHERE a.C1 = b.C1;

次の文を入力してutlxplsユーティリティ・スクリプトを実行します。

@utlxpls

OPERATION REMOTEは、リモートSQLが参照されていることを示します。

どの文が送信されるかを確認するには、次の文を入力します。

SELECT ID, OTHER FROM PLAN_TABLE WHERE OPERATION = 'REMOTE';

3.11.2 例: リモート結合の最適化

ここでは、Oracleデータベースのリモート結合最適化機能の例を示します。

注意:
Oracle以外のシステムからの表を使用するEXPLAIN PLANは、ローカルまたはリモートのOracle表スキャンを使用する同様の文とは異なる場合があります。これは、Oracle以外の表についてOracleで使用可能な統計に制限があるためです。最も重要なのは、Oracle以外の表の非一意索引には列を選択できないことです。使用可能な統計に制限があるため、次の例はリモート結合を実際に実行したときの内容とは異なる場合があり、あくまでも一例にすぎません。

次の例を考えてみます。

EXPLAIN PLAN FOR
SELECT e.ename, d.dname, f.ename, f.deptno FROM
dept d,
emp@remote_db e,
emp@remote_db f
WHERE e.mgr = f.empno
AND e.deptno = d.deptno
AND e.empno = f.empno;

@utlxpls

次のような出力が表示されます。

PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------

---------------------------------------------------------------------------
| Id    | Operation                           | Name  | Rows  | Bytes  | Cost
| Inst  |IN-OUT|
---------------------------------------------------------------------------
|   0   | SELECT STATEMENT   |                |  2000   |   197K|   205 |
|*  1   | HASH JOIN          |                |  2000   |   197K|
205 |
|   2   | TABLE ACCESS FULL  | DEPT           |  21     |   462 |     2 |
|*  3   | HASH JOIN          |                |  2000   |   154K|
201 |
|   4   | REMOTE             |                |  2000   | 66000
|    52 |
|   5   | REMOTE             |                |  2000   | 92000
|    52 |
---------------------------------------------------------------------------

PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------

Query Block Name / Hint Alias (identified by operation id):
-----------------------------------------------------------

1 - sel$1 / D
2 - sel$1 / D
3 - sel$1 / F
4 - sel$1 / F
5 - sel$1 / E

Predicate Information (identified by operation id):

PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------

---------------------------------------------------

1 - access("E"."DEPTNO"="D"."DEPTNO")
3 - access("E"."MGR"="F"."EMPNO" AND "E"."EMPNO"="F"."EMPNO")

次の文を発行します。

SET long 300
SELECT other FROM plan_table WHERE operation = 'REMOTE';

次のような出力が表示されます。

OTHER
--------------------------------------------------------------------------------

SELECT "EMPNO","ENAME","DEPTNO" FROM "EMP"
SELECT "EMPNO","ENAME","MGR","DEPTNO" FROM "EMP"
SELECT "EMPNO","ENAME","DEPTNO" FROM "EMP"
SELECT "EMPNO","ENAME","MGR","DEPTNO" FROM "EMP"

3.11.3 Oracle以外のアクセスに対するオプティマイザの制限

次に、Oracle以外のシステムへのアクセスに対するオプティマイザの制限を示します。

- リモート・オブジェクトに関する列統計情報はありません。このため、適切な実行計画が得られない場合があります。実行計画を検証し、ヒントを使用して最適化してください。

- リモート結合を強制するオプティマイザ・ヒントはありません。ただし、リモート問合せブロック最適化を使用すると、問合せをわずかにリライトしてリモート結合を実現することができます。
前項の例の記述は、次の形式にリライトできます。

SELECT v.ename, d.dname, d.deptno FROM dept d,
(SELECT /*+ NO_MERGE */
e.deptno deptno, e.ename ename emp@remote_db e, emp@remote_db f
WHERE e.mgr = f.empno
AND e.empno = f.empno;
)
WHERE v.deptno = d.deptno;

この例では、リモート結合が保証されています。これは、NO_MERGEヒントを使用してネストした問合せ内に分離されるためです。

4 異機種間サービス・エージェントの使用

この章では、異機種間サービス(HS)エージェントの使用方法について説明します。エージェントのインストールおよび構成については、Oracle Database Gatewayのインストレーションおよび構成ガイドを参照してください。この章の構成は、次のとおりです。

- 初期化パラメータ

- バルク・フェッチを使用したデータ転送の最適化

- パラレル・ロードを使用したデータ・ロードの最適化

- エージェントの登録

- Oracleデータベース・サーバーのSQL構文の処理

- Oracle以外のデータベースに対するユーザー定義関数の実行

- シノニムの使用

- Oracleデータベース・サーバーからOracle以外のデータベース・システムへのデータのコピー

- Oracle以外のデータベース・システムからOracleデータベース・サーバーへのデータのコピー

- 異機種間サービスのデータ・ディクショナリ・ビューの使用

- 異機種間サービスの動的パフォーマンス・ビューの使用

4.1 初期化パラメータ

初期化パラメータを使用してゲートウェイを構成します。そのためには、初期化ファイルを作成し、このファイル内で必要なパラメータを設定します。構成の詳細は、2.5項を参照してください。

異機種間サービスの初期化パラメータは、Oracle Databaseの初期化パラメータとは異なります。異機種間サービスの初期化パラメータは、Oracleデータベースの初期化パラメータ・ファイル(init.oraファイル)ではなく、異機種間サービスの初期化ファイル内で設定します。ゲートウェイ・インスタンスごとに、異機種間サービスの初期化ファイルがあります。

この項では、次の項目について説明します。

- 初期化パラメータの暗号化

- ゲートウェイ初期化パラメータ

4.1.1 初期化パラメータの暗号化

初期化パラメータには、IDやパスワードなどの機密情報が含まれている場合があります。初期化パラメータは、プレーン・テキストに格納され、セキュリティ上安全ではありません。異機種間サービスに暗号化機能が追加され、パラメータ値の暗号化が可能になりました。暗号化には、dg4pwdユーティリティが使用されます。この機能を使用する場合は、初期化ファイルのパラメータ値を、引用符なしのアスタリスク(*)に設定する必要があります。次に例を示します。

HD_FDS_CONNECT_INFO = *
値をこのセキュリティ・マーカーに設定することで、実際の値が関連する暗号化パスワード・ファイルに格納されることをすべての異機種間サービス・エージェントが認識します。このファイルの名前はinitsid.pwdです(sidはゲートウェイで使用されるOracleシステム識別子です)。このファイルはdg4pwdユーティリティによって、初期化ファイルを含む現在のディレクトリに作成されます。ユーティリティを実行すると、パラメータの実際の値を入力するように求められます。この値がユーティリティによって暗号化されてパスワード・ファイルに格納されます。暗号化初期化パラメータは暗黙的にPRIVATEパラメータとして扱われ、サーバーにアップロードされないことに注意してください。

4.1.1.1 dg4pwdユーティリティの使用

dg4pwdユーティリティは、通常ならプレーン・テキストで初期化パラメータ・ファイルに格納される初期化パラメータを暗号化するために使用されます。このユーティリティは、初期化パラメータ・ファイルを現在のディレクトリに読み込み、値にセキュリティ・マーカーが付いたパラメータを検索します。セキュリティ・マーカーは、引用符なしのアスタリスク(*)です。セキュリティ・マーカーにより、このパラメータの値を暗号化してパスワード・ファイルに格納するように指定されます。次に、この値に設定された初期化パラメータの例を示します。

HS_FDS_CONNECT_INFO = *

最初に、現在のディレクトリにある初期化パラメータ・ファイルを編集して、パラメータの値をセキュリティ・マーカーに設定します。次に、このユーティリティを実行し、コマンドラインでゲートウェイSIDを、また暗号化情報に別の所有者を指定する場合はオプションでユーザーIDも指定します。このユーティリティは、初期化パラメータ・ファイルを読み込み、暗号化する実際の値を入力するよう要求します。コマンドの構文は次のとおりです。

dg4pwd [sid] {userid}

ここで、[sid]はゲートウェイのSID、{userid}は内容を暗号化する際に使用するオプションのユーザーIDです。ユーザーIDが指定されていない場合は、現行のユーザーIDが使用されます。値はこのIDを使用して暗号化されます。値を復号化する場合は、このユーザーとしてエージェントを実行する必要があります。次の例では、ゲートウェイのSIDをSYBASEと想定しています。

dg4pwd SYBASE
ORACLE Gateway Password Utility
Constructing password file for Gateway SID SYBASE
Enter the value for HS_FDS_CONNECT_INFO
sybasew

前の例では、初期化パラメータ・ファイルinitSYBASE.oraが読み取られます。パラメータHS_FDS_CONNECT_INFOは暗号化が必要であると識別されます。値(sybasewなど)を入力して、[Enter]を押します。暗号化が必要なパラメータがまだある場合は、その値が求められます。暗号化されたデータは初期化ファイルと同じディレクトリに格納されます。暗号化を必要とする初期化パラメータは、Oracle Database Gatewayを使用する前に暗号化しておく必要があります。

4.1.2 ゲートウェイ初期化パラメータ

ゲートウェイ初期化パラメータは、2つのグループにわけることができます。一方はすべてのゲートウェイに共通する汎用初期化パラメータの集合で、他方は個々のゲートウェイに固有の初期化パラメータの集合です。次に、汎用初期化パラメータの中から、このマニュアルで説明する汎用初期化パラメータのみを示します。

HS_BULK
HS_CALL_NAME
HS_COMMIT_POINT_STRENGTH
HS_DB_DOMAIN
HS_DB_INTERNAL_NAME
HS_DB_NAME
HS_DESCRIBE_CACHE_HWM
HS_FDS_CONNECT_INFO
HS_FDS_DEFAULT_SCHEMA_NAME
HS_FDS_SHAREABLE_NAME
HS_FDS_TRACE_LEVEL
HS_LANGUAGE
HS_LONG_PIECE_TRANSFER_SIZE
HS_NLS_DATE_FORMAT
HS_NLS_DATE_LANGUAGE
HS_NLS_NCHAR
HS_NLS_NUMERIC_CHARACTERS
HS_NLS_TIMESTAMP_FORMAT
HS_NLS_TIMESTAMP_TZ_FORMAT
HS_OPEN_CURSORS
HS_ROWID_CACHE_SIZE
HS_RPC_FETCH_REBLOCKING
HS_RPC_FETCH_SIZE
HS_TIME_ZONE

前述のパラメータの設定時には、PRIVATEキーワードを使用しないでください。PRIVATEキーワードを使用すると、パラメータがサーバーにアップロードされず、SQL処理中にエラーが発生する可能性があります。前述のパラメータはいずれも環境での設定は必須ではないため、SETキーワードを使用する必要はありません。

関連項目:
ゲートウェイ固有の初期化パラメータのリストについては、各ゲートウェイのマニュアルを参照してください。

4.2 バルク・フェッチを使用したデータ転送の最適化

アプリケーションで異機種間サービスを使用してOracle以外のシステムからデータをフェッチする場合、データは次の順序で転送されます。

1. Oracle以外のシステムからエージェント・プロセスへ。

2. エージェント・プロセスからOracle Databaseへ。

3. Oracle Databaseからアプリケーションへ。

Oracleでは、図4-1に示すように3つのデータ転送がすべて最適化されます。

図4-1 データ転送の最適化

この項の内容は次のとおりです。

- OCI、Oracleプリコンパイラまたは他のツールを使用した配列フェッチ

- Oracle Databaseとエージェント間の配列フェッチの制御

- エージェントとOracle以外のシステム間の配列フェッチの制御

- 配列フェッチの再ブロック化の制御

4.2.1 OCI、Oracleプリコンパイラまたは他のツールを使用した配列フェッチ

アプリケーションとOracle Database間のデータ転送は、配列フェッチを使用して最適化できます。配列フェッチの詳細と、データ送信量および各ネットワーク・ラウンドトリップの指定方法は、アプリケーション開発ツールのマニュアルを参照してください。

4.2.2 Oracle Databaseとエージェント間の配列フェッチの制御

OracleがOracle以外のシステムからデータを取得する場合、異機種間サービスのHS_RPC_FETCH_SIZE初期化パラメータにより、エージェントとOracle Database間のフェッチごとに送信されるバイト数が定義されます。エージェントは、次のいずれかが発生するまでOracle以外のシステムからデータをフェッチします。

- Oracle Databaseへの送信分として指定のバイト数が累積された場合。

- Oracle以外のシステムから結果セットの最終行がフェッチされた場合。

4.2.3 エージェントとOracle以外のシステム間の配列フェッチの制御

Oracle以外のシステムから取得される行数は、HS_FDS_FETCH_ROWS初期化パラメータにより決定されます。エージェントでは配列フェッチがサポートされる必要があることに注意してください。エージェント固有のマニュアルを参照し、エージェントで配列フェッチがサポートされることを確認してください。

4.2.4 配列フェッチの再ブロック化の制御

デフォルトでは、エージェントはシステムへの送信分として十分なデータを取得するまで、Oracle以外のシステムからデータをフェッチします。つまり、Oracle以外のシステムからフェッチされたバイト数がHS_RPC_FETCH_SIZE初期化パラメータの値以上になるまで、フェッチが続行されます。言い換えると、エージェントはOracle Databaseとの間で、HS_RPC_FETCH_SIZE初期化パラメータの値により定義されたサイズ単位でデータを再ブロック化します。

Oracle以外のシステムで配列フェッチがサポートされる場合は、配列フェッチによりOracle以外のシステムからフェッチしたデータを、HS_RPC_FETCH_SIZE初期化パラメータの正確な値に達するまで待たずにOracle Databaseに即時に送信できます。つまり、Oracle以外のシステムからOracle Databaseにデータをストリームし、HS_RPC_FETCH_REBLOCKING初期化パラメータの値をOFFに設定して再ブロック化を無効にできます。

たとえば、HS_RPC_FETCH_SIZEを64 KB、HS_FDS_FETCH_ROWSを100行に設定するとします。また、各行のサイズが約600バイトであるとすると、100行では約60 KBになります。HS_RPC_FETCH_REBLOCKING初期化パラメータをONに設定すると、エージェントはOracle以外のシステムから100行のフェッチを開始します。

エージェントにはデータが60KBしかないため、データはOracle Databaseに送信されません。かわりに、エージェントはOracle以外のシステムから次の100行をフェッチします。これでエージェントにあるデータが120KBになったため、最初の64KBをOracle Databaseに送信できます。

この時点で、エージェントには56 KBのデータが残っています。エージェントはOracle以外のシステムからさらに100行をフェッチした後、次の64KBのデータをOracle Databaseに送信します。HS_RPC_FETCH_REBLOCKING初期化パラメータをOFFに設定すると、最初の100行がOracleデータベース・サーバーに即時に送信されます。

4.3 パラレル・ロードを使用したデータ・ロードの最適化

DBMS_HS_PARALLEL PL/SQLパッケージにより、異機種間ターゲット・アクセスのパラレル処理が可能になります。このパッケージは、外部の大規模な表からデータを取得するときにパフォーマンスを改善します。

DBMS_HS_PARALLELはCURRENT_USERの認証IDでコンパイルされます。つまり、実行者の権限を使用します。つまり、このパッケージのすべてのプロシージャは、コール・ユーザーの権限で実行されます。

プロシージャの詳細は、『Oracle Database PL/SQLパッケージ・プロシージャおよびタイプ・リファレンス』を参照してください。

4.4 エージェントの登録

登録とは、Oracleによりエージェント情報がデータ・ディクショナリに格納される操作です。エージェントの登録は必須ではありません。エージェントが未登録の場合、Oracleではエージェント情報は、データ・ディクショナリのかわりにメモリーに格納されます。エージェントに関係するセッションが終了すると、この情報は使用できなくなります。

自動登録とは、エージェントが情報をデータ・ディクショナリに自動的にアップロードできるように、データベース管理者が初期化パラメータを設定する操作です。自動登録が実行されるのは、HS_AUTOREGISTER初期化パラメータがTRUE(デフォルト)に設定されている場合のみです。

注意:
HS_AUTOREGISTERは、init.oraファイル内で設定するOracle初期化パラメータです。ゲートウェイ初期化ファイル内で設定する異機種間サービスの初期化パラメータではありません。

この項の内容は次のとおりです。

- エージェント自動登録の有効化

- エージェント自動登録の無効化

4.4.1 エージェント自動登録の有効化

異機種間データベース・リンク上での正常動作を保証するため、エージェント自動登録により、リモート・ホスト上のエージェントを記述する異機種間サービス構成データの更新が自動化されます。エージェント自動登録はデフォルトの動作です。エージェント自動登録機能を使用しない場合は、HS_AUTOREGISTER初期化パラメータをFALSEに設定してください。

サーバーとエージェントは、どちらも3種類の情報に依存して異機種間サービス接続の操作を構成および制御します。この3セットの情報をまとめてHS構成データと呼びます。

異機種間サービス構成データ

説明

異機種間サービス初期化パラメータ

操作の各種接続固有の詳細を制御します。

機能定義

Oracle以外のデータ・ソースでサポートされるSQL言語機能などの詳細を識別します。

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

Oracleデータ・ディクショナリ表およびビューへの参照を、Oracle以外のデータ・ソース固有の等価の表およびビューにマップします。

関連項目:
4.4.1.3項「HS_AUTOREGISTERの設定」

4.4.1.1 エージェント自動登録を使用した構成不一致の回避

HS構成データは、Oracleデータベース・サーバーのデータ・ディクショナリに格納されます。リモート・エージェントであるために別個に管理される場合があるので、ある状況下ではサーバーとエージェントの間で構成が一致しなくなる可能性があります。次に例を示します。

- エージェントが別のコンピュータに新しくインストールされ、サーバーの異機種間サービス・データ・ディクショナリには、そのエージェントの異機種間サービス構成データを表す内容が存在しない場合があります。

- サーバーが新しくインストールされ、既存のエージェントとOracle以外のデータ・ストアに関する必要な異機種間サービス構成データが欠落している場合があります。

- Oracle以外のインスタンスが旧バージョンから新バージョンにアップグレードされ、異機種間サービス構成データの変更が必要になる場合があります。

- リモート・サイトの異機種間サービス・エージェントが新バージョンにアップグレードされるか、パッチが適用され、異機種間サービス構成データの変更が必要になる場合があります。

- Oracle以外のサイトのデータベース管理者(DBA)が、異機種間サービス構成データに影響するような方法で、チューニングやテストのためにエージェントの設定を変更する場合があります。

エージェント自動登録により、これらのすべての使用例で異機種間サービスを正常に操作できます。特に、エージェント自動登録により、Oracleデータベース・サーバーと異機種間サービス・エージェント(それぞれがリリース8.0.3以上の場合)の相互運用性が強化されます。この機能の基本的なメカニズムは、異機種間サービス構成データをエージェントからサーバーにアップロードする機能です。

自動登録により、Oracleデータベース・サーバーのデータ・ディクショナリに常駐する異機種間サービス構成データが自動的に更新されます。この更新により、エージェント自動登録のアップロードは、未登録エージェントを最初に使用するときに1回実行すればよいことになります。インスタンス情報は、サーバーのデータ・ディクショナリに格納されるのではなく、接続ごとにアップロードされます。

4.4.1.2 エージェント自動登録の概要

異機種間サービスのエージェント自動登録機能では、次のタスクを実行できます。

- エージェントとOracle以外のデータ・ストアをOracleデータベース・サーバーに対して識別します。

- エージェントに対して、エージェントと接続先Oracleサーバーの両方に使用する異機種間サービス初期化パラメータの定義を許可します。

- 接続の初期化中に、機能定義とデータ・ディクショナリ変換(使用可能な場合)を異機種間サービス・エージェントからアップロードします。

注意:
クラス情報は、クラスがサーバーのデータ・ディクショナリで定義されていないときにのみアップロードされます。同様に、インスタンス情報は、インスタンスがサーバーのデータ・ディクショナリで定義されていない場合にのみアップロードされます。

エージェント自動登録に必要な情報には、次のエージェント指定名を使用してサーバーのデータ・ディクショナリ内でアクセスします。

- FDS_CLASS

- FDS_CLASS_VERSION

関連項目:
異機種間サービスのデータ・ディクショナリ・ビューの使用方法については、4.10項「異機種間サービスのデータ・ディクショナリ・ビューの使用」を参照してください。

4.4.1.2.1 FDS_CLASSおよびFDS_CLASS_VERSION

FDS_CLASSおよびFDS_CLASS_VERSIONは、Oracleまたはサード・パーティ・ベンダーにより、異機種間サービス・エージェントとバージョンごとに個別に定義されます。Oracle異機種間サービスでは、これらの名前が連結されてFDS_CLASS_NAMEとなり、サーバーのデータ・ディクショナリ内のクラス情報にアクセスするための主キーとして使用されます。

FDS_CLASSにはアクセスするOracle以外のデータ・ストアのタイプを指定し、FDS_CLASS_VERSIONにはOracle以外のデータ・ストアとそこに接続するエージェントのバージョン番号を指定する必要があります。エージェントのいずれかのコンポーネントに変更があった場合は、新リリースを一意に識別するようにFDS_CLASS_VERSIONも変更する必要があることに注意してください。

注意:
この情報は、各接続の初期化時にアップロードされます。

4.4.1.2.2 FDS_INST_NAME

インスタンス固有の情報をサーバーのデータ・ディクショナリに格納できます。インスタンス名FDS_INST_NAMEは、該当のエージェントを管理するデータベース管理者(DBA)により構成されます。DBAによるこの構成の実行方法は、使用中のエージェントに応じて異なります。

Oracleデータベース・サーバーでは、FDS_INST_NAMEを使用して、データ・ディクショナリ内でインスタンス固有の構成情報が参照されます。Oracleでは、その値が次のビューで同じ名前を持つ列の主キーとして使用されます。

- FDS_INST_INIT

- FDS_INST_CAPS

- FDS_INST_DD

FDS_INST_NAMEを使用したサーバーのデータ・ディクショナリへのアクセスでも、FDS_CLASS_NAMEを使用して構成情報の行が一意に識別されます。たとえば、データベースをクラスSybase816からクラスSybase817に移植する場合、両方のデータベースが同時にインスタンス名SCOTTで動作し、別個の構成情報セットを使用することが可能です。

クラス情報とは異なり、インスタンス情報はサーバーのデータ・ディクショナリに自動登録されません。

- インスタンス情報は(存在する場合)常にエージェントによりアップロードされます。ただし、サーバーのデータ・ディクショナリに格納されることはありません。かわりに、その情報はメモリーに保持され、その接続においてのみ有効です。

- サーバーのデータ・ディクショナリにインスタンス情報が含まれている場合は、そのインスタンス構成に対応する、データベース管理者が定義した設定の詳細を表します。データ・ディクショナリで定義されているインスタンス情報はクラス情報より優先されます。ただし、データ・ディクショナリで定義されているインスタンス情報よりも、アップロードされたインスタンス情報が優先されます。

4.4.1.3 HS_AUTOREGISTERの指定

Oracleデータベース・サーバーのHS_AUTOREGISTER初期化パラメータを使用すると、異機種間サービス・エージェントの自動登録を有効化または無効化できます。このパラメータは、エージェントの初期化ファイルではなくOracle初期化パラメータ・ファイル内で指定することに注意してください。たとえば、次のようにパラメータを設定できます。

HS_AUTOREGISTER = TRUE

TRUEに設定すると、エージェントは、以前に認識されていないエージェント・クラスまたは新規エージェント・バージョンの記述情報を、サーバーのデータ・ディクショナリにアップロードします。

このパラメータにはデフォルト値(TRUE)を使用することをお薦めします。この設定により、サーバーのデータ・ディクショナリの内容は常に、異機種間サービス接続に使用されるクラス機能とデータ・ディクショナリ変換の定義を確実に正しく表すものになります。

関連項目:
このパラメータの詳細は、『Oracle Databaseリファレンス』を参照してください。

4.4.2 エージェント自動登録の無効化

エージェント自動登録を無効化するには、HS_AUTOREGISTER初期化パラメータを次のように設定します。

HS_AUTOREGISTER = FALSE

エージェント自動登録を無効化すると、エージェント情報はデータ・ディクショナリに格納されません。そのため、異機種間サービスのデータ・ディクショナリ・ビューは有効な情報ソースでなくなります。ただし、Oracleサーバーは、各エージェントのクラスおよびインスタンスに関する情報を引き続き必要とします。エージェント自動登録を無効化すると、サーバーではこの情報がローカル・メモリーに格納されます。

4.5 Oracleデータベース・サーバーのSQL構文の処理

異機種間サービスとゲートウェイは、SQL文の変換または後処理が必要な場合、そのSQL文を書き換えます。

次の例では、Oracle以外のデータベースでINITCAP関数がサポートされていないことを前提にしています。たとえば、Oracle以外のデータベースから次の操作を要求するプログラムを考えてみます。次に例を示します。

SELECT "COLUMN_A" FROM "test"@remote_db
WHERE "COLUMN_A" = INITCAP("COLUMN_B");

INITCAP関数は、このOracle以外のデータベースでは認識されないため、Oracleデータベース・サーバーは、リモート・データベースのtest表からデータをフェッチして、ローカルで結果をフィルタします。ゲートウェイは、SELECT文を次のように書き換えます。

SELECT "COLUMN_A", "COLUMN_B" FROM "test"@remote_db;

問合せ結果がゲートウェイからOracleに送られ、Oracleデータベース・サーバーによりフィルタされます。

前述の例に示した"COLUMN_B"に文字リテラルまたはバインド変数が指定されている場合、Oracleサーバーの異機種間サービス・コンポーネントは、INITCAP関数を適用した後に、SQLコマンドをゲートウェイに送信します。たとえば、次のSQLコマンドが発行される場合を考えてみます。

SELECT "COLUMN_A" FROM "test"@remote_db WHERE "COLUMN_A" = INITCAP('jones');

次のSQLコマンドがゲートウェイに送信されます。

SELECT "COLUMN_A" FROM "test"@remote_db WHERE "COLUMN_A" = 'Jones';

次のUPDATE要求を考えてみます。

UPDATE "test"@remote_db SET "COLUMN_A" = 'new_value'
WHERE "COLUMN_A" = INITCAP("COLUMN_B");

この場合、Oracleデータベース・サーバーとゲートウェイはOracle以外のデータベース側のサポートの欠落を補えないため、エラーが発行されます。

前述の例の"COLUMN_B"に、文字列リテラルまたはバインド変数が指定されている場合、Oracleサーバーの異機種間サービス・コンポーネントは、INITCAP関数を適用した後に、SQLコマンドをゲートウェイに送信します。たとえば、次のSQLコマンドが発行される場合を考えてみます。

UPDATE "test"@remote_db SET "COLUMN_A" = 'new_value'
WHERE "COLUMN_A" = INITCAP('jones');

次のSQLコマンドがゲートウェイに送信されます。

UPDATE  "test"@remote_db SET "COLUMN_A" = 'new_value'
WHERE "COLUMN_A" = 'Jones';

以前のリリースでは、Oracle以外のデータベースでINITCAP関数がサポートされていないため、前述のUPDATE文でエラーが発生していました。

4.5.1 リモート・マップ文に対するデータ型チェックのサポート

Oracleデータベースは、同機種環境では常にデータ型チェックおよびデータ型の強制を実行します。たとえば、SELECT * FROM EMP WHERE EMPNO='7934'は、SELECT * FROM EMPNO WHERE EMPNO=7934と同じ結果を戻します。異機種環境でも同様に、リモート・マップ文に対して完全なデータ型チェックのサポートがあります。一般的に、SQL文のオペランドは、列、リテラル、バインド変数のいずれであっても、データ型チェックのために内部処理されます。次の例を考えてみます。

SELECT * FROM EMP@LINK WHERE NUMBER_COLUMN='123'
SELECT * FROM EMP@LINK WHERE NUMBER_COLUMN=CHAR_COLUMN;
SELECT * FROM EMP@LINK WHERE NUMBER_COLUMN=CHAR_BIND_VARIABLE;

ほとんどのOracle以外のデータベースは、データ型の強制をサポートしていないため、前述の文がそのままOracle以外のデータベースに送信された場合は失敗します。Oracleデータベースの異機種間サービス・コンポーネントは、Oracle以外のデータベースに使用可能な文を送る前に、データ型チェックと必要なデータ型の強制を実行します。

データ型チェックは、処理後の文またはリモート・マップ文に対して一環した動作を提供します。次の2つの文を考えてみます。

SELECT * FROM EMP@LINK WHERE TO_CHAR(EMPNO)='7933' + '1';

および

SELECT * FROM EMP@LINK WHERE EMPNO='7933' + '1';

前述のどちらの文も、Oracle以外のデータベースでTO_CHAR関数がサポートされているかどうかに関係なく、同じ結果および強制が提供されます。ここで、次の文を考えてみます。

SELECT * FROM EMP@LINK WHERE EMPNO='123abc' + '1';

データ型チェックが実施されているため、Oracle内で強制が試行されるとエラーが発生し、Oracle以外のデータベースに文が送られることなくエラーが戻されます。

つまり、処理後の文であるかリモート・マップ文であるかに関係なく、データ型チェックおよび強制の動作は一貫しています。

4.6 Oracle以外のデータベースに対するユーザー定義関数の実行

Oracle以外のリモート・データベースでユーザー定義関数を実行できます。次に例を示します。

SELECT getdeptforemp@Remote_DB(7782) FROM dual;

この例では、リモート・データベース内でユーザー定義関数が実行され、従業員7782に関する部門情報を戻すSELECT文が発行されています。

リモート関数がOracleデータベース内にある場合、Oracleデータベースでは、リモート関数によりデータベースの状態(データベースの行やPL/SQLパッケージの状態など)が更新されないことが自動的に確認されます。リモート関数がOracle以外のデータベースに常駐している場合、ゲートウェイではこのことを確認できません。したがって、ユーザーは、どのデータベースにおいてもユーザー定義関数により状態が更新されないように確認する必要があります。この確認が必要となるのは、読取り一貫性を保証するためです。

セキュリティ対策として、リモートで実行する関数とその所有者を、ゲートウェイ固有の初期化パラメータ・ファイルのHS_CALL_NAMEパラメータで指定する必要があります。次に例を示します。

HS_CALL_NAME = "owner1.A1, owner2.A2 "

owner1とowner2は、リモート関数の所有者名です。A1とA2は、リモート関数名です。リモート関数の所有者をSQL文で指定する必要はありません。リモート関数は、デフォルトでDatabase Gatewayの接続先スキーマに常駐する必要があります。他の場所に常駐する場合は、リモート関数の所有者をSQL文で指定してください。

ユーザー定義のリモート関数のその他の実行例を次に示します。

- 副問合せ内のリモート関数
次の関数は、employee_id列のデータを使用して、リモート・データベースのEMPLOYEES表からdepartment_idを取得します。外部問合せにより、戻されたリストと一致するリモート・データベース内の部門番号がすべて判別されます。

SELECT * FROM departments@remotedb
WHERE department_id IN
(SELECT
getdeptforemp@remotedb (employee_id)
FROM employees@remotedb);

- ユーザー定義リモート関数の結果に対するローカル関数の適用
次の問合せでは、リモート・データベース上の全従業員の最大給与が戻されます。

SELECT max (getsalforemp@remotedb (employee_id))
FROM employees@remotedb;

- DML文
次の文では、リモート・データベース内のユーザー定義問合せからの出力を使用して、salary列が新規給与情報で更新されます。

UPDDATE employee_history
SET salary = emp_changed_salary@remote_db;

前述の例では、OracleデータベースはDatabase Gatewayに関数名と所有者を渡します。ユーザー定義関数はリモート・データベース上で実行されます。

4.7 シノニムの使用

Oracle Databaseのシノニム機能を使用することで、データの場所の透過性とネットワークの透過性を完全に実現できます。シノニムを定義すると、ユーザーは、基礎となる表またはネットワーク・プロトコルを認識する必要がなくなります。シノニムは、すべてのOracleユーザーが参照できるようにパブリックとして指定できます。また、シノニムをプライベートとして指定することもできます。この場合、すべてのOracleユーザーがOracle以外の表にアクセスするためにシノニムを定義する必要があります。

次の文では、SybaseデータベースのユーザーORACLEのスキーマ内で、emp表に対してシステム単位のシノニムが作成されます。

CREATE PUBLIC SYNONYM emp FOR "ORACLE"."EMP"@SYBS;

関連項目:
シノニムの詳細は、『Oracle Database管理者ガイド』を参照してください。

4.7.1 分散問合せの例

注意:
これらの例を環境にあわせて変更してください。そのままの状態では実行しないでください。

次の文では、Oracleデータベース・サーバー、IBM DB2データベースおよびSybaseデータベース間でデータが結合されます。

SELECT O.CUSTNAME, P.PROJNO, E.ENAME, SUM(E.RATE*P."HOURS")
FROM ORDERS@DB2 O, EMP@ORACLE9 E, "PROJECTS"@SYBS P
WHERE O.PROJNO = P."PROJNO"
AND P."EMPNO" = E.EMPNO
GROUP BY O.CUSTNAME, P."PROJNO", E.ENAME;

ビューとシノニムの組合せを介して次のSQL文を使用すると、分散問合せの処理が透過的になります。

CREATE SYNONYM ORDERS FOR ORDERS@DB2;
CREATE SYNONYM PROJECTS FOR "PROJECTS"@SYBS;
CREATE VIEW DETAILS (CUSTNAME,PROJNO,ENAME,SPEND)
AS
SELECT O.CUSTNAME, P."PROJNO", E.ENAME, SUM(E.RATE*P."HOURS")
SPEND
FROM ORDERS O, EMP E, PROJECTS P
WHERE O.PROJNO = P."PROJNO"
AND P."EMPNO" = E.EMPNO
GROUP BY O.CUSTNAME, P."PROJNO", E.ENAME;

次のSQL文を使用して、1つの文でデータ・ストアから情報を取得します。

SELECT * FROM DETAILS;

この文では次の表が取得されます。

CUSTNAME         PROJNO           ENAME          SPEND
--------         ------           -----          -----
ABC Co.             1             Jones            400
ABC Co.             1             Smith            180
XYZ Inc.            2             Jones            400
XYZ Inc.            2             Smith            180

4.8 Oracleデータベース・サーバーからOracle以外のデータベース・システムへのデータのコピー

異機種間サービスでは、コールバック・リンクがサポートされます。これにより、次のようなSQL文を実行できます。

INSERT INTO table_name@dblink SELECT column_list FROM table_name;

異機種間サービスではコールバック機能がサポートされますが、この機能が実装されていないゲートウェイもあります。使用中のゲートウェイにこの機能が実装されていない場合、前述のINSERT文では次のエラー・メッセージが戻されます。

ORA-02025: All tables in the SQL statement must be at the remote database

関連項目:
コールバック・リンクのサポートについては、ゲートウェイのマニュアルを参照してください。

コールバック・リンクをサポートしていないゲートウェイの場合は、SQL*PlusのCOPYコマンドを使用できます。構文は次のとおりです。

COPY FROM username/password@db_name -
INSERT destination_table -
USING query;

次の例では、ローカルのOracleのemp表からすべての行が選択され、Oracle以外のデータベースのemp表に挿入され、トランザクションがコミットされます。

COPY FROM SCOTT/TIGER@inst1 -
INSERT EMP@remote_db -
USING SELECT * FROM EMP;

The COPY command supports the APPEND, CREATE, INSERT, and REPLACE options. However, INSERT is the only option supported when copying to non-Oracle databases. The SQL*Plus COPY command does not support copying to tables with lowercase table names. Use the following PL/SQL syntax with lowercase table names:
DECLARE
v1 oracle_table.column1%TYPE;
v2 oracle_table.column2%TYPE;
v3 oracle_table.column3%TYPE;
.
.
.
CURSOR cursor_name IS SELECT * FROM oracle_table;
BEGIN
OPEN cursor_name;
LOOP
FETCH cursor_name INTO v1, v2, v3, ... ;
EXIT WHEN cursor_name%NOTFOUND;
INSERT INTO destination_table VALUES (v1, v2, v3, ...);
END LOOP;

CLOSE cursor_name;
END;

関連項目:
COPYコマンドの詳細は、『SQL*Plusユーザーズ・ガイドおよびリファレンス』を参照してください。

4.9 Oracle以外のデータベース・システムからOracleデータベース・サーバーへのデータのコピー

CREATE TABLE文を使用すると、Oracle以外のデータベースからOracleデータベースにデータをコピーできます。ローカル・データベースに表を作成し、Oracle以外の表から行を挿入するには、次の構文を使用します。

CREATE TABLE table_name AS query;

次の例では、ローカルのOracleデータベースにemp表が作成され、Oracle以外のデータベースのEMP表から行が挿入されます。

CREATE TABLE table1 AS SELECT * FROM "EMP"@remote_db;

Alternatively, you can use the SQL*Plus COPY command to copy data from the non-Oracle database to the Oracle database server.

関連項目:
COPYコマンドの詳細は、『SQL*Plusユーザーズ・ガイドおよびリファレンス』を参照してください。

4.10 異機種間サービスのデータ・ディクショナリ・ビューの使用

異機種間サービスのデータ・ディクショナリ・ビューを使用すると、異機種間サービスに関する情報にアクセスできます。この節では、以下のトピックについて説明します。

- ビューのタイプ

- データ・ディクショナリ情報のソース

- 汎用ビューの使用

- トランザクション・サービス・ビューの使用

- SQLサービス・ビューの使用

4.10.1 ビューのタイプ

異機種間サービスのデータ・ディクショナリ・ビューは、次のカテゴリに分類できます。ビュー名はすべて接頭辞HS_で始まります。

- 汎用ビュー

- トランザクション・サービス用のビュー

- SQLサービス用のビュー

データ・ディクショナリ・ビューのほとんどは、クラスとインスタンスの両方に対して定義されています。ほとんどのタイプのデータには、*_CLASSビューと*_INSTビューがあります。詳細は、表4-1を参照してください。

表4-1 異機種間サービスのデータ・ディクショナリ・ビュー

ビュー

型

識別内容

HS_BASE_CAPS

SQLサービス

異機種間サービスでサポートされている全機能

HS_BASE_DD

SQLサービス

異機種間サービスでサポートされている、すべてのデータ・ディクショナリ変換表名

HS_CLASS_CAPS

トランザクション・サービス、SQLサービス

各クラスの機能

HS_CLASS_DD

SQLサービス

各クラスのデータ・ディクショナリ変換

HS_CLASS_INIT

汎用

各クラスの初期化パラメータ

HS_FDS_CLASS

汎用

Oracleサーバーからアクセス可能なクラス

HS_FDS_INST

汎用

Oracleサーバーからアクセス可能なインスタンス

HS_INST_CAPS

トランザクション・サービス、SQLサービス

各インスタンスの機能(DBAが設定している場合)

HS_INST_DD

SQLサービス

各クラスのデータ・ディクショナリ変換(DBAが設定している場合)

HS_INST_INIT

汎用

各インスタンスの初期化パラメータ(DBAが設定している場合)

HS_BULK

バルク・ロード・プロシージャで作成した内部オブジェクトを追跡するためのデータ・ディクショナリ・ビュー。

すべてのOracleデータ・ディクショナリ表と同様に、これらのビューは読取り専用です。基礎となる表の内容は変更しないでください。

4.10.2 データ・ディクショナリ情報のソース

異機種間サービス・データベース・リンクを介した特定の接続でデータ・ディクショナリの内容として使用される値は、次のソースから取得できます。各ソースを優先順に示します。

- セッションの開始時に接続先異機種間サービス・エージェントによりアップロードされるインスタンス情報。この情報により、Oracleデータ・ディクショナリ内の対応する内容がオーバーライドされますが、Oracleデータ・ディクショナリには格納されません。

- Oracleデータ・ディクショナリに格納されているインスタンス情報。このデータにより、接続先クラスの対応する内容がオーバーライドされます。

- Oracleデータ・ディクショナリに格納されているクラス情報。

Oracleデータベース・サーバーの実行時にHS_AUTOREGISTERサーバー初期化パラメータがFALSEに設定されている場合、Oracleデータ・ディクショナリに情報が自動的に格納されることはありません。接続が確立されるたびに、接続ごとに異機種間サービス・エージェントにより等価のデータがアップロードされ、インスタンス固有の情報がクラス情報より優先されます。

注意:
エージェントがインスタンス情報をアップロードできる可能性があるため、特定のセッションに使用中の機能とデータ・ディクショナリ変換は明確に判断できません。

V$HS_PARAMETERビューのVALUE列を問い合せると、異機種間サービスの初期化パラメータの値を判断できます。V$HS_PARAMETERのVALUE列では、実際の初期化パラメータ値が最大255文字から最大64文字に切り捨てられることに注意してください。パラメータ名は最大64文字から最大30文字に切り捨てられます。

4.10.3 汎用ビューの使用

次のビューは、すべてのサービスに共通です。

ビュー

内容

HS_FDS_CLASS

Oracleデータ・ディクショナリにアップロードされたクラスの名前

HS_FDS_INST

Oracleデータ・ディクショナリにアップロードされたインスタンスの名前

HS_CLASS_INIT

異機種間サービス初期化パラメータに関する情報

たとえば、Oracleデータベース・サーバーから複数のSybaseゲートウェイにアクセスできます。ゲートウェイに初めてアクセスすると、Oracleデータベース・サーバーにアップロードされた情報が次のように表示される場合があります。

SQL> SELECT * FROM HS_FDS_CLASS;

FDS_CLASS_NAME        FDS_CLASS_COMMENTS             FDS_CLASS_ID
--------------------- ------------------------------ ------------
Sybase816             Uses Sybase driver, R1.1                 1
Sybase817             Uses Sybase driver, R1.2                21

2つのクラス(Sybase816にアクセスするクラスとSybase817にアクセスするクラス)がアップロードされています。Oracleデータベース・サーバーのデータ・ディクショナリには、Sybase816とSybase817の両方のための機能情報、SQL変換およびデータ・ディクショナリ変換が含まれます。

Oracleデータベース・サーバーのデータ・ディクショナリには、アクセス対象であるOracle以外の各システム・インスタンスに対するHS_FDS_INSTビューのインスタンス情報も含まれます。

4.10.4 トランザクション・サービス・ビューの使用

Oracle以外のシステムが分散トランザクションに関係する場合、分散トランザクションに関与できるかどうかは、そのシステムとエージェントのトランザクション機能により制御されます。トランザクション機能は、HS_CLASS_CAPS表に格納されます。

Oracle以外のシステムとエージェントが2フェーズ・コミット・プロトコルをサポートできるかどうかは、2PCタイプの機能により指定されます。次の表に示すタイプのいずれかを指定できます。

型

機能

読取り専用(RO)

Oracle以外のシステムに対して実行できるのは、SQLのSELECT文を使用した問合せのみです。プロシージャ・コールはデータを書き込むと想定されるため許可されません。

単一サイト(SS)

Oracle以外のシステムでリモート・トランザクションを処理できますが、分散トランザクションは処理できません。つまり、2フェーズ・コミット・プロトコルには関与できません。

コミット確認(CC)

Oracle以外のシステムが分散トランザクションに関与できます。サーバーの2フェーズ・コミット・プロトコルには、コミット・ポイント・サイトとしてのみ関与できます。つまり、データを準備できませんが、グローバル・コーディネータから要求された場合は、特定のトランザクションの結果を記憶できます。

2フェーズ・コミット(2PC)

Oracle以外のシステムが分散トランザクションに関与できます。サーバーの2フェーズ・コミット・プロトコルには、コミット・ポイント・サイトではなく通常の2フェーズ・コミット・ノードとして関与できます。つまり、データを準備できますが、グローバル・コーディネータから要求されても特定のトランザクションの結果を記憶できません。

2フェーズ・コミット確認(2PCC)

Oracle以外のシステムが分散トランザクションに関与できます。サーバーの2フェーズ・コミット・プロトコルには、通常の2フェーズ・コミット・ノードまたはコミット・ポイント・サイトとして関与できます。つまり、データを準備でき、グローバル・コーディネータから要求された場合は、特定のトランザクションの結果を記憶できます。

異機種間サービスのHS_CLASS_CAPSデータ・ディクショナリ・ビューを使用すると、ドライバとOracle以外のシステムでサポートされているトランザクション・モデルを問い合せることができます。

次に、2PCタイプの機能の1つを示します。

SELECT cap_description, translation
FROM   hs_class_caps
WHERE  cap_description LIKE '2PC%'
AND    fds_class_name LIKE 'SYBASE%';

CAP_DESCRIPTION                          TRANSLATION
---------------------------------------- -----------
2PC type (RO-SS-CC-PREP/2P-2PCC)                  CC

When the non-Oracle system and agent support distributed transactions, the non-Oracle system is treated like any other Oracle server. When a failure occurs during the two-phase commit protocol, the transaction is recovered automatically. If the failure persists, the in-doubt transaction may need to be manually overridden by the database administrator.

4.10.5 SQLサービス・ビューの使用

SQLサービス固有のデータ・ディクショナリ・ビューには、次の情報が含まれています。

- Oracle以外のデータ・ソースのSQL機能とSQL変換

- Oracleデータ・ディクショナリ・ビューからOracle以外のシステムのデータ・ディクショナリへのマッピングに使用されるデータ・ディクショナリ変換

注意:
この項では、SQLサービス関連機能の一部についてのみ説明します。これらの設定を管理上の目的で変更する必要はないため、これらの機能についてはこの項では説明しません。

4.10.5.1 機能と変換に関するビューの使用

HS_*_CAPSデータ・ディクショナリ表には、Oracle以外のデータ・ソースのSQL機能と必須のSQL変換に関する情報が含まれています。これらのビューでは、Oracle以外のデータ・ストアまたはOracleデータベース・サーバーに特定のSQL言語機能が実装されるかどうかが指定されます。機能がオフになっている場合、Oracleでは、その機能を必要とするOracle以外のデータ・ソースにSQL文は送信されませんが、後処理は実行されます。

4.10.5.2 データ・ディクショナリ変換に関するビューの使用

Oracle以外のシステムがOracleデータベース・サーバーと同様にみえるように、異機種間サービス接続により、Oracleデータ・ディクショナリ・ビューの限定セットがOracle以外のシステムのデータ・ディクショナリにマップされます。このマッピングにより、アプリケーションでは、これらのビューがOracleデータ・ディクショナリに属している場合と同様に問合せを発行できます。このアクセスは、データ・ディクショナリ変換により可能になります。これらの変換は、名前に接尾辞_DDを含む各異機種間サービス・ビューに格納されます。

たとえば、次のSELECT文は、Sybaseのデータ・ディクショナリ表からemp表の情報を取得するSybaseの問合せに変換されます。

SELECT * FROM USER_TABLES@remote_db WHERE UPPER(TABLE_NAME)='EMP';
データ・ディクショナリ表は、変換するかわりに疑似実行できます。必要な情報がOracle以外のデータ・ソースのデータ・ディクショナリにないために、データ・ディクショナリ変換ができない場合、異機種間サービスではデータ・ディクショナリ表が使用可能であるかのように表示されますが、表には情報が含まれていません。

Oracle以外のシステム用に変換または疑似実行されるOracleデータ・ディクショナリ・ビューまたは表の情報を取得するには、ユーザーSYSとして接続し、HS_CLASS_DDビューに対して次の問合せを発行します。

SELECT DD_TABLE_NAME, TRANSLATION_TYPE
FROM   HS_CLASS_DD
WHERE  FDS_CLASS_NAME LIKE 'SYBASE%';

DD_TABLE_NAME                  T
-----------------------------  -
ALL_ARGUMENTS                  M
ALL_CATALOG                    T
ALL_CLUSTERS                   T
ALL_CLUSTER_HASH_EXPRESSIONS   M
ALL_COLL_TYPES                 M
ALL_COL_COMMENTS               T
ALL_COL_PRIVS                  M
ALL_COL_PRIVS_MADE             M
ALL_COL_PRIVS_RECD             M
...

変換タイプTは、変換が存在することを示します。変換タイプがMの場合は、データ・ディクショナリ表が疑似実行されます。

4.11 異機種間サービスの動的パフォーマンス・ビューの使用

Oracleデータベース・サーバーでは、エージェント、セッションおよびパラメータに関する情報が格納されます。動的パフォーマンス・ビューを使用すると、この情報にアクセスできます。この項の内容は次のとおりです。

- ホストで実行されているエージェントの判別: V$HS_AGENTビュー

- オープン状態の異機種間サービス・セッションの判別: V$HS_SESSIONビュー

- 異機種間サービスのパラメータの判別: V$HS_PARAMETERビュー

4.11.1 ホストで実行されているエージェントの判別: V$HS_AGENTビュー

V$HS_AGENTでは、指定されたホスト上で現在実行中の異機種間サービス・エージェントのセットを識別します。表4-2に、最も関連のある列を示します。このビューの各列の詳細は、『Oracle Databaseリファレンス』を参照してください。

表4-2 V$HS_AGENTビューの重要な列

列

説明

AGENT_ID

エージェントへの接続に使用されるOracle NetセッションID(listener.ora SID)

MACHINE

オペレーティング・システム・マシン名

PROGRAM

エージェントのプログラム名

AGENT_TYPE

エージェントのタイプ

FDS_CLASS_ID

外部データ・ストア・クラスのID

FDS_INST_ID

外部データ・ストアのインスタンス名

4.11.2 オープン状態の異機種間サービス・セッションの判別: V$HS_SESSIONビュー

V$HS_SESSIONビューには、エージェントごとのセッションが表示され、使用されるデータベース・リンクが指定されます。表4-3に、最も関連のある列を示します。このビューの各列の詳細は、『Oracle Databaseリファレンス』を参照してください。

表4-3 V$HS_SESSIONビューの重要な列

列

説明

HS_SESSION_ID

異機種間サービスの一意のセッションID

AGENT_ID

エージェントへの接続に使用されるOracle NetセッションID(listener.ora SID)

DB_LINK

エージェントへのアクセスに使用されるサーバーのデータベース・リンク名(NULLは、外部プロシージャの使用時など、データベース・リンクが使用されないことを意味します)

DB_LINK_OWNER

DB_LINKのデータベース・リンクの所有者

4.11.3 異機種間サービスのパラメータの判別: V$HS_PARAMETERビュー

V$HS_PARAMETERビューには、Oracleデータベース・サーバーに登録済の異機種間サービスのパラメータと値が表示されます。表4-4に、最も関連のある列を示します。このビューの各列の詳細は、『Oracle Databaseリファレンス』を参照してください。

表4-4 V$HS_SESSIONビューの重要な列

列

説明

HS_SESSION_ID

異機種間サービスの一意のセッションID

PARAMETER

異機種間サービス・パラメータ名

VALUE

異機種間サービス・パラメータの値

分散接続の確立に使用されたデータベース・リンク、起動時刻、およびセッションに使用された初期化パラメータのセットに関する情報も表示できます。ランタイム情報は、すべて動的に更新される表から導出されます。

5 パフォーマンスに関する推奨事項

この章では、分散SQL文の最適化方法および分散問合せのパフォーマンスを改善する方法について説明します。

この章には、次の項が含まれます。

- 異機種間の分散SQL文の最適化

- 分散問合せのパフォーマンスの最適化

注意:
一般的なデータ転送パフォーマンスの詳細は、4.2項「バルク・フェッチを使用したデータ転送の最適化」および4.3項「パラレル・ロードを使用したデータ・ロードの最適化」を参照してください。

5.1 異機種間の分散SQL文の最適化

Oracle以外のシステムからのデータにアクセスするSQL文を、異機種間の分散SQL文と呼びます。この種のSQL文を最適化するには、Oracleデータベースにのみアクセスする分散SQL文を最適化する場合と同じガイドラインに従います。ただし、通常、Oracleでサポートされている関数と演算子がすべて、Oracle以外のシステムでサポートされるわけではないことを考慮する必要があります。

Oracle Database Gatewayは、Oracleに対して(接続時に)、サポートする関数と演算子を知らせます。Oracle以外のデータ・ソースで関数または演算子がサポートされていない場合は、Oracleがその関数または演算子を実行します。この場合、Oracleはそのデータ・ソースからデータを取得し、関数または演算子をローカルに適用します。これはSQL文の分解方法に影響し、特にOracleが相手データ・ソースと同じコンピュータ上にない場合には、パフォーマンスが低下する場合があります。ただし、バルク・フェッチおよびバルク・ロード機能を使用してパフォーマンスを改善できます。

5.2 分散問合せのパフォーマンスの最適化

分散問合せのパフォーマンスを改善するには、次の方法を使用します。

- 最適なSQL文の選択。
多くの場合、同じ結果が得られるSQL文が複数存在します。すべての表が同じデータベースにある場合、これらのSQL文間のパフォーマンスの違いはほとんどありません。表が異なるデータベースにある場合は、パフォーマンスの違いが大きくなることがあります。また、最適なSQL文はリリースごとに変わる可能性があることに注意してください。

- 問合せオプティマイザの使用。
問合せオプティマイザはリモート表の索引を使用し、ルールベース・オプティマイザに比べると多数の実行計画を考慮するため、通常はより適切な結果が得られます。問合せオプティマイザを使用すると、通常は分散問合せで妥当なパフォーマンスが得られます。SQL文の変更、ビューの作成または手続き型コードの使用が必要になることはほとんどありません。

- ビューの使用。
ビューを使用すると分散問合せのパフォーマンスを改善できる場合があります。次に例を示します。

- リモート・データベース上で複数のリモート表を結合する場合

- ネットワークを介して異なる表を送信する場合

- リモート表からデータをパラレルで取得する場合

- 手続き型コードを使用する場合。
まれに、PL/SQLプロシージャやプリコンパイラ・プログラムなど、手続き型コードで分散問合せを置き換えるほうが効率的な場合があります。

索引
A  B  C  D  E  F  G  H  I  M  O  P  Q  R  S  T  U  V

A

エージェント

Database Gateway, 2.3.1

異機種間サービス

アーキテクチャ, 2.1

自動登録の無効化, 4.4.2

登録, 4.4, 4.4.1, 4.4.1.1, 4.4.1.2

エージェントのタイプ, 2.3

Oracle Database Gateway for ODBC, 2.3.2 アプリケーションの開発

異機種間サービス

Oracle以外のサーバーとエージェント間の配列フェッチの制御, 4.2.3

Oracleサーバーとエージェント間の配列フェッチの制御, 4.2.2

配列フェッチの再ブロック化の制御, 4.2.4

DBMS_HS_PASSTHROUGHパッケージ, 3.3

パススルーSQL, 3.3

バルク・フェッチの使用, 4.2

バルク・フェッチにOCIを使用, 4.2.1

配列フェッチ, 4.2.1

エージェント, 4.2.3

B

問合せのバインド

パススルーSQLを使用した実行, 3.3.3.2

BIND_INOUT_VARIABLEプロシージャ, 3.3.3, 3.3.3.1.4 BIND_OUT_VARIABLEプロシージャ, 3.3.3, 3.3.3.1.3 BIND_VARIABLEプロシージャ, 3.3.3 バッファ

複数の行, 3.3.3.2

バルク・フェッチ

データ転送の最適化に使用, 4.2

C

コールバック・リンク, 3.10.2

CLOSE_CURSORファンクション, 3.3.3

データのコピー

Oracleデータベース・サーバーからSQL Serverへ, 4.8

SQL ServerからOracleデータベース・サーバーへ, 4.9

INSERT文, 4.9

D

データ・ディクショナリ・ビュー

異機種間サービス, 4.10

データ型チェックのサポート

リモート・マップ文の, 4.5.1

DBMS_HS_PASSTHROUGHパッケージ, 3.3.1

ファンクションとプロシージャのリスト, 3.3.3

分散問合せ

パフォーマンスの最適化, 5.2

動的パフォーマンス・ビュー

異機種間サービス, 4.11

オープン・セッションの判別, 4.11.2

ホスト上のエージェントの判別, 4.11.1

E

EXECUTE_IMMEDIATEプロシージャ, 3.3.3

制限事項, 3.3.3.1

EXECUTE_NON_QUERYプロシージャ, 3.3.3

F

FDS_CLASS, 4.4.1.2.1

FDS_CLASS_VERSION, 4.4.1.2.1

FDS_INST_NAME, 4.4.1.2.2

機能

新機能, はじめに

FETCH_ROWプロシージャ, 3.3.3

パススルーSQLを使用した問合せの実行, 3.3.3.2

フェッチ

バルク, 4.2

ラウンドトリップの最適化, 3.3.3.2

G

ゲートウェイ

使用, 2.7

GET_VALUEプロシージャ, 3.3.3, 3.3.3.1.3, 3.3.3.1.4

H

異機種間サービス

エージェントの登録, 4.4

構成不一致の回避, 4.4.1.1

無効化, 4.4.2

有効化, 4.4.1

自動登録, 4.4.1.2

アプリケーション開発

Oracle以外のサーバーとエージェント間の配列フェッチの制御, 4.2.3

Oracleサーバーとエージェント間の配列フェッチの制御, 4.2.2

配列フェッチの再ブロック化の制御, 4.2.4

DBMS_HS_PASSTHROUGHパッケージ, 3.3

パススルーSQL, 3.3

バルク・フェッチの使用, 4.2

バルク・フェッチにOCIを使用, 4.2.1

データ・ディクショナリ・ビュー, 4.10

タイプ, 4.10.1

ソースの説明, 4.10.2

汎用ビューの使用, 4.10.3

SQLサービス・ビューの使用, 4.10.5

トランザクション・サービス・ビューの使用, 4.10.4

動的パフォーマンス・ビュー, 4.11

V$HS_AGENTビュー, 4.11.1

V$HS_SESSIONビュー, 4.11.2

初期化パラメータ, 2.5.2, 4.1 SQLサービス, 2.4.2 トランザクション・サービス, 2.4.1 HS_AUTOREGISTER初期化パラメータ

エージェント自動登録の有効化に使用, 4.4.1.3

HS_BASE_CAPSビュー, 4.10.1 HS_BASE_DDビュー, 4.10.1 HS_BULKビュー, 4.10.1 HS_CLASS_CAPSビュー, 4.10.1 HS_CLASS_DDビュー, 4.10.1 HS_CLASS_INITビュー, 4.10.1 HS_FDS_CLASSビュー, 4.10.1 HS_FDS_FETCH_ROWS初期化パラメータ, 4.2.3 HS_FDS_INSTビュー, 4.10.1 HS_BASE_CAPSビュー, 4.10.1 HS_INST_DDビュー, 4.10.1 HS_INST_INITビュー, 4.10.1 HS_RPC_FETCH_REBLOCKING初期化パラメータ, 4.2.4 HS_RPC_FETCH_SIZE初期化パラメータ, 4.2.2, 4.2.4

I

情報統合

Oracleソリューションのメリット, 1.3

課題, 1.1

Oracleでの対処方法, 1.2

メッセージ・ゲートウェイ, 1.2

オープン・システム・インタフェース, 1.2

Oracle Streams, 1.2

初期化パラメータ

異機種間サービス(HS), 2.5.2, 4.1

初期化パラメータ(HS)

全ゲートウェイに共通, 4.1

用途, 2.5.2

M

メッセージ・ゲートウェイ

定義, 1.2

複数行

バッファリング, 3.3.3.2

O

OCI

データ転送の最適化に使用, 4.2.1

オープン・システム・インタフェース

定義, 1.2

OPEN_CURSORプロシージャ, 3.3.3 Oracle Database Gateway for ODBC

異機種間サービス, 2.3.2

Oracle Database Gateway

SQL文の最適化, 5.1

Oracleデータベース・サーバー

SQL構文の処理, 4.5

Oracle Net Servicesリスナー, 2.2 Oracleプリコンパイラ

データ転送の最適化に使用, 4.2.1

Oracle Streams

定義, 1.2

Heterogeneous Connectivityに使用, 3.2

OUTバインド変数, 3.3.3.1.3

P

PARSEプロシージャ, 3.3.3

パススルーSQL

SQL解析の回避, 3.3

文の実行, 3.3.3

非問合せ, 3.3.3.1

問合せ, 3.3.3.2

バインド変数の使用, 3.3.3.1.1

INバインド変数の使用, 3.3.3.1.2

IN OUTバインド変数の使用, 3.3.3.1.4

OUTバインド変数の使用, 3.3.3.1.3

使用による影響, 3.3.2 概要, 3.3 制限事項, 3.3.2

Q

問合せ

パススルーSQL, 3.3.3.2

R

再ブロック化, 4.2.4

リモート・マップ文

データ型チェックのサポート, 4.5.1

行

複数のバッファリング, 3.3.3.2

S

SQL機能

データ・ディクショナリ表, 4.10.5.1

SQLサービス

データ・ディクショナリ・ビュー, 2.6.2, 4.10.1

異機種間サービス, 2.4.2

ビュー

異機種間サービス, 4.10.5

SQL文

分散型の最適化, 5.1

シノニム, 4.7

T

トランザクション・サービス

異機種間サービス, 2.4.1

ビュー

異機種間サービス, 4.10.4

U

ユーザー定義関数

Oracle以外のデータベースで実行, 4.6

V

変数

バインド, 3.3.3.1.1

Oracleの法律上の注意点

コピーライト

Copyright © 1994-2018, Oracle and/or its affiliates. All rights reserved.

ライセンス制約の保証と結果的に生じる損害の免責

このソフトウェアおよび関連ドキュメントの使用と開示は、ライセンス契約の制約条件に従うものとし、知的財産に関する法律により保護されています。ライセンス契約で明示的に許諾されている場合もしくは法律によって認められている場合を除き、形式、手段に関係なく、いかなる部分も使用、複写、複製、翻訳、放送、修正、ライセンス供与、送信、配布、発表、実行、公開または表示することはできません。このソフトウェアのリバース・エンジニアリング、逆アセンブル、逆コンパイルは互換性のために法律によって規定されている場合を除き、禁止されています。

保証免責

ここに記載された情報は予告なしに変更される場合があります。また、誤りが無いことの保証はいたしかねます。誤りを見つけた場合は、オラクルまでご連絡ください。

制限付権利について

このソフトウェアまたは関連ドキュメントを、米国政府機関もしくは米国政府機関に代わってこのソフトウェアまたは関連ドキュメントをライセンスされた者に提供する場合は、次の通知が適用されます。

U.S. GOVERNMENT END USERS: Oracle programs, including any operating system, integrated software, any programs installed on the hardware, and/or documentation, delivered to U.S. Government end users are "commercial computer software" pursuant to the applicable Federal Acquisition Regulation and agency-specific supplemental regulations. As such, use, duplication, disclosure, modification, and adaptation of the programs, including any operating system, integrated software, any programs installed on the hardware, and/or documentation, shall be subject to license terms and license restrictions applicable to the programs. No other rights are granted to the U.S. Government.

危険な用途への使用について

このソフトウェアまたはハードウェアは様々な情報管理アプリケーションでの一般的な使用のために開発されたものです。このソフトウェアまたはハードウェアは、危険が伴うアプリケーション(人的傷害を発生させる可能性があるアプリケーションを含む)への用途を目的として開発されていません。このソフトウェアまたはハードウェアを危険が伴うアプリケーションで使用する際、安全に使用するために、適切な安全装置、バックアップ、冗長性(redundancy)、その他の対策を講じることは使用者の責任となります。このソフトウェアまたはハードウェアを危険が伴うアプリケーションで使用したことに起因して損害が発生しても、Oracle Corporationおよびその関連会社は一切の責任を負いかねます。

商標と登録商標について

OracleおよびJavaはオラクルおよびその関連会社の登録商標です。その他の社名、商品名等は各社の商標または登録商標である場合があります。

Intel、Intel Xeonは、Intel Corporationの商標または登録商標です。すべてのSPARCの商標はライセンスをもとに使用し、SPARC International, Inc.の商標または登録商標です。AMD、Opteron、AMDロゴ、AMD Opteronロゴは、Advanced Micro Devices, Inc.の商標または登録商標です。UNIXは、The Open Groupの登録商標です。

第三者のコンテンツ、製品、サービスに対する免責事項

このソフトウェアまたはハードウェア、そしてドキュメントは、第三者のコンテンツ、製品、サービスへのアクセス、あるいはそれらに関する情報を提供することがあります。適用されるお客様とOracle Corporationとの間の契約に別段の定めがある場合を除いて、Oracle Corporationおよびその関連会社は、第三者のコンテンツ、製品、サービスに関して一切の責任を負わず、いかなる保証もいたしません。適用されるお客様とOracle Corporationとの間の契約に定めがある場合を除いて、Oracle Corporationおよびその関連会社は、第三者のコンテンツ、製品、サービスへのアクセスまたは使用によって損失、費用、あるいは損害が発生しても一切の責任を負いかねます。

Pre-General Availability (一般提供前)版のドキュメントについて

このドキュメントがPre-General Availability (一般提供前)版の場合:

このドキュメントはPre-General Availability (一般提供前)版であり、デモおよび暫定使用のみを目的としたものです。このソフトウェアを使用するハードウェアに限定するものではありません。Oracle Corporationおよびその関連会社は、このドキュメントに関して一切の責任を負わず、いかなる保証もいたしません。また、このドキュメントを使用したことによって損失、費用、あるいは損害が発生しても、一切の責任を負いかねます。

非公開のPre-General Availability (一般提供前)版のドキュメントについて

このドキュメントが非公開のPre-General Availability (一般提供前)版の場合:

このドキュメントに含まれる情報は、情報の共有のみを目的としたものであって、顧客諮問委員会(Customer Advisory Board)のメンバーとしてのお客様の立場でのみ、またはお客様のPre-General Availability Trial Agreement (Pre-GAトライアル契約)のみに従って検討されるべきものとします。マテリアル、コード、または機能の提供をお約束するものではなく、購入決定を行う際の判断材料とすべきではありません。このドキュメントに記載されている特徴または機能の開発、リリースおよび時期については、オラクルの裁量により決定されます。

このドキュメントには、ソフトウェアまたは印刷物などの形式を問わず、オラクルが独占的な権利を有する財産的情報が含まれています。この機密資料へのアクセスと使用は、お客様とオラクルとの間で締結され、お客様が遵守に同意した、Oracle Master Agreement、Oracle License and Oracle Services Agreement (オラクル・ライセンスおよびサービスに関する契約書)、Oracle Partner Network Agreement、Oracle Distribution Agreementまたはその他のライセンス契約の条件に従うものとします。このドキュメントとその内容の開示、コピー、複製および配布には、オラクルによる事前の承諾を必要とします。このドキュメントはライセンス契約の一部となるものではなく、オラクルおよびその子会社や関連会社との契約を構成するものではありません。

ドキュメントのアクセシビリティ

オラクルのアクセシビリティについての詳細情報は、Oracle Accessibility ProgramのWebサイト(http://www.oracle.com/pls/topic/lookup?ctx=acc&id=docacc)を参照してください。

Oracle Supportへのアクセス

サポートをご契約のお客様には、My Oracle Supportを通して電子支援サービスを提供しています。詳細情報は(http://www.oracle.com/pls/topic/lookup?ctx=acc&id=info)か、聴覚に障害のあるお客様は(http://www.oracle.com/pls/topic/lookup?ctx=acc&id=trs)を参照してください。