Oracle® Database Provider for DRDA

ユーザーズ・ガイド

12c リリース1 (12.1.0.2) for Linux x86-64

E98592-01(原本部品番号:E55482-01)

2014年6月

このドキュメントでは、DB2ベースのアプリケーションに大規模な投資をしたお客様に、アプリケーションの大半を変更せずにOracle Databaseに移行する方法について説明します。

Oracle Database Provider for DRDAユーザーズ・ガイド, 12c リリース1 (12.1.0.2) for Linux x86-64

E98592-01

Copyright © 2011, 2014, Oracle and/or its affiliates. All rights reserved.

原本著者: Roza Leyderman

原本協力者: Peter Castro、Charles Benet、Mark Jones、Roger Ford、Peter Wong

協力者: Database 12cのドキュメントを、本リリースに携わった全員にとって創造の源となったMark Townsendに捧げます。

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

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

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

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社およびその関連会社は一切の責任を負いかねます。

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

Intel、Intel Xeonは、Intel Corporationの商標または登録商標です。すべてのSPARCの商標はライセンスをもとに使用し、SPARC International, Inc.の商標または登録商標です。AMD、Opteron、AMDロゴ、AMD Opteronロゴは、Advanced Micro Devices, Inc.の商標または登録商標です。UNIXは、The Open Groupの登録商標です。

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

目次

例一覧

図一覧

表一覧

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

はじめに

- 対象読者

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

- 関連ドキュメント

- 表記規則

1 Oracle Database Provider for DRDAの概要

- Oracle Database Provider for DRDAについて

- DB2クライアント・アプリケーション

- リモートDB2アプリケーション

- ネイティブDB2アプリケーション

- Oracle Database Provider for DRDAの使用例

2 Oracle Database Provider for DRDAのアーキテクチャ

- プロトコルに関する考慮事項

- 2フェーズ・コミットおよびトランザクション・リカバリ

- サービスの自律性

- パッケージ

- SQL言語

3 Oracle Database Provider for DRDAのインストールおよび構成

- Oracle Database Provider for DRDAのインストール

- Oracle Database Provider for DRDAの構成

- drdaas.ora構成ファイルの更新

- DATA_PORTに関する考慮事項

- RDB_MAPに関する考慮事項

- Oracle Database Provider for DRDAインスタンスに関する考慮事項

- データベース・オブジェクトのインストール

- グローバル・オブジェクト

- SQL翻訳プロファイル

- 構成ファイル: drdaas.ora

- Oracle Database Provider for DRDAの認可

- 管理者ロール

- DRDAパッケージの認可

- ユーザー・ロール

- Oracle Database Provider for DRDAのアンインストール

- データベース・オブジェクトの削除

- Oracle Database Provider DRDAソフトウェアのアンインストール

- 構成パラメータ

- DATA_PORT

- RDB_MAP

- PROTOPROC_TRACE

4 Oracle Database Provider for DRDAのSQL翻訳および例

- SQL翻訳の概要

- DB2固有のSQL構文の翻訳

- DB2の特殊レジスタ

- DB2 SQLファンクションおよびプロシージャ

- DB2の名前付きデータ型

- DB2構文の文

- SQL Translator Interface Packageの使用

- SQL Translator Interface Package

- SQL翻訳プロファイルの作成

- Oracle Databaseからサードパーティ・トランスレータへのアクセス

- トランスレータ管理スクリプトの使用

- SQLトランスレータ・プロファイルの検証

- SQL翻訳プロファイルの変更

5 Oracle Database Provider for DRDAの管理およびカスタマイズ

- Oracle Database Provider for DRDAを使用した移行手順

- Oracle Database Provider for DRDAソフトウェアのインストールおよび構成

- Oracle DatabaseへのOracle Database Provider for DRDAオブジェクトのインストール

- DRDAパッケージの権限の管理

- DB2データの移行

- アプリケーションのターゲット再設定

- ネイティブ・アプリケーションのターゲット再設定

- リモート・アプリケーションのターゲット再設定

- SQL文の翻訳およびデータ型の調整

6 Oracle Database Provider for DRDAの診断およびメンテナンス

- Oracle Database Provider for DRDAの診断

- Oracle Database Provider for DRDAのメンテナンス

7 Oracle Database Provider for DRDAでのデータ型のサポートと変換

- データ型変換の概要

- 数値範囲に関する考慮事項: 全般

- Oracle NUMBER

- FLOAT (IBM HEXまたはS390)

- FLOAT (IEEE)

- DECFLOAT

- 数値範囲に関する考慮事項: COBOLユーザー

- DRDAデータ型からOracleデータ型への変換

- INTEGER

- SMALLINT

- BIGINT

- float

- DOUBLE PRECISIONまたはFLOAT(b)

- REALまたはFLOAT(b)

- DECIMAL(p,s)

- DECIMAL(p,s) zoned

- NUMERIC(p,s)

- DECFLOAT(n=34)

- DECFLOAT(n=16)

- CHAR(n)

- CHAR(n) for Bit Data

- VARCHAR(n)

- VARCHAR(n)

- VARCHAR(n) for Bit Data

- VARCHAR(n)

- VARCHAR(n)

- VARCHAR(n) for Bit Data

- char(n+1)

- char(n+1)

- char(n) for Bit Data

- VARGRAPHIC(n)

- GRAPHIC(n)

- VARGRAPHIC(n)

- char(n) (Pascal文字列)

- char(n) for Bit Data (Pascal L文字列)

- DATE

- TIME

- TIMESTAMP

- (datalink)

- BLOB

- CLOB

- DBCLOB

- BLOB LOCATOR

- CLOB LOCATOR

- DBCLOB LOCATOR

- boolean

- BINARY(n)

- VARBINARY(n)

- XML

- Oracleデータ型からDRDAへの変換

- Oracle NUMBERおよびFLOAT

- BINARY_FLOAT

- BINARY_DOUBLE

- VARCHAR2(n)

- LONG

- LONG RAW

- NVARCHAR2(n)

- CHAR(n)

- 短いバージョン

- 長いバージョン

- NCHAR(n)

- 短いバージョン

- 長いバージョン

- UROWID

- DATE

- TIMESTAMP

- TIMESTAMPWITHLOCALTIMEZONE

- TIMESTAMP(p) WITH TIME ZONE

- RAW(n)

- NUMBERおよびFLOAT

- 同等のデータ型および再マッピング

8 Oracle Database Provider for DRDAのデータ・ディクショナリ

- Oracle Database Provider for DRDAでのデータ・ディクショナリのエミュレーション

- z/OS上のDB2

- Oracle Database Provider for DRDAのデータ・ディクショナリ・ビュー

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

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

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

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

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

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

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

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

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

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

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

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

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

9 Oracle Database Provider for DRDAでのエラー・コードのサポート

- Oracleエラー・コードのマッピング

10 Oracle Database Provider for DRDAのコマンドライン・ユーティリティ

- コマンドライン・ユーティリティ

- START

- STOP

- STATUS

- PAUSE

- RESUME

- RELOAD

- EXIT

11 Oracle Database Provider for DRDAのセキュリティおよび記憶域に関する考慮事項

- Oracle Database Provider for DRDAのセキュリティおよび記憶域の概要

- Oracle Database Provider for DRDAでの認証および暗号化

- 認証サービス

- 暗号化サービス

- Oracle Database Provider for DRDAでのデータベース・ロール

- DRDAAS_ADMIN_ROLE

- DRDAAS_USER_ROLE

- Oracle Database Provider for DRDAの記憶域

- SYSIBM表領域

- SYSIBMユーザー

12 Oracle Database Provider for DRDAの使用に関する制限事項

- Resynch Manager

- カーソルのHOLD属性のセマンティクス

- DB2パスワードでのブランクの埋込み

- データ型の制限事項

- DATEデータ型

- Oracleオブジェクト・リレーショナル・データ型

- TIMESTAMPデータ型

- TIMESTAMP WITH TIMEZONEデータ型

- XMLデータ型

- SYS.XMLTypeデータ型

- その他の制限事項

13 Oracle Database Provider for DRDAにより使用されるPL/SQLパッケージ

- DBMS_DRDAAS_ADMINパッケージ

- DBMS_DRDAAS_ADMIN権限の定数

- GRANT_PRIVILEGE

- REVOKE_PRIVILEGE

- DROP_PACKAGE

- DROP_PACKAGE_VN

- DROP_PACKAGE_CT

- SET_PROFILE

- SET_LOCALDATE_FORMAT

- SET_LOCALTIME_FORMAT

- SET_TYPEMAP

- DBMS_DRDAASパッケージ

- DBMS_DRDAAS権限の定数

- BIND_PACKAGE

- BIND_STATEMENT

- END_BIND

- GRANT_PRIVILEGE

- REVOKE_PRIVILEGE

- DROP_PACKAGE

14 Oracle Database Provider for DRDAによるSQL文のサポート

- SQL文のサポートの概要

- SQL句の制限事項

- 内部処理されるSQL文

- セマンティクス上の効果を維持するSQL句の削除

- 無視されるSQL句

- 翻訳されるSQL句

- 特殊レジスタのサポート

- APPLICATION ENCODING SCHEME

- CLIENT_ACCTNG

- CLIENT_APPLNAME

- CLIENT_PROGRAMID

- CLIENT_USERID

- CLIENT_WRKSTNNAME

- DATE

- DBPARTITIONNUM

- DEBUG MODE

- DECFLOAT ROUNDING MODE

- DEFAULT TRANSFORM GROUP

- DEGREE

- EXPLAIN MODE

- EXPLAIN SNAPSHOT

- FEDERATED ASYNCHRONY

- IMPLICIT XMLPARSE OPTION

- ISOLATION

- LOCK TIMEOUT

- LOCALE LC_TYPE

- MAINTAINED TABLE TYPES FOR OPTIMIZATION

- MEMBER

- OPTIMIZATION HINT

- PACKAGE PATH

- PACKAGESET

- PATH

- PRECISION

- QUERY ACCELERATION

- QUERY OPTIMIZATION

- REFRESH AGE

- ROUTINE VERSION

- RULES

- SCHEMA

- SERVER

- SQL_CCFLAGS

- SQLID

- TIMESTAMP

- USER

- SESSION_USER

- SYSTEM_USER

- ENCRYPTION PASSWORD

A Oracle Database Provider for DRDAの作成およびメンテナンスのスクリプト

- catdrdaas.sql

- catnodrdaas.sql

- drdapkg_db2.sql

- drdasqtt_translator_setup.sql

- drdasqt_set_profile_dd.sql

B Oracle Database Provider for DRDAのパッケージ・バインド・オプション

用語集

索引

例一覧

- 3-1 SQL翻訳インタフェース・パッケージおよび翻訳プロファイルの作成

- 3-2 サンプル構成ファイル: drdaas.ora

- 3-3 DRDAAS_ADMIN_ROLEの付与

- 3-4 デフォルト値へのDRDAAS_ADMIN_ROLEの追加

- 3-5 管理者によるORACLE.MYPACKAGEパッケージの削除

- 3-6 ユーザーによるORACLE.MYPACKAGEパッケージの削除

- 3-7 ユーザーのパッケージ権限の付与および取消し

- 3-8 DRDAパッケージの翻訳プロファイル名の設定および削除

- 3-9 DRDAAS_USER_ROLEの付与

- 3-10 デフォルト値へのDRDAAS_USER_ROLEの追加

- 4-1 SQL Translator Interface Packageの作成

- 4-2 SQL Translator Interface PackageへのEXECUTE権限の付与

- 4-3 DRDAAS_TRANS_ADMINロールを持つユーザーへの必要な権限の付与

- 4-4 DRDAAS_USER_ROLEを持つユーザーへの翻訳権限の付与

- 4-5 SQL翻訳プロファイルの作成および管理

- 4-6 サードパーティのSQLトランスレータのロード(単一オブジェクト)

- 4-7 サードパーティのSQLトランスレータのロード(複数オブジェクト)

- 5-1 代替のSQL文の登録

- 5-2 オンデマンド・データ型変換の登録

- 7-1 DRDA SMALLINTに正確に対応させるためのOracle NUMBERの制約

- 7-2 列を直接使用する問合せでのTYPEMAPの使用

- 7-3 ファンクションでのTYPEMAPの使用

- 14-1 SQL文からの句の削除

- 14-2 特殊レジスタからの値の取得

- 14-3 特殊レジスタの設定

図一覧

- 1-1 DRDA接続モデル

- 1-2 ネイティブ・アプリケーション・リモート接続モデル

- 1-3 DB2サーバー接続モデルでのDB2 Connect置換

- 1-4 Access Managerプラグイン・アーキテクチャ接続モデル

- 1-5 DB2/400ネイティブDRDA使用接続モデル

- 2-1 AS中間層構成

表一覧

- 7-1 Oracle NUMBERバリアントからDRDAデータ型への変換

- 7-2 Oracle FLOATバリアントからDRDAデータ型への変換

- 7-3 Oracle NUMBER TYPEMAPデータ型の名前

- 8-1 ALL_DRDAASPACKAGEデータ・ディクショナリ・ビューの説明

- 8-2 ALL_DRDAASPACKAUTHデータ・ディクショナリ・ビューの説明

- 8-3 ALL_DRDAASPACKSIDEデータ・ディクショナリ・ビューの説明

- 8-4 DBA_DRDAASPACKAGEデータ・ディクショナリ・ビューの説明

- 8-5 DBA_DRDAASPACKAUTHデータ・ディクショナリ・ビューの説明

- 8-6 DBA_DRDAASPACKSIDEデータ・ディクショナリ・ビューの説明

- 8-7 DBA_DRDAASPACKSTMTデータ・ディクショナリ・ビューの説明

- 8-8 DBA_DRDAASPATRACEデータ・ディクショナリ・ビューの説明

- 9-1 OracleからDRDAへのエラー・コードのマッピング

はじめに

『Oracle Database Provider for DRDAユーザーズ・ガイド』では、DB2ベースのアプリケーションをほぼ変更せずに維持しながらOracle Databaseに移行する方法について説明します。

対象読者

このマニュアルは、DB2ベースのアプリケーションをOracle Databaseに移行する予定のユーザーを対象としています。ユーザーは、Oracle Databaseの概念および管理について理解している必要があります。

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

オラクル社のアクセシビリティへの取組みの詳細情報は、Oracle Accessibility ProgramのWebサイトhttp://www.oracle.com/pls/topic/lookup?ctx=acc&id=docaccを参照してください。

Oracleサポートへのアクセス

Oracleのお客様は、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を参照してください。

関連ドキュメント

詳細は、Oracle Databaseドキュメント・セットの次のマニュアルを参照してください。

- Oracle® Database概要

- 『Oracle® Database管理者ガイド』

- Oracle® Database移行ガイド

- 『Oracle® Database SQL言語リファレンス』

- Oracle® Databaseリファレンス

表記規則

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

規則

意味

太字

太字は、操作に関連するグラフィカル・ユーザー・インタフェース要素、または本文中で定義されている用語および用語集に記載されている用語を示します。

イタリック

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

固定幅

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

1Oracle Database Provider for DRDAの概要

この項では、Oracle Database Provider for DRDAテクノロジの概念について説明します。

この章には次のトピックが含まれます:

- Oracle Database Provider for DRDAについて

- DB2クライアント・アプリケーション

- Oracle Database Provider for DRDAの使用例

Oracle Database Provider for DRDAとは

Oracle Database Provider for DRDAは、Distributed Relational Database Architecture (DRDA)プロトコルを使用してクライアント・プログラムからOracle Databaseに接続できるようにするネットワーク・フロントエンドです。

Oracle Database Provider for DRDAは、互換性を実現するため、完全なDRDAバージョン4仕様のサブセットと、その他のDRDAサーバー製品(IBMのDB2など)の様々な側面を実装しています。これはデータベースに依存しないプロトコルであり、Oracle Databaseで使用可能な機能のみを提供します。Oracle Database Provider for DRDA製品により、既存のDB2アプリケーションをご利用のお客様は、DB2サーバーからの移行中に、投資したアプリケーション・テクノロジを利用できます。

DRDAプロトコルを使用するクライアント・プログラムまたはシステムは、アプリケーション・リクエスタ(AR)と呼ばれます。DRDAプロトコル・サービス(Oracle Database Provider for DRDAなど)を提供するサーバー・プログラムまたはシステムは、アプリケーション・サーバー(AS)と呼ばれます。

直接的なARとして、または中間インタフェース(埋込みSQLなど)を介してDRDAプロトコルを使用するように作成されたアプリケーションの場合、通常はOracle Database Provider for DRDAからOracle Databaseに接続するために既存のコードを変更する必要はありません。Oracle Databaseを使用するようにクライアント・アプリケーション環境を変更する際に必要となる変更は、最小限のアプリケーション構成変更(ターゲット再設定など)のみです。

DB2クライアント・アプリケーション

DB2アプリケーションは一般に次の2種類に分類されます。

- リモートDB2アプリケーション

- ネイティブDB2アプリケーション

リモートDB2アプリケーション

リモート・アプリケーションは、DRDAデータ・プロトコルを使用してターゲット・サーバー・データベースと通信します。このプロトコルのアーキテクチャは次の要素を含むクライアント/サーバー・モデルです。図1-1にこれを示します。

- クライアント・コンポーネント、DRDAアプリケーション・リクエスタ(AR)

- 基盤となるネットワーク(TCP/IPネットワークまたはSNA/APPCネットワークなど)

- サーバー・コンポーネント、アプリケーション・サーバー(AS)

図1-1 DRDA接続モデル

アプリケーションは、ARを使用してASと通信し、ASはデータベースと通信します。この構成では、ARがネットワークに接続するため、アプリケーションは間接的にネットワークを認識します。アプリケーションがネットワーク接続を直接認識する必要はありません。

通常、DRDA AR実装にはアプリケーション開発者がコーディングする直接コール可能なAPI (ODBCなど)があります。このAPIは、埋込みSQL文を含むソース・コードを同等の埋込みAPIコールに変換する言語プリプロセッサの一部として起動することもできます。これは、概念的にOracleのOCI API製品およびOracleのPro*Cプリプロセッサ製品と似ています。どちらの場合でも、アプリケーションは実際のデータベース接続を認識しません。特定のAPIコールのみがアプリケーションをデータベースにアタッチします。Oracle® Call Interfaceプログラマーズ・ガイドおよびPro*C/C++プログラマーズ・ガイドを参照してください。

ネットワーク内のクライアント/サーバー・アーキテクチャにはクロス・プラットフォームの相互運用性があります。クライアントとサーバーは、サポートされているコンピュータ・プラットフォームであればどのプラットフォームでも実行できます。たとえば、IBMのDB2データベース・サーバー製品は、AS/400、z/OS、VM、VSE、Linux、様々なUNIXプラットフォームおよびMicrosoft Windowsで使用できます。また、IBMはDB2 Connect製品などのクライアントを様々なプラットフォームで使用できるようにしています。これにより、クライアントは様々なサーバーと通信でき、同一ホストまたは異なるリモート・ホスト上の異なるサーバーへ容易にリダイレクトできます。

リモート・アプリケーションの例を次に示します。

- ODBCベースのアプリケーション

- Java/JDBCベースのアプリケーション

- DB2データベース(リモート・データベース間接続に使用)

- DB2 Connect (ネイティブ・アプリケーションのリダイレクトに使用)

- 各種AR実装のいずれかを使用するカスタム・アプリケーション

ODBC対応アプリケーションおよびJDBC対応アプリケーションでは、アプリケーション自体に対する変更をほとんど行わずに、Oracle Database Provider for DRDAを使用するようにターゲットを再設定できます。

IBMのDB2製品ではDRDAがネイティブでサポートされており、DB2をリクエスタ、サーバーまたはこの両方として使用できます。このマニュアルでは、DB2がOracle Serverへのリクエスタであるシナリオについてのみ説明します。

ネイティブDB2アプリケーション

ネイティブ・アプリケーションはOracle Database Provider for DRDAでサポートされていますが、ネットワークをリダイレクトするには既存のDB2データベース・サーバーを必要とします。これは、ネイティブDB2アプリケーションはDB2サーバーとより緊密に連携しているためです。このクラスのアプリケーションは、ローカルの専用APIを使用して特定のDB2サーバーと直接通信します。このようなアプリケーションは他のデータベースには直接接続できませんが、リモート・ノード接続メカニズムを使用してリモート・データベースに間接的に接続できます。これを図1-2に示します。

図1-2 ネイティブ・アプリケーション・リモート接続モデル

完全なDB2サーバーを使用して単にリモート・アクセスをネイティブ・アプリケーションに提供する処理は、非常に高いコストがかかるため、これは理想的な方法ではありません。これはライセンス・モデルの「プロセッサ単位」の構造と、ディスクおよびメモリーのフットプリントの両方に起因しています。

リモート接続を提供する場合、完全なマルチプロセッサDB2サーバーに代わる、より適切な手段として、DB2 Connectなどのローカル・アプリケーションを使用する方法があります。この場合、図1-3に示すように、アプリケーションのアクセスをDRDA経由でのネットワーク接続に変えることができます。

図1-3 DB2サーバー接続モデルでのDB2 Connect置換

場合によっては、DB2データベース・サーバーを代替のネイティブ・アプリケーション・イネーブラに置き換えることができないことがあります。このようなアプリケーションには次のものがあります。

- z/OS上のCICS DB2接続アプリケーション

- DB2/400ネイティブ・アプリケーション

- DB2 for z/OSネイティブ・アプリケーション

- DB2 for Linux, Unix, and Windowsネイティブ・アプリケーション

このような状況では、アプリケーションをプロキシ経由(ローカルDB2データベース・サーバーを介して)で接続できます。これは理想的な方法ではありませんが、DB2サーバー製品への投資が削減されます。アプリケーションがDB2データベース製品を使用していない場合、DB2サーバーの数を、アプリケーション・プロキシとして必要なDB2インスタンスの数まで削減できます。

Oracle Database Provider for DRDAの使用例

Oracle Database Provider for DRDAのいくつかの使用例をリモートDB2アプリケーションおよびネイティブDB2アプリケーションで説明しています。Oracle Database Provider for DRDAを介してOracle Databaseを使用するように、リモート・アプリケーションおよびネイティブ・アプリケーションの両方でターゲットを再設定できます。

Oracle Database Provider for DRDAはネットワーク・ソリューションであるため、ネットワーク・インフラストラクチャに、ネイティブ・アプリケーションのターゲット再設定時のロード増加に対応できる十分な容量が必要です。リモート・アプリケーションの場合、クライアントとサーバー間のデータ・フローが大きく変化することはありません。

ほとんどの例では標準的なAR (通常はIBMによって提供されるAR)が中心となっていますが、廃止されたOracle Access Manager for AS/400のかわりにアプリケーション・サーバーが使用されるケースがあります。Access Managerは、ネイティブDB2/400アプリケーションがリモートDB2データベースと同様の方法でOracle Databaseに接続できるようにするクライアント側プログラムです。Access Managerは、DB2/400 APIプラグインとしてAS/400上で実行され、OCIメソッドを使用してOracle Databaseに接続します。これを図1-4に示します。

図1-4 Access Managerプラグイン・アーキテクチャ接続モデル

DB2/400のプラグイン・インタフェースAPIはDRDAと同様に動作し、システムに対してはOCIおよびSQL*Netを内部で使用してOracle Databaseに接続するアプリケーション・リクエスタのように見えます。AS/400からネイティブ・アプリケーションをOracle Databaseに接続する必要があるお客様にとっては、Oracle Database Provider for DRDAはよりコスト効率の高いソリューションであることがわかります。このアプローチを図1-5に示します。

図1-5 DB2/400ネイティブDRDA使用接続モデル

Access Managerの例は、アプリケーション・サーバー経由でOracle Database インスタンスへネイティブ・アプリケーションのターゲットを再設定できる例の1つです。

ここで説明したすべての使用例では、Oracle Database Provider for DRDAを使用してOracle Databaseに接続できます。

2Oracle Database Provider for DRDAのアーキテクチャ

この章では、Oracle Database Provider for DRDAのアーキテクチャについて説明します。

この章には次のトピックが含まれます:

- プロトコルに関する考慮事項

- 2フェーズ・コミット・トランザクションのリカバリ

- サービスの自律性

- パッケージ

- SQL言語

DB2でDRDAの詳細は、http://www.ibm.comでDB2 Version 9.1 for z/OS Information Centerを参照してください。

プロトコルに関する考慮事項

DRDAは、Oracle SQL*Netデータ・プロトコルといくつかの類似点があるデータ・プロトコルです。DRDAは、クライアントとサーバー間でリレーショナル・データを移動するように設計されていますが、SQL*Netに備わっている堅牢性の高い管理およびルーティング制御はありません。DRDAとSQL*Netの主な違いは、プロトコル自体の言語です。DRDAとSQL*Netは互換性がないため、SQL*Netクライアントを使用したDRDAサーバーへの接続(またはその逆)はできません。

DRDAで使用される用語はSQL*Netに似ており、一般的な概念は、従来のOracleの定義に当てはめると、次の例のようになります。

- アプリケーション・リクエスタ(AR)は、クライアント・プログラムがSQLベースのリクエストを作成してアプリケーション・サーバーに送信するためのインタフェースです。

- アプリケーション・サーバー(AS)は、クライアントのかわりにこのようなリクエストを受け入れ、データベース操作を実行し、結果データをクライアントに戻すサーバー側およびデータベース側のプログラムです。

2フェーズ・コミットおよびトランザクション・リカバリ

DRDAとDB2では、トランザクションをコミットおよびロールバックできるようにする2つのコマンド・セットが実装されています。これにより、トランザクション更新中にデータの整合性が維持され、トランザクションのコミット時に接続またはアプリケーションで障害が発生した場合にはこれらの更新をリカバリできます。DRDAでは、シングル・サイトおよび2フェーズの両方のコミット・プロトコルを実装するコマンドがサポートされています。最小限でも、ASはSingleSiteコミットをサポートする必要があります。

- シングル・サイト・コミット・プロトコルは、分散トランザクションに関与しているノード間の調整機能がない単純な操作で構成されています。これは基本的なデータ・コミット・メカニズムであり、ほとんどの一般的なアプリケーションで使用されています。

- 2フェーズ・コミット・プロトコルでは、同一ノードまたは異なるネットワーク・ノード上の複数のトランザクションを調整できます。

サービスの自律性

アプリケーション・サーバーは、Oracle Databaseサーバーの外部にあります。このため、アプリケーションには様々なロケーション・オプションがあります。

通常の構成では、図1-1に示すように、ASはOracle Databaseと同じマシン上で実行されます。ASはOracle Databaseと密接に統合されていないため、それ自体のOracleホームにインストールされるか、または図2-1に示すようにクライアントおよびデータベースとは別のマシンにインストールされます。この中間層構成では、サービス・リソースを切り離すことができます。また、個別のマシン・リソースをASとデータベースのそれぞれに専用として使用できるため、サービスのスケーリングが向上します。

図2-1 AS中間層構成

クライアント層およびサーバー層からASを切り離すことで、セキュリティと信頼性も向上します。ASがクラッシュしても、Oracle Databaseインスタンスには影響しません。データベースの整合性が維持され、トランザクションの状態がリカバリされます。

パッケージ

DRDAアプリケーションに関連付けられているリソースはパッケージと呼ばれます。具体的には、アプリケーション・リクエスタはアプリケーションで行われる処理内容の参照としてパッケージを使用します。パッケージには文が格納されています。アプリケーションは、セクション番号によって文を参照します。アプリケーションの文は、一般に静的な文と動的な文の2種類に分類されます。

- 静的な文には、ハードコーディングされたSQLが含まれます。アプリケーションの実行中にSQLテキストが変更されない文です。実行にかかる時間が非常に短く、多くの場合、高いパフォーマンスを実現するために実行前に最適化されます。事前に定義されているため、静的SQLを初めてコールするときの実行時間が短縮されます。

- 動的な文は、主に空のプレースホルダであり、汎用カーソルとも呼ばれます。実行前にはSQLテキストがなく、アプリケーションによって操作で必要な実際のSQL文が作成され、実行時に最適化されます。通常、最初のコールの後に処理済の動的SQL文がキャッシュに入れられるので、これ以降に同じ文が実行される場合にかかる時間は、同程度に複雑な静的SQL文と同等になります。

パッケージは専用ツールを使用して作成されます。たとえばDB2アプリケーション環境では、開発者が埋込みSQL文が含まれているアプリケーションを作成することがよくあります。アプリケーション・ソースはSQL PreCompiler (OracleのPro*Cプリコンパイラに類似する機能)により処理されます。通常、出力は後処理され、ソース・プログラムで使用されるオンディスク・リソース形式の文とともにソース・モジュールに取り込まれます。DB2の用語で説明すると、これによりデータベース・リクエスト・モジュール(DBRM)が作成されます。このファイルを作成するほとんどの実装では、ファイルが独自の形式で外部に格納されます。

DBRMの内容は、リモート・データベースにロードされるか、または実行時点でASに対して使用可能になっている必要があります。ただし、独自の形式のデータをロードする際には様々な課題があります。DRDAではこれに対処するため、リソース定義をターゲットASにリモートでアップロードするための一連のコマンド・リクエストが用意されています。ほとんどのAR実装では、アプリケーションのSQLセッションの実行前または実行中にリソースをアップロードするためのオプションまたはツールがあります。このプロセスはパッケージのバインドと呼ばれます。

リソース定義(DBRM)がパッケージとしてリモート・データベースにバインドされた後で、ASはパフォーマンス向上のために事前にDBRMをロードできます。

SQL言語

現在のほとんどのSQLベース・データベース・システムと同様に、Oracleは部分的にANSI SQLに準拠していますが、いくつかの例外があります。ANSI SQL規格の実装はデータベース・ベンダーによって異なるため、SQL言語で文の実行時にいくつかの課題が生じます。DRDAで使用されていた、当初のターゲット・データベースがDB2であるため、ここで説明するアプリケーションではDB2固有のSQL言語を使用します。

ほとんどのデータ操作言語(DML)および一部のデータ定義言語(DDL)は、よく使用されるオブジェクト(表、ビュー、索引、単純なプロシージャ、ファンクンション定義など)についてANSI SQLで標準化されています。ただし、各データベース・ベンダーによって、DDLおよびDMLの両方に対するそれぞれの製品固有の拡張が今後も提供されていきます。DRDAプロトコルは、SQL文をデータベースが処理する必要があるデータベース固有のエンティティとして扱います。このことは、SQLはDB2の言語で記述されること、Oracle Databaseで処理するには翻訳サービスが必要になることを意味します。この翻訳はSQL翻訳フレームワーク機能により提供されます。詳細はOracle® Database移行ガイドを参照してください。

3Oracle Database Provider for DRDAのインストールおよび構成

この章では、Oracle Database Provider for DRDAのインストール、構成、管理について説明します。

この章には次のトピックが含まれます:

- Oracle Database Provider for DRDAのインストール

- Oracle Database Provider for DRDAの構成

- Oracle Database Provider for DRDAの認可

- Oracle Database Provider for DRDAのアンインストール

- 構成パラメータ

Oracle Database Provider for DRDAのインストール

インストールでは、Oracle Universal Installerを起動し、Oracleホーム・パスを入力し、インストールする製品としてOracle Database Provider for DRDAを選択します。インストールでは、製品のインタビュー・パネルで様々な初期構成項目の入力が求められます。

次の手順を実行すると、ディレクトリ$ORACLE_HOME/drdaas/admin/にdrdaas.ora構成ファイルが作成されます。構成ファイル: drdaas.oraを参照してください。

Oracle Database Provider for DRDAをインストールするには、次のようにします。

1. Oracle Universal Installerを起動します。

2. 既存のORACLE_HOMEのパスまたは新しいパス(スタンドアロン・インストールの場合)を入力します。

3. [オプション] ORACLE_HOME名を入力します。

4. インストールするOracle Database Provider for DRDAを選択します。

5. インタビュー・パネルで、次の情報を入力します。

- Oracle Database Provider for DRDAリスナーのホスト名またはIPアドレス
Oracle Database Provider for DRDAがリスナーであるネットワーク・インタフェースのホスト名またはIPアドレスを指定します。

デフォルトは空の文字列です。

- Oracle Database Provider for DRDAリスナー・ポート番号
Oracle Database Provider for DRDAリスナーのポート番号を指定します。

デフォルトは1446です。

- Oracle Database Provider for DRDA RDBマップ名
クライアント・アプリケーションでロケーション修飾子として使用される外部リレーショナル・データベース名を指定します。

デフォルトはDRDAASです。

- Oracle Database接続記述子
Oracle Databaseへの接続に使用する接続記述子を指定します。有効な値は次のとおりです。

- TNS(tns_name_sentry) (例: TNS(orcl))

- oracle_sidまたはORACLE_SID
環境変数$ORACLE_SIDの設定に基づいて、Oracle Database Provider for DRDAの起動前にローカルOracle Databaseにアクセスします。

- TNS-Descriptor
次に例を示します。

DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=drdaas))
(CONNECT_DATA=(SERVICE_NAME=drdaas.us.oracle.com)));

デフォルトはoracle_sidです。

6. 「終了」を選択します。

7. コマンド・プロンプトで、診断ディレクトリを作成します。

% mkdir -p $ORACLE_HOME/log/diag/dps

Oracle Database Provider for DRDAの構成

Oracle Database Provider for DRDAを構成するには、drdaas.ora構成ファイルを必要な情報で更新する必要があります。

また、Oracle Database Provider for DRDAを使用するすべてのOracle Databaseインスタンスに、Oracle Database Provider DRDA製品に依存するオブジェクトをインストールする必要があります。

drdaas.ora構成ファイルの更新

通常、インストール時に指定されるパラメータ以外にパラメータを追加する必要はありません。パラメータとそのオプションのリストについては、構成パラメータを参照してください。

高度なシナリオでは、複数のDATA_PORTパラメータを指定するか、複数のRDB_MAPエントリを構成する必要があります。さらに複雑なインストールでは、複数のOracle Database Provider for DRDAインスタンスが必要となることがあります。

DATA_PORTに関する考慮事項

追加のDATA_PORTエントリには、異なるホスト名またはIPアドレスおよび未割当てのネットワーク・ポート番号を指定します。これは、多重インスタンス構成と呼ばれます。

RDB_MAPに関する考慮事項

サードパーティのリレーショナル・データベースとOracleの間での変換のためのマップ・エントリを追加するには、追加のRDB_MAPエントリを指定します。

一部のDRDAクライアント(IBM DB2 Database for z/OSなど)では、ユーザーはOracle Database Provider for DRDAインスタンスごとにRDB_MAPエントリを1つのみ構成する必要があります。これは、専用インスタンス構成と呼ばれます。

Oracle Database Provider for DRDAインスタンスに関する考慮事項

両方のタイプのDRDAクライアントを含む環境に対応するには、複数のOracle Database Provider for DRDAインスタンスを定義する必要があることがあります。このため、Oracle Database Provider for DRDA製品では1つのdrdaas.ora構成ファイルで複数のインスタンス構成を定義できます。

データベース・オブジェクトのインストール

インストールする必要がある2種類のデータベース・オブジェクトは、グローバル・オブジェクトおよびユーザー別オブジェクトです。

グローバル・オブジェクト

Oracle Database Provider for DRDA構成で使用される各Oracle Databaseインスタンスでは、Oracle Database Provider for DRDA固有のオブジェクトをインストールする必要があります。このためには次の手順を実行します。

- SYSIBM表領域の作成

- Oracle Database Provider for DRDAカタログのインストール

- DB2 SQLトランスレータのインストール

- Oracle Database Provider for DRDA管理ロールの指定

第11章「Oracle Database Provider for DRDAのセキュリティおよび記憶域に関する考慮事項」を参照してください。

SYSIBM表領域を作成するには、次のようにします。

1. データベースに接続します。この例ではSYSDBA権限を使用しますが、必須ではありません。

> connect SYS as SYSDBA

2. 表領域SYSIBMを作成します。

> create tablespace SYSIBM datafile 'sysibm01.dbf' size 70M
reuse extent management local segment space management auto online;

これにより、これは、パラメータDB_CREATE_FILE_DESTで指定されたディレクトリにSYSIBM表領域が作成されます。これは、SYSIBM表領域の項で詳しく説明します。

Oracle Database Provider for DRDAカタログをインストールするには、次のようにします。

1. $ORACLE_HOME/rdbms/adminディレクトリに移動します

$ cd $ORACLE_HOME/rdbms/admin

2. SYSDBA権限でデータベースに接続します。

> connect SYS as SYSDBA

3. 次のSQLスクリプトを起動します。

> @catdrdaas.sql

付録A「Oracle Database Provider for DRDAの作成およびメンテナンスのスクリプト」のcatdrdaas.sqlを参照してください。

4. Oracle Databaseリリース12cを使用している場合は、次のSQLスクリプトを起動します。

> @prvtdpsadzoscat.plb

Oracle Databaseリリース11.2を使用している場合は、次のSQLスクリプトを起動します。

> @prvtdpsadzoscat11.plb

DB2 SQLトランスレータをインストールするには、次のようにします。

この機能は、Oracle Database 12c以上のユーザーが使用できます。

1. $ORACLE_HOME/drdaas/adminディレクトリに移動します

$ cd $ORACLE_HOME/drdaas/admin

2. SYSDBA権限でデータベースに接続します。

> connect SYS as SYSDBA

3. 次のSQLスクリプトを起動し、プロンプトに従って操作します。

> @drdasqtt_translator_setup.sql

スクリプトdrdasqtt_translator_setup.sqlは例3-1に示されています。

Oracle Database Provider for DRDA管理ロールを指定するには、次のようにします。

1. Oracle Database Provider DRDA管理者として1つ以上のユーザーIDを指定します。このロールにより、DRDAパッケージとその関連するDRDAパッケージ属性へのアクセス権限が設定されます。OracleユーザーSYSTEMを使用できますが、DRDA管理者の機能を実行するすべてのユーザーにその権限を付与する必要があります。

2. 初期DRDAパッケージ・バインディング権限を付与します。次のSQLスクリプトを起動し、プロンプトに従って操作します。

> @drdapkg_db2.sql

SQL> Prompt Enter the OracleID under which the initial package BINDs will be made
SQL> Use quotes (') if needed.
SQL> Accept OracleID
DRDAUSR

SQL> Enter default collection ID for package binding (usually NULLID)
SQL> Use quotes (') if needed.
SQL> Accept DefaultCollection
NULLID

Oracle Database Provider for DRDAでのデータベース・ロールおよびDBMS_DRDAAS_ADMINパッケージを参照してください。

SQL翻訳プロファイル

この機能は、Oracle Database 12c以上のユーザーが使用できます。

DRDAベース・アプリケーションSQLがネイティブDB2言語からOracleへ正しく解釈されるようにするため、ユーザーはSQL翻訳プロファイルを作成する必要があります。

これらの手順を実行するには、ユーザーにDRDAAS_USER_ROLEが必要です。詳細は、Oracle Provider for DRDAの認可を参照してください。

DB2 SQLトランスレータをデータベースにロードする必要があります。グローバル・オブジェクトを参照してください。ユーザーはこのトランスレータを使用して翻訳プロファイルを作成できます。

SQL翻訳プロファイルは、ユーザー単位で管理されます。対照的に、DRDAパッケージはアプリケーション単位で管理されます。その結果、1つのDRDAパッケージには1つのSQL翻訳プロファイル名のみが関連付けられます。1つのSQL翻訳プロファイルを複数のパッケージに関連付けることができます。整合性のために、定義されている各パッケージに同じSQL翻訳プロファイルを関連付ける必要があります。SQL翻訳の詳細は、Oracle®Database移行ガイドを参照してください。

追加の翻訳プロファイルを作成するには、DRDAユーザーはDRDA管理者に対しプロファイル名をリクエストし、その後、$ORACLE_HOME/drdaas/admin/ディレクトリにあるdrdasqtt_translator_setup.sqlスクリプトを起動します。例3-1は、プロファイル名DB2ZOSのSQL翻訳プロファイルを作成する方法を示しています。このコードは、翻訳プロファイルのテンプレートを作成します。

例3-1 SQL翻訳インタフェース・パッケージおよび翻訳プロファイルの作成

この例では、SQL Translator Interface PackageSYSIBM.DBTooIntPkgおよびSQL翻訳プロファイルTRANS_ADMIN.MyDBTooTransProfileが作成されます。サードパーティのSQLトランスレータはJAVAで作成されており、rdbms/drdaas/jlibディレクトリ内のオブジェクトThirdPartyDB2Translator.class内にトランスレータ全体が含まれていることを前提としています。

次の2行には、サードパーティ・オブジェクト内の2つのトランスレータ・メソッドのシグネチャが記述されています。

ThirdPartyTranslator.translateSQL(oracle.sql.CLOB,oracle.sql.CLOB[])
ThirdPartyTranslator.translateError(int,int[],java.lang.String[])

これらのシグネチャにより、OracleがSQLテキストとOracleエラー・コードの両方を翻訳するためにコールするメソッドが決定します。メソッドtranslateSQL()には、元のSQLテキストのためのCLOBとSQLトランスレータからのCLOB出力のためのCLOBという2つの引数があります。2番目のメソッドは無視できます。

connect / as sysdba
@$ORACLE_HOME/drdaas/admin/drdasqtt_translator_setup.sql

Enter schema in which the SQL Translator Interface Package will be created as well
as into which the third-party SQL translator will be loaded (usually SYSIBM).
SQL Translator Interface Package Schema:SYSIBM

Enter unqualified name of the SQL Translator Interface Package
SQL Translator Interface Package Name:DBTooIntPkg

Enter schema in which the Translation Profile will be created:
Translation Profile Schema:TRANS_ADMIN

Enter the unqualified name of the translation profile:
Translation Profile Name:MyDBTooTransProfile

Enter the "language" type of the translator: C, java, etc
Translator Language:JAVA

Enter the path names of the third-party SQL Translator objects;
(All objects must be located under the "rdbms/" directory,
for example: "rdbms/drdaas/jlib/objecta.jar").

Enter all path qualified objects, one per prompt, up to 10.

Enter "" for all remaining object prompts.
SQL Translator object#1: rdbms/drdaas/jlib/ThirdPartyDB2Translator.class
SQL Translator object#2: ""
...
SQL Translator object#10: ""

Enter the signature for the entry for 'translateSQL' in one of the
previously entered SQL Translator objects:
Entry for
translateSQL:ThirdPartyTranslator.translateSQL(oracle.sql.CLOB,oracle.sql.CLOB[])

Enter the signature for the entry for 'translateError' in one of the
previously entered SQL Translator objects callout for
translateError:ThirdPartyTranslator.translateError(int,int[],java.lang.String[])

必要に応じて翻訳を追加、変更、削除できます。詳細は、Oracle® Database移行ガイドを参照してください。

構成ファイル: drdaas.ora

ファイルdrdaas.oraはOracle Database Provider for DRDAのインスタンスを定義します。このファイルは、アプリケーション・サーバーのインスタンスを定義する初期化パラメータで構成されています。

ファイルdrdaas.oraはカスタマイズできます。また、インストール時にインストーラによって提示される質問とユーザー入力から作成することもできます。

drdaas.ora構成ファイルはOracleホーム内の製品管理ディレクトリに配置されている必要があります。

デフォルトの位置は$ORACLE_HOME/drdaas/adminです。

インスタンス名で修飾されたパラメータは、その特定インスタンスにのみ適用されることに注意してください。インスタンス名で修飾されていないパラメータは、ファイルに指定されているすべてのインスタンスに適用されます。

例3-2 サンプル構成ファイル: drdaas.ora

# Example pre-configured instance named "drdaas"
# defines a single port and an rdb map that uses
# the local database instance accessed through
# the ORACLE_SID environmental variable.
drdaas.DATA_PORT = 10.0.0.1:1446
drdaas.RDB_MAP = RDB(DB2DS4M)->ORACLE_SID
#
# Example instance using a single port and a single rdb map
drdasingle.DATA_PORT = 10.0.0.1:1546
drdasingle.RDB_MAP = RDB(DB2DSN1)->TNS(ora101)
#
# Example instance using multiple rdb mappings
drdamulti.DATA_PORT = 10.0.0.1:2446
drdamulti.RDB_MAP = RDB(DB2DSN1)->TNS(ora101)
drdamulti.RDB_MAP = RDB(DB2DSN2)->TNS(ora102)
drdamulti.RDB_MAP = RDB(DB2DSN3)->TNS(ora103)
#
# global section affects all instances unless overridden
PROTOPROC_TRACE="ALL ERROR"

Oracle Database Provider for DRDAの認可

Oracle Database Provider for DRDAカタログおよび特定のDRDAパッケージにアクセスするには、Oracleユーザーに適切なOracle Database Provider for DRDAロールが必要です。Oracle Database Provider for DRDAの記憶域を参照してください。

管理者ロール

管理機能を実行する必要があるユーザーには、DRDAAS_ADMIN_ROLEロールが必要です。これにより、特定のDRDAパッケージに対する権限を付与し、パッケージ属性(SQL翻訳プロファイル名)を割り当てることができるようになります。

例3-3 DRDAAS_ADMIN_ROLEの付与

connect sys as sysdba
grant DRDAAS_ADMIN_ROLE to DRDAADMIN;

デフォルト・ロールALLがないインストール環境では、ユーザー用に複数のデフォルト・ロール(CONNECTまたはRESOURCEなど)を用意し、例3-10に示すように、DRDAAS_ADMIN_ROLEをデフォルト・リストに追加します。

例3-4 デフォルト値へのDRDAAS_ADMIN_ROLEの追加

alter user DRDAADMIN default role CONNECT, DRDAAS_ADMIN_ROLE;

DRDAAS_ADMIN_ROLEロールは、DRDAパッケージを使用する必要があるユーザーを対象としていません。例3-9に示すように、かわりにDRDAAS_USER_ROLEの割当が必要となります。

管理は主に、ユーザーへの権限の付与と取消し、パッケージの属性の設定、パッケージの削除に関連します。

パッケージを作成するユーザーまたはパッケージ所有者として指定されるユーザーには、そのパッケージに対する暗黙的な権限が付与されており、他のユーザーにアクセス権限を付与できます。たとえばパッケージの所有者は、任意の数のユーザーにRUN権限を付与できます。所有者は、パッケージ属性の設定とパッケージの削除も実行できます。

ただし、最初にパッケージをバインドするため、ユーザーにはコレクション内の任意のパッケージまたは特定のパッケージに対するBIND権限が必要です。DRDAAS_ADMIN_ROLEロールを持つユーザーだけが、まだバインドされていないパッケージまたはユーザーが作成者でも所有者でもないパッケージに対する権限をユーザーに付与できます。パッケージへのアクセス権の付与方法とパッケージ属性の設定方法の詳細は、DRDAパッケージの認可を参照してください。

管理者のもう1つの重要な役割として、古いパッケージや使用されていないパッケージをシステムから消去することがあります。すべてのパッケージのリストを取得するには、表ALL_DRDAASPACKAGEを問い合せます。

SELECT * from ALL_DRDAASPACKAGE;

例3-5 管理者によるORACLE.MYPACKAGEパッケージの削除

この機能は、DRDA管理者ロールを持つユーザーが実行する必要があります。

connect DRDAADM/password
execute DBMS_DRDAAS_ADMIN.DROP_PACKAGE('ORACLE','MYPACKAGE);
commit;

例3-6 ユーザーによるORACLE.MYPACKAGEパッケージの削除

この機能は、DRDAユーザー・ロールを持つユーザーが実行する必要があります。ユーザーDRDAUSR2がパッケージORACLE.MYPACKAGEを所有していない場合、このパッケージを作成したユーザーではない場合、このパッケージのDROP権限がない場合には、この操作は失敗します。

connect DRDAUSR2/password
execute DBMS_DRDAAS.DROP_PACKAGE('ORACLE','MYPACKAGE);
commit;

DRDAパッケージの認可

DRDA管理者は、DRDAパッケージ名および(オプションで)SQL翻訳プロファイル名をユーザーに渡す前に、これらの機能を実行する必要があります。

特定のDRDAパッケージへのアクセス権を付与できるのは、DRDA管理者だけです。例3-7は、パッケージORACLE.MYPACKAGEのユーザーDRDAUSRxにBIND、DROPおよびEXECUTE権限を付与する方法を示しています。

例3-7 ユーザーのパッケージ権限の付与および取消し

connect DRDAADM/password

Rem Grant BIND on any package in collection ORACLE to DRDAUSR
execute DBMS_DRDAAS_ADMIN.GRANT_PRIVILEGE(
DBMS_DRDAAS_ADMIN.BIND_PRIVILEGE, 'ORACLE', '*', 'DRDAUSR');

Rem Grant BIND on package ORACLE.MYPACKAGE to user DRDAUSR2
execute DBMS_DRDAAS_ADMIN.GRANT_PRIVILEGE(
DBMS_DRDAAS_ADMIN.BIND_PRIVILEGE, 'ORACLE', 'MYPACKAGE', 'DRDAUSR2');

Rem Grant EXECUTE on package ORACLE.MYPACKAGE to PUBLIC
execute DBMS_DRDAAS_ADMIN.GRANT_PRIVILEGE(
DBMS_DRDAAS_ADMIN.EXECUTE_PRIVILEGE, 'ORACLE', 'MYPACKAGE', 'PUBLIC');

Rem Grant SET on package ORACLE.MYPACKAGE to user DRDAUSR3
execute DBMS_DRDAAS_ADMIN.GRANT_PRIVILEGE(
DBMS_DRDAAS_ADMIN.SET_PRIVILEGE, 'ORACLE', 'MYPACKAGE', 'DRDAUSR3');

Rem Grant DROP on any package in collection ORACLE to user DRDAUSR3
execute DBMS_DRDAAS_ADMIN.GRANT_PRIVILEGE(
DBMS_DRDAAS_ADMIN.DROP_PRIVILEGE, 'ORACLE', '*', 'DRDAUSR3');

Rem Grant ALL on any package in collection NULLID to user DRDAUSR3
execute DBMS_DRDAAS_ADMIN.GRANT_PRIVILEGE(
DBMS_DRDAAS_ADMIN.ALL_PRIVILEGE, 'NULLID', '*', 'DRDAUSR3');

Rem Revoke BIND on package ORACLE.NOTYOURPKG from user DRDAUSR3
execute DBMS_DRDAAS_ADMIN.REVOKE_PRIVILEGE(
DBMS_DRDAAS_ADMIN.BIND_PRIVILEGE, 'ORACLE', 'NOTYOURPKG', 'DRDAUSR3');

Rem Revoke ALL on any package in Collection OTHER from user DRDAUSR4
execute DBMS_DRDAAS_ADMIN.REVOKE_PRIVILEGE(
DBMS_DRDAAS_ADMIN.ALL_PRIVILEGE, 'OTHER', '*', 'DRDAUSR4');

また、DRDA管理者は、DRDAパッケージに関連付けるSQL翻訳プロファイル名も指定します。例3-8は、プロファイル名をDB2ZOSに設定する方法を示しています。

例3-8 DRDAパッケージの翻訳プロファイル名の設定および削除

connect DRDAADM/password

Rem Set the DB2ZOS profile name for "any" package in collection ORACLE
DBMS_DRDAAS_ADMIN.SET_PROFILE( 'ORACLE', '*', 'DB2ZOS' );

Rem Set the MYDB2ZOS profile name for package ORACLE.MYPACKAGE
DBMS_DRDAAS_ADMIN.SET_PROFILE( 'ORACLE', 'MYPACKAGE', 'MYDB2ZOS' );

Rem Deleting the profile name for package ORACLE.MYPACKAGE
execute DBMS_DRDAAS_ADMIN.SET_PROFILE( NULL, 'ORACLE', 'MYPACKAGE' );

Rem Deleting the profile name for "any" package in collection ORACLE
execute DBMS_DRDAAS_ADMIN.SET_PROFILE( NULL, 'ORACLE', '*' );

ユーザー・ロール

DRDAからデータベースにアクセスする各ユーザーには、デフォルトとしてDRDAAS_USER_ROLEユーザー・ロールが必要です。

例3-9 DRDAAS_USER_ROLEの付与

connect sys as sysdba
grant DRDAAS_USER_ROLE to DRDAUSR;

通常ユーザーにはデフォルト・ロールALLが付与されており、付与されたすべてのロールが即時に有効になります。ユーザーが明示的なデフォルト・ロールを持つ場合、例3-10に示すように、そのユーザーにはDRDAAS_USER_ROLEロールも必要です。

すべてのデフォルト・ロールが含まれているリストを指定しないと、ユーザーがデータベースに接続できなくなるか、または特定のリソースを暗黙に処理できなくなることに注意してください。Oracle® Database SQL言語リファレンスおよびOracle Databaseセキュリティ・ガイドを参照してください。

例3-10 デフォルト値へのDRDAAS_USER_ROLEの追加

alter user DRDAUSR default role CONNECT, RESOURCE, DRDAAS_USER_ROLE;

Oracle Database Provider for DRDAのアンインストール

Oracle Database Provider for DRDAの完全なアンインストールでは、データベース・オブジェクトが削除され、Oracle Database Provider for DRDAソフトウェアがアンインストールされます。製品依存オブジェクトが削除され、顧客データはそのまま保持されます。

データベース・オブジェクトの削除

次の手順では、データベースからOracle Database Provider for DRDAオブジェクトがすべて削除され、ユーザー作成表領域が削除されます。

データベース・オブジェクトを削除するには、次のようにします。

1. $ORACLE_HOME/rdbms/adminディレクトリに移動します。

> cd $ORACLE_HOME/rdbms/admin

2. SYSDBAオプションを使用してデータベースに接続します。

connect / as sysdba

3. 削除スクリプトを実行します。

catnodrdaas.sql

付録A「Oracle Database Provider for DRDAの作成およびメンテナンスのスクリプト」のcatnodrdaas.sqlを参照してください。

4. ユーザーが作成した表領域sysibmおよびその内容を削除します。

> drop tablespace sysibm;

DROP TABLESPACEのオプションについては、Oracle® Database SQL言語リファレンスを参照してください。

Oracle Database Provider for DRDAソフトウェアのアンインストール

Oracle Database Provider DRDAソフトウェアをアンインストールするには、-deinstallオプションを指定してOracle Universal Installerを使用する必要があります。-homeオプションを使用してOracleホームのパスを指定するか、Oracle Universal Installerの実行時にOracleホームを選択します。Oracleソフトウェアのアンインストール手順の詳細は、Oracle® Databaseインストレーション・ガイドを参照してください。

Oracle Database Provider DRDAソフトウェアをアンインストールするには、次のようにします。

1. Oracle Universal Installerで「インストールされた製品」をクリックします。

2. 目的のORACLE_HOMEを選択します。
ORACLE_HOME全体を選択するか、「ORACLE_HOME」ナビゲーション・ツリーを開いてOracle Database Provider for DRDA製品ソフトウェアを選択します。

3) 「削除」をクリックします。

構成パラメータ

この項には、構成ファイルで使用されるパラメータの説明が含まれています。

DATA_PORT

このインスタンスが使用するDRDAデータ・ポートを指定します。これはインターネット・アドレスとポート番号で示されます。

デフォルト値

デフォルトのポート番号はありません。明示的なポート番号を指定する必要があります。1446を使用することをお薦めします。

使用可能な値

有効な未割当てのTCP/IPネットワーク・ポート番号。オプションで、ローカル・マシンで定義されているネットワーク・インタフェースに関連付けられている特定のホスト名またはIPアドレスが接頭辞として付加されます。

構文

DATA_PORT = {host_name|ip_address:}number

使用例

DATA_PORT = 10.0.0.1:1446

RDB_MAP

このstringパラメータは、DRDA ACCRDBコマンド・オブジェクトで渡されるリレーショナル・データベース名を、Oracle TNSエントリまたはローカルで対応可能なOracleインスタンスにマップします。このパラメータには、複数のマップ・エントリ・オカレンスが含まれることがあります。

この属性にデフォルト値はありません。

オプションの値を次に示します。

- tns_name_entryはローカルtnsnames.ora構成ファイルのTNSエントリに対応しています。

- tns_entryは、完全に構成されたTNS記述子文字列です。これは、TNS名エントリのかわりに使用できます。

- oracle_sidは、Oracle Database Provider for DRDAインスタンスの起動前に設定された$ORACLE_SID環境変数の値を使用します。

RDB_MAPを1回以上使用することで、古いアプリケーション・リクエスタとの互換性モードが決定することに注意してください。デフォルトは、ORACLE_SID環境変数に基づいて1つのOracle Databaseインスタンスに接続する1つの専用の定義です。

使用可能な値

有効な未割当てのTCP/IPネットワーク・ポート番号。オプションで、ローカル・マシンで定義されているネットワーク・インタフェースに関連付けられている特定のホスト名またはIPアドレスが接頭辞として付加されます。

構文

RDB_MAP = RDB(rdb_name)->TNS(tns_name_entry)
RDB_MAP = RDB(rdb_name)->ORACLE_SID
RDB_MAP = RDB(rdb_name)->"tns_entry"

使用例

RDB_MAP = RDB(DB2DSN1)->ORACLE_SID
RDB_MAP = RDB(DB2DSN2)->TNS(ora101)
RDB_MAP = RDB(DB2DSN3)->"(ADDRESS=(PROTOCOL=TCP)(HOST=10.0.0.1)(PORT=1446))"

PROTOPROC_TRACE

このパラメータは、DRDAプロトコル・プロセッサのトレースのトレース機能と詳細レベルを指定します。すべての初期Oracle Database Provider DRDAセッションは、この設定を使用して実行されます。このパラメータは、機能の値とレベルの値のペアで構成されます。値タプルがカンマで区切られている場合は、複数の値を同時に指定できます。

また、すべてのASセッション・スレッドが実行されるトレースの初期レベルも指定します。PROTOPROC_TRACEは、10進数値または同等の指定テキスト値です。

PROTOPROC_TRACEパラメータで使用される機能名は次のとおりです。

- TASK: タスク固有の操作

- NET: ネットワーク固有の操作

- SQL: SQL固有の操作

- OCI: OCIリソースの操作

- MEM: メモリー・リソースの操作

- ALL: 前述のすべての機能

PROTOPROC_TRACEレベルの値は加算式です。たとえば、ERROR(4)にはWARN(2)およびINFO(1)のメッセージが含まれます。次の値が使用されます。

- 0またはNONE: トレースは生成されません。これがデフォルトです。

- 1またはINFO: 最小限のトレースが生成されます。

- 2またはWARN: 警告情報が生成されます。

- 4またはERROR: エラー情報が生成されます。

- 8またはADMIN: 管理情報が生成されます。

- 255およびALL: すべての詳細情報が生成されます。

デフォルト値

0またはなし

使用可能な値

機能名の後にレベルを指定します。

使用例

PROTOPROC_TRACE="ALL ADMIN"
PROTOPROC_TRACE="TASK WARN, NET ADMIN, MEM INFO"

4 Oracle Database Provider for DRDAのSQL翻訳および例

この項では、SQL翻訳のトピックを簡単に紹介し、IBMからOracleへのSQL翻訳の実例を示します。

SQL翻訳はOracle Database 12cの新機能です。以前のリリースのOracle Databaseでは、SQL翻訳なしでOracle Provider for DRDAを使用できます。

この章には次のトピックが含まれます:

- SQL翻訳の概要

- DB2固有のSQL構文の翻訳

- SQL Translator Interface Packageの使用

- Oracle Databaseからサードパーティ・トランスレータへのアクセス

- トランスレータ管理スクリプトの使用

- SQLトランスレータ・プロファイルの検証

- SQL翻訳プロファイルの変更

SQL翻訳の詳細は、Oracle® Database移行ガイドを参照してください

SQL翻訳の概要

SQL翻訳の概念は、Oracle Databaseリリース12cで導入されました。この機能により、DB2などの外部のSQL文を、Oracle Databaseが正しく使用できるSQL構文に翻訳できるようになります。SQL翻訳自体は、主にサードパーティから翻訳用に提供されるSQLトランスレータにより実装されます。SQLトランスレータは、入力SQLを検査し、場合によってはOracle SQLの構文に準拠するように入力SQLを変更します。SQL翻訳プロファイルは、SQL Translator Interface Packageで指定されます。このプロファイルにより、使用するSQLトランスレータが指定されます。

各DB2パッケージは、そのパッケージで保持されている属性によってSQL翻訳プロファイルに関連付けられます。DB2パッケージに対して指定されたSQL翻訳プロファイルに関連付けられているSQLトランスレータは、そのDB2パッケージ内のSQL文を準備する際に使用されます。

翻訳が実行されるようにするには、次の操作が、示されている順序で実施される必要があります。

1. SQLトランスレータを取得します。

2. そのトランスレータを参照するSQL Interface Packageを作成します。

3. SQL Interface Packageを参照するSQL翻訳プロファイルを作成します。
この手順はインスタンスの存続期間中に1回だけ行う必要があります。ただし、SQL翻訳を使用するにはこれを少なくとも1回は実行する必要があります。

複数のトランスレータを使用する場合や、異なるSQL翻訳プロファイルが必要な場合には、このプロセスを繰り返します。

4. SQL翻訳プロファイルとDB2パッケージを関連付けます。
この手順は、作成するパッケージごとに実行する必要があります。

パッケージを翻訳プロファイルに関連付ける前にパッケージを作成する必要はありません。パッケージの名前だけが必要となります。この手順では、特定のパッケージがすでに存在しているかどうかは検証されません。

5. 実行時には、ユーザーはパッケージを介してOracle Database Provider for DRDAにSQLテキストを渡します。

6. Oracle Database Provider for DRDAは、SQLテキストを取得すると、パッケージにSQL翻訳プロファイルが関連付けられているかどうかを確認してから、SQLテキストの解析および実行時にそのSQL翻訳プロファイルを有効にするように設定します。

7. Oracle Database Provider for DRDAがSQLテキストを実行のために準備した後で、Oracle Databaseが現在のSQL翻訳プロファイルを使用してSQL文を翻訳し、実行します。

SQL翻訳は、次の状況に該当する場合にのみ正常に完了します。

- 次のコマンドを使用してSQL翻訳プロファイルがセッションに対して有効になっている必要があります。

ALTER SESSION SET SQL_TRANSLATION_PROFILE

- 受信するSQL文が外部の構文またはOracle以外のSQL言語で記述されていることを、プロセスが指定している必要があります。この項で説明するすべてのケースでは、SQL言語はDB2 SQLのバリエーションです。

Oracle Database Provider for DRDA製品の場合、前述の2つの条件が結合されます。つまり、DB2パッケージにSQL翻訳プロファイルが関連付けられている場合、SQL文は外部構文で記述されていると想定されます。また、そのパッケージでSQLを翻訳するときにはSQL翻訳プロファイルに関連付けられているSQLトランスレータがコールされます。

SQL翻訳プロファイルは、SQL TRANSLATION PROFILE型のスキーマ・レベルのオブジェクトです。ATTR_TRANSLATOR属性を介してPL/SQLパッケージを参照します。このパッケージはSQL Translator Interface Packageと呼ばれます。このパッケージは、SQL翻訳プロファイルがアクティブなときにSQL翻訳を実行するサードパーティのSQLトランスレータを指定します。一度に1つのSQL翻訳プロファイルだけを有効にできます。

SQL翻訳プロファイルは、ユーザー間で共有できます。一般には、すべてのユーザーが1つのSQL翻訳プロファイルを一連のパッケージで共有しますが、これは必須ではありません。

DB2固有のSQL構文の翻訳

クライアント・アプリケーションがOracle Database Provider for DRDAに送信するSQLコンストラクトのほとんどは直接実行されますが、一部のDB2 SQLコンストラクトはOracleによって認識されません。この項では、Oracle Databaseインスタンスを使用するように再構成されたアプリケーションによって発行されたDB2 SQL文を翻訳する際の既知の問題について説明します。

SQL翻訳プロファイルが存在する場合、そのプロファイルに関連付けられているSQLトランスレータは、これらのSQL文を変更するように設計されています。これにより、アプリケーションが同等または類似の操作をOracle SQLで実行し、予期されている結果を戻すことができます。

DB2の特殊レジスタ

Oracle Databaseでは、現在の時刻を取得するCURRENT TIME特殊レジスタ・コンストラクトはサポートされていません。次の例に示すように、このコンストラクトを呼び出すとORA-00936エラーが発生します。

SELECT CURRENT TIME FROM SYSIBM.SYSDUMMY1

DB2 SQLファンクションおよびプロシージャ

Oracleでは、DB2で定義されているファンクションの一部がサポートされていません。たとえば、CEILINGファンクションはOracleには存在しませんが、Oracle SQL構文にはこのファンクションと互換性のあるCEILファンクションがあります。

DB2の名前付きデータ型

Oracleでは、BIGINTなどのいくつかの基本的なSQLデータ型が定義されていません。アプリケーションがOracleに対して実行される場合、列値または定数をBIGINTとしてキャストすると、エラーが発生します。次の例では、BIGINTが有効なOracleデータ型として認識されていないためため、ORA-00902エラーが発生します。

SELECT CAST(12345678912 AS BIGINT) from SYSIBM.SYSDUMMY1

DB2構文の文

DB2のINSERT文には、Oracleで解釈されない構文の句が含まれています。このような例としては、次のコード例に示すisolation句があります。

INSERT INTO SCOTT.DEPT VALUES(50, "FARMING", "SPRINGFIELD") WITH CHG

SQL Translator Interface Packageの使用

SQL翻訳プロファイルは、DBMS_SQL_TRANSLATOR.CREATE_PROFILE()プロシージャを使用して作成されたSQL TRANSLATION PROFILE型のスキーマ・レベルのオブジェクトです。SQL Translator Interface Packageは、特定の形式のPL/SQLパッケージであり、サードパーティ提供のトランスレータ・オブジェクトを参照する一方で、それ自身がSQL翻訳プロファイルから参照されます。SQL Translator Interface Packageは、SQL翻訳プロファイルおよびサードパーティ提供のSQLトランスレータ・オブジェクトに接続します。

SQLトランスレータ・インタフェース・パッケージ

SQL翻訳プロファイルは、固定形式のPL/SQLラッパー・パッケージであるSQL Translator Interface Packageを参照します。セッションでSQL TRANSLATION PROFILEが設定されると、すべてのSQLがSQL Translator Interface Packageに関連付けられているサードパーティのSQLトランスレータによって翻訳されることが指定されます。SQL Translator Interface Packageのプロシージャtranslate_sql()により翻訳が実行されます。

例4-1に、SQL翻訳プロファイルとともに使用される単純なSQL Translation Interface Packageを示します。言語と名前の指定は、サードパーティのSQLトランスレータの言語タイプおよびコール可能な名前に関連しています。SYSDBA権限でOracle Databaseにログインした後に、次のパッケージ宣言を行う必要があります。パッケージ名は、SQL翻訳プロファイルのTRANSLATOR_ATTR属性の値です。

例4-1 SQL Translator Interface Packageの作成

create or replace package SYSIBM.DBTooSQLTranslator as
procedure translate_sql(
sql_text in CLOB,
translated_text out CLOB);
procedure translate_error(
error_code in BINARY_INTEGER,
translated_code out BINARY_INTEGER,
translated_sqlstate out VARCHAR2);
end;
/
create or replace package body SYSIBM.DBTooSQLTranslator as
procedure translate_sql(
sql_text in CLOB,
translated_text out CLOB )
as language JAVA
name /* actually the "signature" of the third-party callable */
/* procedure associated with translate_sql    */
'DBTooSQLApiInterface.translateSQL(oracle.sql.CLOB, oracle.sql.CLOB[])';

procedure translate_error(error_code in BINARY_INTEGER,
translated_code out BINARY_INTEGER,
translated_sqlstate out VARCHAR2) as
language JAVA
name /* actually the "signature" of the third-party callable */
/* procedure associated with translate_error  */
'DBTooSQLApiInterface.translateError(oracle.sql.CLOB, oracle.sql.CLOB[])';
end;
/

OracleからはSQLトランスレータは提供されないことに注意してください。かわりに、サードパーティ・ベンダーからSQLトランスレータを取得するか、または内部で開発する必要があります。Oracleでは、SQL翻訳プロファイルを作成および管理するための様々な管理スクリプトが用意されています。

SQL Translator Interface Packageは実行時にコールされるため、EXECUTE権限が有効になっている必要があります。例4-2に、このアクセス権限を付与する方法を示します。

例4-2 SQL Translator Interface PackageへのEXECUTE権限の付与

GRANT EXECUTE ON SYSIBM.DBTooSQLTranslator TO DRDAAS_USER_ROLE

SQL翻訳プロファイルの作成

SQL翻訳プロファイルは、CREATE SQL TRANSLATION PROFILE権限およびTRANSLATE ANY SQL権限を持つユーザーが作成および管理できます。例4-3は、これら2つの権限をDRDAAS_TRANS_ADMINに付与する方法を示しています。これらの権限は、既存のSYSDBA権限を持つユーザーが付与できます。

例4-3 DRDAAS_TRANS_ADMINロールを持つユーザーへの必要な権限の付与

GRANT CREATE SQL TRANSLATION PROFILE TO DRDAAS_TRANS_ADMIN;
GRANT TRANSLATE ANY SQL TO DRDAAS_TRANS_ADMIN WITH ADMIN OPTION;

ADMIN OPTION句により、DRDAAS_TRANS_ADMINが他のOracleユーザーに対しTRANSLATE ANY SQL権限をGRANT(付与)できるようになります。このようにして、例4-4に示すように、DRDAAS_TRANS_ADMINにより、DRDAAS_USER_ROLEを持つ多数のユーザーが翻訳機能を使用できるようになります。

例4-4 DRDAAS_USER_ROLEを持つユーザーへの翻訳権限の付与

GRANT TRANSLATE ANY SQL TO DRDAAS_USER_ROLE;

実際のSQL翻訳プロファイルは、例4-5に示されているスクリプトを使用して管理できます。管理IDには、CREATE SQL TRANSLATION PROFILEを実行するために必要な権限がすでに付与されている必要があることに注意してください。

例4-5 SQL翻訳プロファイルの作成および管理

declare
PROFILE_DOES_NOT_EXIST exception;
pragma EXCEPTION_INIT(PROFILE_DOES_NOT_EXIST, -24252);
/* profile_name is the nsme of the SQL Translation Profile */
/* created here.  */
profile_name VARCHAR2(32) := 'DRDAAS_TRANS_ADMIN.MY_PROFILE';

/* SYSIBM is the schema in which the SQL Translator Interface */
/* package (viz., SYSIBM.DBTooSQLTranslator) is found.   */
sql_trnsltr_intfc_schema VARCHAR2(32) := 'SYSIBM';

/* DBTooTranslator is the unqualified package name of the SQL */
/* Translator Interface Package */
sql_trnsltr_intfc_pkgnm VARCHAR2(32) := 'DBTooSQLTranslator';

sql_trnsltr_intfc_pkg VARCHAR2(128);
grant_cmd VARCHAR2(256);
cursor_id NUMBER;

begin
sql_trnsltr_intfc_pkg := sql_trnsltr_intfc_schema || '.'  ||
sql_trnsltr_intfc_pkgnm;
begin
DBMS_SQL_TRANSLATOR.DROP_PROFILE(profile_name);
exception
WHEN PROFILE_DOES_NOT_EXIST THEN NULL; /* ignore if non-existant */
end;
/* Create SQL Translation Profile */
DBMS_SQL_TRANSLATOR.CREATE_PROFILE(profile_name);
/* Associate the SQL Translator Interface Package denoted by */
/* sql_trnsltr_intfc_pkg with this profile    */
DBMS_SQL_TRANSLATOR.SET_ATTRIBUTE(profile_name,
DBMS_SQL_TRANSLATOR.ATTR_TRANSLATOR,
sql_trnsltr_intfc_pkg);
/* Mark this SQL Translation Profile as "registered" */
DBMS_SQL_TRANSLATOR.SET_ATTRIBUTE(profile_name,
DBMS_SQL_TRANSLATOR.ATTR_TRANSLATION_REGISTRATION,
DBMS_SQL_TRANSLATOR.ATTR_VALUE_TRUE);
/* The owner of the SQL Translator Interface Package must have */
/* full authority for the SQL TRANSLATION PROFILE    */
grant_cmd := 'GRANT ALL ON SQL TRANSLATION PROFILE ' ||
profile_name || ' TO ' || sql_trnsltr_intfc_schema;
cursor_id := DBMS_SQL.OPEN_CURSOR();
DBMS_SQL.PARSE(cursor_id, grant_cmd, DBMS_SQL.NATIVE);
DBMS_SQL.CLOSE_CURSOR(cursor_id);
/* Let all with DRDAAS_USER_ROLE have access to the SQL Translation profile.  */
grant_cmd := 'GRANT USE ON SQL TRANSLATION PROFILE ' ||
profile_name || ' TO DRDAAS_USER_ROLE';
cursor_id := DBMS_SQL.OPEN_CURSOR();
DBMS_SQL.PARSE(cursor_id, grant_cmd, DBMS_SQL.NATIVE);
DBMS_SQL.CLOSE_CURSOR(cursor_id);
end;
/

Oracle Databaseからサードパーティ・トランスレータへのアクセス

サードパーティのトランスレータを使用するには、ファイルとオブジェクトを次のディレクトリにインストールする必要があります。

$ORACLE_HOME/rdbms/drdaas/jlib

サードパーティのSQLトランスレータがJavaで作成されている場合、例4-6はSYSDBAユーザーによってSQL*Plus環境で実行されます。例4-6では、DBMS_JAVA.LOADJAVA()プロシージャを使用してSYSIBMスキーマにオブジェクトをロードしています。この例では1つのサードパーティ・オブジェクトDBTooSQLAPI.jarがロードされます。

例4-6 サードパーティのSQLトランスレータのロード(単一オブジェクト)

begin
DBMS_JAVA.LOADJAVA('-definer -genmissing -schema SYSIBM ' || '
' rdbms/drdaas/jlib/DBTooSQLAPI.jar',
'((* SYSIBM)(* PUBLIC)(* -))');
end;
/

サードパーティのトランスレータが複数オブジェクトで構成されている場合、各コンポーネントをLOADJAVAコールに指定する必要があります。例4-7では、2つのトランスレータ・オブジェクト、DBTooSQLAPI.jarおよびDBTooMainClass.classが指定されています。

例4-7 サードパーティのSQLトランスレータのロード(複数オブジェクト)

begin
DBMS_JAVA.LOADJAVA('-definer -genmissing -schema SYSIBM ' ||
' rdbms/drdaas/jlib/DBTooMainClass.class' ||
' rdbms/drdaas/jlib/DBTooSQLAPI.jar',
'((* SYSIBM)(* PUBLIC)(* -))');
end;
/

問題が発生した場合は、DBMS_JAVA.SET_OUTPUT()プロシージャを使用して、サーバー側のエラー・メッセージをDBMS_OUTPUTにリダイレクトします。

OracleでのJavaの使用の詳細は、Oracle® Database Java開発者ガイドを参照してください。

トランスレータ管理スクリプトの使用

Oracle Databaseには、翻訳プロファイルを管理するdrdasqtt_translator_setup.sqlスクリプトが付属しています。このスクリプトは、SYSDBA権限を持つユーザーがSQL*Plusで起動する必要があります。次の情報の入力が求められます。

1. SQL Translator Interface Packageスキーマ(SYSIBMなど)。

2. SQL Translator Interface Package名(DBTooTranslatorなど)。

3. SQL翻訳プロファイル・スキーマ(DRDAAS_TRANS_ADMINなど)。

4. SQL翻訳プロファイル名(MY_PROFILEなど)。

5. サードパーティ・トランスレータの言語タイプ(Javaなど)。

6. サードパーティ・ベンダーから提供されるファイルまたはオブジェクトの名前。複数を指定する場合は、次のコードに示すように4つの一重引用符でリストを囲み、各項目を空白で区切ります。

''''rdbms/drdaas/jlib/DBTooMainClass.class rdbms/drdaas/jlib/DBTooSQLAPI.jar''''

7. SQL翻訳に使用される、サードパーティ・ベンダー提供のファイルまたはオブジェクトでのエントリのシグネチャ(エントリ名と引数の記述)。Javaベースのサードパーティ・コードの場合、 javapプログラムからシグネチャを取得できます。空白を含むシグネチャは二重引用符で囲む必要があることに注意してください。

8. エラー・コードの翻訳に使用される、サードパーティ・ベンダー提供のファイルまたはオブジェクト内のエントリのシグネチャ(エントリ名と引数の記述)。Javaベースのサードパーティ・コードの場合、 javapプログラムからシグネチャを取得できます。空白を含むシグネチャは二重引用符で囲む必要があることに注意してください。

SQLトランスレータ・プロファイルの検証

次の手順では、SQL翻訳プロファイルが正しくインストールされ、適切に有効化されていることを確認します。

SQLトランスレータ・プロファイルの構成を検証するには、次のようにします。

1. SYSDBA権限を使用してOracle Databaseにログインします。

2. トランスレータ・プロファイルがOracle Databaseにロードされていることを確認します。

SELECT * FROM ALL_SQL_TRANSLATION_PROFILES;

3. DRDAAS_USER_ROLE権限を持つIDを使用してログインします。

4. ロールが設定されていることを確認します。

SET ROLE DRDAAS_USER_ROLE;

5. セッションのSQL翻訳プロファイルを、SQL翻訳プロファイルの作成時に指定された値に設定します。

ALTER SESSION SET SQL_TRANSLATION_PROFILE = DRDAAS_TRANS_ADMIN.MY_PROFILE;

6. 次のコマンドを実行します。

ALTER SESSION SET EVENTS = '10601 trace name context forever, level 32';
SELECT CAST(1234567 AS BIGINT) FROM DUAL;
ALTER SESSION SET EVENTS = '10601 trace name context off';
SELECT CAST(1234567 AS BIGINT) FROM DUAL;

最初のSELECTは正常に完了し、2番目のSELECTは失敗します。ALTER SESSION SET EVENTSコマンドは、SQLが次のいずれかであることを指定します。

- 外部構文(trace name context forever, level 32)

- ネイティブOracle構文(trace name context off)

これは、SQL*Plusを使用している場合にのみ機能します。

SQL翻訳プロファイルの変更

場合によっては、SQL翻訳プロファイルを変更して、DB2パッケージのSQL TRANSLATION PROFILE属性が新しいSQL翻訳プロファイルを参照するようにする必要があります。

DB2パッケージは通常セットで提供され、DB2パッケージの名前はクライアントによって決定されます。ただし、クライアントがODBCを使用してOracle Database Provider for DRDAにアクセスする場合、パッケージ名はODBCドライバによって決定します。

パッケージ・セットのSQL翻訳プロファイル属性を設定するための2つのスクリプトがOracleから提供されています。

- DataDirect ODBCドライバがOracle Database Provider for DRDAにアクセスする場合、drdaas/adminディレクトリにあるdrdasqt_set_profile_dd.sqlスクリプトを使用します。

- IBM ODBCドライバがOracle Database Provider for DRDAにアクセスする場合、drdaas/adminディレクトリにあるdrdasqt_set_profile_ibm.sqlスクリプトを使用します。ネイティブ・クライアント・アプリケーションもこのスクリプトを使用することがありますが、この場合は拡張する必要があります。

これらのスクリプトをコピーし、他のDB2パッケージ・セットで使用できるように変更できます。

また、各スクリプトはDRDAAS_ADMIN_ROLE権限を持つユーザーがSQL*Plusで実行する必要があります。スクリプトでは、様々なパッケージが参照するプロファイル(DRDAAS_TRANS_ADMIN.MY_PROFILEなど)の修飾名の入力が求められます。また、デフォルトのパッケージ・コレクション・スキーマ(通常はNULLID)の入力が求められます。

5Oracle Database Provider for DRDAの管理およびカスタマイズ

この章では、様々な管理およびカスタマイズの問題について説明します。

この章には次のトピックが含まれます:

- Oracle Database Provider for DRDAを使用した移行手順

- Oracle Database Provider for DRDAソフトウェアのインストールおよび構成

- Oracle DatabaseへのOracle Database Provider for DRDAオブジェクトのインストール

- DRDAパッケージの権限の管理

- DB2データの移行

- アプリケーションのターゲット再設定

- SQL文の翻訳およびデータ型の調整

Oracle Database Provider for DRDAを使用した移行手順

Oracle Databaseへの既存のDB2アプリケーションの移行はデータおよびターゲットに依存する作業ですが、一般には次の6つの手順で構成されます。

1. Oracle Database Provider for DRDAソフトウェアのインストールおよび構成

2. Oracle DatabaseへのOracle Database Provider for DRDAオブジェクトのインストール

3. DRDAパッケージの権限の管理

4. DB2データの移行

5. アプリケーションのターゲット再設定

6. SQL翻訳およびデータ型の調整

Oracle Database Provider for DRDAソフトウェアのインストールおよび構成

Oracle Database Provider for DRDAソフトウェアをインストールする前に、運用およびリソースに関する複数の事項を組織内で検討する必要があります。スタンドアロンのOracleホーム、既存のデータベース内でのOracleホーム、Oracle Databaseとは完全に切り離されたマシン上のスタンドアロンのOracleホームのいずれが最適なインストール環境であるかを判断する際に最も重要な要素は、マシンとネットワークのリソースの柔軟性とパフォーマンスです。また、このインストール環境を使用する必要があるすべてのDB2クライアントの特性も、決定要因の1つです。この場合、DB2はクライアントとみなされます。

第3章「Oracle Database Provider for DRDAのインストールおよび構成」を参照してください。

Oracle DatabaseへのOracle Database Provider for DRDAオブジェクトのインストール

Oracle DatabaseにOracle Database Provider DRDAオブジェクトをインストールする前に、1人以上のユーザーをDRDA管理者とし、管理者ロールを付与する必要があります。管理者ロールを参照してください。

同様に、Oracle Database Provider for DRDAまたはDB2アプリケーションからOracle Databaseにアクセスするユーザーを指定し、DRDAユーザーの役割と権限を付与します。ユーザー・ロールを参照してください。DRDAユーザーの権限と構成の設定の一部は、移行プロセスの後半まで遅らせる必要があります。そのほとんどは、アプリケーションで使用される特定のDRDAパッケージ、および特定のSQL翻訳またはデータ型の調整に関連しています。移行前にアプリケーションのパッケージが特定されている場合は、パッケージ認可ワークフローにおいてそれらを適用できます。

DRDAパッケージ権限の管理

DRDAまたはDB2アプリケーションからOracle Database Provider for DRDAを介してOracle Databaseへアクセスできるようにするには、パッケージ認可が適用されている必要があります。SQL Translator Interface Packageの使用を参照してください。最小限でもアプリケーションとそのユーザーに関する次の情報を収集する必要があります。

- パッケージ・コレクションID (NULLIDなど)

- パッケージ名(DSNPBD3など)

- パッケージのバージョン名(存在する場合) (01またはNULLなど)

- データベースにアクセスする必要があるOracleユーザーの名前 (DRDAUSRなど)

パッケージが表すアプリケーションのSQL翻訳プロファイル名も指定する必要があります。パッケージを参照してください。

DB2データの移行

DB2ではオブジェクトを任意のスキーマに作成できますが、Oracle Databaseではスキーマ名は任意ではありません。したがってDB2からOracleにデータを移行する際にはスキーマを慎重に使用することを考慮する必要があります。Oracleでは、表、ビュー、シノニムなどのすべてのスキーマ・オブジェクトを実際のユーザーのスキーマに割り当てる必要があります。当然これは、これらのオブジェクトの名前の指定、作成およびアクセス方法に影響します。

たとえば、USER1が表"USER1"."TABLE1"および"USER2"."TABLE2"を作成するとします。DB2ではTABLE1およびTABLE2はUSER1によって作成されるため、USER1がこれらの表を所有します。Oracleでは表"USER2"."TABLE2"の所有者はユーザーUSER2です。また、USER1にCREATE ANY TABLE権限が付与されていない場合には、USER1はTABLE2を作成できません。かわりに、USER2がTABLE2を作成し、この表へのアクセス権限をUSER1に付与する必要があります。

また、DB2からOracleに移行されるデータは、Oracleデータ型に基づいて定義されている必要があります。OracleではANSI定義のデータ型名が使用されていますが、その範囲制限またはセマンティクスはDB2実装と必ずしも同一ではありません。既存のDB2アプリケーションのデータ型を正確にモデル化するには、第8章「Oracle Database Provider for DRDAのデータ・ディクショナリを参照してください。

適切なデータ型を使用してスキーマとオブジェクトを作成した後で、データをOracleにインポートできます。

アプリケーションのターゲット再設定

次の例は、DB2 z/OSアプリケーションを移行する方法を示しています。DB2/LUWまたはDB2/400アプリケーションを移行する際には同様の手順を実行する必要があります。各製品での同等の手順の詳細は、IBMのドキュメントを参照してください。

アプリケーションは、ネイティブ・アプリケーションおよびリモート・アプリケーションという2種類の一般的なカテゴリに分類されます。

ネイティブ・アプリケーションのターゲット再設定

標準的なDB2アプリケーションはネイティブと呼ばれます。これは、このようなアプリケーションは内部IPCメカニズムを介してローカルDB2システムと直接連携するためです。これらのアプリケーションは、埋込みSQLプログラミングとDB2 SQLプリプロセッサを使用します。ソースの事前処理の結果生成される実行計画は、Database Resource Module (DBRM)に格納されます。プログラムの実行前に、ユーザーが実行計画をアップロードし、ローカルDB2インスタンスにバインドする必要があります。

実行計画には、アプリケーション・ソースに埋め込まれているすべての静的SQLおよびlocation (Current Serverとも呼ばれる)などの追加属性が含まれています。デフォルトでは、Current Serverは空白であり、サーバーがローカルDB2インスタンス上にあることを示します。ただし、すべての操作を別のサーバーで実行するように実行計画のターゲットを再設定できます。このためにはCurrent Server属性に新しい値を設定します。

次の手順は、IBM DB管理者が実行する必要があります。

実行計画を使用してネイティブ・アプリケーションのターゲットを再設定します。

1. DB2 Communications Databaseにロケーション・エントリを作成します。
DB2には、リモートDB2インスタンスに接続するための内部通信システムがあります。リモート・インスタンスのアドレスを指定するため、SYSIBM.IPNAMES表とSYSIBM.LOCATIONS表にレコードを挿入します。この場合、オプションでSYSIBM.USERNAMES表にもレコードを挿入できます。

DB2 Communications Database機能の詳細は、IBM DB2のドキュメントを参照してください。

次のコマンドは、リンク名REMHOST、ロケーション・エントリDRDAASおよびオプションでユーザー名マッピング・エントリを、DB2 Communications Databaseに挿入します。リンク名は、Oracle Database Provider for DRDAが稼働しているコンピュータのホスト名またはIPアドレスを表します。ロケーションはそのリンク名を使用するRDB名を表し、ポート番号はOracle Database Provider for DRDAがリッスンするポートを表します。これらは、Oracle Database Provider for DRDA構成パラメータDATA_PORTおよびRDB_MAPに対応しています。ロケーション名は、RDB_MAPパラメータに指定されたRDB()値と完全に一致する必要があることに注意してください。

INSERT INTO SYSIBM.IPNAMES (LINKNAME,SECURITY_OUT,USERNAMES,IPADDR)
VALUES ('REMHOST','P','O','remotehost.remotedomain.com');

INSERT INTO SYSIBM.LOCATIONS (LOCATION,LINKNAME,PORT)
VALUES ('DRDAAS','REHMOST','1446');

INSERT INTO SYSIBM.USERNAMES (TYPE,AUTHID,LINKNAME,NEWAUTHID,PASSWORD)
VALUES ('O',' ','REMHOST','DRDAUSER', 'userpwd' );

2. Oracle Database Provider for DRDAにアプリケーションの計画をリモートでバインドします。
ロケーション・エントリの挿入後に、アプリケーションの実行計画をリモートでバインドする必要があります。次のコードは、DSNコマンド・プロセッサIKJEFT01を介して計画DSNPBD3をバインドします。ロケーションDRDAASがコレクションIDに接頭辞として付加される点に注意してください。

BIND PACKAGE(DRDAAS.NULLID) MEMBER(DSNPBD3) -
ACT(REP) ISO(CS) CURRENTDATA(YES) ENCODING(EBCDIC)

3. パッケージを現行サーバーにローカルでバインドします。
実行のターゲットを再設定するため、計画をリモートでバインドした後で、現行サーバー・オプションを使用してロケーション計画を再バインドします。次のコードは、DSNコマンド・プロセッサIKJEFT01を介して計画DSNPBD3をバインドします。

この計画が、リモート計画でパッケージ・リストPKLISTを介して参照される必要があること、また計画ではパッケージ参照DRDAAS.NULLID.DSNPBD3で場所を指定し、このロケーションを含むCURRENTSERVERオプションを指定する必要があることに注意してください。

BIND PLAN(DSNPBD3) -
PKLIST(DRDAAS.NULLID.DSNPBD3) -
ACT(REP) ISO(CS) CURRENTDATA(YES) ENCODING(EBCDIC) -
CURRENTSERVER(DRDAAS)

4. 計画がリモートでバインドされローカルで再バインドされた後に、計画DSNPBD3を使用してアプリケーションが実行され、ローカルDB2からOracle Database Provider for DRDAへのリモート接続が暗黙的に確立され、計画のすべての操作がリモートで実行されます。この構成では、パススルーの調整はローカルのDB2が引き続き行います。

リモート・アプリケーションのターゲット再設定

通常、リモート・アプリケーションはローカルDB2に直接関連付けられていません。通常、このようなアプリケーションはネットワーク対応またはネットワーク指向と呼ばれ、接続する対象と接続先の場所を指定するために使用されるリモート・サーバー・ロケーション構成属性が含まれています。

このようなアプリケーションは、ネットワーク・プロトコルを介してOracle Database Provider for DRDAを利用します。このタイプのアプリケーションのターゲット再設定は容易に構成できます。

実行計画を使用してリモート・アプリケーションのターゲットを再設定するには、次のようにします。

1. Oracle Database Provider for DRDAで構成したホスト名(またはIPアドレス)、ポート番号およびRDB名を使用するように、アプリケーションの構成オプションを変更します。この例として、ODBCを使用する場合(DSNエントリにネットワーク・パラメータが含まれている場合)があります。
この例では、NetworkおよびPortNumberパラメータは、前述のDB2 Communication Databaseの例で挿入されたLinknameおよびLocationのエントリに対応しています。DatabaseパラメータはLocation名に対応しています。これらはすべて、構成済Oracle Database Provider for DRDAのDATA_PORTパラメータおよびRDB_MAPパラメータに対応しています。

次にodbc.iniファイルの例を示します。

[DRDAAS]
Network=remotehost.remotedomain.com
PortNumber=1446
Database=DRDAAS

2. アプリケーションのパッケージ・リソース・バインディング操作を実行します。
多くの場合、この手順はアプリケーション自体によって暗黙的に処理されるか、リモートDB2インスタンスへのアプリケーションによるアクセスとリソースを設定するための1回かぎりの手順として記載されています。バインディングの手順については、個々のアプリケーションのドキュメントを参照してください。

SQL文の翻訳およびデータ型の調整

アプリケーションによっては、SQL翻訳の自動翻訳メカニズムでは処理できないDB2固有のSQLが含まれている場合や、問合せで特定の列に非常に特殊なデータ型が必要となる場合があります。このような場合には、代替のSQL文を手動で挿入するか、アイテム固有のデータ型操作を追加する必要があります。

たとえば、アプリケーションの特定のSQL文の構文が、DB2固有の構文(SELECT LOG2(COL1) FROM TABLE1)であるとします。Oracleで正しく動作するためには、このSQLをSELECT LOG10(COL1,2) FROM TABLE1文に翻訳する必要があります。

SQL翻訳の登録機能を使用して、例5-1に示すように、このSQL文に対して直接翻訳を登録できます。これは、SQL文を実行するユーザーが実行する必要があること、そのユーザーのリソースとしてSQL翻訳プロファイルを作成する必要があることに注意してください。

例 5-1 代替のSQL文の登録

アプリケーションのパッケージにはプロファイル名DB2ZOSが割り当てられています。

connect DRDAUSER/userpwd
execute dbms_sql_translator.register_sql_translation('DB2ZOS',
'SELECT LOG2(COL1) FROM TABLE1',
'SELECT LOG10(COL1,2) FROM TABLE1')

SQLトランスレータの登録後に、アプリケーションにより元のSQLが発行されると、新しいSQLおよびプロセスに暗黙に翻訳されます。

ごくまれに、アプリケーション・クライアントで、問合せのSELECTの項目のデータ型が非常に特殊な形式で戻されなければならないことがあります。

たとえば、翻訳後の問合せSELECT LOG10(COL1,2) FROM TABLE1の結果としてDECFLOAT34データ型が戻されるが、アプリケーションがこのデータ型を処理できず、このデータ型を別の互換性のある型に暗黙かつ強制的に変換する可能性があります。

アプリケーションでDOUBLE PRECISIONデータ型がサポートされている場合、TYPEMAP機能を使用して、この強制的な変換を追加できます。詳細は、例5-2を参照してください。

例5-2 オンデマンド・データ型変換の登録

connect DRDAADM/adminpwd

execute DBMS_DRDAAS_ADMIN.SET_TYPEMAP('NULLID', 'DSNPBD3', NULL,
'TABLE1:LOG10(COL1,2)', 'NUMBER=DOUBLE')

execute DBMS_DRDAAS_ADMIN.SET_TYPEMAP('NULLID', 'DSNPBD3', NULL,
'TABLE1:LOG10(COL1,2)', 'NUMBER(0,-127)=DOUBLE')

詳細は、同等のデータ型および再マッピングを参照してください。

6 Oracle Database Provider for DRDAの診断およびメンテナンス

この章では、診断およびメンテナンスの問題について説明します。

この章には次のトピックが含まれます:

- Oracle Database Provider for DRDAの診断

- Oracle Database Provider for DRDAのメンテナンス

Oracle Database Provider for DRDAの診断

Oracle Database Provider for DRDAの診断を構成するトレース機能は、アプリケーション実行前にトレース・レベルで構成可能であり、コマンドライン・ツールから調整できます。Oracle Database Provider for DRDAは、自動診断リポジトリ(ADR)を使用してすべてのログ、トレース、ダンプ・レコードを保持します。第10章「Oracle Database Provider for DRDAのコマンドライン・ユーティリティ」およびOracle®Database管理者ガイドの「自動診断リポジトリ(ADR)」の項を参照してください。

トレースにより、各クライアント・セッションの実行前、実行中、実行後のDRDAプロトコル・エラーが記録されます。これらは、プロトコル違反の診断を目的とした特定のDRDAアーキテクチャ・エラー・アラートです。OCIセッションからの追加エラーもここに記録されます。

診断とは、診断情報を(通常はファイルに)トレースまたは収集できる機能です。

トレース・ディレクトリはユーザーが指定できます。デフォルトでは、Oracle Database Provider for DRDAはORACLE_HOME/log/diag内にトレース・ディレクトリを作成します。Oracle Database Provider for DRDAは、このルート・ディレクトリ内のdps/instance/drdaproc/traceにトレース・ファイルを格納します(instanceはdrdaas.oraファイルで使用されるインスタンス名)。adrciユーティリティを使用すれば、トレース・ファイルを表示および操作できます。

アプリケーションによって、必要となる診断情報の詳細レベルが異なることがあります。デフォルトでは、パフォーマンス上の理由から診断の深度はオフに設定されています。ただしASで障害が発生した場合は、インシデントがリポジトリに記録されます。

Oracle Database Provider for DRDAのメンテナンス

アプリケーション・サーバーとの通信のために、外部コマンド・インタフェースが用意されています。このコマンド・インタフェースでは次の操作がサポートされています。

- サーバーの起動

- サーバーの停止

- サーバー・ステータスの判別

- 接続クライアント・セッションの表示

- クライアント・セッションの詳細の表示。次の情報が含まれます。

- セッションの状態(実行中のコマンド(準備、実行、フェッチ、アイドルなど))

- 準備された最終SQL文

- クライアントのIPアドレスおよびポート番号

- Oracle SQLセッションID

- SQLセッションの一時停止

- SQLセッションの終了

- サーバー構成のリロード

これらの操作の詳細は、第10章「Oracle Database Provider for DRDAのコマンドライン・ユーティリティ」を参照してください。

7 Oracle Database Provider for DRDAでのデータ型のサポートと変換

この章では、Oracleのデータ型のサポート、およびOracleデータ型とDRDAデータ型の変換について説明します。

この章には次のトピックが含まれます:

- データ型変換の概要

- 数値範囲に関する考慮事項: 全般

- 数値範囲に関する考慮事項: COBOLユーザー

- DRDAデータ型からOracleデータ型への変換

- Oracleデータ型からDRDAへの変換

- 同等のデータ型および再マッピング

データ型変換の概要

DRDAではデータ型のエンコーディングに定様式データ・オブジェクト・コンテンツ体系(FD:OCA)が使用されます。いくつかの型はOracleネイティブの型に類似していないため、変換が必要です。また、一部のOracleデータ型ではFD:OCAで直接エンコーディングがサポートされていません。たとえばOracle NUMBERの場合、整数および浮動小数点の両方を含む様々な値が含まれている可能性があります。この二重性が原因で、特定のDRDA型へマップして数値の値の損失を緩和できません。どの型を選択する場合でも、値の末端範囲で精度またはスケールのいずれかがある程度失われます。

Oracle Database Provider for DRDAで使用されるデータ型変換には、DRDAメタデータ記述子からOracle OCIインタフェースの型への変換と、Oracle列型からDRDAメタデータ記述子への変換の2種類があります。アプリケーション・プログラマの方向けに、これらについてバインド変数のSQL型または記述されている列型で説明します。DRDAデータ型からOracleデータ型への変換およびOracleデータ型からDRDAへの変換の項を参照してください。

Oracle NUMBERの一般的なマッピング・メカニズムについては、同等のデータ型および再マッピングを参照してください。

数値範囲に関する考慮事項: 全般

Oracle NUMBER、IEEE浮動小数点、IBM 16進浮動小数点(HEX浮動小数点、S390またはSystem390浮動小数点)、10進数浮動小数点(DECFLOAT)の各データ型間の変換時には、各データ型の範囲と特性が異なることに注意してください。たとえば、クライアント側プログラムのIBM HEX FLOATバインド変数のすべての値はOracle NUMBERに適合しますが、Oracle NUMBERの一部の値はIBM HEX FLOATでは正しく戻されません。この場合はDECFLOAT34のほうが適切です。

その他の考慮事項は次のとおりです。

- 無限大。一部の浮動小数点型は正の無限大と負の無限大をサポートしています。
無限大をサポートしていないデータ型で無限大が使用されると、正の無限大の場合は最大許容値が使用され、負の無限大の場合は負の最大許容値が使用されます。

- 浮動小数点IEEE FLOAT列は、OracleではBINARY_FLOAT型およびBINARY_DOUBLE型を使用して定義できます。DB2 z/OSでは、浮動小数点型(REAL、FLOAT、DOUBLE、DOUBLE PRECISION)は、IBM HEX浮動小数点です。DB2/400およびDB2 LUWでは、浮動小数点型(REAL、FLOAT、DOUBLE、DOUBLE PRECISION)はIEEE浮動小数点です。

- 非数。一部のデータ型では非数(Not A Number (NAN))がサポートされています。非数は、値が割り当てられていないこと、または計算結果が無効または未定義であることを示す特殊な値です。

Oracle NUMBER

Oracle NUMBERの特性は次のとおりです。

下限

1E-130

上限

9.999 999 999 999 999 999 999 999 999 999 999 999 9E+125

無限大

負の無限大および正の無限大の両方がサポートされています。

非数

サポートされていません

FLOAT (IBM HEXまたはS390)

FLOAT、DOUBLEおよびLONG DOUBLEサブデータ型に適用される特性を次に示します。

下限

5.397605 x 10-79

上限

7.237005 x 10+75

無限大

サポートされていません

非数

サポートされていません

FLOAT (IEEE)

次の特性は、FLOAT (Oracle BINARY_FLOAT)、DOUBLE (Oracle BINARY_DOUBLE)およびLONG DOUBLEサブ・データ型に適用されます。

無限大

正の無限大および負の無限大の両方がサポートされています。

非数

サポートされています

サブタイプの範囲は次のとおりです。

下限

FLOAT (Oracle BINARY_FLOAT): 1.175 494 x 10-38

DOUBLE (Oracle BINARY_DOUBLE): 2.225 074 x 10-308

LONG DOUBLE: 3.362 103 x 10-4932

上限

FLOAT (Oracle BINARY_FLOAT): 3.402 823 x 10+38

DOUBLE (Oracle BINARY_DOUBLE): 1.797 693 x 10+308

LONG DOUBLE: 1.189 731 x 10+4932

DECFLOAT

DECFLOAT7、DECFLOAT16およびDECFLOAT34サブデータ型に適用される特性を次に示します。

無限大

正の無限大および負の無限大の両方がサポートされています。

非数

サポートされています

サブタイプの範囲は次のとおりです。

下限

DECFLOAT7: 0.000 001 x 10-95

DECFLOAT16: 0.000 000 000 000 001 x 10-383

DECFLOAT34: 0.000 000 000 000 000 000 000 000 000 000 001 x 10-6143

上限

DECFLOAT7: 9.999 999 x 10+96

DECFLOAT16: 9.999 999 999 999 999 x 10+384

DECFLOAT34: 9.999 999 999 999 999 999 999 999 999 999 999 x 10+6144

数値範囲に関する考慮事項: COBOLユーザー

DRDAデータベースには3つの整数型オプション(SMALLINT (2バイナリ・バイト)、INTEGER (4バイナリ・バイト)、BIGINT (8バイナリ・バイト))があります。変換時に、DB2 CREATE TABLE定義で使用されている型ではなく、使用方法に基づいて、同等の値を格納するOracle列が定義される必要があります。

DRDA SMALLINT、INTEGER、BIGINTの実際の範囲は次のとおりです。

- SMALLINTの下限は-32,768、上限は32,767です。

- INTEGERの下限は-2,147,483,648、上限は2,147,483,647です。

- BIGINTの下限は-9,223,372,036,854,775,808、上限は9,223,372,036,854,775,807です。

ただしアプリケーション・レベルでは、これらのDRDA列値を維持するCOBOL変数を宣言するときには、一定の桁数または対応するDRDA整数データ型のフル・バイナリ精度のいずれかを使用ます。

COBOLでは、同等のバイナリ整数データ型が次のように定義されます。

- USAGE: BINARY、COMPUTATIONAL COMP、COMPUTATIONAL-4、COMP-4。これらは同等です。

- PICTURE: S9(1-4) (2バイト整数)、S9(5-9) (4バイト整数)、S9(10-18) (8バイト整数)

通常、値はPICTUREの桁数に制限されます。

たとえばPICTURE S9(4) COMPは、通常-32,768から+32,767までの範囲の2バイト整数です。ただし、生成されるCOBOLコードでは、-9,999から+9,999までの範囲の値のみが許容されます。DRDA SMALLINT、INTEGERおよびBIGINT型の列へのアクセスおよびこれらの更新の目的でのみこれらの型のバインド変数を使用する場合は、Oracleで列をNUMBER(n)として定義します(nは前述のPICTURE S9(n)定義に一致します)。

COBOLコンパイラ・オプションTRUNC(BIN)で、BINARY、COBOL変数COMPUTATIONAL、COMP、COMPUTATIONAL-4、COMP-4を使用する場合、バイナリ整数の範囲はデータ型の範囲全体になる可能性があります。TRUNCコンパイラ・オプションが有効になっているかどうかに関係なく、COMPUTATIONAL-5とCOMP-5のいずれを使用しても効果は同じです。2進整数の全範囲を使用してCOBOL、C、PL/Iまたはアセンブラでプログラミングする場合は、Oracle列をNUMBER(n+1)として定義します(nは、前述のPICTURE S9(n)定義に対応します)。

DRDAのデータ型および使用方法に基づいて、Oracleデータ型の代替として推奨されるものを次に示します。

COBOL COMPで使用されている場合:

- SMALLINTはOracle NUMBER(4)に変換する必要があります。

- INTEGERはOracle NUMBER(9)に変換する必要があります。

- BIGINTはOracle NUMBER(18)に変換する必要があります。

COBOL COMP、TRUNC(BIN)、COMP-5、C、PL/Iまたはアセンブラの2進整数変数で使用される場合:

- SMALLINTはOracle NUMBER(5)に変換する必要があります。

- INTEGERはOracle NUMBER(10)に変換する必要があります。

- BIGINTはOracle NUMBER(19)に変換する必要があります。

2進整数値の全範囲を使用する場合は、Oracleの制約を実装し、対応するデータ型の範囲に値を制限することをお薦めします。

たとえばDRDA SMALLINTの場合、例7-1に示すように、SMALLINT値の全範囲のみをサポートする同等のOracle NUMBER列になります。

例7-1 DRDA SMALLINTに正確に対応させるためのOracle NUMBERの制約

CREATE TABLE smint_tab
(smint NUMBER(5)
CONSTRAINT check_smallint CHECK (smint BETWEEN -32768 AND 32767)
)

ただし、このタイプのチェック制約を指定するとパフォーマンスが低下することに注意してください。Oracleは、列が更新されるたびにすべての制約を検証します。

DRDAデータ型からOracleデータ型への変換

この項では、DRDAとOracleデータ型のマッピングについて説明します。

次の略語に注意してください。

- シングルバイト文字セット(SBCS)の場合、列にはシングルバイト・データのみを格納できます。

- マルチバイト文字セット(MBCS)の場合、列にはシングルバイト文字とマルチバイト文字の組合せを格納できます。

INTEGER

4バイトの2進数

SQL型

496, 497

サイズ

4バイト

Oracle型

NUMBER(10)

SMALLINT

2バイトの2進数

SQL型

500, 501

サイズ

2バイト

Oracle型

NUMBER(5)

BIGINT

8バイトの2進数

SQL型

492, 493

サイズ

8バイト

Oracle型

NUMBER(19)

float

長倍精度(16バイト)

SQL型

480, 481

範囲

54≤ b≤126

Oracle型

NUMBER

DOUBLE PRECISIONまたはFLOAT(b)

倍精度(8バイト)

SQL型

480, 481

範囲

22≤ b≤ 53

Oracle型

BINARY_DOUBLE

REALまたはFLOAT(b)

単精度(4バイト)

SQL型

480, 481

範囲

1≤b≤21

Oracle型

BINARY_FLOAT

DECIMAL(p,s)

精度とスケールが指定されたパック10進数

SQL型

484, 485

範囲

1≤p≤31, 1≤s≤31

Oracle型

NUMBER(p,s)

DECIMAL(p,s)ゾーン

精度とスケールが指定されたゾーン10進数

SQL型

488, 489

範囲

1≤p≤31, 1≤s≤31

Oracle型

NUMBER(p,s)

NUMERIC(p,s)

精度とスケールが指定されたキャラクタ10進数

SQL型

504, 505

範囲

1≤p≤31, 1≤s≤31

Oracle型

NUMBER(p,s)

DECFLOAT(n=34)

精度とスケール、指数。損失の可能性あり。

SQL型

996, 997

範囲

n=34

Oracle型

NUMBER

DECFLOAT(n=16)

精度とスケール、指数。損失の可能性あり。

SQL型

996, 997

範囲

n=16

Oracle型

NUMBER

CHAR(n)

sbcsおよび混合

SQL型

452,453

範囲

1≤ n≤255

Oracle型

CHAR

ビット・データのCHAR(n)

バイト

SQL型

452,453

範囲

1≤ n≤255

Oracle型

RAW

VARCHAR(n)

sbcs

SQL型

448,449

Oracle型

VARCHAR2

VARCHAR(n)

混合

SQL型

448,449

Oracle型

VARCHAR2

ビット・データのVARCHAR(n)

バイト

SQL型

448,449

範囲

1≤ n≤2000

Oracle型

RAW

VARCHAR(n)

sbcs

SQL型

456,457

範囲

1≤ n≤32767

Oracle型

LONG

VARCHAR(n)

混合

SQL型

456,457

範囲

1≤ n≤32767

Oracle型

LONG

ビット・データのVARCHAR(n)

バイト

SQL型

456,457

範囲

1≤ n≤32767

Oracle型

LONG RAW

char(n+1)

sbcs

SQL型

460,461

範囲

1≤ n≤4000

Oracle型

CHAR

char(n+1)

混合

SQL型

460,461

範囲

1≤ n≤2000

Oracle型

CHAR

ビット・データのchar(n)

バイト

SQL型

460,461

範囲

1≤ n≤2000

Oracle型

RAW

VARGRAPHIC(n)

dbcs

SQL型

464,465

範囲

1≤ n≤2000

Oracle型

NVARCHAR2

GRAPHIC(n)

dbcs

SQL型

468,469

範囲

1≤ n≤127

Oracle型

NCHAR

VARGRAPHIC(n)

dbcs

SQL型

472,473

範囲

1≤ n≤2000

Oracle型

NVARCHAR2

char(n) (Pascal L文字列)

バイト

SQL型

476,477

範囲

1≤ n≤255

Oracle型

CHAR

ビット・データのchar(n) (Pascal L文字列)

バイト

SQL型

476,477

範囲

1≤ n≤255

Oracle型

RAW

DATE

日付(時刻コンポーネントはゼロ)

SQL型

384, 385

Oracle型

DATE

TIME

日付の時刻コンポーネントのみを使用するか、テキスト時刻表現としてフォーマットされます。

SQL型

388, 389

Oracle型

DATEまたはCHAR(8)

TIMESTAMP

タイムスタンプ

SQL型

392, 393

Oracle型

TIMESTAMP(6)

(datalink)

同等の表現はありません。

SQL型

396, 397

Oracle型

sbcsの場合はVARCHAR2、dbcsの場合はNVARCHAR2

BLOB

バイナリ・ロング・オブジェクト

SQL型

404, 405

Oracle型

BLOB

CLOB

sbcsまたは混合表現の場合はキャラクタ・ロング・オブジェクト(LOB)

SQL型

408, 409

Oracle型

sbcsの場合はCLOB、混合表現の場合はCLOB

DBCLOB

dbcs

SQL型

412, 413

Oracle型

NCLOB

BLOB LOCATOR

バイナリ・ロング・オブジェクト(LOB)

SQL型

960, 961

Oracle型

BLOB

CLOB LOCATOR

sbcsまたは混合表現

SQL型

964, 965

Oracle型

CLOB

DBCLOB LOCATOR

dbcs表現

SQL型

968, 969

Oracle型

NCLOB

boolean

同等の表現はありません。

SQL型

2436, 2437

Oracle型

NUMBER(5)

BINARY(n)

固定長バイナリ文字列

SQL型

912, 913

範囲

1 ≤ n ≤ 255

Oracle型

RAW

VARBINARY(n)

可変長バイナリ文字列

SQL型

908, 909

範囲

1 ≤ n ≤ 32767

Oracle型

LONG RAW

XML

外部フォーム

SQL型

988, 989

Oracle型

SYS.XMLType

Oracleデータ型からDRDAへの変換

表およびプロシージャはOracleデータ型を使用します。オブジェクトを記述するとき、または表やプロシージャからデータを戻すときに、Oracleデータ型が同等のDRDAデータ型にマッピングされます。この項では、これらのマッピングについて説明します。

Oracle NUMBERおよびFLOAT

BINARY_FLOAT

8バイト

SQL型

480, 481

SQL型名

DOUBLE (8バイト浮動小数点数)

BINARY_DOUBLE

8バイト

SQL型

480, 481

SQL型名

DOUBLE (8バイト浮動小数点数)

VARCHAR2(n)

混合可変長文字列。

SQL型

448, 449

範囲

1 ≤ n ≤ 32,767

SQL型名

VARCHAR(n) FOR MIXED DATA

LONG

混合型の長い可変長文字列。Oracle LONGでは2^31-1バイトまでサポートされますが、現時点では、最初の32,767バイトのみが戻されます。

SQL型

448, 449

SQL型名

VARCHAR(32767) FOR MIXED DATA

LONG RAW

バイナリ型の長い可変長文字列。Oracle LONG RAWでは2^31-1バイトまでサポートされますが、現時点では、最初の32,767バイトのみが戻されます。

SQL型

448, 449

SQL型名

VARCHAR(32767) FOR BIT DATA

NVARCHAR2(n)

各国語可変長文字列

SQL型

464, 465

範囲

1 ≤ n ≤ 32,767

SQL型名

VARGRAPHIC(n)

CHAR(n)

混合固定長文字列。2の可能性、データ型に必要な範囲に応じて2つのデータ型のいずれかに変換されます。nが256未満の場合はCHAR(n)、これより長い文字列の場合はVARCHAR(n)に変換されます。

短いバージョン

SQL型

452, 453

範囲

1 ≤ n ≤ 255

SQL型名

CHAR(n) FOR MIXED DATA

長いバージョン

SQL型

448, 449

範囲

256 ≤ n ≤ 32,767

SQL型名

VARCHAR(n) FOR MIXED DATA

NCHAR(n)

各国語固定長文字列。データ型に必要な範囲に応じて2種類の変換のいずれかが行われます。nが256未満の場合はCHAR(n)、これよりも長い文字列の場合はVARCHAR(n)に変換されます。

短いバージョン

SQL型

468, 469

範囲

1 ≤ n ≤ 255

SQL型名

GRAPHIC(n)

長いバージョン

SQL型

464, 465

範囲

256 ≤ n ≤ 32,767

SQL型名

VARGRAPHIC(n)

UROWID

OracleユニバーサルROWID

SQL型

908, 909

SQL型名

VARBINARY(4000)

DATE

Oracle DATE

SQL型

384, 385

SQL型名

DATE

TIMESTAMP

Oracle TIMESTAMP

SQL型

392, 393

SQL型名

TIMESTAMP

TIMESTAMPWITHLOCALTIMEZONE

Oracle TIMESTAMP WITH LOCAL TIME ZONE

SQL型

392, 393

SQL型名

TIMESTAMP

TIMESTAMP(p) WITH TIME ZONE

Oracle TIMESTAMP WITH LOCAL TIME ZONE

SQL型

448, 449

範囲

0 ≤ p ≤ 9

SQL型名

VARCHAR(n) FOR MIXED DATA

TIMESTAMP(0) WITH TIME ZONEの場合はn=148、TIMESTAMP(p) WITH TIME ZONEの場合は149+p

RAW(n)

バイナリ可変長文字列

SQL型

908, 909

範囲

1 ≤ n ≤ 2000

SQL型名

VARBINARY(n)

NUMBERおよびFLOAT

Oracle NUMBERおよびFLOATは、様々な数値型を表現するために使用されます。

- 10進精度のみを使用する単純な整数型

- 特定の精度とスケールを使用する固定小数点型

- 最大38桁までの精度および指数を持つ浮動小数点型

NUMBERは、精度より大きなスケールまたは負のスケールを使用して定義するか、または2進精度を持つFLOATとして定義できます。詳細は、表7-1および表7-2を参照してください。

このデータ型の一般的な形式は、NUMBER(p,s)です。pは精度の変数、sはスケールの変数です。

表7-1 Oracle NUMBERバリアントからDRDAデータ型への変換

Oracle NUMBER(p,s)のバリアント

DRDAデータ型

注意事項

NUMBER(1)

DECIMAL(1)

NUMBER(2-4)

SMALLINT

NUMBER(5-9)

INTEGER

NUMBER(10-18)

BIGINT

クライアントでBIGINTがサポートされていない場合は常に、DECIMAL(n)にマッピングされます。

NUMBER(19-31)

DECIMAL(p)

NUMBER(1-31, 1-31)

DECIMAL(p,s)

両方のデータ型でscale <= precisionです。

NUMBER(32-38)

DECFLOAT34

クライアントでDECFLOATがサポートされていない場合は常に、DOUBLEにマッピングされます。

Oracle NUMBER(35-38)は、変換時に34桁に丸められます。

NUMBER(1-38, -s)

ここではスケールが負数です。

DECFLOAT34

クライアントでDECFLOATがサポートされていない場合は常に、DOUBLEにマッピングされます。

Oracle NUMBER(35-38)は、変換時に34桁に丸められます。

NUMBER(1-38, s)

ここではscale > precisionです。

DECFLOAT34

クライアントでDECFLOATがサポートされていない場合は常に、DOUBLEにマッピングされます。

Oracle NUMBER(35-38)は、変換時に34桁に丸められます。

NUMBER(32-38, s)

任意のスケール

DECFLOAT34

クライアントでDECFLOATがサポートされていない場合は常に、DOUBLEにマッピングされます。

Oracle NUMBER(35-38)は、変換時に34桁に丸められます。

NUMBER

DECFLOAT34

クライアントでDECFLOATがサポートされていない場合は常に、DOUBLEにマッピングされます

表7-2 Oracle FLOATバリアントからDRDAデータ型への変換

Oracle FLOAT(n)のバリアント

DRDAデータ型

注意事項

FLOAT(1-53)

DECFLOAT16

クライアントでDECFLOATがサポートされていない場合は常に、DOUBLEにマッピングされます

FLOAT(n)

ここではn > 53です。

DECFLOAT34

クライアントでDECFLOATがサポートされていない場合は常に、DOUBLEにマッピングされます

FLOAT

DECFLOAT34

クライアントでDECFLOATがサポートされていない場合は常に、DOUBLEにマッピングされます

同等のデータ型および再マッピング

Oracleでは、SMALLINT、INTEGERまたはBIGINT DRDAデータ型など、個別のデータベース・データ型を提供していません。場合によっては、列の値範囲を制限するために、特定の精度またはスケールを使用して数値列を定義することが必要となります。そのため、柔軟性が高い数値データベース・データ型としてOracle NUMBERが用意されています。このデータ型は、精度とスケールを指定して定義します。特定の範囲制限が列に対して定義されていない場合、Oracle NUMBERではその列に整数値と小数値が含まれることがあります。

したがって、Oracle以外のデータベースからデータを移行するときには、適切なデータベース・データ型を検討する必要があります。これは特に、限られた範囲または形式のデータを処理するアプリケーションを移行する場合に重要です。

たとえば、NUMBER(5)に固有のデータ範囲がアプリケーションで受け入れられるが、列はデータ型NUMBERで定義されている場合、列に不適切な値または無効な値が挿入され、その値を使用または取得するときにデータの問題が発生する可能性があります。

表の定義が元のOracle以外のデータの近似値にマップされている場合、データ型の互換性の問題は発生しません。ただし、正確にモデル化されていないデータにアクセスする必要がある場合や、範囲制限されていないデータ型を生成する式を問合せで使用する場合には、互換性が高い代替データ型を適用する必要があります。

COUNT(*)式の結果、範囲が限定されていないOracle NUMBERデータ型が生成されることを考慮してください。COUNTを使用する問合せの結果をDRDA INTEGERデータ型として表す必要があるアプリケーションの場合、型の不一致を防ぐために、次のいずれかの操作を実行する必要があります。

- Oracle NUMBERを使用するようにアプリケーションを変更する。

- 結果を適切な形式にCASTするように、問合せ式を変更する。

- 結果のデータ型の形式を再マップする。

多くの場合、アプリケーションの変更が現実的でも実現可能でもなく、データ型の再マップが唯一の有効な解決策となります。

アプリケーション・サーバーには、表または列ごとに、Oracle NUMBERデータ型の結果を、対応するさらに個別のDRDAデータ型に変換する限定的な機能があります。このメカニズムは、クライアントのARがOracle NUMBERからDRDAデータ型へのデフォルト・マッピングを適切に変換できない場合にも使用できます。サポートされているすべての変換につていは、Oracleデータ型からDRDAへの変換を参照してください。

データ型マッピングを適用するには、PL/SQLファンクションSET_TYPEMAP.を呼び出す必要があります。プロシージャSET_TYPEMAPは、指定された表および列式に対して指定された型変換マップを実装します。型マップ・オブジェクト名の構文は、table_name:column_expressionです。すべての表と指定した列式をインクルードするには、表名の位置にワイルドカード文字(*)を使用できます。また、Oracle NUMBERに評価される、指定された表のすべての列式が、型にマップされることを示す場合にも使用できます。

Oracle NUMBERから別のデータ型への変換の構文は、NUMBER=datatypeです。使用可能なデータ・タイプ名については、表7-3を参照してください。

デフォルトではOracle NUMBERはDRDA DECFLOAT(34)にマッピングされます。例7-2は、列を直接使用する問合せが、取得された列の再マッピングをDRDA型INTEGERとして使用する可能性があることを示しています。ファンクションで列を使用する際には、場合によっては式にtypemapを適用する必要があります。詳細は、例7-3.を参照してください。

例7-2 列を直接使用する問合せでのTYPEMAPの使用

アプリケーションで、EMPLOYEE_IDの値がDRDAのINTEGER型の形式である必要があるとします。

CREATE TABLE employees(employee_id NUMBER(6), first_name VARCHAR2(20), ...);

このマッピングでは範囲制限が適用されます。このマッピングを容易にするため、アプリケーション・パッケージORACLE.MYPACKAGEに次のtypemapエントリを適用します。

begin
dbms_drdaas.set_typemap (
'ORACLE', 'MYPACKAGE', 'EMPLOYEES:EMPLOYEE_ID',
'NUMBER=INTEGER');
end;

例7-3 ファンクションでのTYPEMAPの使用

次のように列に対してCOUNTファンクションを使用するとします。

SELECT COUNT(employee_id) FROM employees;

この場合は次のtypemap式を適用します。

begin
dbms_drdaas.set_typemap (
'ORACLE', 'MYPACKAGE', 'EMPLOYEES:COUNT(EMPLOYEE_ID)',
'NUMBER=INTEGER' );
end;

表7-3に、使用可能なtypemapの名前とDRDAデータ型への変換を示します。

表7-3 Oracle NUMBER TYPEMAPデータ型の名前

データ型の名前

SQL型

データ型のサイズ

注意事項

SMALLINT

500, 501

2バイト

単精度整数

INTEGER

496, 497

4バイト

整数

BIGINT

492, 493

8バイト

長精度整数

FLOAT

480. 481

4バイト

単精度浮動小数点

DOUBLE

480, 481

8バイト

倍精度浮動小数点

8Oracle Database Provider for DRDAのデータ・ディクショナリ

この章では、Oracle Database Provider for DRDAで使用できるデータ・ディクショナリの拡張機能について説明します。

この章には次のトピックが含まれます:

- Oracle Database Provider for DRDAでのデータ・ディクショナリのエミュレーション

- Oracle Database Provider for DRDAのデータ・ディクショナリ・ビュー

Oracle Database Provider for DRDAでのデータ・ディクショナリ・エミュレーション

多くのアプリケーションでは、DB2システム・カタログのサブセットが使用されます。Oracle Database Provider for DRDAでは次の3つの主要なカタログ・セットがサポートされています。3つのセットすべてで共通する構造がありますが、明確に異なる点も多数あります。

これらのカタログは、既存のOracleデータ・ディクショナリの表およびビューのオーバーレイ(ビュー)として実装されます。

この項で説明するカタログは、DB2 for z/OSのカタログです。

z/OS上のDB2

DB2 for z/OSには次のカタログ表が含まれています。これらのビューの詳細は、IBMの『DB2 for z/OS SQL Reference』マニュアルを参照してください。

- SYSIBM.SYSCOLUMNS

- SYSIBM.SYSKEYS

- SYSIBM.SYSINDEXES

- SYSIBM.SYSFOREIGNKEYS

- SYSIBM.SYSPACKAGE

- SYSIBM.SYSPACKSTMT

- SYSIBM.SYSPARMS

- SYSIBM.SYSPLAN

- SYSIBM.SYSRELS

- SYSIBM.SYSROUTINES

- SYSIBM.SYSSYNONYMS

- SYSIBM.SYSTABLES

- SYSIBM.SYSVIEWS

Oracle Database Provider for DRDAのデータ・ディクショナリ・ビュー

この項では、次のデータ・ディクショナリ・ビューについて説明します。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

表8-1に、現在バインドされているDRDAパッケージのリストを示します。その所有者はユーザーSYSIBMです。このビューにアクセスするユーザーには、DRDAAS_USER_ROLEまたはDRDAAS_ADMIN_ROLEが付与されている必要があります。DRDAAS_USER_ROLEおよびDRDAAS_ADMIN_ROLEを参照してください。

表8-1 ALL_DRDAASPACKAGEデータ・ディクショナリ・ビューの説明

列名

データ型

Null?

説明

COLLID

VARCHAR2(128)

非NULL

パッケージのコレクションID(RDBCOLID)

NAME

VARCHAR2(128)

非NULL

DRDAパッケージの名前(PKGID)

VRSNAM

VARCHAR2(128)

パッケージのバージョン名(VRSNAM)

CONTOKEN

RAW(8)

非NULL

パッケージの整合性文字列(PKGCNSTKN)

OWNER

VARCHAR2(128)

非NULL

パッケージを所有するユーザーのID

CREATOR

VARCHAR2(128)

非NULL

パッケージを作成/バインドしたユーザーのID

CREATE_TIME

TIMESTAMP

非NULL

パッケージの作成時刻

LAST_BIND_TIME

TIMESTAMP

非NULL

パッケージの最終バインディング時刻

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

表8-2に、各パッケージのユーザーID、DRDAパッケージ名、ユーザーに付与される権限のセットを示します。その所有者はユーザーSYSIBMです。このビューにアクセスするユーザーには、DRDAAS_ADMIN_ROLEまたはDRDAAS_ADMIN_ROLEが付与されている必要があります。DRDAAS_USER_ROLEおよびDRDAAS_ADMIN_ROLEを参照してください。

表8-2 ALL_DRDAASPACKAUTHデータ・ディクショナリ・ビューの説明

列名

データ型

Null?

説明

GRANTOR

VARCHAR2(128)

非NULL

権限を付与したユーザーのユーザーID

GRANTEE

VARCHAR2(128)

非NULL

権限が付与されたユーザーのユーザーID

GRANT_TIME

TIMESTAMP

非NULL

権限の作成時刻

COLLID

VARCHAR2(128)

非NULL

DRDAパッケージのコレクションID(RDBCOLID)

NAME

VARCHAR2(128)

非NULL

DRDAパッケージの名前(PKGID)

PRIVILEGE

VARCHAR2(128)

非NULL

権限

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

表8-3に、DRDAパッケージのサイド属性を示します。その所有者はユーザーSYSIBMです。このビューにアクセスするユーザーには、DRDAAS_ADMIN_ROLEまたはDRDAAS_ADMIN_ROLEが付与されている必要があります。DRDAAS_USER_ROLEおよびDRDAAS_ADMIN_ROLEを参照してください。

表8-3 ALL_DRDAASPACKSIDEデータ・ディクショナリ・ビューの説明

列名

データ型

Null?

説明

COLLID

VARCHAR2(128)

非NULL

DRDAパッケージのコレクションID(スキーマ) (RDBCOLID)

NAME

VARCHAR2(128)

非NULL

DRDAパッケージの名前(PKGID)

SIDEITEM

VARCHAR2(128)

非NULL

サイド項目

SIDEWORD

VARCHAR2(255)

非NULL

サイド・キーワード

SIDEVALUE

VARCHAR2(255)

非NULL

サイド値

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

表8-4に、DRDAパッケージ定義データを示します。その所有者はユーザーSYSIBMです。ユーザーがこのビューにアクセスするためには、DRDAAS_ADMIN_ROLEが付与されている必要があります。DRDAAS_ADMIN_ROLEを参照してください。

表8-4 DBA_DRDAASPACKAGEデータ・ディクショナリ・ビューの説明

列名

データ型

Null?

説明

COLLID

VARCHAR2(128)

非NULL

DRDAパッケージのコレクションID(スキーマ) (RDBCOLID)

NAME

VARCHAR2(128)

非NULL

DRDAパッケージの名前(PKGID)

VRSNAM

VARCHAR2(128)

パッケージのバージョン名(VRSNAM)

CONTOKEN

RAW(8)

非NULL

パッケージの整合性文字列(PKGCNSTKN)

OWNER

VARCHAR2(128)

非NULL

パッケージを所有するユーザーのID

CREATOR

VARCHAR2(128)

非NULL

パッケージを作成したユーザーのID

CREATE_TIME

TIMESTAMP

非NULL

パッケージの作成時刻

LAST_BIND_TIME

TIMESTAMP

非NULL

パッケージの最終バインディング時刻

QUALIFIER

VARCHAR2(128)

パッケージのデフォルト・スキーマ(DFTRDBCOL)

PKSIZE

NUMBER(5)

非NULL

パッケージのセクション数(MAXSCTNBR)

VALID

CHAR(1)

非NULL

パッケージの有効状態。Y(はい)またはN(いいえ)。

ISOLATION

CHAR(1)

非NULL

R=RR、A=ALL、C=CS、G=CHG、N=NC (PKGISOLVI)

RELEASEOPT

CHAR(1)

C=COMMIT、D=DEALLOCATE (RDBRLSOPT)

BLOCKING

CHAR(1)

B=(ブロック)、N=(ブロックなし) (QRYBLKCTL)

CODEPAGES

NUMBER(5)

デフォルトのDBCSコードページ(PKGDFTCC(CCSIDSBC))

CODEPAGED

NUMBER(5)

デフォルトのDBCSコードページ(PKGDFTCC(CCSIDDBC))

CODEPAGEM

NUMBER(5)

デフォルトのMBCSコードページ(PKGDFTCC(CCSIDMBC))

CODEPAGEX

NUMBER(5)

デフォルトのXMLコードページ(PKGDFTCC(CCSIDXML))

DEGREEIOPRL

NUMBER(5)

並列I/Oの並列度(DGRIOPRL)

DATEFMT

CHAR(1)

日付書式(1=USA、2=EUR、3=ISO、4=JIS、5=LOCAL)。

TIMEFMT

CHAR(1)

時刻書式(1=USA、2=EUR、3=ISO、4=JIS、5=LOCAL)

DECDEL

CHAR(1)

小数点区切り記号(STTDECDEL)

STRDEL

CHAR(1)

文字列のデリミタ(STTSTRDEL)

DECPRC

NUMBER(5)

小数点以下の桁数(DECPRC)

CHARSUBTYPE

CHAR(1)

文字のサブタイプ(PKGDFTCST)

DYNAMICRULES

CHAR(1)

将来使用(PKGATHRUL)

REPREPDYNSQL

CHAR(1)

将来使用(PRPSTTKP)

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

表8-5に、各パッケージのユーザーID、RDAパッケージ名、およびユーザーに対して付与される権限を示します。その所有者はユーザーSYSIBMです。ユーザーがこのビューにアクセスするためには、DRDAAS_ADMIN_ROLEが付与されている必要があります。DRDAAS_ADMIN_ROLEを参照してください。

表8-5 DBA_DRDAASPACKAUTHデータ・ディクショナリ・ビューの説明

列名

データ型

Null?

説明

GRANTOR

VARCHAR2(128)

非NULL

パッケージの権限を付与するユーザーの認可ID

GRANTEE

VARCHAR2(128)

非NULL

パッケージの権限を付与されるユーザーの認可ID

COLLID

VARCHAR2(128)

非NULL

DRDAパッケージのコレクションID(スキーマ) (RDBCOLID)

NAME

VARCHAR2(128)

非NULL

DRDAパッケージの名前(PKGID)

VRSNAM

VARCHAR(128)

非NULL

パッケージのバージョン名(VRSNAM)

PRIVILEGE

VARCHAR2(128)

非NULL

付与される権限

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

表8-6に、DRDAパッケージのサイド属性を示します。その所有者はユーザーSYSIBMです。このビューにアクセスするユーザーには、DRDAAS_ADMIN_ROLEが必要です。

表8-6 DBA_DRDAASPACKSIDEデータ・ディクショナリ・ビューの説明

列名

データ型

Null?

説明

COLLID

VARCHAR2(128)

非NULL

DRDAパッケージのコレクションID(スキーマ) (RDBCOLID)

NAME

VARCHAR2(128)

非NULL

DRDAパッケージの名前(PKGID)

SIDEITEM

VARCHAR(128)

非NULL

サイド項目

SIDEWORD

VARCHAR2(255)

非NULL

サイド・キーワード

SIDEVALUE

VARCHAR2(255)

非NULL

サイド値

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

表8-7に、DRDAパッケージ本体データを示します。その所有者はユーザーSYSです。ユーザーがこのビューにアクセスするためには、DRDAAS_ADMIN_ROLEが付与されている必要があります。DRDAAS_ADMIN_ROLEを参照してください。

表8-7 DBA_DRDAASPACKSTMTデータ・ディクショナリ・ビューの説明

列名

データ型

Null?

説明

COLLID

VARCHAR2(128)

非NULL

DRDAパッケージのコレクションID(スキーマ) (RDBCOLID)

NAME

VARCHAR2(128)

非NULL

DRDAパッケージの名前(PKGID)

VRSNAM

VARCHAR(128)

パッケージのバージョン名(VRSNAM)

CONTOKEN

RAW(8)

非NULL

パッケージの整合性文字列(PKGCNSTKN)

STMTASM

CHAR(1)

非NULL

文の想定事項(BNDSTTADM)

STMTNO

NUMBER(5)

非NULL

文の番号(SQLSTTNBR)

SECTNO

NUMBER(5)

非NULL

セクション番号(PKGSN)

STMTLEN

NUMBER

非NULL

文のテキストの長さ

STMT

CLOB

非NULL

文のテキスト

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

表8-8には、DBMS_DRDAASおよびDBMS_DRDAAS_ADMINパッケージ・ファンクションからのトレース・エントリが含まれています。その所有者はユーザーSYSIBMです。このビューにアクセスするユーザーには、DRDAAS_ADMIN_ROLEまたはDRDAAS_ADMIN_ROLEが付与されている必要があります。DRDAAS_USER_ROLEおよびDRDAAS_ADMIN_ROLEを参照してください。

これはデバッグ機能のみです。

表8-8 DBA_DRDAASPATRACEデータ・ディクショナリ・ビューの説明

列名

データ型

Null?

説明

CALLER

VARCHAR2(128)

非NULL

トレース・レコードを記述したユーザーのユーザーID

FUNC

VARCHAR2(128)

非NULL

トレースされるファンクション

ARG1

VARCHAR(128)

引数2

ARG2

VARCHAR(128)

引数1

ARG3

VARCHAR(128)

引数3

ARG4

VARCHAR(128)

引数4

ARG5

VARCHAR(128)

引数5

TS

TIMESTAMP

非NULL

トレース・エントリのタイムスタンプ

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

このビューは、creator列またはowner列が現在のSQLユーザーIDに一致し、そのユーザーIDに、パッケージのCOLLIDおよびnameに一致するDBA_DRDAASPACKAUTHでEXECUTE_PRIVILEGEが付与されている行のみを戻します。

ビューUSER_DRDAASPACKAGEはDBA_DRDAASPACKAGE表にマップされます。その所有者はユーザーSYSIBMです。このビューから選択するには、DRDAAS_USER_ROLE権限が必要です。DRDAAS_USER_ROLEを参照してください。

このビューには、DBA_DRDAASPACKAGE表と同じ列定義があります。表8-4を参照してください。

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

このビューは、grantee列の現在のSQLユーザーIDに一致する行のみを戻します。

ビューUSER_DRDAASPACKAUTHは、DBA_DRDAASPACKAUTHの上にマップされます。その所有者はユーザーSYSIBMです。ユーザーがこの表から選択するためには、DRDAAS_USER_ROLEを持っている必要があります。DRDAAS_USER_ROLEを参照してください。

このビューには、DBA_DRDAASPACKAUTH表と同じ列定義があります。表8-5を参照してください。

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

このビューはアプリケーション・サーバーによって内部的に使用されます。

ビューUSER_DRDAASPACKSIDEは、DBA_DDRDAASPACKSIDEの上にマップされます。その所有者はユーザーSYSIBMです。ユーザーがこの表から選択するためには、DRDAAS_USER_ROLEを持っている必要があります。DRDAAS_USER_ROLEを参照してください。

このビューには、DBA_DRDAASPACKSIDE表と同じ列定義があります。表8-6を参照してください。

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

このビューは、creator列またはowner列が現在のSQLユーザーIDに一致し、そのユーザーIDに、パッケージのCOLLIDおよびnameに一致するDBA_DRDAASPACKAUTHでEXECUTE_PRIVILEGEが付与されている行のみを戻します。

ビューUSER_DRDAASPACKSTMTは、DBA_DRDAASPACKSTMT表にマップされます。その所有者はユーザーSYSIBMです。ユーザーがこの表から選択するためには、DRDAAS_USER_ROLEを持っている必要があります。DRDAAS_USER_ROLEを参照してください。

このビューには、DBA_DRDAASPACKSTMT表と同じ列定義があります。表8-7を参照してください。

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

このビューは、現在のユーザーのユーザーIDと一致する行のみを戻します。

これはデバッグ機能のみです。

ビューUSER_DRDAASTRACEはDBA_DRDAASTRACEビューにマップされます。その所有者はユーザーSYSIBMです。このビューにアクセスするユーザーには、DRDAAS_USER_ROLEが付与されている必要があります。DRDAAS_USER_ROLEを参照してください。

このビューの列定義は、caller列を除いてUSER_DRDAASTRACEビューと同じです。表8-8を参照してください。

9 Oracle Database Provider for DRDAでのエラー・コードのサポート

この章では、Oracle Database Provider for DRDAでのエラー・コードのサポートについて説明します。

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

- Oracleエラー・コードのマッピング

Oracleエラー・コードのマッピング

DRDAおよびDB2では、正常に完了しても警告が生成される特定タイプの操作があります。たとえば、操作により整数オーバーフローの状況が発生した場合、DB2は処理を続行し、エラーを含む列値に設定されたインディケータとともに残りの行データを返します。また、警告コード+802が発行されます。

(EXCEPTION ERROR exceptioncode HAS OCCURRED DURING
operationtype OPERATION
ON datatype DATA,
POSITION positionnumber)

DB2およびDRDAでは、負数のSQLCODEはエラーであり、正数のSQLCODEは警告です。Oracleでは、DRDA(およびDB2)とは異なり、警告条件の概念がありません。Oracleではコールの実行が成功するか、またはエラーが生成されるかのいずれかです。たとえば、Oracleではオーバーフロー状況はエラーとして処理され、続行しません。このため、Oracle Database Provider for DRDAではDB2の動作を正確にエミュレートできません。

ただし、OracleとDRDA(およびDB2)の両方に共通するほとんどの標準的なエラー条件はマップできます。表9-1は、Oracleの一般的なエラー・コードならびにそれに相当するSQLコードおよびSQL状態を示しています。

表9-1 OracleからDRDAへのエラー・コードのマッピング

Oracleエラー・コード

SQLCODE

SQLSTATE

エラー・コードの説明

ORA-00001

-803

23505

一意制約違反

ORA-00900

-104または-199

42601

無効なSQL文

ORA-00900

-84

42616

無効なSQL文

ORA-00901

-104または-199

42601

無効なCREATEコマンド

ORA-00902

-104または-199

42601

無効なデータ型

ORA-00903

-104または-199

42601

無効な表名

ORA-00904

-204

42704

無効な識別子

ORA-00904

-206

42703

無効な識別子

ORA-00905

-199

42601

スペルが正しくないキーワード

ORA-00906

-104

42601

左カッコがありません。

ORA-00907

-104

42601

右カッコがありません。

ORA-00908

-104

42601

NULLがありません。

ORA-00909

-170

42605

引数の数が正しくありません。

ORA-00910

-604

42611

長さがmax+1のCHAR列を作成しています。

ORA-00911

-104または-199

42601

無効な文字

ORA-00913

-117

42802

値の個数が多すぎます。

ORA-00917

-104または-199

42601

カンマがありません。

ORA-00918

-203

42702

列使用方法があいまいです。

ORA-00920

-104または-199

42601

関係演算子が無効です。

ORA-00922

-104または-199

42601

オプションが無効であるか存在しません。

ORA-00923

-104

42601

FROMキーワードが指定の位置にありません。

ORA-00925

-104

42601

INTOキーワードがありません。

ORA-00926

-104

42601

VALUESキーワードがありません。

ORA-00927

-199

42601

=記号がありません。

ORA-00928

-104

42601

SELECTキーワードがありません。

ORA-00932

-408

42821

値にターゲット列の型との互換性がありません。

ORA-00933

-104または-199

42601

SQLコマンドが適切に終了していません。

ORA-00934

-120

42903

グループ関数は使用できません。

ORA-00936

-104または-199

42601

式がありません。

ORA-00937

-122

42803

単一のグループ関数ではありません。

ORA-00942

-204

42704

表またはビューが存在しません。

ORA-00947

-117

42802

値の個数が不足しています。

ORA-00950

-104または-199

42601

無効なDROPオプション

ORA-00955

-601

42710

すでに使用されているオブジェクト名です。

ORA-00957

-612

42711

列名が重複しています。

ORA-00960

-203

42702

選択リストに未確定の列名があります。

ORA-00969

-104

42601

ONキーワードがありません。

ORA-00971

-104

42601

SETキーワードがありません。

ORA-00972

-107

46002

識別子が長すぎます。

ORA-00975

-182

42816

日付と日付の加算はできません。

ORA-00979

-122

42803

GROUP BYの式ではありません。

ORA-00999

-104または-199

42601

ビュー名が無効です。

ORA-01000

-905

57014

最大オープン・カーソル数を超えました。

ORA-01002

-501

22003

フェッチ順序が無効です。

ORA-01008

-313

07001

バインドされていない変数があります。

ORA-01031

-551

42501

オブジェクトに対して操作を実行する権限が不足しています。

ORA-01036

-313

07001

変数の名前/数が無効です。

ORA-01400

-407

23502

NULLを列に挿入できません。

ORA-01403

+100

02000

データが見つかりません。

ORA-01410

-399

22511

無効なROWID

ORA-01422

-811

21000

完全フェッチがリクエストよりも多くの行を戻しました。

ORA-01424

-130

22019

エスケープ文字に続く文字がないか、または無効です。

ORA-01425

-130

22025

エスケープ文字は長さ1の文字列である必要があります。

ORA-01427

-811

21000

単一行の副問合せから複数の行が戻されました。

ORA-01435

-553

42503

ユーザーが存在しません

ORA-01438

-413

22003

この列に許容される指定精度より大きな値です。

ORA-01455

-413

22003

列の変換によりINTEGERデータ型がオーバーフローしました。

ORA-01476

-802

22012

除数が0です。

ORA-01488

-302

22001

入力データ中のニブルまたはバイトが無効です。

ORA-01722

-408

42821

数値が無効です。

ORA-01730

-158

42811

CREATE VIEWに指定された列の数があいまいです。

ORA-01745

-313

07001

ホスト/バインド変数名が無効です。

ORA-01747

-104または-199

42601

無効な表または列が指定されました。

ORA-01756

-104

42603

引用符付き文字列の引用符が欠落しています。

ORA-01789

-421

42826

集合演算子のオペランドで列数が同一ではありません。

ORA-01830

-181

22007

入力文字列全体を変換する前に日付書式ピクチャが終了しました。

ORA-01841

-181

22007

(周)年は-4713と+9999の間の0以外の数字を指定する必要があります。

ORA-01843

-181

22007

無効な月。

ORA-01847

-181

22007

無効な年。

ORA-01858

-181

22007

日付の数値を指定する位置に数値ではないものが指定されています。

ORA-01861

-180

22007

リテラルが書式文字列と一致しません。

ORA-02089

-426

2D528

下位セッションにCOMMITは使用できません。

ORA-04043

-204

42704

オブジェクトが見つかりません。

ORA-04063

-84

42612

パッケージ本体にエラーがあります。

ORA-06550

-204

42504

次のような様々なPL/SQLエラーを報告します。

- PLS00201: 識別子を宣言してください。

- PLS00904: オブジェクトにアクセスするには権限が不十分です。

ORA-06576

-440

42884

ファンクション名またはプロシージャ名が無効です。

ORA-08006

-508

24504

現在、指定した行は存在しません。

ORA-12899

-404

22001

列に対して値が大きすぎます。

ORA-20980

-551

42501

ユーザーにはこの操作のためのパッケージ権限がありません。

ORA-20981

-917

42969

パッケージのバインドに失敗しました。

ORA-20982

-551

42501

ユーザーにはこの操作のためのパッケージ権限がありません。

ORA-20983

-722

42704

パッケージが存在しません。

ORA-22275

-423

0F001

無効なLOBロケータが指定されました。

ORA-24333

-104または-199

42601

SQL文にスペルミスがあります。

ORA-24381

-253

22529

配列の挿入またはマージでエラーが報告されました。

その他すべてのエラー

-84

42612

10Oracle Database Provider for DRDAのコマンドライン・ユーティリティ

Oracle Database Provider for DRDAに組み込まれているコマンド・ユーティリティについて、この章で詳しく説明します。

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

- コマンドライン・ユーティリティ

コマンドライン・ユーティリティ

コマンドライン・ユーティリティdrdactlにより、ユーザーはOracle DRDAアプリケーション・サーバーを制御できます。ASの起動、停止、ステータスと操作の変更が制御されます。drdactlユーティリティは、コマンド引数を指定して即時実行することも、引数を指定しないで起動することもできます(コマンドの入力が求められます)。

START

このコマンドは、指定されたインスタンスを起動します。

構文

START {instance_name}

STOP

このコマンドは、指定された実行中のインスタンスを停止します。

構文

STOP {instance_name}

STATUS

このコマンドは、指定された実行中のインスタンスの現在のステータスと、現在接続しているすべてのセッションの情報を表示します。

構文

STATUS {instance_name} {DETAIL}

PAUSE

このコマンドは、指定したセッションIDを持つセッションを一時停止します。

構文

PAUSE {instance_name} SESSION <session_id>

RESUME

このコマンドは、指定したセッションIDを持つセッションを再開します。

構文

RESUME {instance_name} SESSION <session_id>

RELOAD

このコマンドを実行すると、サーバーがインスタンス構成をリロードします。

構文

RELOAD {instance_name}

EXIT

このコマンドは、ユーティリティを終了し、オペレーティング・システムに制御を戻します。

構文

EXIT

11Oracle Database Provider for DRDAのセキュリティおよび記憶域に関する考慮事項

この章では、Oracle Database Provider for DRDAに関するセキュリティおよび記憶域の問題について説明します。

この章には次のトピックが含まれます:

- Oracle Database Provider for DRDAのセキュリティおよび記憶域の概要

- Oracle Database Provider for DRDAでの認証および暗号化

- Oracle Database Provider for DRDAでのデータベース・ロール

- Oracle Database Provider for DRDAの記憶域

Oracle Database Provider for DRDAのセキュリティおよび記憶域の概要

Oracle Database Provider for DRDAは、Oracle Databaseのセキュリティおよび認可モデルを使用します。これにより、ユーザー・データへの正しいSQLアクセスが保証されます。

DRDAは、REQUESTERおよびOWNERという2つの認可モデルを指定します。これらはパッケージの属性PKGATHRULとして指定されます。

- REQUESTERモデルでは、現在ログインしているユーザーが認可を制御します。
REQUESTERモデルは動的SQLルールとも呼ばれ、実行時に構成されるSQLを実行するために使用されます。これは、Oracle DatabaseがSQLアクセスのために実装するセキュリティ・モデルです。

- OWNERモデルでは、格納されているUSERID(パッケージ所有者、PKGOWNID)が、文の実行中に異なるUSERIDをインスタンス化します。
OWNERモデルは静的SQLルールとも呼ばれ、パッケージ内で事前にバインドされているSQLに使用されます。Oracle Databaseは、同等のセキュリティ・モデルを実装していません。

Oracle Databaseでは1つのセキュリティ・モデルのみが実装されるため、格納および動的に作成されたパッケージ内のすべてのSQLは、動的SQLルール・モデルで実行されます。これは、AUTHID DEFINER属性を使用して作成された各PL/SQLオブジェクトのインスタンス化モードをオーバーライドしません。

AUTHID DEFINERの詳細は、Oracle® Database PL/SQL言語リファレンスを参照してください。

Oracle Database Provider for DRDAでの認証および暗号化

DRDAでは、データベースへのアクセス(ACCRDB)の実行前にユーザー認証(ACCSEC(SECMEC), SECCHK)を実行する必要があります。

認証サービス

DRDAには、2種類の認証サービス(専用および多重化用)があります。

- 専用の場合、ASが1つの専用データベースへのアクセスを提供します。別のデータベースに接続するオプションはありません。後でACCRDBで渡されるrdbnamは、ターゲット・データベース名と一致している必要があります。一致しいていないと、セッションのアクセスが失敗し、RDBAFLRMメッセージが発行されます。
このモードでは、ACCSECは認証を実行するためにrdbnamインスタンス変数を必要としません。これは、データベースを選択することがないためです。したがって、ASではACCSEC処理時に1つのデータベースとセッション関連付けを行い、要求されたセキュリティ・メカニズム(SECMEC)が使用可能であることを検証できます。SECCHKコマンドが送信されると、初期データベース・セッションが維持され、完全な認証が実行されます。

多重化サーバーに対応していない古いARではこのモードを使用する必要があります。このモードでARからrdbnamが提供される場合、このrdbnamは接続データベースと突き合わせて検証される必要があります。

- 多重化モードでは、ASは複数データベースへの同時アクセスを提供します。このモードでは、要求されたセキュリティ・メカニズムを検証するために、ACCSECのrdbnamインスタンス変数が必要です。ASは、セキュリティ検証のためにリクエストされたデータベースに接続します。SECCHKコマンドが送信されると、初期データベース・セッションが維持され、完全な認証が実行されます。
このモードは、ACCSECの一部としてrdbnamを提供する新しいARでサポートされています。このモードでARがACCSECのrdbnamを提供しない場合、エラーが生成され、RDBAFLRM応答がACCSECに送信されます。

暗号化サービス

Oracle Database Provider for DRDAでは次のセキュリティ・メカニズムがサポートされています。

- EUSRIDPWD: 暗号化されたユーザーIDとパスワードのメカニズム

- EUSRIDNWPWD: 暗号化されたユーザーID、パスワードおよび新規パスワードのメカニズム

- USRIDPWD: ユーザーIDとパスワードのメカニズム

- USRIDNWPWD: ユーザーID、パスワード、および新規パスワードのメカニズム

- USRENCPWD: ユーザーIDとパスワードの暗号化メカニズム

セキュリティ・メカニズムがアクセス可能であると検証されたら、実際のセキュリティ認可(SECCHK)に進むことができます。

Oracle Database Provider for DRDAでのデータベース・ロール

Oracle Database Provider for DRDAでは、DRDAAS_ADMIN_ROLEおよびDRDAAS_USER_ROLEの2つのロールを使用します。

DRDAAS_ADMIN_ROLE

DRDAAS_ADMIN_ROLEロールにより、DBMS_DRDAAS_ADMINパッケージへのアクセスと使用が許可されます。これは、Oracle Database Provider for DRDA固有のDBAレベルの権限です。Oracle DatabaseへのリモートDRDAアクセスを管理する管理者には、このロールを付与する必要があります。

DRDAAS_USER_ROLE

DRDAAS_USER_ROLEロールは、Oracle Database Provider for DRDAユーザーに対し次の目的でのDBMS_DRDAASパッケージへのアクセスを許可します。

- DRDAパッケージのバインド

- Oracle Database Provider for DRDAパッケージ・リソース表への読取りアクセスの許可

- パッケージの実行

DRDAAS_USER_ROLEロールの権限が付与されていないOracle Database Provider for DRDAユーザーは、アクセスが許可されているDRDAパッケージを実行できません。

Oracle Database Provider for DRDAでの記憶域

Oracle Database Provider for DRDAユーザーには、SYSIBMという名前の記憶域が割り当てられています。これは、SYSIBM表領域とSYSIBMユーザーによって実装されます。

SYSIBM表領域

管理およびサポート機能のためにアプリケーション・サーバーで提供および使用されるすべての表、ビューおよびパッケージは、表領域SYSIBMに含まれます。Oracle Database Provider for DRDAサポート・パッケージをインストールする前にこの表領域を作成する必要があります。SYSIBM表領域を作成する方法の例については、製品に付属するcatdrdaas.sqlスクリプトを参照してください。付録A「Oracle Database Provider for DRDAの作成およびメンテナンスのスクリプト」でcatdrdaas.sqlのリストを参照してください。

create tablespace SYSIBM datafile 'sysibm01.dbf' size 70M reuse
extent management local segment space management auto online;

SYSIBMユーザー

Oracle Database Provider for DRDAで提供および使用されるすべての表、ビューおよびパッケージは、ユーザー・スキーマSYSIBMに含まれています。Oracle Database Provider for DRDAのパッケージおよび表のインストール時に、ユーザーIDがロック済アカウントとして作成され、その記憶域としてSYSIBM表領域を使用するように設定されます。

12Oracle Database Provider for DRDAの使用に関する制限事項

この項では、本来IBM DB2向けに設計されているアプリケーションをOracle Databaseでカスタマイズまたは維持する際に適用できる制限事項と回避策について説明します。

この章には次のトピックが含まれます:

- Resynch Manager

- カーソルのHOLD属性のセマンティクス

- DB2パスワードでのブランクの埋込み

- データ型の制限事項

- その他の制限事項

Resynch Manager

Oracle Database Provider for DRDAでは、分散作業単位のためにSync Point Managerサービスがサポートされています。また、ログなしでソース Sync Point Managerを使用する移行の実行中に再同期できるように、Resynchronization Managerサービスもサポートされています。

Oracle Database Provider for DRDAのこのリリースでは、アクティブなインダウト・トランザクションの解決サービスはサポートされていません。移行されたインダウト・トランザクションでは、クライアント・システムとOracle Databaseの間での手動解決が必要です。インダウト・トランザクションの手動解決の詳細は、Oracle® Database管理者ガイドを参照してください。

カーソルHOLD属性セマンティクス

HOLD属性が設定されているカーソルには次の制限事項があります。

1. リモート作業単位(RUOW)では、FOR UPDATE句を使用して準備されたカーソルは、COMMITまたはROLLBACKで暗黙にクローズされます。

2. 分散作業単位(DUOW)では、COMMITまたはROLLBACKで、オープン・カーソルが含まれているサーバーで更新が行われる場合には、すべてのカーソルが暗黙的にクローズされます。

DB2パスワードの空白埋め

パスワードがDRDAで暗号化および送信される場合、8文字未満のパスワードにはDB2 for z/OSによりブランクが挿入されます。その結果、ログオンが失敗し、エラーORA-01017が発生します。ユーザー・アカウントのパスワードを8文字以上の長さにすることをお薦めします。

データ型の制限事項

データ型を使用する場合は、次の制限に注意してください。

- DATEデータ型

- Oracleオブジェクト・リレーショナル・データ型

- TIMESTAMPデータ型

- TIMESTAMP WITH TIMEZONEデータ型

- XMLデータ型

- SYS.XMLTypeデータ型

DATEデータ型

Oracle DATEデータ型には、DRDA DATEデータ型ではサポートされていない時間コンポーネントが含まれています。Oracle DATEデータに時刻コンポーネントが含まれている場合にそのDATEデータを操作すると、予期されている結果にならないことがあります。整合性を維持するため、OracleネイティブDATE構文を使用してDATEデータを挿入するときには、時刻コンポーネントを格納しないでください。または、DATE列をTIMESTAMPに再マップしてください。

Oracleオブジェクト・リレーショナル・データ型

このリリースでは、オブジェクト・リレーショナル・データ型を使用して定義された列を含むオブジェクトに対する問合せはサポートされていません。

このリリースでは、入力または戻り値の引数にオブジェクト・リレーショナル・データ型を使用して定義されたコール側SQLプロシージャはサポートされていません。

TIMESTAMPデータ型

Oracle Database Provider for DRDAは、小数点以下6桁の固定精度を使用してTIMESTAMPを表します。

互換性の理由から、TIMESTAMPデータを使用するときには十分に注意してください。場合によってはプログラムでの調整(型キャストなど)を行う必要があります。TIMESTAMPデータ型でのキャストの詳細は、Oracle® Database SQL言語リファレンスを参照してください。

TIMESTAMP WITH TIMEZONEデータ型

TIMESTAMP WITH TIMEZONEの表現は、Oracle DatabaseとDB2で大きく異なります。

Oracle Database Provider for DRDAは、Oracleの表現規則に従ってTIMESTAMP WITH TIMEZONEを表現します。クライアントとサーバーの間で最適な互換性を維持するため、記述されているタイムゾーン表記のかわりに、4桁のタイムゾーン接尾辞表記(例: -08:00)を使用します。

XMLデータ型

DRDA XMLデータ型(988、989)は、このリリースではプログラムまたはバインド変数データ型としてサポートされていません。

SYS.XMLTypeデータ型

Oracle XMLデータ型、SYS.XMLTypeは、このリリースではサポートされていません。

その他の制限事項

SQL句の制限事項など、その他の制限は第14章で説明します。

13 Oracle Database Provider for DRDAにより使用されるPL/SQLパッケージ

この章では、Oracle Database Provider for DRDAによって使用されるPL/SQL APIについて説明します。

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

- DBMS_DRDAAS_ADMINパッケージ

- DBMS_DRDAASパッケージ

この2つのパッケージで使用される型マップ値の詳細は、第7章「Oracle Database Provider for DRDAでのデータ型のサポートと変換」を参照してください。

DBMS_DRDAAS_ADMINパッケージ

DBMS_DRDAAS_ADMIN PL/SQLパッケージは、Oracle Database Provider for DRDAユーザーに対してDRDAパッケージ権限を付与します。これには、次の権限が含まれます。

- DRDAパッケージのバインド

- DRDAパッケージの削除

- DRDAパッケージの実行

- パッケージ値の設定

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

- DBMS_DRDAAS_ADMIN権限の定数

- GRANT_PRIVILEGE

- REVOKE_PRIVILEGE

- SET_PROFILE

- SET_LOCALDATE_FORMAT

- SET_LOCALTIME_FORMAT

- SET_TYPEMAP

DBMS_DRDAAS_ADMIN権限の定数

次の定数は、GRANT_PRIVILEGEおよびREVOKE_PRIVILEGEプロシージャで使用されます。

ALL_PRIVILEGE

この権限では、アプリケーション・パッケージのすべての権限がクライアントに付与されます。

BIND_PRIVILEGE

この権限では、クライアントがアプリケーション・パッケージをデータベースにバインドまたは再バインドできるようになります。

COPY_PRIVILEGE

この権限では、クライアントが既存のアプリケーション・パッケージのコピーを作成し、別の名前を付けることができます(オプションで異なるパッケージ・オプションを指定できます)。

EXECUTE_PRIVILEGE

この権限では、クライアントが既存のアプリケーション・パッケージを実行できます。

DROP_PRIVILEGE

この権限では、クライアントが既存のアプリケーション・パッケージを削除できます。

SET_PRIVILEGE

この権限では、クライアントが特定のアプリケーション・パッケージ・オプションを設定できます。このマニュアルに記載されているSET_XXXファンクションを参照してください。

GRANT_PRIVILEGE

DRDAパッケージのユーザーに権限を付与します。

構文

PROCEDURE grant_privilege(
privilege_grant IN PLS_INTEGER,
collection_id IN VARCHAR2,
package_name IN VARCHAR2,
user_name IN VARCHAR2);

パラメータ

- privilege_grant (IN)
付与する権限

- collection_id (IN)
コレクションID

- package_name (IN)
パッケージ名

- user_name (IN)
権限を付与するユーザーID

使用例

begin
dbms_drdaas_admin.grant_privilege ( DBMS_DRDAAS_ADMIN.ALL_PRIVILEGE, 'ORACLE',
'MYPACKAGE', 'DRDAUSR1' );
end;

REVOKE_PRIVILEGE

DRDAパッケージのユーザーから権限を取り消します。

構文

PROCEDURE revoke_privilege(
privilege_revoke IN PLS_INTEGER,
collection_id IN VARCHAR2,
package_name IN VARCHAR2,
user_name IN VARCHAR2);

パラメータ

- privilege_revoke (IN)
取り消す権限

- collection_id (IN)
コレクションID

- package_name (IN)
パッケージ名

- user_name (IN)
権限を取り消すユーザーID

使用例

begin
dbms_drdaas_admin.revoke_privilege ( DBMS_DRDAAS_ADMIN.ALL_PRIVILEGE, 'ORACLE',
'MYPACKAGE', 'DRDAUSR1' );
end;

DROP_PACKAGE

package_nameで指定されるパッケージのインスタンスをすべて削除します。

構文

procedure DROP_PACKAGE(
collection_id IN VARCHAR2,
package_name IN VARCHAR2 );

パラメータ

- collection_id (IN)
コレクションID

- package_name (IN)
パッケージ名

使用例

begin
dbms_drdaas_admin.drop_package(
'ORACLE', 'MYPACKAGE' );
end;

DROP_PACKAGE_VN

version_nameに基づいてパッケージを削除します。

構文

procedure DROP_PACKAGE_VN(
collection_id IN VARCHAR2,
package_name IN VARCHAR2,
version_name IN VARCHAR2 DEFAULT NULL );

パラメータ

- collection_id (IN)
コレクションID

- package_name (IN)
パッケージ名

- version_name (IN)
バージョン名

DROP_PACKAGE_CT

consistency_tokenに基づいてパッケージを削除します。

構文

procedure DROP_PACKAGE_CT(
collection_id IN VARCHAR2,
package_name IN VARCHAR2,
consistency_token IN RAW );

パラメータ

- collection_id (IN)
コレクションID

- package_name (IN)
パッケージ名

- consistency_token (IN)
整合性トークン

SET_PROFILE

DRDAパッケージのSQL翻訳プロファイル名を設定します。

構文

PROCEDURE set_profile(
collection_id IN VARCHAR2,
package_name IN VARCHAR2,
profile_name IN VARCHAR2);

パラメータ

- collection_id (IN)
コレクションID

- package_name (IN)
パッケージ名

- profile_name (IN)
SQL翻訳プロファイル名

使用例

begin
dbms_drdaas_admin.set_profile ( 'ORACLE', 'MYPACKAGE', 'DB2ZOS');
end;

SET_LOCALDATE_FORMAT

DRDAパッケージで使用するローカル日付書式を設定します。

構文

PROCEDURE set_localdate_format(
collection_id IN VARCHAR2,
package_name IN VARCHAR2,
date_format IN VARCHAR2);

パラメータ

- collection_id (IN)
コレクションID

- package_name (IN)
パッケージ名

- date_format (IN)
日付書式の文字列

使用例

begin
dbms_drdaas_admin.set_localdate_format ( 'ORACLE', 'MYPACKAGE', 'YYYYMMDD');
end;

SET_LOCALTIME_FORMAT

DRDAパッケージで使用するローカル時刻書式を設定します。

構文

PROCEDURE set_localtime_format(
collection_id IN VARCHAR2,
package_name IN VARCHAR2,
time_format IN VARCHAR2);

パラメータ

- collection_id (IN)
コレクションID

- package_name (IN)
パッケージ名

- time_format (IN)
時刻書式の文字列

使用例

begin
dbms_drdaas_admin.set_localtime_format ( 'ORACLE', 'MYPACKAGE', 'HH:MM:SS');
end;

SET_TYPEMAP

特定の表と列の組合せに関するデータ型マッピング・ルールを設定します。

構文

PROCEDURE set_typemap(
collection_id IN VARCHAR2,
package_name IN VARCHAR2,
table_map IN VARCHAR2,
type_map IN VARCHAR2);

パラメータ

- collection_id (IN)
コレクションID

- package_name (IN)
パッケージ名

- table_map (IN)
表および列名の式

- type_map (IN)
数値型の等価式

使用例

begin
dbms_drdaas_admin.set_typemap ( 'ORACLE', 'MYPACKAGE',
'SYSIBM.SYSPACKSTMT:COUNT(DISTINCT(NAME))', 'NUMBER=INTEGER');
end;

DBMS_DRDAASパッケージ

DBMS_DRDAAS PL/SQLパッケージは、DRDAパッケージを操作します。新しいDRDAパッケージのバインド、既存のDRDAパッケージの属性の変更、DRDAパッケージの削除にこのパッケージを使用できます。

Oracle Database Provider for DRDAは、特定のDRDAパッケージ操作を実行するときにパッケージDBMS_DRDAASを使用します。

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

- DBMS_DRDAAS権限の定数

- BIND_PACKAGE

- BIND_STATEMENT

- END_BIND

- GRANT_PRIVILEGE

- REVOKE_PRIVILEGE

- DROP_PACKAGE

DBMS_DRDAAS権限の定数

次の定数は、GRANT_PRIVILEGEおよびREVOKE_PRIVILEGEプロシージャで使用されます。

ALL_PRIVILEGE

この権限では、アプリケーション・パッケージのクライアントにすべての権限が付与されます。

BIND_PRIVILEGE

この権限では、クライアントがアプリケーション・パッケージをデータベースにバインドまたは再バインドできるようになります。

COPY_PRIVILEGE

この権限では、クライアントが既存のアプリケーション・パッケージのコピーを作成し、別の名前を付けることができます(オプションで異なるパッケージ・オプションを指定できます)。

EXECUTE_PRIVILEGE

この権限では、クライアントが既存のアプリケーション・パッケージを実行できます。

DROP_PRIVILEGE

この権限では、クライアントが既存のアプリケーション・パッケージを削除できます。

SET_PRIVILEGE

この権限では、クライアントが特定のアプリケーション・パッケージ・オプションを設定できます。このマニュアルに記載されているSET_XXXファンクションを参照してください。

BIND_PACKAGE

DRDAパッケージ定義の先頭部分を作成します。

これは、BGNBND処理のOracle Database Provider for DRDA部分により内部で使用されます。

構文

PROCEDURE bind_package(
collection_id IN VARCHAR2,
package_name IN VARCHAR2,
version_name IN VARCHAR2 DEFAULT NULL,
consistency_token IN RAW,
owner IN VARCHAR2,
qualifier IN VARCHAR2,
isolation IN CHAR,
releaseopt IN CHAR,
blocking IN CHAR DEFAULT 'N',
codepage_s IN NUMBER,
codepage_d IN NUMBER,
codepage_m IN NUMBER,
codepage_x IN NUMBER,
degreeioprl IN NUMBER,
date_format IN CHAR DEFAULT '3',
time_format IN CHAR DEFAULT '3',
decimal_delimiter IN CHAR DEFAULT NULL,
string_delimiter IN CHAR DEFAULT NULL,
decprc IN NUMBER,
charsubtype IN CHAR,
dynamic_rules IN CHAR DEFAULT NULL,
reprepdynsql IN CHAR DEFAULT NULL );

パラメータ

- collection_id (IN): コレクションID

- package_name (IN): パッケージ名

- version_name (IN): バージョン名(オプション。デフォルトはNULL)

- consistency_token (IN): 整合性トークン

- owner (IN): パッケージの所有者

- qualifier (IN): デフォルトのスキーマ

- isolation (IN): 分離レベル(R=RR、A=ALL、C=CS、G=CHG、N=NC)

- releaseopt (IN): リリース・パッケージ・リソース・オプション

- blocking (IN): ブロック・モード(B=ブロック、N=ブロックなし)

- codepage_s (IN): デフォルトのコードページ(SBCS)

- codepage_d (IN): デフォルトのコードページ(DBCS)

- codepage_m (IN): デフォルトのコードページ(MBCS)

- codepage_x (IN): デフォルトのコードページ(XML)

- degreeioprl (IN): IO並列度

- date_format (IN): 日付書式(1=USA、2=EUR、3=ISO、4=JIS、5=ローカル)

- time_format (IN)は時刻書式(1=USA、2=EUR、3=ISO、4=JIS、5=ローカル)

- decimal_delimiter (IN): 小数点

- string_delimiter (IN): 文字列のデリミタ

- decprc (IN): 10進精度(15または31)

- charsubtype (IN): 文字サブタイプ

- dynamic_rules (IN): 動的ルール(将来使用)

- reprepdynsql (IN): 動的SQLルールの再準備(将来使用)

使用例

begin
dbms_drdaas.bind_package (
'ORACLE', 'MYPACKAGE', NULL, HEXTORAW('11223344'), 'DRADUSR1',
'PETER', 'C', 'D', 'B', 1208, 1200, 1208, 1208, 1, '3', '3', '.', '''',
31, 'M', 'R', 'Y' );
end;

BIND_STATEMENT

現在バインド中のDRDAパッケージに文を挿入します。

これは、BNDSQLSTT処理の一部としてOracle Database Provider for DRDAによって内部で使用されます。

構文

PROCEDURE bind_statement(
collection_id IN VARCHAR2,
package_name IN VARCHAR2,
version_name IN VARCHAR2 DEFAULT NULL,
consistency_token IN RAW,
statement_assumption IN CHAR,
statement_no IN NUMBER,
section_no IN NUMBER,
statement_len IN NUMBER,
statement IN CLOB );

パラメータ

- collection_id (IN): コレクションID

- package_name (IN): パッケージ名

- version_name (IN): バージョン名(オプション。デフォルトはNULL)

- consistency_token (IN): 整合性トークン

- statement_assumption (IN): 文の想定事項

- statement_no (IN): 文の番号

- section_no (IN): セクション番号

- statement_len (IN): SQL文テキストの長さ

- statement (IN): 文のテキスト

使用例

begin
dbms_drdaas.bind_statement ( 'ORACLE', 'MYPACKAGE', NULL, HEXTORAW('11223344'),
'C', 1, 1, 42, 'DECLARE CURSOR C1 AS SELECT EMPLOYEE_ID FROM EMPLOYEES' );
end;

END_BIND

現在バインド中のDRDAパッケージをファイナライズします。(これは、ENDBND処理の一部としてOracle Database Provider for DRDAによって内部で使用されます。)

構文

PROCEDURE end_bind(
collection_id IN VARCHAR2,
package_name IN VARCHAR2,
version_name IN VARCHAR2 DEFAULT NULL,
consistency_token IN RAW,
max_sections IN NUMBER );

パラメータ

- collection_id (IN): コレクションID

- package_name (IN): パッケージ名

- version_name (IN): バージョン名(オプション。デフォルトはNULL)

- consistency_token (IN): 整合性トークン

- max_sections (IN): セクションの最大数

使用例

begin
dbms_drdaas.end_bind ( 'ORACLE', 'MYPACKAGE', NULL,
HEXTORAW('11223344'), 1 );
end;

GRANT_PRIVILEGE

パッケージに対する権限をユーザーに付与します。

構文

PROCEDURE grant_privilege(
privilege_grant IN PLS_INTEGER,
collection_id IN VARCHAR2,
package_name IN VARCHAR2,
user_name IN VARCHAR2 );

パラメータ

- privilege_grant (IN)
付与する権限

- collection_id (IN)
コレクションID

- package_name (IN)
パッケージ名

- user_name (IN)
権限を付与するユーザーID

使用例

begin
dbms_drdaas.grant_privilege ( DBMS_DRDAAS_ADMIN.ALL_PRIVILEGE, 'ORACLE',
'MYPACKAGE', 'DRDAUSR1' );
end;

REVOKE_PRIVILEGE

DRDAパッケージのユーザーから権限を取り消します。

構文

PROCEDURE revoke_privilege(
privilege_revoke IN PLS_INTEGER,
collection_id IN VARCHAR2,
package_name IN VARCHAR2,
user_name IN VARCHAR2);

パラメータ

- privilege_revoke (IN)
取り消す権限

- collection_id (IN)
コレクションID

- package_name (IN)
パッケージ名

- user_name (IN)
権限を取り消すユーザーID

使用例

begin
dbms_drdaas.revoke_privilege ( DBMS_DRDAAS_ADMIN.ALL_PRIVILEGE, 'ORACLE',
'MYPACKAGE', 'DRDAUSR1' );
end;

DROP_PACKAGE

バージョン名を使用してDRDAパッケージを削除します。

構文

PROCEDURE drop_package(
collection_id IN VARCHAR2,
package_name IN VARCHAR2);

パラメータ

- collection_id (IN): コレクションID

- package_name (IN): パッケージ名

使用例

begin
dbms_drdaas.drop_package(
'ORACLE', 'MYPACKAGE');
end;

14 Oracle Database Provider for DRDAによるSQL文のサポート

この章では、Oracle Database Provider for DRDAでサポートされているSQL句の情報とリストを示します。

この章のトピックは、次のとおりです:

- SQL文のサポートの概要

- SQL句の制限事項

- 特殊レジスタのサポート

SQL文のサポートの概要

Oracle Database Provider for DRDAは、サードパーティのネイティブSQL文をOracle Databaseで処理するために送信する前に、SQL文の各部分を変換します。このリリースのOracle Database Provider for DRDAはOracle Databaseリリース11gとの互換性がありますが、このOracle DatabaseではSQL変換がサポートされていないため、OracleバージョンのSQLでサポートされていない多くの句をネイティブで認識できません。SQL翻訳を使用する場合、これはトランスレータが受信するSQLリクエストのデータと内容に影響します。

例14-1 SQL文からの句の削除

ユーザーがクライアントに次のSQL行を入力するとします。

SELECT * FROM EMPLOYEES WITH UR

Oracle Database Provider for DRDAによりWITH UR句が削除されます。このため、トランスレータを使用しているユーザーは次のSQL行を受け取ります。

SELECT * FROM EMPLOYEEES

トランスレータがWITH UR句を取得することはないため、文の翻訳とその後の結果セットが、ユーザーが予期するものとは異なる可能性があります。

このため、このリリースのOracle Database Provider for DRDAにはいくつかの翻訳機能が含まれています。

SQL句の制限事項

この項では、Oracle Database Provider for DRDAによる変換のためにサポートされているSQL文に関する制限事項について説明します。

SQL文を記述する場合は、次の表記法に留意してください。

- (..) (カッコ)を使用して、該当するSQL文のコンテキストを囲みます。たとえば(SELECT)は、句がSELECT文に適用されることを意味します。

- {..} (中カッコ)を使用して、オプションの定数を示します。

- <..>は、オプションの変数を示します。

SQL言語の制約事項は、次のグループに分類されます。

- 内部処理されるSQL文

- セマンティクス上の効果を維持するSQL句の削除

- 無視されるSQL句

- 翻訳されるSQL句

内部処理されるSQL文

次の句は内部処理されます。

GRANT {ALL, BIND, COPY, EXECUTE, DROP, SET} ON PACKAGE <collid>.<pkgnam> TO <authid>

GRANT {ALL, BIND, COPY, EXECUTE, DROP, SET} ON PACKAGE <collid>.<pkgnam> TO <authid> WITH GRANT OPTION

GRANT {ALL, BIND, COPY, EXECUTE, DROP, SET} ON PROGRAM <collid>.<pkgnam> TO <authid>

GRANT {ALL, BIND, COPY, EXECUTE, DROP, SET} ON PROGRAM <collid>.<pkgnam> TO <authid> WITH GRANT OPTION

REVOKE {ALL, BIND, COPY, EXECUTE, DROP, SET} ON PACKAGE <collid>.<pkgnam> FROM <authid>

REVOKE {ALL, BIND, COPY, EXECUTE, DROP, SET} ON PROGRAM <collid>.<pkgnam> FROM <authid>

DROP PACKAGE <collid>.<pkgnam> VERSION <vsn>

DROP PACKAGE <collid>.<pkgnam>

FREE LOCATOR :H

HOLD LOCATOR :H

セマンティクス上の効果を維持するSQL句の削除

次のSQL句はSQL文から削除されます。これらはセマンティクスに影響するため、注意してください。

(SELECT) FOR READ ONLY

(SELECT) FOR FETCH ONLY

(DECLARE) WITH HOLD

(DECLARE) WITHOUT HOLD

(DECLARE) WITH ROWSET POSITIONING

(DECLARE) WITHOUT ROWSET POSITIONING

(DECLARE) NO SCROLL

(DECLARE) SCROLL

(CALL) WITH RETURN CLIENT

(CALL) WITH RETURN CALLER

(CALL) <:hostvar> USING DESCRIPTOR <:hostvar>

(SAVEPOINT) {UNIQUE} ON ROLLBACK RETAIN CURSORS

(SAVEPOINT) ON ROLLBACK RETAIN LOCKS

(INSERT) FOR <literal>|<bind-variable> ROWS

(INSERT) FOR MULTIPLE ROWS

(INSERT) NOT ATOMIC CONTINUE ON SQLEXCEPTION

無視されるSQL句

次の句は翻訳中に削除され、無視されます。

WITH RR

WITH RR USE AND KEEP {EXCLUSIVE|UPDATE|SHARE} LOCKS

WITH RS

WITH RS USE AND KEEP {EXCLUSIVE|UPDATE|SHARE} LOCKS

WITH CS

WITH CS KEEP LOCKS

WITH UR

WITH NC

翻訳されるSQL句

次のSQL句は代替構文に翻訳されます。この場合、セマンティクスに影響することがあります。

- 元の句WHERE CURRENT OF <cursorname>はWHERE ROWID = :Nになります。Nは数値です。

- 元の=は'' IS NULLになります。

- 元の!=は'' IS NOT NULLになります。

特殊レジスタのサポート

DB2では、特殊レジスタと呼ばれる概念が採用されています。特殊レジスタは、SQLコンテキストにおける環境変数と見なすことができます。Oracle Databaseでは、特殊レジスタに対する限定的なネイティブ・サポートが提供されます。

例14-2 特殊レジスタからの値の取得

ユーザーがクライアントで次の文を入力するとします。

SELECT CURRENT CLIENT_ACCTNG FROM SYSIBM.SYSDUMMY1;

Oracle Database Provider for DRDAは前述の文を解析して、次のように句CURRENT CLIENT_ACCTNGを句SYS_CONTEXT('DRDAAS_CTX_NAME','CLIENT_ACCTNG')に置き換えます。

SELECT SYS_CONTEXT('DRDAAS_CTX_NAME','CLIENT_ACCTNG') FROM SYSIBM.SYSDUMMY1;

したがってCURRENT CLIENT_ACCTNG句を想定しているトランスレータは、変更後の問合せを受け取ります。

例14-3 特殊レジスタの設定

ユーザーがクライアントで次の文を入力するとします。

SET CLIENT_ACCTNG = 'abc';

Oracle Database Provider for DRDAは、次のように句CLIENT_ACCTNG = 'abc'を句SYS_CONTEXT('DRDAAS_CTX_NAME','CLIENT_ACCTNG')に置き換え、CLIENT_ACCTNGレジスタの値を文字列abcに設定します。

SET SYS_CONTEXT('DRDAAS_CTX_NAME','CLIENT_ACCTNG') = 'abc';

したがってCURRENT CLIENT_ACCTNG句を想定しているトランスレータは、変更後の文を受け取ります。

Oracle Database Provider for DRDAは次のレジスタをサポートしています。

APPLICATION ENCODING SCHEME

CURRENT APPLICATION ENCODING SCHEME

問合せ

SYS_CONTEXT('DRDAAS','APPLICATION_ENCODING_SCHEME')

設定

SYS_CONTEXTを更新します

セマンティクス

影響なし

CLIENT_ACCTNG

CURRENT CLIENT_ACCTNG CLIENT ACCTNG

問合せ

SYS_CONTEXT('DRDAAS','CLIENT_ACCTNG')

設定

SYS_CONTEXTおよびCLIENT_INFOを更新します。

セマンティクス

V$SESSIONのCLIENT_INFOを更新します

注意事項

DSNDQMDAマクロに記述されているIBMおよびDB2により定義されたMVSおよびDDFアカウンティング情報を参照してください。

CLIENT_APPLNAME

CURRENT CLIENT_APPLNAME CLIENT APPLNAME

問合せ

SYS_CONTEXT('DRDAAS','CLIENT_APPLNAME')

設定

SYS_CONTEXTおよびCLIENT_IDENTIFIERを更新します。

セマンティクス

V$SESSIONのCLIENT_IDENTIFIERを更新します。

CLIENT_PROGRAMID

CURRENT CLIENT_PROGRAMID

問合せ

SYS_CONTEXT('DRDAAS','CLIENT_PROGRAMID')

設定

SYS_CONTEXTを更新します

セマンティクス

影響なし

CLIENT_USERID

CURRENT CLIENT_USERID CLIENT USERID

問合せ

SYS_CONTEXT('DRDAAS','CLIENT_USERID')

設定

設定できません。

セマンティクス

設定できません。

CLIENT_WRKSTNNAME

CURRENT CLIENT_WRKSTNNAME CLIENT WRKSTNNAME

問合せ

SYS_CONTEXT('DRDAAS','CLIENT_WRKSTNNAME')

設定

SYS_CONTEXTを更新します

セマンティクス

影響なし

DATE

CURRENT DATE CURRENT_DATE

問合せ

CURRENT DATE

設定

設定できません。

セマンティクス

設定できません。

DBPARTITIONNUM

CURRENT DBPARTITIONNUM

問合せ

SYS_CONTEXT('DRDAAS','DBPARTITIONNUM')

設定

設定できません。

セマンティクス

設定できません。

DEBUG MODE

CURRENT DEBUG MODE

問合せ

SYS_CONTEXT('DRDAAS','DEBUG_MODE')

設定

SYS_CONTEXTを更新します

セマンティクス

影響なし

DECFLOAT ROUNDING MODE

CURRENT DECFLOAT ROUNDING MODE

問合せ

SYS_CONTEXT('DRDAAS','DECFLOAT_ROUNDING_MODE')

設定

SYS_CONTEXTを更新します

セマンティクス

影響なし

DEFAULT TRANSFORM GROUP

CURRENT DEFAULT TRANSFORM GROUP

問合せ

SYS_CONTEXT('DRDAAS','DEFAULT_TRANSFORM_GROUP')

設定

SYS_CONTEXTを更新します

セマンティクス

影響なし

DEGREE

CURRENT   DEGREE

問合せ

SYS_CONTEXT('DRDAAS','DEGREE')

設定

SYS_CONTEXTを更新します

セマンティクス

影響なし

EXPLAIN MODE

CURRENT EXPLAIN MODE

問合せ

SYS_CONTEXT('DRDAAS','EXPLAIN_MODE')

設定

SYS_CONTEXTを更新します

セマンティクス

影響なし

EXPLAIN SNAPSHOT

CURRENT EXPLAIN SNAPSHOT

問合せ

SYS_CONTEXT('DRDAAS','EXPLAIN_SNAPSHOT')

設定

SYS_CONTEXTを更新します

セマンティクス

影響なし

FEDERATED ASYNCHRONY

CURRENT FEDERATED ASYNCHRONY

問合せ

SYS_CONTEXT('DRDAAS','FEDERATED_ASYNCHRONY')

設定

SYS_CONTEXTを更新します

セマンティクス

影響なし

IMPLICIT XMLPARSE OPTION

CURRENT IMPLICIT XMLPARSE OPTION

問合せ

SYS_CONTEXT('DRDAAS','IMPLICIT_XMLPARSE_OPTION')

設定

SYS_CONTEXTを更新します

セマンティクス

影響なし

ISOLATION

CURRENT ISOLATION

問合せ

SYS_CONTEXT('DRDAAS','ISOLATION')

設定

SYS_CONTEXTを更新します

セマンティクス

影響なし

LOCK TIMEOUT

CURRENT LOCK TIMEOUT

問合せ

SYS_CONTEXT('DRDAAS','LOCK_TIMEOUT')

設定

SYS_CONTEXTを更新します

セマンティクス

影響なし

LOCALE LC_TYPE

CURRENT LOCALE LC_TYPE CURRENT_LC_TYPE

問合せ

SYS_CONTEXT('DRDAAS','LC_TYPE')

設定

SYS_CONTEXTを更新します

セマンティクス

影響なし

MAINTAINED TABLE TYPES FOR OPTIMIZATION

CURRENT MAINTAINED TABLE TYPES FOR OPTIMIZATION

問合せ

SYS_CONTEXT('DRDAAS','MAINTAINED_TYPES')

設定

SYS_CONTEXTを更新します

セマンティクス

影響なし

MEMBER

CURRENT MEMBER

問合せ

SYS_CONTEXT('DRDAAS','MEMBER')

設定

設定できません。

セマンティクス

設定できません。

OPTIMIZATION HINT

CURRENT OPTIMIZATION HINT

問合せ

SYS_CONTEXT('DRDAAS','OPTIMIZATION_HINT')

設定

SYS_CONTEXTを更新します

セマンティクス

影響なし

PACKAGE PATH

CURRENT PACKAGE PATH

問合せ

SYS_CONTEXT('DRDAAS','PACKAGE_PATH')

設定

SYS_CONTEXTを更新します

セマンティクス

影響なし

PACKAGESET

CURRENT PACKAGESET

問合せ

SYS_CONTEXT('DRDAAS','PACKAGESET')

設定

SYS_CONTEXTを更新します

セマンティクス

影響なし

PATH

CURRENT PATH CURRENT_PATH CURRENT FUNCTION PATH

問合せ

SYS_CONTEXT('DRDAAS','PATH')

設定

SYS_CONTEXTを更新します

セマンティクス

影響なし

PRECISION

CURRENT PRECISION

問合せ

SYS_CONTEXT('DRDAAS','PRECISION')

設定

SYS_CONTEXTを更新します

セマンティクス

影響なし

QUERY ACCELERATION

CURRENT QUERY ACCELERATION

問合せ

SYS_CONTEXT('DRDAAS','QUERY_ACCELERATION')

設定

SYS_CONTEXTを更新します

セマンティクス

影響なし

QUERY OPTIMIZATION

CURRENT QUERY OPTIMIZATION

問合せ

SYS_CONTEXT('DRDAAS','QUERY_OPTIMIZATION')

設定

SYS_CONTEXTを更新します

セマンティクス

影響なし

REFRESH AGE

CURRENT REFRESH AGE

問合せ

SYS_CONTEXT('DRDAAS','REFRESH_AGE')

設定

SYS_CONTEXTを更新します

セマンティクス

影響なし

ROUTINE VERSION

CURRENT ROUTINE VERSION

問合せ

SYS_CONTEXT('DRDAAS','ROUTINE_VERSION')

設定

SYS_CONTEXTを更新します

セマンティクス

影響なし

RULES

CURRENT RULES

問合せ

SYS_CONTEXT('DRDAAS','RULES')

設定

SYS_CONTEXTを更新します

セマンティクス

影響なし

SCHEMA

CURRENT SCHEMA CURRENT_SCHEMA

問合せ

SYS_CONTEXT('USERENV','CURRENT_SCHEMA')

設定

SYS_CONTEXTを更新します

セマンティクス

影響なし

SERVER

CURRENT SERVER CURRENT_SERVER

問合せ

SYS_CONTEXT('DRDAAS','SERVER')

設定

設定できません。

セマンティクス

設定できません。

SQL_CCFLAGS

CURRENT SQL_CCFLAGS

問合せ

SYS_CONTEXT('DRDAAS','SQL_CCFLAGS')

設定

SYS_CONTEXTを更新します

セマンティクス

影響なし

SQLID

CURRENT SQLID USER

問合せ

USER

設定

SYS_CONTEXT('DRDAAS', 'CURRENT_SQLID')を更新します

セマンティクス

影響なし

TIMESTAMP

CURRENT TIMESTAMP CURRENT_TIMESTAMP

問合せ

CURRENT TIMESTAMP

設定

設定できません。

セマンティクス

設定できません。

USER

CURRENT USER CURRENT_USER

問合せ

USER

設定

設定できません。

セマンティクス

設定できません。

SESSION_USER

SESSION_USER

問合せ

USER

設定

設定できません。

セマンティクス

設定できません。

SYSTEM_USER

SYSTE_USER

問合せ

USER

設定

設定できません。

セマンティクス

設定できません。

ENCRYPTION PASSWORD

ENCRYPTION PASSWORD

問合せ

問合せできません。

設定

SYS_CONTEXT('DRDAAS','ENCRYPTION_PASSWORD')を更新します

セマンティクス

影響なし

A Oracle Database Provider for DRDAの作成およびメンテナンスのスクリプト

この付録では、Oracle Database Provider for DRDA環境の設定に使用するスクリプトを示します。

この付録には、次のスクリプトが含まれています。

- catdrdaas.sqlスクリプトはデータベース・オブジェクトを作成します。

- catnodrdaas.sqlスクリプトは、データベース・オブジェクトを削除します。

- drdapkg_db2.sqlスクリプトは、初期バインディング認可の例です。

- drdasqtt_translator_setup.sqlスクリプトは、SQLトランスレータをロードします。

- drdasqt_set_profile_dd.sqlスクリプトは、DataDirectパッケージの言語プロファイルを確立します。

catdrdaas.sql

スクリプトcatdrdaas.sqlは、Oracle Database Provider for DRDAカタログ・オブジェクトを作成します。

Rem catdrdaas.sql
Rem
Rem Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved.
Rem
Rem    NAME
Rem      catdrdaas.sql - CATalog Oracle Database Provider for DRDA
Rem
Rem =====================================================================
Rem Exit immediately if there are errors in the initial checks
Rem =====================================================================

WHENEVER SQLERROR EXIT;

DOC
#######################################################################
Customer should create the SYSIBM tablespace

Eg:
create tablespace SYSIBM datafile 'sysibm01.dbf'
size 70M reuse
extent management local
segment space management auto
online;

#######################################################################
#

@@prvtdpsadrda.plb

catnodrdaas.sql

スクリプトcatnodrdaas.sqlは、Oracle Database Provider for DRDAカタログ・オブジェクトを削除します。

Rem catnodrdaas.sql
Rem
Rem Copyright (c) 2011, 2013, Oracle and/or its affiliates.
Rem All rights reserved.
Rem
Rem    NAME
Rem      catnodrdaas.sql - CATalog NO Oracle Database Provider for DRDA
Rem

drop public synonym DBMS_DRDAAS;
drop public synonym DBMS_DRDAAS_ADMIN;

drop public synonym USER_DRDAASTRACE;
drop public synonym DBA_DRDAASTRACE;

drop public synonym ALL_DRDAASPACKAGE;
drop public synonym USER_DRDAASPACKAGE;
drop public synonym DBA_DRDAASPACKAGE;

drop public synonym USER_DRDAASPACKSTMT;
drop public synonym DBA_DRDAASPACKSTMT;

drop public synonym ALL_DRDAASPACKAUTH;
drop public synonym USER_DRDAASPACKAUTH;
drop public synonym DBA_DRDAASPACKAUTH;

drop public synonym ALL_DRDAASPACKSIDE;
drop public synonym USER_DRDAASPACKSIDE;
drop public synonym DBA_DRDAASPACKSIDE;

drop role DRDAAS_USER_ROLE;
drop role DRDAAS_ADMIN_ROLE;

drop user SYSIBM cascade;

commit;
DOC
#######################################################################
Customer should drop the SYSIBM tablespace.

Eg:
drop tablespace SYSIBM;

#######################################################################

drdapkg_db2.sql

Rem drdapkg_db2.sql
Rem
Rem Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved.
Rem
Rem    NAME
Rem      drdapkg_db2.sql  - Initialize DRDA-AS environment so that
Rem                          packages can be bound and correct datatypes
Rem                          are returned for various SQL constructs
Rem
Rem    DESCRIPTION
Rem      The DRDA-AS environment needs to be initialized so that the initial
Rem      packages (usually with an RDBCOLID of NULLID) can be bound.
Rem      Using the DataDirect driver, those package names look like
Rem          NULLID.DDOC510A, NULLID.DDOC510B, and NULLID.DDOC510C
Rem      Using the IBM driver (libdb2.so), the package names look like
Rem          NULLID.SYSTAT and NULLID.SYSshyxx (where s is one of L or S,
Rem                    h is one of H or N, y is 1, 2, 3, or 4 and
Rem                                          xx is somwhere in 00 through FF)
Rem      Also, various columns must be TYPEMAPped -- their normal
Rem      attributes must be altered.
Rem
Rem      The initial package bindings should be done under the id that runs
Rem      this script. That is, if we run this script under the Oracle ID
Rem      of xxxx, then the initial connection through an ODBC driver should be
Rem      using that same id, namely xxxx.
Rem
Rem    NOTES
Rem      The following is relevant when using the IBM driver: libdb2.so ...
Rem        Note that the normal set of packages produced by the jdbcbinder
Rem        process (db2jdbcbinder in DB2/LUW) defines packages with names like
Rem        SYSSTAT and SYSLNmnn and SYSLHmnn. Thus, before running the
Rem        jdbcbinder on DB2/LUW specifying the Oracle Id accepted in the prompt
Rem        for this script, one needs to inform DRDA-AS that the id has the
Rem        required privilege, namely to create ANY package in the NULLID
Rem        schema. That is part of what we are doing here.
Rem
Rem      This script can be run ONLY by a user that has the ability to use
Rem      the DRDAAS_ADMIN_ROLE which must be GRANTed to the user; also this
Rem      role must be active either by being set as a default ROLE or
Rem      by actively doing a SET ROLE DRDAAS_ADMIN_ROLE.

SET ECHO ON
SET FEEDBACK 1
SET NUMWIDTH 10
SET LINESIZE 80
SET TRIMSPOOL ON
SET TAB OFF
SET PAGESIZE 100

SET SERVEROUTPUT ON

SHOW USER

/* The following  will work even if DRDAAS_ADMIN_ROLE is not one of the */
/* DEFAULT Roles, but HAS been GRANTed to the user running this script. */
/* (A prerequisite of setting a DEFAULT ROLE for a user is that the user*/
/*  has been GRANTed that ROLE).                                        */

SET ROLE DRDAAS_ADMIN_ROLE;

Prompt Enter the OracleID under which the initial package BINDs will be made
Prompt Use quotes (') if needed.
Accept OracleID
Define BindID = &OracleID
Prompt Enter default collection ID for package binding (usually NULLID)
Prompt Use quotes (') if needed.
Accept DefaultCollection
Define DfltCollid = &DefaultCollection

declare
id_passed CONSTANT VARCHAR2(128) := '&&BindId';
collid_passed CONSTANT VARCHAR2(128) := '&&DfltCollid';
id_to_use VARCHAR2(128);
collid_to_use VARCHAR2(128);
id_len PLS_INTEGER;
collid_len PLS_INTEGER;
quote CONSTANT CHAR := '''';
begin
id_len := LENGTH(id_passed);
collid_len := LENGTH(collid_passed);

IF SUBSTR(id_passed, 1, 1) = quote AND SUBSTR(id_passed, id_len, 1) = quote
THEN
/* Use Id exactly as passed */
id_to_use := SUBSTR(id_passed, 2, id_len - 2);
ELSE
id_to_use := UPPER(id_passed) ;
END IF;
IF SUBSTR(collid_passed, 1, 1) = quote AND
SUBSTR(collid_passed, collid_len, 1) = quote THEN
/* Use Collection ID  exactly as passed */
collid_to_use :=  SUBSTR(collid_passed, 2, collid_len-2) ;
ELSE
collid_to_use :=  UPPER(collid_passed) ;
END IF;

-- The following section is pertinent to ALL flavors of DB2
-- =========================================================

-- The id of the specified  user will have ALL privileges for ANY Package in
-- RDBCOLID=collid_to_use

DBMS_DRDAAS_ADMIN.GRANT_PRIVILEGE( DBMS_DRDAAS_ADMIN.ALL_PRIVILEGE,
collid_to_use,'*', id_to_use);

commit;

-- If you might want the id specified to create packages in rcbcolid= SCOTT,
-- then you need to do the following:

-- DBMS_DRDAAS_ADMIN.GRANT_PRIVILEGE(DBMS_DRDAAS_ADMIN.ALL_PRIVILEGE,
--                                   'SCOTT','*', id_to_use);
-- commit;

-- Typemaps ...

-- The described "type" for "COUNT(*)" columns in any package in the
-- collid_to_use schema should be INTEGER

-- General "COUNT(*)" case
DBMS_DRDAAS_ADMIN.SET_TYPEMAP(collid_to_use,'*','COUNT(*)',
'NUMBER=INTEGER');

-- ==================================================
-- The following section is pertinent ONLY to DB2/zOS
-- ==================================================

-- To use DB2 z/OS SPUFI asgainst DRDAAS, the given oracle-id must be able to
-- define packages in the DSNESPCS and DSNESPRR schemas
--
-- DB2 z/OS SPUFI Packages

DBMS_DRDAAS_ADMIN.GRANT_PRIVILEGE( DBMS_DRDAAS_ADMIN.ALL_PRIVILEGE,
'DSNESPCS','*', id_to_use);
DBMS_DRDAAS_ADMIN.GRANT_PRIVILEGE( DBMS_DRDAAS_ADMIN.ALL_PRIVILEGE,
'DSNESPRR','*', id_to_use);
commit;

-- ======================================================================
-- Specific DataDirect ODBC package discovery queries for DB2 z/OS

-- When accessing the collid_to_use.DDOC510A package, the
-- "column" MAX(SECTNO) referencing table SYSIBM.SYSPACKSTMT (which is a
--  NUMBER in Oracle terms) should be described as a SMALLINT to the
-- application

DBMS_DRDAAS_ADMIN.SET_TYPEMAP(collid_to_use,'DDOC510A',
'SYSIBM.SYSPACKSTMT:MAX(SECTNO)',
'NUMBER=SMALL');

-- Same as above but for package collid_to_use.DDOC510B

DBMS_DRDAAS_ADMIN.SET_TYPEMAP(collid_to_use,'DDOC510B',
'SYSIBM.SYSPACKSTMT:MAX(SECTNO)',
'NUMBER=SMALL');

-- When accessing the collid_to_use.DDOC510A  package, the
-- "column" COUNT(DISTINCT(NAME)) referencing table SYSIBM.SYSPACKSTMT
-- (which is  a NUMBER in Oracle terms) should be described as a SMALLINT to
--  the  application

DBMS_DRDAAS_ADMIN.SET_TYPEMAP(collid_to_use,'DDOC510A',
'SYSIBM.SYSPACKSTMT:COUNT(DISTINCT(NAME))',
'NUMBER=INTEGER');

-- Same as above but for package collid_to_use.DDOC510B

DBMS_DRDAAS_ADMIN.SET_TYPEMAP(collid_to_use,'DDOC510B',
'SYSIBM.SYSPACKSTMT:COUNT(DISTINCT(NAME))',
'NUMBER=INTEGER');
commit;

-- ======================================================================
-- Specific DataDirect JDBC package discovery queries for DB2 z/OS

-- When accessing the collid_to_use.DDJC360B package, the "column"
-- COUNT(*)-1 referencing table SYSIBM.SYSPACKSTMT (which is  a NUMBER in
-- Oracle terms) should be described as an INTEGER to the application

DBMS_DRDAAS_ADMIN.SET_TYPEMAP(collid_to_use,'DDJC360B',
'SYSIBM.SYSPACKSTMT:COUNT(*)-1',
'NUMBER=INTEGER');

-- When accessing the collid_to_use.DDJC360B package, the "column"
-- COUNT(*)-1 referencing table SYSIBM.SYSPACKSTMT (which  might be described
-- as NUMBER(0,-127) in Oracle terms) describe the column as an INTEGER
-- to the application.

DBMS_DRDAAS_ADMIN.SET_TYPEMAP(collid_to_use,'DDJC360B',
'SYSIBM.SYSPACKSTMT:COUNT(*)-1',
'NUMBER(0,-127)=INTEGER');
commit;

-- ==================================================
--  the following section is pertinent ONLY to DB2/luw
-- ==================================================

-- ======================================================================
-- Specific DataDirect ODBC package discovery queries for DB2/LUW

DBMS_DRDAAS_ADMIN.SET_TYPEMAP(collid_to_use,'DDOC510A',
'SYSIBM.SYSPLAN:MIN(TOTALSECT)',
'NUMBER=SMALL');

DBMS_DRDAAS_ADMIN.SET_TYPEMAP(collid_to_use,'DDOC510A',
'SYSIBM.SYSPLAN:COUNT(*)',
'NUMBER=INTEGER');
--  DBMS_DRDAAS_ADMIN.SET_TYPEMAP(collid_to_use,'DDOC510A',
--                                'MIN(TOTALSECT)', 'NUMBER=SMALL');
commit;

--  ==================================================
--  The following section is pertinent ONLY to DB2/iOS
--  ==================================================

--  Currently empty!
end;
/

drdasqtt_translator_setup.sql

Rem drdasqtt_translator_setup.sql
Rem
Rem Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved.
Rem
Rem    NAME
Rem      drdasqtt_translator_setup.sql - Generalized script for setting up an
Rem                                      external SQL translator
Rem
Rem
Rem    DESCRIPTION
Rem      This script can be used to set up any external SQL translator.
Rem      Some translators, e.g., BableFish, may need extra customizations.
Rem      For BabelFish, that would include the source/target SQL text for
Rem      the fingerprint translations (to be inserted into
Rem      DBA_SQL_TRANSLATIONS).
Rem
Rem    NOTES
Rem      Should be run "/ as sysdba"
Rem

SET ECHO ON
SET FEEDBACK 1
SET NUMWIDTH 10
SET LINESIZE 80
SET TRIMSPOOL ON
SET TAB OFF
SET PAGESIZE 100
SET SERVEROUTPUT ON

show user

Prompt Enter schema in which the SQL Translator Interface Package will be created as well
Prompt as into which the third-party SQL translator will be loaded (usually SYSIBM).
Accept  TRANS_PKG_SCHEMA_ Prompt 'SQL Translator Interface Package Schema:'
DEFINE TRANSLATOR_PACKAGE_SCHEMA =  &TRANS_PKG_SCHEMA_

Prompt Enter unqualified name of the SQL Translator Interface Package
Accept  TRANS_PKG_NAME_ Prompt 'SQL Translator Interface Package Name:'
DEFINE TRANSLATOR_PACKAGE_NAME = &TRANS_PKG_NAME_

Prompt Enter schema in which the Translation Profile will be created:
Accept  TRANS_PROFILE_SCHEMA_ Prompt 'Translation Profile Schema:'
DEFINE TRANS_PROFILE_SCHEMA = &TRANS_PROFILE_SCHEMA_

Prompt Enter the unqualified name of the translation profile:
Accept  TRANS_PROFILE_NAME_ Prompt 'Translation Profile Name:'
DEFINE TRANS_PROFILE_NAME =  &TRANS_PROFILE_NAME_

Prompt Enter the "language" type of the translator: C, java, etc
Accept TRANS_LANG_ Prompt 'Translator Language:'
DEFINE TRANS_LANG = &TRANS_LANG_

Prompt Enter the names of the third-party SQL Translator objects;
Prompt They should be available through rdbms/drdaas/jlib/..
Prompt If there is more than one object, enclose the entire set
Prompt in four quotes, such as  ''''object_a object_b''''.
Accept  EXTERNAL_CODE_ Prompt 'SQL Translator object(s):'
DEFINE EXTERNAL_CODE  = '''&EXTERNAL_CODE_'''
DEFINE EXTERNAL_CODE

Prompt Enter the signature for the entry for 'translateSQL' in one of the
Prompt  previously entered SQL Translator objects:
Accept CALLOUT_TRANSLATE_SQL_ Prompt 'Entry for translateSQL:'
DEFINE CALLOUT_TRANSLATE_SQL = '''&CALLOUT_TRANSLATE_SQL_'''

Prompt Enter the signature for the entry for 'translateError' in one of the
Prompt previously entered SQL Translator objects
Accept CALLOUT_TRANSLATE_ERROR_ Prompt 'Callout for translateError:'
DEFINE CALLOUT_TRANSLATE_ERROR = '''&CALLOUT_TRANSLATE_ERROR_'''

Rem Create the SQL Translator Interface Package ...

create or replace package &&TRANSLATOR_PACKAGE_SCHEMA..&&TRANSLATOR_PACKAGE_NAME as

procedure translate_sql(sql_text              in  clob,
translated_text       out clob);

procedure translate_error(error_code          in  binary_integer,
translated_code     out binary_integer,
translated_sqlstate out varchar2);

end;
/
show errors

declare
COMP_ERROR exception;
pragma EXCEPTION_INIT(COMP_ERROR, -24344);
translateSQLcode CONSTANT VARCHAR2(1024) := &&CALLOUT_TRANSLATE_SQL;
translateErrorcode CONSTANT VARCHAR2(1024) := &&CALLOUT_TRANSLATE_ERROR;
translateSQLToUse VARCHAR2(1024);
translateErrorToUse VARCHAR2(1024);
ln NUMBER;
quote CONSTANT CHAR := '''';
my_cursor BINARY_INTEGER;
n BINARY_INTEGER;
i BINARY_INTEGER;
package_body   VARCHAR2(1024);
/* we can't use bind variables to substitute for the "name" part of the */
/* procedures in the package body declaration; the "name" part MUST be a*/
/* single-quoted string!!! ARGHHH !!!                                   */
package_body_1 VARCHAR2(400) :=
'create or replace package ' ||
'body &&TRANSLATOR_PACKAGE_SCHEMA..&&TRANSLATOR_PACKAGE_NAME as '  ||
'procedure translate_sql(sql_text              in  clob, '       ||
'  translated_text       out clob) as '    ||
'language &&TRANS_LANG '                                       ||
'name ''';
package_body_2 VARCHAR2(400) := ''' ;'                                    ||
'procedure translate_error(error_code  in  binary_integer, '     ||
' translated_code out binary_integer,'  ||
' translated_sqlstate out varchar2) as ' ||
'language &&TRANS_LANG '                                       ||
'name ''';
package_body_end VARCHAR2(10) := '''; end;';
begin
ln := LENGTH(translateSQLcode);
IF SUBSTR(translateSQLCode,1,1) = quote AND
SUBSTR(translateSQLCode,ln,1) = quote THEN
translateSQLToUse := SUBSTR(translateSQLCode, 2, ln-2);
ELSE
translateSQLToUse := translateSQLCode;
END IF;
ln := LENGTH(translateErrorcode);
IF SUBSTR(translateErrorCode,1,1) = quote AND
SUBSTR(translateErrorCode,ln,1) = quote THEN
translateErrorToUse := SUBSTR(translateErrorCode, 2, ln-2);
ELSE
translateErrorToUse := translateErrorCode;
END IF;
my_cursor := DBMS_SQL.OPEN_CURSOR;
package_body := package_body_1 || translateSQLToUse || package_body_2 ||
translateErrorToUse || package_body_end;
BEGIN
DBMS_SQL.PARSE(my_cursor, package_body, DBMS_SQL.NATIVE);
EXCEPTION
when COMP_ERROR THEN DBMS_OUTPUT.PUT_LINE('SQLCODE=' || SQLCODE || ':' ||
SQLERRM);
END;
n := DBMS_SQL.EXECUTE(my_cursor);
DBMS_SQL.CLOSE_CURSOR(my_cursor);
end;
/

show errors

Rem Load the Java code
Rem CALL DBMS_JAVA.LOADJAVA('-definer -genmissing -schema SYSIBM
Rem rdbms/drdaas/jlib/DBTooSQLAPI.jar rdbms/drdaas/jlib/DBTooTranslator.class',
Rem '((* SYSIBM)(* PUBLIC)(* -))');
Rem DBTooSQLAPI.jar and DBTooSQLTranslator.class are fictional names

set serveroutput on

show user

Rem Load the .class and .jar objects as specified ...

declare
extcode VARCHAR2(4096) := &&EXTERNAL_CODE;
real_extcode VARCHAR2(4096);
first_parm_first_part VARCHAR2(128) :=
'-definer -genmissing -schema &&TRANSLATOR_PACKAGE_SCHEMA ';
first_parm VARCHAR2(4096);
ln NUMBER;
begin
ln := LENGTH(extcode);
/* We might have a beginning and ending aprostrophe --*/
/* we need to delete them                             */
IF SUBSTR(extcode,1,1) = '''' AND SUBSTR(extcode,ln,1) = '''' THEN
real_extcode := SUBSTR(extcode, 2, ln-2);
ELSE
real_extcode := extcode;
END IF;
first_parm := first_parm_first_part || ' ' || real_extcode;
/*DBMS_OUTPUT.PUT_LINE('First parm ' || first_parm); */
DBMS_JAVA.LOADJAVA(first_parm ,
'((* &&TRANSLATOR_PACKAGE_SCHEMA)(* PUBLIC)(* -))');
end;
/

GRANT EXECUTE ON &&TRANSLATOR_PACKAGE_SCHEMA..&&TRANSLATOR_PACKAGE_NAME  to PUBLIC;

GRANT CREATE SQL TRANSLATION PROFILE TO &&TRANS_PROFILE_SCHEMA;
GRANT TRANSLATE ANY SQL TO &&TRANS_PROFILE_SCHEMA WITH ADMIN OPTION;

CALL DBMS_SQL_TRANSLATOR.DROP_PROFILE('&&TRANS_PROFILE_SCHEMA..&&TRANS_PROFILE_NAME');
CALL DBMS_SQL_TRANSLATOR.CREATE_PROFILE('&&TRANS_PROFILE_SCHEMA..&&TRANS_PROFILE_NAME');

begin
dbms_sql_translator.set_attribute('&&TRANS_PROFILE_SCHEMA..&&TRANS_PROFILE_NAME',
dbms_sql_translator.attr_translator,
'&&TRANSLATOR_PACKAGE_SCHEMA..&&TRANSLATOR_PACKAGE_NAME');

dbms_sql_translator.set_attribute('&&TRANS_PROFILE_SCHEMA..&&TRANS_PROFILE_NAME',
dbms_sql_translator.attr_translate_new_sql,
dbms_sql_translator.attr_value_true);
end;
/

GRANT ALL ON SQL TRANSLATION PROFILE &&TRANS_PROFILE_SCHEMA..
&&TRANS_PROFILE_NAME TO &&TRANSLATOR_PACKAGE_SCHEMA ;
GRANT USE ON SQL TRANSLATION PROFILE &&TRANS_PROFILE_SCHEMA..
&&TRANS_PROFILE_NAME TO DRDAAS_USER_ROLE;

drdasqt_set_profile_dd.sql

Rem drdasqt_set_profile_dd.sql
Rem
Rem Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved.
Rem
Rem    NAME
Rem      drdasqt_set_profile_dd.sql - Set a sqllangprofile for each of
Rem                                   the DataDirect (dd) packages.
Rem

SET ECHO ON
SET FEEDBACK 1
SET NUMWIDTH 10
SET LINESIZE 80
SET TRIMSPOOL ON
SET TAB OFF
SET PAGESIZE 100

Rem You will be prompted for the profile name.
Rem Must be run under an id that has access to the DRDAAS_ADMIN_ROLE role.

Rem set echo on
set serveroutput on

SET ROLE DRDAAS_ADMIN_ROLE;

prompt Enter the (qualified) profile name to use for DataDirect packages
Accept SQLPROFILENAME
Define PROFILE_NAMEX = &SQLPROFILENAME
prompt Enter the default Package Collection (usually NULLID)
Prompt Use quotes (') if needed
Accept DefaultCollection
Define PACKAGE_COLLECTIONX = &DefaultCollection

declare
TYPE FIRST_CHAR  IS VARRAY(4) of CHAR(1);
TYPE SECOND_CHAR IS VARRAY(3) of CHAR(1);

first_chr  FIRST_CHAR := FIRST_CHAR();
second_chr SECOND_CHAR := SECOND_CHAR();
package_name VARCHAR2(128);
profile_name CONSTANT VARCHAR2(128) := '&&PROFILE_NAMEX';
package_collection_as_passed CONSTANT VARCHAR2(128) :=
'&&PACKAGE_COLLECTIONX';
package_collection VARCHAR2(128);
cmd VARCHAR2(255);
quote CONSTANT CHAR := '''';
ln BINARY_INTEGER;
begin

ln := LENGTH(package_collection_as_passed);
IF SUBSTR(package_collection_as_passed, 1,  1) = quote AND
SUBSTR(package_collection_as_passed, ln, 1) = quote THEN
/* Use package_collection exactly as passed */
package_collection := SUBSTR(package_collection_as_passed, 2, ln - 2);
ELSE
package_collection := UPPER(package_collection_as_passed) ;
END IF;

first_chr.EXTEND(4);
first_chr(1) := 'C'; first_chr(2) := 'S';
first_chr(3) := 'U'; first_chr(4) := 'R';
second_chr.EXTEND(3);
second_chr(1) := 'A'; second_chr(2) := 'B'; second_chr(3) := 'C';

FOR f IN 1..first_chr.COUNT
LOOP
FOR s IN 1..second_chr.COUNT
LOOP
package_name := 'DDO' || first_chr(f) || '510' || second_chr(s);

cmd := 'DBMS_DRDAAS_ADMIN.SET_PROFILE(' || package_collection || ',' ||
package_name  || ',' ||
profile_name  || ')';
DBMS_OUTPUT.PUT_LINE('Doing ' || cmd);
DBMS_DRDAAS_ADMIN.SET_PROFILE(package_collection, package_name,
profile_name);

END LOOP;
END LOOP;
end;
/

B Oracle Database Provider for DRDAのパッケージ・バインド・オプション

この付録では、Oracleがクライアント・アプリケーションのパッケージをバインドするときに使用されるDB2 DSNサブコマンドBIND PACKAGEオプションについて説明します。この付録では、この実装のパッケージ・バインディングでサポートされているオプションを示します。

BIND PACKAGEサブコマンドの詳細は、DB2® 10 for z/OS® Command Reference (SC19-2972-05)に収録されています。

CONCURRENTACCESSRESOLUTION

常にWAITFOROUTCOMEセマンティクスを実装します。これは、Oracleによるデータのロック方法の基盤となるため、変更できません。

CURRENTDATA

YESセマンティクスをサポートします。

DBPROTOCOL

DRDAセマンティクスをサポートします。

DEFER/NODEFER

NODEFERセマンティクスをサポートします。

DYNAMICRULES

RUNセマンティクスをサポートします。

DB2のルールの定義に従い、各文にデフォルトの修飾子の使用が適用されます。これは、STATIC文またはDYNAMIC SQL文のSET CURRENT SQLIDと同等です。ただし、Oracleではオブジェクト・アクセス認可がパッケージ所有者のIDではなく現在のログオンIDに制限されます。オブジェクトへのアクセスを制御するには、ログオンを明示的なアクセス権の付与(オブジェクトによる付与またはロールによる付与)によって処理するか、またはオブジェクト・アクセス認可を強制的に適用するストアド・プロシージャによって処理する必要があります。

ENABLE/DISABLE

ENABLEセマンティクスをサポートします。

EXTENDEDINDICATOR

NOセマンティクスをサポートします。

ISOLATION

CSセマンティクスをサポートします。

OracleおよびOracle Database Provider for DRDAでは、ほとんどの分離モードはサポートされていません。Oracleのデータ分離モードは、CSとRRの中間のモードと言えます。これはOracleによるデータ整合性管理の実装方法の基盤であるため、変更できません。値は無視されますが、将来の処理のためにパッケージ定義とともに格納されます。

KEEPDYNAMIC

YESセマンティクスをサポートします。

OWNER

認可IDは有効なOracleユーザーIDである必要があります。

QUALIFIER

修飾子名は、Oracle内の有効なスキーマ名である必要があります。

RELEASE

COMMITセマンティクスを実装します。

DRDAを使用する場合、リソースのリリースは異なるレベルで実行されます。コミット/ロールバックでは、カーソルまたは文のセマンティクスにより、カーソルおよびオブジェクト・ロックのリリースが要求されます。他のリソース(パッケージ自体など)はセッションが終了するまで保持され、その後、割当て解除されます。この動作は主に、サーバーではなく実行時にクライアントにより指定されます。

REOPT

AUTOセマンティクスを実装します。

Oracleではデフォルトで、文およびホスト変数に基づいて実行計画が評価されます。STATIC文とDYNAMIC文の両方に同じ処理が適用されます。

ROUNDING

HALFEVENセマンティクスを実装します。

VALIDATE

RUNセマンティクスを実装します。

Oracle Database Provider for DRDAはSTATIC SQL文を検証しないため、このオプションは無視されます。

用語集

アプリケーション・リクエスタ(AR)

アプリケーションにより使用されます。ARは、アプリケーションのかわりにすべてのDRDAプロトコル・リクエストを実行する、従来のクライアント/サーバー構成のクライアント・コンポーネントの役割を担います。

アプリケーション・サーバー(AS)

アプリケーション・サーバー。サーバーのDRDAプロトコル・フロント・エンドとして動作し、DRDAリクエストを処理し、様々なファンクション・コールを実行し、クライアントに結果を戻す、従来のクライアント/サーバー構成のサーバー・コンポーネントの役割を担います。

AS/400

Application System/400 (IBMのプラットフォーム)。

CCSID

コード化文字セットID (IBM/DRDAの用語)。コード体系ID、文字セットID、コード・ページIDおよびコード化グラフィック文字表現を一意に識別するその他の情報の特定のセットを含む16ビットの数値。

たとえば、500 INTL EBCDIC [CECP: ベルギー、カナダ(AS/400*)、スイス、International Latin1]、819 ISO 88591 ASCII [ISO 88591: Latin Alphabet Number 1Latin1の国および地域]、850 LATIN1 PCDATA [PC Data: MLP 222 Latin Alphabet Number 1Latin1の国および地域]などです。

特殊なケース: CCSID 65534 (コードページは下位レベルの定義に従う)およびCCSID 65535(バイナリ・データ)。

データベース・リクエスト・モジュール(DBRM)

(IBM/DRDAの用語)。埋込みSQLアプリケーションの前処理後に、埋込みSQLアプリケーションのSQL文が格納される専用のディスク上のファイルです。後処理されたアプリケーション・ソースには、DBRMで使用されるSQL文を示す文参照番号だけが含まれます。データベース・システムがSQLを完全に分析し、実行を最適化できるようにするため、文が外部化されます。

DB2

IBM DB2の短縮形。IBMが開発したデータベースです。

DBCS

IBM用語では、これは2バイト文字セット(文字コード・ポイントが長さ2バイトの文字セット)です。

専用インスタンス構成

各Oracle Database Provider for DRDAインスタンスに対して1つのRDB_MAPエントリが作成されるOracle Database Provider for DRDA構成。この方法は、IBM DB2 Database for z/OS DRDAクライアントで使用されます。「多重インスタンス構成」を参照。

分散データ管理(DDM)

DDMアーキテクチャにより、分散型データベースで使用されるコマンドおよび応答の全体的な構造が実現します。アプリケーション・リクエスタ(クライアント)とアプリケーション・サーバー間の通信用の分散データベース・ファンクションをすべて実装するために必要なコマンドの数は、20未満です。

分散リレーショナル・データベース・アーキテクチャ

分散リレーショナル・データベース・アーキテクチャ(DRDA)は、アプリケーションとデータベース・システムのベンダーが異なるかどうか、およびプラットフォームのハードウェア/ソフトウェア・アーキテクチャが異なるかどうかに関係なく、異なるプラットフォーム上のアプリケーションとデータベース・システム間の通信を可能にするオープンな公開済アーキテクチャです。DRDAは、他のアーキテクチャと、それらを使用するための環境のルールおよび処理モデルを組み合せたものです。実際にDRDAを構成するアーキテクチャは、分散データ管理(DDM)および定様式データ・オブジェクト・コンテンツ体系(FD:OCA)です。

DRDA

「分散リレーショナル・データベース・アーキテクチャ」を参照してください。

DRDAパッケージ

(IBM/DRDA用語)。パッケージとは、埋込みSQLアプリケーションで定義されているSQL文および属性の集合です。パッケージは、DRDA BINDリクエスト・コマンドによってリソース・ファイル(DBRM)をバインドすることで作成されます。

動的SQL

パッケージには、静的SQLと動的SQLの組合せを含めることができます。動的SQLとは、アプリケーションで実行されない(およびアプリケーションにより作成される場合でも一般にアドホックとみなされる)SQLです。静的SQLと動的SQLの主な違いは、静的SQLはパッケージの一部としてデータベースに事前にロードされ、動的SQLは実行時に実行のためにデータベースに送信される必要がある点です。従来からOracleでは動的SQLのみを実装しており、その強力なカーソル・キャッシュ機能によって、SQL実行にかかる時間が向上し、静的SQLのニーズが大きく解消されました。「静的SQL」を参照。

FD:OCA

「定様式データ・オブジェクト・コンテンツ体系」を参照。

定様式データ・オブジェクト・コンテンツ体系

定様式データ・オブジェクト・コンテンツ体系(FD:OCA)は、DRDAのデータ定義アーキテクチャの基盤となります。DRDAによって定義される記述子は、アプリケーション・リクエスタおよびサーバー間で定期的に交換されるすべての情報に関するレイアウトおよびデータ型の情報を示します。記述子体系はDRDAによって定義されており、コマンドまたは応答データの一部として流れるユーザー・データを動的に定義できるようにします。またDRDAでは、実際に返される行の数に関係なく、記述子は応答セットごとに1回だけフローする必要があることが指定されており、これにより回線上のデータ・トラフィックを最小限に抑えることができます。

IBM

International Business Machines。DB2データベースとDB2製品グループを開発した企業です。

MBCS

IBM用語では、これはマルチバイト文字セット、つまり可変長の文字コード・ポイントを含む文字セットです。たとえばUnicode(UTF-8)などです。もう1つの例として、シングルバイト文字セットと2バイト文字セットを組み合せて1つのマルチバイト文字セットを作成することがあります。

多重化されたインスタンスの構成(Multiplexed Instance Configuration)

異なるホスト名またはIPアドレスと未割当てのネットワーク・ポート番号を追加のDATA_PORTエントリに指定できるOracle Database Provider for DRDAの構成。「専用インスタンス構成」を参照してください。

Oracle Call Interface(OCI)

OCIは、Oracleデータベースへのインタフェースを提供するC言語ソフトウェアAPIの集合です。

OCIは、PL/SQLまたはSQLを使用してデータに対する問合せ、データへのアクセス、データの操作を行うための、データベース管理タスクを実行する手続き型APIで構成されています。

SBCS

IBM用語では、シングルバイト文字セット(長さが1バイトの文字コード・ポイントを含む文字セット)です。

特殊レジスタ

DB2では、特殊レジスタとは、アプリケーション・プロセスのために定義され、SQL文で参照可能な情報を格納するために使用される記憶域です。特殊レジスタへの参照は、現行サーバーにより提供される値への参照です。値が文字列の場合、そのCCSIDは現行サーバーのデフォルトCCSIDになります。

静的SQL

パッケージには、静的SQLと動的SQLの組合せを含めることができます。静的SQLは、アプリケーションの一部としてすでに記述されているSQLです。プログラム内変数(バインド変数)の構文と使用方法はコードで指定されており、実行時には変更できません。また、このSQLはアプリケーションの一部ではありません。ソースから抽出され、パッケージの一部としてアップロードされるため、その形式が固定され、ファンクションに対して悪意のある変更が行われることを防止します。このSQLでは、効率性の高い実行計画を実現できるようにするために、静的SQLが事前に詳細に分析されていることを前提とします。これまでDB2では、主としてバッチ志向であり、動的構成という概念が該当しないアプリケーション向けに静的SQLが開発されました。「動的SQL」を参照。

SQL型

IBM DB2の用語では、これはデータ型のインタフェース値です。

SQLAMレベル

SQLAMは、SQL Application Managerの略語です。SQLAMレベル8は、OracleによるDRDA実装でのサポート・レベルです。

UOW

IBM用語では、これは作業単位(トランザクションのスコープ内でのデータベースに対するすべての変更のためのリソース指定)です。DRDAは、アプリケーションのトランザクション実行期間においてクライアントとデータベース間での分散(リモート)作業単位を維持します。

索引
A  C  D  E  I  J  K  L  M  N  O  P  Q  R  S  T  U  V  W  X  Z

A

Access Managerプラグイン・アーキテクチャ接続モデル, 1.3

アプリケーション・リクエスタ, 1.1

アプリケーション・サーバー, 1.1

AR, 1.1

AS, 1.1

AS/400, 1.2.1, 1.3, 1.3, 1.3

C

CICS DB2, 1.2.2

クライアント/サーバー・アーキテクチャ, 1.2.1

CONCURRENTACCESSRESOLUTIONオプション、BIND PACKAGEサブコマンド, B

クロス・プラットフォームの相互運用性, 1.2.1

CURRENTDATAオプション、BIND PACKAGEサブコマンド, B

カーソルHOLD属性セマンティクス

制限事項, 12.2

カスタム・アプリケーション, 1.2.1

D

DATEデータ型

制限事項, 12.4.1

DB2, 1.2.2 DB2クライアント・アプリケーション, 1.2 DB2接続, 1.2.1, 1.2.1, 1.2.2 DB2サーバー接続モデルでのDB2 Connect置換, 1.2.2 DB2データベース, 1.2.1, 1.2.1 DB2サーバー, 1.1 DB2/400, 1.2.2, 1.3 DB2/400ネイティブDRDA使用接続モデル, 1.3 DB2/400プラグイン・インタフェース, 1.3 DBPROTOCOLオプション、BIND PACKAGEサブコマンド, B DEFERオプション、BIND PACKAGEサブコマンド, B DISABLEオプション、BIND PACKAGEサブコマンド, B 分散リレーショナル・データベース・アーキテクチャ, 1.1 DRDAアプリケーション・リクエスタ, 1.2.1 DRDA接続モデル, 1.2.1 DRDAデータ・プロトコル, 1.2.1 DYNAMICRULESオプション、BIND PACKAGEサブコマンド, B

E

埋込みAPI, 1.2.1

埋込みSQL, 1.1, 1.2.1

ENABLEオプション、BIND PACKAGEサブコマンド, B

EXTENDEDINDICATORオプション、BIND PACKAGEサブコマンド, B

I

IBM DB2, 1.1

IBM DB2接続, 1.2.1

IBM DB2データベース, 1.2.1

ISOLATIONオプション、BIND PACKAGEサブコマンド, B

J

Java, 1.2.1

JDBC, 1.2.1, 1.2.1

K

KEEPDYNAMICオプション、BIND PACKAGEサブコマンド, B

L

Linux, 1.2.1, 1.2.2

M

Microsoft Windows, 1.2.1

N

ネイティブ・アプリケーション, 1.2.2, 1.3

ネイティブ・アプリケーション・リモート接続モデル, 1.2.2

ネイティブDB2アプリケーション, 1.2.2

ネイティブDRDAサポート, 1.2.1

ネットワーク・インフラストラクチャ, 1.3

NODEFERオプション、BIND PACKAGEサブコマンド, B

O

OCI, 1.3

OCI API, 1.2.1

ODBC, 1.2.1, 1.2.1

Oracle Access Manager, 1.3

Oracle Database Provider for DRDA, 1.1

Oracleオブジェクト・リレーショナル・データ型

制限事項, 12.4.2

OWNERオプション、BIND PACKAGEサブコマンド, B

P

プリプロセッサ, 1.2.1

Pro*Cプリプロセッサ, 1.2.1

プロキシ接続, 1.2.2

Q

QUALIFIERオプション、BIND PACKAGEサブコマンド, B

R

RELEASEオプション、BIND PACKAGEサブコマンド, B

リモート・アプリケーション, 1.3

リモート接続, 1.2.2

リモートDB2アプリケーション, 1.2.1

REOPTオプション、BIND PACKAGEサブコマンド, B

リクエスタ, 1.2.1

制限事項

カーソルHOLD属性セマンティクス, 12.2

DATEデータ型, 12.4.1

Oracleオブジェクト・リレーショナル・データ型, 12.4.2

Resynch Manager, 12.1

SYS.XMLTypeデータ型, 12.4.6

TIMESTAMPデータ型, 12.4.3

TIMESTAMP WITH TIME ZONEデータ型, 12.4.4

XMLデータ型, 12.4.5

Resynch Manager

制限事項, 12.1

ターゲット再設定, 1.2.1, 1.3, 1.3 ターゲット再設定, 1.1 ROUNDINGオプション、BIND PACKAGEサブコマンド, B

S

SNA/APPCネットワーク, 1.2.1

SQL*Net, 1.3

SYS.XMLTypeデータ型

制限事項, 12.4.6

T

TCP/IPネットワーク, 1.2.1

TIMESTAMPデータ型

制限事項, 12.4.3

TIMESTAMP WITH TIMEZONEデータ型

制限事項, 12.4.4

U

Unix, 1.2.1, 1.2.2

使用例, 1.3

V

VALIDATEオプション、BIND PACKAGEサブコマンド, B

VM, 1.2.1

VSE, 1.2.1

W

Windows, 1.2.2

X

XMLデータ型

制限事項, 12.4.5

Z

z/OS, 1.2.1, 1.2.2, 1.2.2

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)を参照してください。