簡単にできる!OracleからDB2 9.7への移行ステップ: .NETアプリケーション移行

第4回

この記事では、Oracleにアクセスする.NETプログラムを、DB2用に移行する方法をご紹介します。

データ・プラットフォーム推進チーム, データ・プラットフォーム推進チーム, 日本アイ・ビー・エム株式会社 ソフトウェア事業

DB2に関して平均9年の幅広い知識と経験を有する日本アイ・ビー・エム システムズエンジニアリング株式会社(ISE)の社員です。
情報技術の専門家集団として、お客様のご要望に応じ、難易度の高い複雑なシステム構築に、卓越したITスキルにより果敢にチャレンジしております。



2012年 2月 29日

はじめに

OracleからDB2への移行方法をご紹介するこのシリーズも、今回が最終回です。
前回までの記事では、移行ステップや、他社データベースからDDLとデータを抜き出すツール、DB2上でPL/SQLを実行する方法をご紹介してきました。今回は、Oracle用に作成されたADO.NETプログラムをDB2用に変更してみましょう。

1. データベースにアクセスする.NETプログラム

Microsoft社の.NET Frameworkには、データアクセス用のライブラリ群としてADO.NETが含まれています。中でも、データベースに接続したり、SQLを発行したりする場合に使用されるのが、データ・プロバイダです。
データ・プロバイダにはOLE DBやODBCのような共通ドライバを経由してデータベースにアクセスする、いわゆるブリッジ・プロバイダもありますが、データベース専用のネイティブ・プロバイダが提供されている場合があります。Oracle専用のプロバイダがOracle Data Provider for .NET(ODP.NET)であり、DB2でこれにあたるものがDB2 .NET Providerです。(図1参照)

図1. OracleとDB2用のADO.NETデータ・プロバイダ
図1. OracleとDB2用のADO.NETデータ・プロバイダ

ネイティブ・プロバイダは、ブリッジ・プロバイダに比べ、余計な層を経由しない分、パフォーマンスが優れています。
今回は、ODP.NETのプログラムを、DB2 .NET Providerに書き換えることにします。


2. DB2 .NET Providerアプリケーション開発環境

DB2 .NET Providerは、DB2クライアントおよびサーバーに付属しているIBM Data Server Provider for .NETパッケージに含まれています。これを使用し、DB2 for LUW V8以降のデータベースにアクセスすることができます。
DB2 for LUW V9.7では.NETアプリケーション開発およびデプロイ環境として、.NET Framework 2.0以上がサポートされています。主な前提条件は以下です。

  • オペレーティングシステム
    • Windows XP SP2 (32 ビット版、64 ビット版)
    • Windows Server 2003 (32 ビット版、64 ビット版)
    • Windows Vista (32 ビット版、64 ビット版)
    • Windows Server 2008および2008 R2 (32 ビット版、64 ビット版)
    • Windows 7 (32 ビット版および 64 ビット版)
  • 開発環境として、Microsoft Visual Studioの以下のバージョンをサポートします。
    • Visual Studio 2005 (.NET Framework 2.0/3.0用)
    • Visual Studio 2008 (.NET Framework 2.0、3.0、および 3.5 用)
    • Visual Studio 2010 (.NET Framework 4.0用)

IBM Database Add-In for Visual Studioは、DB2用のVisual Studioアドインで、DB2クライアントおよびサーバーに付属しています。これを使用すると、Visual Studio上で簡単にDB2用.NETアプリケーションを開発したり、DB2の表や索引などのデータオブジェクトを操作したり、ストアドプロシージャやユーザー定義関数を作ったりすることができるようになります。
Visual Studio2010を使用するためには、IBM Database Add-In for Visual StudioはDB2 クライアントV9.7 FixPack4以上のレベルが必要です。


3. アプリケーション開発環境の準備

では、いよいよVisual Studio 2010を使用し、.NETアプリケーションを移行していきましょう。移行元、移行先のデータベースには、このシリーズで例として使用しているOracle 11gとDB2 for LUW V9.7を使用します。

1. Visual Studio 2010環境の準備

すでにOracle用.NETアプリケーションを稼動させている場合は、Visual StudioとOracle用のVisual Studio Add-InであるOracle Developer Tools for Visual Studioが導入/構成されていることと思います。Visual Studio2010が無い場合は、これを用意します。DB2, OracleのAdd-Inは、Visual Studio のExpress版ではサポートされません。
Visual Studio2010、Oracle Add-Inについては、参考資料のリンクをご覧ください。

2. IBM Database Add-In for Visual Studioの準備と導入

IBM Database Add-In for Visual Studioは、DB2クライアントおよびサーバーに付属しています。
DBサーバーも新たに導入する場合は、「第1回:移行概要」でもご紹介したDB2 Express-C(無償版)サイトからDB2 Express-C 9.7.5をダウンロード/導入してください。
クライアントおよびVisual Studio Add-Inのみが必要な場合は、DB2クライアントサイトから、DB2 Version9.7 Fix Pack 5を選択してダウンロードし、導入してください。
導入の最後にVisual Studio Add-Inを導入するかどうか尋ねられるので、これを導入します。Visual Studioが導入済みの環境では、自動的にAdd-Inが構成されます。

3. Visual StudioでのDB2接続の構成

Add-Inの導入が終わったら、Visual StudioにDB2サーバーへの接続を登録しましょう。
接続追加は以下のように行います。

1) Visual Studio2010を開始します。

2) サーバーエクスプローラーから、「接続の追加」を選択します。

図2. Visual Studio 2010 サーバーエクスプローラー
図2. Visual Studio 2010 サーバーエクスプローラー

3) 「接続の追加」ウィンドウで、「データソース」の「変更」ボタンを押して、表示されるデータソース候補の中から「IBM DB2 and IDS Servers」を選択します。

図3. Visual Studio2010での接続の追加
図3. Visual Studio2010での接続の追加

4) DB2用の「接続の追加」ウィンドウで、データベースサーバーのホスト名またはアドレス、接続用のユーザーID/パスワード、データベース名を指定します。

これで、Oracle .NETアプリケーションをDB2用に移行する環境の準備が整いました。


4. .NETプログラムの移行

ODP.NETプログラムを移行する方法を見てみましょう。

1. 移行概要

ODP.NETプログラムをDB2 .NET Provider用に移行することは比較的簡単です。ADO.NETでは、データアクセス用のクラスの種類や名称があらかじめ決まっており、各ネイティブ・プロバイダでもそれらのクラスが提供されているからです。
ODP.NETのクラス名はOracleXXXXであり、DB2 .NET Providerのクラス名はDB2XXXXです。
下の表は、主なクラスの対応を示しています。

名前空間および主なクラスODP.NETDB2 .NET Provider
名前空間Oracle.DataAccess.ClientIBM.Data.DB2
ConnectionDBに対する接続 OracleConnectionDB2Connection
CommandSQL ステートメントまたはストアード・プロシージャー実行 OracleCommandDB2Command
DataAdaperDataSet にデータを追加してデータベースを更新するために使用する、コマンドおよび接続のセット OracleDataAdapterDB2DataAdapter
DataReader順方向データ行ストリームをデータベースから読み取る手段の提供 OracleDataReaderDB2DataReader
CommandBuilderDataSet に対する変更に基づいて調整するために使用する単一表コマンドを自動生成 OracleCommandBuilderDB2CommandBuilder

これでおわかりのように、プログラムの移行は基本的にクラス名のOracle接頭子をDB2に変えること、名前空間宣言を変更することです。
また、Visual StudioプロジェクトでDB2 .NET Providerを使用する場合には、忘れずにソリューションエクスプローラーからプロジェクトに対して「参照設定」->「参照の追加」で、IBM.Data.DB2.dllを.NETライブラリとして追加しておきます。(図4参照)

図4. DB2 .NET Providerへの参照の追加
図4. DB2 .NET Providerへの参照の追加

2. 名前空間宣言

名前空間の宣言は、以下のように書きます。C#の場合、VBの場合をそれぞれ示します。

1) C#の場合

ORACLE
using System;
using System.Data;
using Oracle.DataAccess.Client;
DB2
using System;
using System.Data;
using IBM.Data.DB2;

2) VBの場合

ORACLE
Imports System
Imports System.Data
Imports Oracle.DataAccess.Client
DB2
Imports System
Imports System.Data
Imports IBM.Data.DB2

3. データベースへの接続

データベースへの接続はConnectionクラスを使用します。これも、C#, VBでOracle, DB2の場合をそれぞれ見てみます。(例は完全なプログラムではありません。)

1) C#の場合

ORACLE
OracleConnection con;
void Connect()
{
   con = new OracleConnection();
   con.ConnectionString = "User Id=scott;Password=tiger;Data Source=ORCL";
   con.Open();
   Console.WriteLine("Connected to Oracle");
   Console.WriteLine(con.ServerVersion);
}
void Close()
{
   con.Close();
   con.Dispose();
}
DB2
DB2Connection con;
void Connect()
{
   con = new DB2Connection();
   con.ConnectionString = “Server=localhost:50000;Database=testdb;UID=db2inst1;
PWD=db2inst1";
   con.Open();
   Console.WriteLine("Connected to DB2");
   Console.WriteLine(con.ServerVersion);
}
void Close()
{
   con.Close();
   con.Dispose();
}

2) VBの場合

ORACLE
Dim con As OracleConnection = New OracleConnection()
con.ConnectionString = "User Id=Scott;Password=tiger;Data Source=ORCL"
con.Open()
DB2
Dim con As DB2Connection = New DB2Connection()
con.ConnectionString = "Server=localhost:50000;Database=testdb;UID=db2inst1;PWD=db2inst1"
con.Open()

上の例では、Oracle接続文字列では、Oracleクライアントのtnsnames.oraで宣言されたサービス名をData Sourceとして使用していますが、tnsnames.oraファイルに依存しないように、tnsnames.oraファイルの定義内容をそのまま接続文字列に設定することもできます。DB2 .NET Providerでの接続文字列は、「Server=Server名またはアドレス:ポート番号」、「Database=データベース名」、「UID=ユーザーID」、「PWD=パスワード」の組み合わせで接続可能です。

4. SQL文の実行

次にCommadクラスを使用したSQL文の実行例を示します。ここではDataReaderを使って結果を読み取っています。

1) C#の場合

ORACLE
string strSQL = "select ename from emp";
OracleCommand myCmd = new OracleCommand(strSQL, con);
OracleDataReader myReader = myCmd.ExecuteReader();
while(myReader.Read())
{
   Console.WriteLine(myReader.GetString(0));
}
DB2
string strSQL = "select ename from emp";
DB2Command myCmd = new DB2Command(strSQL, con);
DB2DataReader myReader = myCmd.ExecuteReader();
while (myReader.Read())
{
   Console.WriteLine(myReader.GetString(0));
}

2) VBの場合

VBの場合も、OraclexxxクラスをDB2xxxクラスに変更することは同様です。

ORACLE
Dim strSQL As String = "select ename from emp"
Dim myCmd As New OracleCommand(strSQL, con)
Dim myReader As OracleDataReader = myCommand.ExecuteReader()
While myReader.Read()
Console.WriteLine(myReader.GetString(0))
End While
DB2
Dim strSQL As String = "select ename from emp"
Dim myCmd As New DB2Command(strSQL, con)
Dim myReader As DB2DataReader = myCommand.ExecuteReader()
While myReader.Read()
Console.WriteLine(myReader.GetString(0))
End While

このようにプログラムソースの修正を行ったら、プログラムをビルドして稼動させることができます。
各クラスの細かいプロパティの中には非互換項目もありえるため、プログラムを十分にテストして予期している動作、結果となることを確認してください。


おわりに

これまで、OracleからDB2への移行についてご紹介してきましたが、いかがだったでしょうか。意外と簡単そうと思われたら、ぜひExpress-Cでお試しください。

参考文献

コメント

developerWorks: サイン・イン

必須フィールドは(*)で示されます。


IBM ID が必要ですか?
IBM IDをお忘れですか?


パスワードをお忘れですか?
パスワードの変更

「送信する」をクリックすることにより、お客様は developerWorks のご使用条件に同意したことになります。 ご使用条件を読む

 


お客様が developerWorks に初めてサインインすると、お客様のプロフィールが作成されます。会社名を非表示とする選択を行わない限り、プロフィール内の情報(名前、国/地域や会社名)は公開され、投稿するコンテンツと一緒に表示されますが、いつでもこれらの情報を更新できます。

送信されたすべての情報は安全です。

ディスプレイ・ネームを選択してください



developerWorks に初めてサインインするとプロフィールが作成されますので、その際にディスプレイ・ネームを選択する必要があります。ディスプレイ・ネームは、お客様が developerWorks に投稿するコンテンツと一緒に表示されます。

ディスプレイ・ネームは、3文字から31文字の範囲で指定し、かつ developerWorks コミュニティーでユニークである必要があります。また、プライバシー上の理由でお客様の電子メール・アドレスは使用しないでください。

必須フィールドは(*)で示されます。

3文字から31文字の範囲で指定し

「送信する」をクリックすることにより、お客様は developerWorks のご使用条件に同意したことになります。 ご使用条件を読む

 


送信されたすべての情報は安全です。


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=60
Zone=Information Management
ArticleID=946652
ArticleTitle=簡単にできる!OracleからDB2 9.7への移行ステップ: .NETアプリケーション移行
publish-date=02292012