検索
連載

OracleからMySQLへ 「SQL」と「DDL」の移行評価を実施する実践 OSSデータベース移行プロジェクト(5)(3/3 ページ)

本連載では、商用DBMSからOSSデータベースへの移行を検討する企業に向け、「MySQL」への移行プロジェクトで必要となる具体的なノウハウをお届けします。今回は、Oracle DatabaseからMySQLへの移行に向けた「SQL」と「DDL」の移行評価ポイントを解説します。

PC用表示 関連情報
Share
Tweet
LINE
Hatena
前のページへ |       

DDLの移行評価

 テーブルやインデックスのDDLをMySQLへ移行する場合に留意する必要がある2つ事項について評価を実施します。

  • (1)「テーブルの主キー(PK)制約」に関する評価結果

 Oracleの主キー制約には2つの作成方法があります。それぞれ評価します。

Oracle主キー制約作成方法 構文例(コメント) 本システムでの個数 移行コスト評価
CREATE TABLE時に作成 Oracle構文例
CREATE TABLE EMP (EMP_ID NUMBER ,EMP_NAME VARCHAR2(10),CONSTRAINT PK_EMP PRIMARY KEY( EMP_ID ){ストレージ句};
0 ソースコードの変更が若干多い。移行コストは「中程度
MySQL構文例
CREATE TABLE EMP (EMP_ID DECIMAL(38) NOT NULL PRIMARY KEY,EMP_NAME VARCHAR(10) );
(細かいオプションを除き同等に使用できる。なお、ストレージ句は削除する)
(1)
CREATE TABLEの実施
(2)
主キー用のUNIQUE INDEXを作成
(3)
主キーに対してALTER TABLEを実施
Oracle構文例
(1)
CREATE TABLE EMP (EMP_ID NUMBER ,EMP_NAME VARCHAR2(10){ストレージ句};
(2)
CREATE UNIQUE INDEX PK_EMP ON EMP (EMP_ID) {ストレージ句};
(3)
ALTER TABLE EMP ADD CONSTRAINT PK_EMP PRIMARY KEY (EMP_ID);
または、ALTER TABLE EMP MODIFY (EMP_ID NOT NULL ENABLE);
139 ソースコードの変更は比較的少ないが、変更DDL数が多い。移行コストは「中程度
MySQL構文例
(1)
CREATE TABLE EMP (EMP_ID DECIMAL(38) ,EMP_NAME VARCHAR(10));
(2)
(必要ありません)
(3)
ALTER TABLE EMP ADD PRIMARY KEY PK_EMP(EMP_ID);
(細かいオプションを除き同等に使用できる。なお、ストレージ句は削除する)
  • (2)「カラムのデフォルト値」に関する評価結果

 Oracleのカラムには、2種類のデフォルト値があります。それぞれを評価します。

カラムのデフォルト値 構文例(コメント) 本システムでの個数 移行コスト評価
数値、文字列 Oracle構文例
(列に対して、「DEFAULT デフォルト値(数値、文字列)」で指定)
CREATE TABLE IKO_TEST1 (
IKO_TEST_ID NUMBER ,
PROC_TURN NUMBER DEFAULT 0,
TEST_CD CHAR(3) DEFAULT '000',
DATE_CREATE DATE DEFAULT '1990/1/1',
DATA DATE DEFAULT NULL);
567 ソースコードの変更は比較的少ないが、変更DDL数が多い。移行コストは「中程度
MySQL構文例
(列に対して、「DEFAULT デフォルト値(数値、文字列)」で指定)
CREATE TABLE IKO_TEST1 (
IKO_TEST_ID DECIMAL(38) ,
PROC_TURN DECIMAL(38) DEFAULT 0,
TEST_CD CHAR(3) DEFAULT '000',
DATE_CREATE DATETIME DEFAULT '1990-01-01',
DATA DATE DEFAULT NULL);
SQL関数 Oracle構文例
(列に対して、「DEFAULT デフォルト値(SQL関数)」で指定)
(1):SYSDATE関数を用いるパターン
CREATE TABLE IKO_TEST2 (
IKO_TEST_ID NUMBER ,
START_DATE DATE DEFAULT SYSDATE,
END_DATE DATE DEFAULT NULL);

(2):SYSDATE関数以外を用いるパターン
CREATE TABLE IKO_TEST3 (
IKO_TEST_ID NUMBER ,
CURRENT_DATE DATE NOT NULL,
CURRENT_DATE_CHR VARCHAR2(20) DEFAULT TO_CHAR(CURRENT_DATE));
(1):53
(2):0
列のデフォルト値にSYSDATE関数以外を使用しておらず、DDLの変更量も少ない。移行コストは「
MySQL構文例
(列に対して、「DEFAULT デフォルト値(CURRENT_TIMESTAMP関数のみ使用可能)」で指定)
(1):Oracle SYSDATE関数に対応するCURRENT_TIMESTAMP関数を用いるパターン
CREATE TABLE IKO_TEST2 (
IKO_TEST_ID DECIMAL(38) ,
START_DATE DATETIME DEFAULT CURRENT_TIMESTAMP,
END_DATE DATETIME DEFAULT NULL);

(2):Oracle SYSDATE関数以外を用いるパターン
(移行不能)

調査結果のまとめ

 本データベースにおけるSQLおよびDDLの移行評価は、まず「外部結合の構文」でOracle方言を多く使っているために、移行コストが「高め」となります。外部結合の構文に法則性がある場合には、「Windows PowerShell」などのスクリプト言語を用いて変換ツールを作成することなどによって、移行コストを低減化する施策もあります。

 一方の「SQL関数」と「ヒント句」における移行コストは「中程度」と考えられます。別途アプリケーションで使用しているSQLも調査し、正確な移行コストを把握することを推奨します。

 最後に「DDL(テーブルインデックス)」については移行が容易なことから、移行コストは「低い」でしょう。



 以上、今回はDMBS移行プロジェクトにおける、「SQL」と「DDL」の移行評価を行った例を紹介しました。本例は「Oracle Database 8i以前から、データベースのみをバージョンアップしているシステム」によくある内容です。

 なお、Oracle Database 9i以降に新規でデータベースを設計したシステムならば、Oracle方言に依存しない設計としていると想定される、この部分の移行の手間はいくらか低減できるでしょう。移行を検討される場合には、まず現在のシステムで「利用を開始したOracle Databaseのバージョン」についても注目しておくとよいでしょう。

筆者紹介

廣濱顕司(ひろはま けんじ)

SCSK株式会社 ITマネジメント事業部門 基盤インテグレーション事業本部 通信基盤インテグレーション部所属。東京都出身 東京都在住。MySQLやMySQL Clusterのコンサルティング、設計構築、プリセールスなどを行っていたが、最近は営業やマーケティング活動もカバーするようになり、技術が分かる営業として日本国内を縦断中。

荻野邦裕(おぎの くにひろ)

SCSK株式会社所属。神奈川県横浜市在住。1983年よりIT業界へ。その間Oracleを中心とした、DB関連作業を多数経験。DBの移行を得意とする。趣味は自己チューニング(水泳、マラソン、筋トレ)及び愛犬アポロ(チワワ)と遊ぶこと。

潮雅人(うしお まさと)

SCSK株式会社 ITマネジメント事業部門 基盤インテグレーション事業本部 通信基盤インテグレーション部所属。神奈川県川崎市在住。入社当初よりデータベースの設計構築や技術サポート業務に従事。MySQLを中心にしつつもOracle Database、Oracle RACなどの構築にも携わる。趣味はスノーボード、スキューバダイビング、海外旅行など。


Copyright © ITmedia, Inc. All Rights Reserved.

前のページへ |       
ページトップに戻る