データベースを乗り換える敷居はかなり高い
前回、構成によってはOracleよりもDB2のほうがライセンス費用が安くなる可能性があると指摘した。確かにライセンス費用が安くなるのは、大きなメリットになるはずだが、だからといって実際にデータベースシステムを乗り換えるとなると、それはたやすいことではない。
いざ乗り換えを実施するとなれば、利用しているアプリケーションが正常に稼働するようにプログラムを大きく手を入れることになるだろう。そして、移行作業が終われば正常に稼働することを、十分にテストし確認しなければならない。この移行作業に手間と時間がかかれば、そのための技術者費用が発生することになり、ライセンス価格の差などはあっという間に吹き飛んでしまいかねない。
ライセンス費用の削減だけを目指すのであれば、オープンソースのデータベースに乗り換えるという手もある。しかしながら、OracleやDB2などの商用データベースからの乗り換えとなると、それはかなりの苦労を覚悟する必要がある。
苦労が大きくなる可能性が高いので、よほどスムーズに移行できないとコストメリットは発揮できない。データベースは本来、標準のSQLに準拠していれば言語的には同様なもののはずだが、実際にはデータベースごとに細かいレベルでSQLの仕様は異なっている。そのため、移行時にはこの違いを理解し、適宜システムに合わせプログラムを書き換える必要があるのだ。
とはいえ、言語仕様が異なる程度の差ならば、何度か移行作業を経験すれば、何をどう書き換えればいいかといったことを技術者なら比較的容易に修得できるはずだ。データベースの標準的な機能だけを利用しているシステムであれば、変更部分はデータベースごとの方言を解釈するようなもので、プログラムのちょっとした書き換えだけですむはずだ。
問題となるのは、AのデータベースにはあるのにBにはその機能そのものがないといった場合だ。この場合は、似たような機能で代替できれば、それを使ってなんとか誤魔化すか、あるいは存在しない機能そのものを別途作るかしかない。商用データベースには豊富な機能が揃っているが、オープンソースではそうはいかない。
そのため、商用からオープンソースへの移行の際には、新たに必要な機能を外部プログラムで作るか、便利な機能を諦めるといったことになりかねない。こういう機能を多数作るとなれば、当然ながら大きな手間とコストがかかり、そもそも作った機能の信頼性も心配となる。商用からオープンソースへの移行では、この苦労はかなり大きくなることが予測される。
Oracleとの互換性を高めた3つのポイント
当然ながら、DB2とOracleでは基本的なアーキテクチャも異なるし、SQLもまるっきり同じというわけにはいかない。そのため、移行時にはそれなりにプログラムに手を入れる必要がある。とはいえ、機能的には両者ともそれなりに豊富に揃っているので、こちらにあってあちらにないという機能はそれほど多くはないはずだ。
しかしながら、Oracleの便利な機能を十分に使いこなしていればいるほど、DB2への移行は苦労することになるはずだ。 ところが、最新版のDB2 9.7では、OracleにあってDB2にはないといった機能を、大幅に減らすことに成功している。これにより、それなりにOracleの機能を使い込んでいたとしても、OracleからDB2への移行の手間を従来に比べて大きく削減しているのだ。
DB2 9.7でこの手間の削減に大きく貢献しているのが、Oracle独自の拡張プロシージャ言語であるPL/SQLのサポートがまず挙げられる(図1)。これは、足りなかったPL/SQLの機能をエミュレーションするといったものではない。
なんとPL/SQLのコンパイラを追加し、別途実装してしまったのだ。これにより、Oracleで動いていたPL/SQLのプログラムが、多くの場合、手をほとんど入れずにDB2 9.7の上で動いてしまうのだ。これは、エミュレータ方式ではないので、パフォーマンスの劣化も心配ないとのことだ。
もう1つのOracleとの互換性を高めたポイントが、Oracle固有の関数やデータ型のサポートをDB2 9.7では大幅に追加しているところだ(図2)。たとえば、結合演算子の(+)やVARCHAR2データ型なども新たに追加されており、それらを利用することで、SQLの書き換えの必要も大幅に削減されている。
3つ目の大きな変化が、DB2 9.7でのロックメカニズムの変更だ。Oracleを使っている技術者であれば当たり前の機能とも言える、読み取り一貫性機能がDB2 9.5までは実装されていなかった。そのため、更新中のレコードを読み込む際には、更新レコードはロックされ読み込むにはロックが解除されるのを待つ必要があったのだ。
これを回避するために、DB2では更新中のロックがなるべく発生しないようプログラミング側でなんらかの工夫をする必要もあった。DB2 9.7ではOracleと同様のREAD COMMITTED分離レベルを採用できるようになり、この拡張も移行の手間を大幅に削減することにつながる。
IBMでは移行のための各種サービスを提供中
現在、IBMのサイトには、OracleからDB2へ移行するための技術資料なども十分に揃っている。また、「Oracleからの移行支援サービス」も実施している。このサービスでは、OracleからDB2への無償移行アセスメントを実施し、新規にOracle DatabaseまたはDB2を購入する場合のライセンス、保守料の比較査定を行っている。
さらに、データ圧縮効果のアセスメントでは、DB2のディスク圧縮機能によるストレージ・コスト削減効果についても査定を行い、移行インパクト・チェックではOracleからDB2へ各種オブジェクトを移行する際の互換性査定も実施している。この他にも、実際の移行作業をサポートする有償のサービスも各種提供されている。
また、IBMでは、すぐに利用できるDB2の評価版、無償版のライセンスも用意している。新しくなったDB2の各種機能を、これらのライセンスを用いすぐに評価することも可能だ。データベースの移行は、リスクも伴うものなので、そう簡単に決断できるものではない。当然ながら単純なコスト比較だけで判断できるものはないので、事前に十分に資料をあたり、評価版等でしっかりと検証をする必要もあるだろう。
何度も繰り返しになるが、データベースを単なるデータの入れ物として使用するのではなく、強力なデータ処理エンジンだと位置づける。そういう視点をもって、システムにおいてさらにデータベースを活用すれば、もっと便利で高性能なデータ処理環境ができあがるはずだ。そのためにも、今一度データベースの機能、性能に着目し、十分な評価をしてみることをお薦めする。