OracleとWindowsは相性が悪い? 俗説を吹き飛ばすODP.NET

「OracleとWindowsは相性が悪い?」そんな開発者の思いは杞憂のようだ。2日目を迎えた「Oracle Developer Daysでは、Oracle Databaseを利用したMicrosoft.NET開発のポイントや手法を解説するセッションが開催された。

» 2004年08月26日 03時03分 公開
[西尾泰三,ITmedia]

「OracleとWindowsは相性が悪い?」そんな開発者の思いは杞憂のようだ。2日目を迎えた「Oracle Developer Daysでは、日本オラクルクロスインダストリー統括本部クロスインダストリーSC部の能田啓史氏が、Oracle Databaseを利用したMicrosoft.NET開発のポイントや手法を解説するセッションが開催された。

能田氏 「.NetだからSQL Serverを使わなければならないわけではない」と能田氏

 Windows版Oracleの歴史をひも解くと、1993年12月にさかのぼる。この時Oracleは、同月にリリースされたWindows NT 3.1に対応した、業界初のWindows NT対応データベース「Oracle7 Server R7.0」をリリースしている。NTスレッドに対応し、パフォーマンスモニターとの統合を果たすなどした同製品以後、Windows対応への取り組みは続けられ、最新のOracle Database 10gではスレッドよりさらに細かいファイバーモデルへの対応、64ビット版Windows 2003やIntel Itaniumに対応するなどしている。

「Windows環境においてもOracleは十分なパフォーマンスを発揮できる」(能田氏)

COMデータアクセスと.NETデータアクセス

 Windowsアプリケーションの開発において、Oracle10gでは2種類のデータアクセス、つまりCOMデータアクセスと.NETデータアクセスをサポートしている。

 COMデータアクセスはVisual Basic、Active Server Pages、Visual C++などで使用され、4つのプログラミングインタフェースが提供されている。なお、OracleではCOMデータアクセスにはOracle固有の機能をサポートする「Oracle Objects for OLE」(OO4O)をこれまで勧めていた。

 .NETデータアクセスはVisual Basic .Net、C#、ASP.Netなどで使用され、従来はオープン規格に基づいたドライバである「OLE DB .Net」と「ODBC .Net」を経由したアクセス、つまりデータアクセスにブリッジが入るものだった。この部分のブリッジをなくしたものが、「Oracle Data Provider for .Net」(ODP.NET)である。ちなみにMicrosoftが提供している「Microsoft .Net Data Provider for Oracle」とは別物だ。

 ODP.NETはオラクルが開発した.Netへの高速な接続ミドルウェアで、特徴としては、Microsoft ADO.Netに準拠していること、Oracle DB用にビルドされておりXMLDB、RACなどOracle DBの先進機能のサポートしていることなどが挙げられる。ODP.NETは次のような7つのオブジェクトモデルから成る。

オブジェクトモデル 役割
Connection データベースに接続
Command データベースとの接続中、データを操作。SQLコマンドの発行
DataAdapter データベースとDataSet間でデータを転送
Dataset データの読み取りと更新
DataReader データベースからのデータストリームを格納
CommandBuilder DataSetの更新時にDataAdapterに対する自動SQL生成を行う
Transaction ローカルのトランザクションを表すオブジェクト

 もう少しODP.NETの機能を見ていくと、PL/SQLをフルサポートしていることによるストアド・プロシージャ、ストアド・ファンクションを完全に実行可能なこと、LOB型やREFカーソル、BFILE型などネイティブなOracleデータタイプを扱えることなどがある。さらに最新のODP.Net 10gでは、XMLDBをサポートしたほか、パフォーマンスの改良、特にLOB型の検索パフォーマンスが向上している。

 実際、接続方法の違いによる速度差を見ると、OO4Oの速度を1とした場合、例えば2回目のログオンは1087倍(OLE DB .Net Data Providerが543倍程度)、プライマリキー以外の参照だと2倍(OLE DB .Net Data Providerが1.6〜1.7倍程度)のパフォーマンスとなっている。

 しかし、開発者の心情としては、パフォーマンスの向上はよいが、ODP.NETを採用することで開発生産性が落ちるのではないかという心配があるだろう。そしてもうひとつ気になるのは、OO4Oが今後どうなるのかといった疑問だ。これについて能田氏は次のように答えている。

「ADO.Netに準拠しているため、プログラミングインタフェースは接頭語が変わるだけ。メゾットやクラスを新たに覚える必要はない。また、OO4Oについてはお客様からもなくなるのか? とよく聞かれるが、OO4Oのサポートは継続するし、機能強化も続けていくので安心してほしい」(能田氏)

 ODP.NetはOracle Technology Networkからダウンロード可能となっている。現在の最新バージョンは10.1.0.2.0だ。なお、OO4Oの最新版はODP.Netのインストール時に合わせてインストール可能となっている。

 このODP.NetをVisual Studioから利用する場合は、「%ORACLE_HOME%\bin」以下にある「Oracle.DataAccess.dll」を参照設定に追加すればよい。ただし、現状ではコーディング時の候補リストには対応しているが、GUIのデザイナには対応していないため、実作業においては、各コントロールの各プロパティは手作業で必要な文字列を入れていく必要がある。

「この点が使い勝手の悪いことは理解しており、次バージョン以降で対応する予定」(能田氏)

.Net環境においてOracle Databaseを採用する積極的な意味

 続けて同氏は.Net環境においてOracle Databaseを採用する積極的な意味についても言及した。それによると大きく3点ある。

 まず、.NetでもDBにはオープンプラットフォームを選択できること。つまりUNIXやLinuxを選択でき、すべてをWindowsシステムで構築する必要はないこと。2点目はOracle「だけ」が持つ機能。RACやパーティショニング、XMLDBなどがそれに当たる。このうち、OracleのXML対応はSQL Serverに比べると進んでいるといえる。Oracle Databaseがすでに対応しているXMLとSQLの並存性やXMLスキーマはSQL Serverでは未対応の部分である。そして3点目がトランザクション制御の簡便性だ。ほかのトランザクションを意識する必要性が少ないReadCommitedベースの開発の簡便さを同氏は解説している。

 こうしたメリットを理解し、.Net環境においてOracle Databaseを採用した事例も紹介された。紹介された輸送業での事例では、いわゆるミッションクリティカルシステムでの採用だという。Oracle Databaseを採用したポイントとして、Oracle Database(RAC)に対する期待、ODP.NETが.NET専用のネイティブドライバであること、センターサーバ(UNIX)との連携が容易に行えたことが挙げられるという。これらは言い換えれば「Oracleの持つオープン性、堅牢性、高パフォーマンスを.Net環境下でも利用できる」ということである。

「.Netでシステムを開発するとき、SQL Serverで高いパフォーマンスを発揮する堅牢なシステムが作れるだろうか? Oracle製品は高いという印象があるが、すでに最小構成であれば10万円をきる価格帯となっている。.Netの開発でもOracleを選択されることを期待する」(能田氏)

Copyright © ITmedia, Inc. All Rights Reserved.

注目のテーマ