エンタープライズ:特集 | 2003/07/25 18:19:00 更新 |
[Java Developer特別企画]2003年9月号
知っておきたいデータベース移行術「SQL Server→Oracle編」 (3/15)
JAVA Developer 2003年9月号より転載
移行の実際 |
機能に関しては、SQL Server 2000よりOracle9iのほうが多いため、移行できない機能はほぼ存在しません。たとえば、索引機能においては、SQL Server 2000は通常の索引(Bツリー索引)をサポートしていますが、Oracle9iはこれに加えてビットマップ索引と呼ばれるものがあり、格納されている値データをビット配列にし、ビット配列に従って検索を行うことができる機能があります。
また、同じ機能でもそのしくみが異なるものが存在します。たとえば日付関数は当然、両データベースでサポートされていますが、現在の日付を獲得する関数名は、SQL Server 2000がGETDATE関数であるのに対して、Oracle9iではSYSDATE関数を使用します。このような違いについて、いくつかこのパートで解説します(データベースのファイル構成、データブロックの呼び名や取り扱い方法、ログの採取方法などのしくみについては触れていません)。
●しくみが異なる認証/権限
認証に関しては、SQL Server 2000もOracle9iもWindows認証(Oracle9iはOS認証と呼ぶ)および通常のデータベース認証(SQL Server 2000はSQL Server認証と呼ぶ)を利用することができます。呼び名こそ違いますが、機能的に大きな違いはありません。
権限に関しては、それぞれ名称が異なりますが、お互い同じ機能をサポートしています。違いは、SQL Serverがユーザーの集合体(グループ)に権限を与えるのに対して、Oracle9iは権限の集合(ロール)をユーザーに与えるところです。しくみの違いだけですので、データベース定義時に理解し、さらにコマンドと権限名の違いさえ理解できれば、問題は発生しません。
●命名規則は長さに注意
表名、索引名や列名など、データベースではいろいろなところに名前を定義し、その名前に関するルールをまとめたものが命名規則です。SQL Serverでは、最大128文字までの名前が許されています。一方Oracle9iの場合は、30バイト以下である必要があります。このように命名規則には多少の違いがあります。
SQL Serverの表名、索引名、列名などの表記において、30バイトを超える表記が含まれている場合は、その名前を短くする必要があります。SQL文を記述する際に使う表名などの参照方法は、どちらも「スキーマ名.テーブル名(例:guest.sample_table)」となります。
一時表の取り扱いも注意が必要です。一時表とはユーザーがデータベースにアクセスしている間だけ有効な表のことです。セッションが終わると、その表は自動的に削除されます。集計処理や一時的な計算のために利用する一時表は、とても便利な機能です。
SQL Serverではこの一時表を命名規則で識別します。表名の先頭に「#」記号がある場合、その表は一時表を示します。Oracle9iデータベースでは命名規則による識別ではなく、表を作成する際のコマンドで識別します。通常、表を作成するのは「CREATE TABLE文」ですが、一時表は「CREATE GLOBAL TEMPORARY TABLE 文」を使って作成します。
移行する際には、SQL Server上の#記号がついた表名を変更し、さらにその表を作成するCREATE TABLE文をCREATE GLOBAL TEMPORARY TABLE 文に変更することで、Oracle9i上でも同じ動作が可能になります。
関連リンク
JAVA Developer
定期購読のご案内
バックナンバー販売協力店
Javaコレクションのマスターを目指せ! JAVA Developer 9月号
大特集
特集2 BEA WebLogic ・コレクションフレームワークとデータ構造 ・知っておきたいデータベース移行術 「SQL Server→Oracle編」 ・Webアプリケーションセキュリティ |
前のページ | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | 次のページ
[西脇 資哲,JAVA Developer]