1.Oracle8i と インターネット・コンピューティング

1. Oracle8i とインターネット・コンピューティング
1.Oracle8i と
インターネット・コンピューティング
オラクル社は,1997 年 6 月 Oracle8 をリリースする際に,企業レベルの情報システムが
ネットワークを中心とした分散コンピューティングを構築するのに伴って,さまざまな「高
度な要求」と「複雑な相互運用性」さらに「データの巨大化」に直面すると予想しました。
そこで,それらの問題を解決するためのソリューションとして,Network Computing
ArchitectureTM(NCA)を提唱し Oracle8 を提供してきました。
今日の米国では,ネットワークといえばインターネットが完全にその代名詞となり,1998
年中に完全にインターネット・ビジネスが立ち上がったといえます。インターネットを利用
した情報化投資を行った企業は,目覚しく業務プロセスを改善し多くのビジネス機会を取得
して最高の業績を達成しています。インターネットをビジネスに利用することにより,いま
まで勝負にならなかった企業までも簡単に倒すことが現実に起こっていることを考えると,
「革命」とも呼べる変化ではないでしょうか。このような非常に変化の激しいビジネス社会
に対応するために Oracle8i が誕生しました。
インターネットによって情報の使用方法や情報へのアクセス方法が変わりつつあるよう
に, Oracle8i は,その情報の管理方法を変えようとしています。Oracle8i は,従来のミッ
ション・クリティカル OLTP およびデータウェアハウス・アプリケーションの厳しい要件を
サポートすることはもちろん,インターネット環境に最適なインフラとなるような設計が随
所にされています。インターネット環境に最適なインフラとしての要件は,以下のようなも
のが挙げられます。
• 高速なビジネスの変化に対応できる開発生産性と再利用性
• すべてのデータ・タイプ
• 膨大なアクセス数やデータ量に対する耐久性とパフォーマンス
• 急激なユーザー数の増加に対する拡張性
• 既存システムのデータを取り込むための相互接続性
• 上記のような要件を満たしながら簡単に運用する管理性
これらの要件は,インターネット上でビジネスを展開するために必要になってきます。ど
れか 1 つが欠けても満足なインフラを構築することができません。Oracle8i は,これらの要
29
第1章
1
1. インターネット・コンピューティングを支える Oracle8i のテクノロジー
件をすべて満たすために必要なさまざまな機能を搭載し提供されます。
本書では,これらの要件に応えるために実装された機能の概略を第 1 章で解説し,下記に
示す章でそれぞれ詳細に解説します。
• 第2章
アプリケーション開発を支援する機能
• 第3章
DSS/DWH を支援する機能
• 第4章
トランザクション処理を支援する機能
• 第5章
データベース管理を支援する機能
また Oracle は,インターネット・コンピューティングをさらに推進するために,Web ベー
スのシステムを容易にかつ低コストで構築するための機能として,WebDB を提供します。
インターネットをビジネスに結び付けるためにはブラウザーベースのアプリケーションが
重要になります。このようなアプリケーションを開発・配置および管理するための機能を,
Oracle WebDB は提供します。
Oracle WebDB についての概要は,「付録 1
2. WebDB」を参照してください。
Oracle8i は,単なる DBMS ではありません。インターネット上のすべてのファイルを管
理するという発想から iFS(Internet File System)と interMedia を Oracle8i に導入し,デー
タベースの枠を大きく広げます。iFS は,ファイルシステムの使いやすさとテキストや Web
ページなどのすべてのデータを 1 つのサーバーにまとめて,データの統合とコストの削減を
実現します。interMedia は,マルチメディア・コンテンツを統合的に管理するための 5 つの
モジュールで構成されます。Text,Image,Video,Audio,Locator の 5 つのコンテンツ管
理モジュールがあり,テキスト,イメージ,ビデオ,音声,ロケーション(地図情報など)な
どを DBMS で管理することが可能になります。Oracle8i の初期リリースでは Text および
Image の 2 つのモジュールのみがサポートされ,それ以外の 3 つのモジュールについては順
次サポートされる予定です。
iFS についての概要は,「付録 1
30
1. iFS」を参照してください。
5. データベース管理を支援する機能
2.アプリケーション開発を支援する機能
インターネットを活用することによってビジネスのスピードが加速します。このような高
速な変化に対応したコンピュータシステムを構築するためには,開発生産性と再利用性が非
常に重要になります。近年,開発生産性・再利用性・移植性の面から大変注目され,インター
ネット環境で使用する標準言語として Java が確たる地位を固めました。そこで Oracle8i は,
Java に対応した機能を本格的に実装します。Oracle は,以下の理由から Java 対応の機能
を大幅に強化します。
• 企業レベルのアプリケーションを開発するための言語として非常に有力
• 完成度の高い言語(先進的・オブジェクト指向・プログラミングが容易)
• 1 つの言語ですべてのアプリケーションを記述できプラットフォームに依存しない
(Write Once,Run Anywhere)
• インターネット・コンピューティングには,ベストな言語
Oracle は,Java を利用することで企業の IT における TCO を下げることが可能であり,
また,いままでのクライアント/サーバー・モデルではないアプリケーションを構築するには
Java がベストであると考えています。このような背景をもとに Oracle は,Java を企業レ
ベルのインターネット・コンピューティング言語にするために大きく分けて 2 つの製品群を
提供します。1 つは JServer というサーバー・プラットフォーム,もう 1 つは,このプラッ
トフォームで開発するための ENTERPRISE TOOL SUITE です。JServer とは,Oracle8i
の中に実装された Java VM です。
ENTERPRISE TOOL SUITE では,Oracle8i をサーバーとして CORBA や Enterprise
JavaBeans な ど の Component-based の 開 発 を す る こ と が で き る ツ ー ル と し て
JDeveloper2.0 を提供します。
ここでは,Oracle8i の Java 関連機能の概要について解説します。
31
第1章
5
1. インターネット・コンピューティングを支える Oracle8i のテクノロジー
1. Java の実装
1.1 JDBC ドライバー
JDBC ドライバーは,既に Oracle7 R7.3.4 や Oracle8 R8.0 でもサポートされていました
が,
新たに Oracle8i のサーバー機能に対応した新しいタイプのドライバーが作成されました。
JDBC ドライバーは,その特徴としてクライアントからアクセスするための対応とサーバー
組み込みで使用するための対応がされています。クライアント側の対応としては,JDBC
OCI ドライバーと JDBC Thin ドライバーで,サーバー側の対応としては,Java VM によっ
て内部的に使用されている組み込み JDBC ドライバー(JDBC KPRB)があります。
これらのドライバーは,すべて同じ機能を提供するように作られているので,使用するド
ライバーによってアプリケーション・コードが変わることはほとんどありません。JDBC ド
ライバーは,JavaSoft からその仕様が公開されていますが,現在の Oracle の JDBC ドライ
バーは,JDBC 1.22 標準に準拠しています。また,一部 JDBC 2.0 標準に対応しています。
Oracle は,それぞれ異なる目的のために 3 つのドライバーを提供します。以下に,それぞれ
のドライバーの特徴を解説します。
1.1.1 JDBC OCI ドライバー
JDBC OCI ドライバーは,クライアント/サーバーやミドルティアの Java アプリケーショ
ンを作成するために使用します。これは,一般的に Type2 のドライバーと呼ばれています。
実際に使用するには,クライアント側に OCI(Oracle Call Interface)の Library がインストー
ルされている必要があります。また,データベースとの接続は Net8 を経由して行われます。
Oracle8i R8.1
クライアント/サーバー・システム
のクライアントアプリケーション
やマルチティア・システムのアプ
リケーションサーバーで利用す
る
JDBC OCI
Java Engine
SQL Engine
PL/SQL Engine
OCI C Lib
図 1.1 JDBC OCI ドライバーの利用
32
組み込みJDBC
5. データベース管理を支援する機能
1.1.2 JDBC Thin ドライバー
Thin Client からクライアント/サーバーのプログラミングを実行するための Java アプ
レットのために提供されます。これは,一般的に Type4 のドライバーと呼ばれていて,すべ
て Java で記述されていることから Pure Java ドライバーといえます。また,データベース
第1章
との接続には,Java の socket が使用されて直接データベースへ接続します。
5
Oracle8i R8.1
JDBC Thin
Java Engine
Java Sockets
ブラウザーからデータベース
SQL Engine
PL/SQL Engine
組み込みJDBC
への接続
図 1.2 JDBC Thin ドライバーの利用
1.1.3 組み込み JDBC ドライバー
Java VM が,SQL や PL/SQL と通信するために内部的に使用されるサーバー側のドライ
バーです。これは Oracle 独自の実装で,Java VM の中で Java ストアド・プロシージャが
使用するものです。これは,大きく以下の 2 つのメリットがあります。
• JDBC の呼び出しを SQL にアクセスする呼び出し(call)と同じプロセスが実行すること
になり,メモリ上の同じアドレス空間で実行されるので非常に高速です。JDBC Thin
ドライバーや JDBC OCI ドライバーを使用したときの動作であるリモートの Net8 を実
行して SQL にアクセスする呼び出しを実行する場合と比べて,格段に高速です。
• クライアント側のドライバーと全く同じ API を提供しているので,クライアント側に配
置した Java のプログラムをストアド・プロシージャにするだけで簡単にサーバー側で
動かすことが可能になります。
33
1. インターネット・コンピューティングを支える Oracle8i のテクノロジー
Java ストアド・プロシージャについては,「本節」の「1.3.5 Java ストアド・プ
ロシージャとトリガー」,または「第 2 章 3. Java 対応(Java VM/ストアド・プ
ロシージャ)」を参照してください。
Oracle8i R8.1
IIOP
Java Engine
SQL Engine
PL/SQL Engine
Net8
組み込みJDBC
図 1.3 組み込み JDBC ドライバーの利用
JDBC ドライバーについての詳細は,「第 2 章
1. Java 対応(JDBC)」を参照して
ください。
1.2 SQLJ トランスレータ
JDBC を使えば,Java からデータベースへのアクセスや,データベースから得られたデー
タ,データベースへ更新するデータを Java で計算,加工することは可能になります。しか
し,JDBC は Java からデータベースにアクセスするために完全に十分な機能か,というと
必ずしもそうではありません。
JDBC では,SQL はすべてメソッドの引数として渡す形式のため,SQL の文法チェック
をコンパイル時に行うことは不可能です。この文法チェックは SQL がデータベースに渡さ
れ実行されるときに行われるので,実行時に文法エラーなどが生じる可能性があります。
Oracle の他の言語(C,FORTRAN,COBOL)を使ってデータベース操作を行うアプリケー
ションを作成する場合では,SQL はコンパイル時にチェックされ,文法の誤りや表名のつづ
りミスも実行前に正しいものに修正することが可能です。
Pro*C や Pro*Fortran,Pro*Cobol などの Oracle のプリコンパイラは,コンパイル時に
セマンティックスのチェック(表名や列名などのエラーチェック)まで行うことができます。
34
5. データベース管理を支援する機能
これらのプリコンパイラのように,Java のコード中に埋め込み SQL 文が記述できるように
したものを SQLJ といいます。SQLJ は,以下のような特徴を持っています。
• Java のコード中に直接 SQL 文を埋め込める。
第1章
• 埋め込まれた SQL 文を JDBC を call する Java のコードへ変換する。
5
• どんなベンダーの JDBC ドライバーでも使用可能である。
また,SQLJ を使用することで以下のようなメリットがあります。
• コードが JDBC よりかなりシンプルに書ける。
• SQL 文のセマンティックス・チェックが事前に行える。
• 反復子(Iterator)を使用できるので,問合せ結果が複数行になった場合効果的なデータの
操作が可能になり,サーバーとのやり取りが減らせる。
• SQLJ も ANSI に準拠した業界標準である。
実際に JDBC を使用して書いた Java コードと SQLJ を使用して書いた Java コードの比
較を,以下に示します。
リスト 1.1 JDBC を利用したサンプルコード
java.sql.CallableStatement stmt;
Connection conn;
ResultSet results;
conn = DriverManager.getConnection
( "jdbc:default" );
stmt = conn.prepareStatement
( "SELECT ename FROM emp
WHERE sal > ? AND deptno = ?" );
stmt.setInteger(1, salparam);
stmt.setInteger(2, deptnoparam);
results = stmt.executeQuery( );
35
1. インターネット・コンピューティングを支える Oracle8i のテクノロジー
リスト 1.2 SQLJ を利用したサンプルコード
ResultSet results;
#sql results =
{SELECT ename FROM emp
WHERE sal > :salparam
AND deptno = :deptnoparam};
上記のコードを比較すると,SQLJ のコードは大変シンプルなことが分かります。これは,
コーディングの量だけでなくデバッグも含めて考えると,アプリケーション開発においては
生産性に多きな差が出ることは間違いありません。
それでは次に,Java のアプリケーションを実行させるためのサーバー機能である JServer
について解説します。
SQLJ についての詳細は,「第 2 章
36
2. Java 対応(SQLJ)」参照してください。