LoginSignup
5

More than 3 years have passed since last update.

OracleからMySQLへのテーブル定義(DDL)の移行

Last updated at Posted at 2020-03-28

OracleからMySQLにテーブル定義をまとめて移行する方法です。

経緯など

開発環境以上はOracle。
そこそこ制約が厳しいので、個々の開発の段階で、より自由に操作できるDB環境を整えるため。
移行対象のテーブルは650以上。
OracleとMySQLでは、構文が異なる部分があるため、SQLines SQL Converter Tool(以下、Sqlines)というフリーのコンバーターを使って、DDL変換することにしました。

環境と前提条件

  • OS(ローカルPC):Windows10
  • OS(MySQLインストール先):CentOS6.8
  • 移行元DB:Oracle Database 12c
  • 移行先DB:MySQL8.0(database(Oracleでいうところのschema)は作成済とする)

使用ツール、方法

  • OracleからのDDLエクスポート:SQL Developer
  • Oracle → MySQLへDDLコンバート:Sqlines
  • インポートファイルの移動(ローカルPC → MySQLインストール先):WinSCP
  • MySQLへのDDLインポート:Linuxコマンド

作業イメージ

作業イメージは以下の通り。
image.png

手順

1. 事前準備

使用するツールをダウンロード & インストールしておきます。

1-1. SQL Developerのダウンロード ~ 接続設定

Oracle SQL Developer ダウンロードより、SQL Developerをダウンロードし、移行元DB(Oracle)に接続できるようにしておきます。
詳細な手順は、SQL Developerの使い方~ダウンロード、インストール、DB接続、SQL実行をご覧ください。

1-2. Sqlinesのダウンロード ~ 解凍

Sqlinesより、Sqlinesをダウンロードし、解凍しておきます。
手順は以下の通り。
(1)Sqlinesにアクセスし、画面右端の「Migration to MySQL」下の「Oracle to MySQL」をクリックします。
image.png

(2)「SQLines SQL Converter Tool」下の「Desktop Version」をクリックします。
image.png

(3)Windows版の最新版をクリックしてダウンロード。
image.png

(4)ローカルPCの任意の場所に展開します。フォルダの中は以下のようになっています。
image.png

※現時点で、のMySQLの対応バージョンは5系ですが、インポート後にアップグレードするため、問題ない認識です。

1-3. WinSCPのダウンロード ~ 接続設定

WinSCPオフィシャルサイトより、WinSCPをDLし、移行先DB(MySQL)の入った環境に接続できるようにしておきます。
詳細な手順は、WinSCP インストールから基本的の使い方をご覧ください。

2. テーブル定義(DDL)エクスポート from Oracle

Oracleからテーブル定義(DDL)をエクスポートします。

(1) SQL Developerを起動し、「ツール」タブ(①) > 「データベース・エクスポート」をクリックします(②)。
image.png

(2)エクスポート・ウィザードが立ち上がったら、接続DBを選択します(①)。
DDLのエクスポート欄の「スキーマの表示」のチェックをはず
今回はDDLのみが対象なので、「データのエクスポート」(③)のチェックを外しておきます。
移行元DB(Oracle)に合わせたエンコーディングを選択し(③)、「参照」を押下して、エクスポート先とファイル名を指定し(④)、「次」をクリックします。
image.png

(3)「エクスポートするタイプ」の選択です。デフォルトでは、「標準オブジェクト型」のすべてにチェックが入っていますが、「表」のみにし(①)、「次」(②)をクリックします。
image.png

(4)「オブジェクトの指定」画面に切り替わったら、「増やす」をクリックします。
image.png

(5)対象のスキーマを選択し(①)、「参照」をクリック(②)。
image.png

(6)対象のテーブルを確認し(①)、「>>」をクリック。
※一部のテーブルのみ移行する場合は、対象のテーブルを選択し(複数選択できます)、「>」をクリックしてください。
image.png

(7)内容を確認し(①)、「次」をクリック(②)。
image.png

(8)「エクスポートのサマリー」画面に移動したら、内容を確認し、「終了」をクリックします。
image.png

(9)DDLのエクスポートが始まります。量が多い場合は、「バックグラウンドで実行」してもよいでしょう。
image.png
※650強のテーブルのエクスポートで5分ほどかかりました。

(10)終了すると、エクスポートされたファイルが開くので内容を確認します。
image.png

※量が多い場合は以下のメッセージが出て開きませんが、指定した場所にはエクスポートされているのでご安心を。
image.png

3. テーブル定義(DDL)コンバート from Oracle to MySQL

エクスポートされたDDLはOracle用なので、MySQL用にコンバート(変換)します。

(1)解凍したSqlinesのフォルダを開き、「sqlinesw.exe」をダブルクリックします。
image.png

(2)Sourceの「Database」で「Oracle」を選択し(①)、「Input SQL Scripts」でエクスポートしたファイルを入力します(②)。
Targetの「Database」で「MySQL」を選択し(③)、「Output SQL Scripts」で任意のファイル名を入力し、「Convert」(⑤)をクリックします。
image.png
※②, ④では別ウィンドウが開きますが、フォルダの選択までしかできないので、ファイル名は手動で入力してください。

(3)Convertが実行されるとログが出ます。
image.png

※こちらは即完了!1秒かかったか、かからなかったかというレベル。

(4)(2)の④「Output SQL Scripts」で指定した格納先にコンバートされてできたファイル(以下、インポートファイル)が存在することを確認します。
image.png

4. テーブル定義(DDL)インポート to MySQL

(1)WinSCPで手順3でできたインポートファイルを移行先DB(MySQL)の入ったサーバの任意のディレクトリにコピーします。

(2)移行先DB(MySQL)の入ったサーバにrootユーザーでログインし、MySQLが起動していることを確認します。

# service mysqld status

(3)でインポートファイルを配置したディレクトリに移動します。
/home/hogeに配置した場合は以下の通り。

# cd /home/hoge

(3)以下のコマンドを実行し、DDLをインポートします。

# mysql -u root -p -f < インポートファイル名

(4)終了したらMySQLをアップグレード&再起動します。

# service mysqld restart --upgrade=FORCE

※「mysql_upgrade」はMySQL8ではdeprecated(非推奨)なので、代わりに「--upgrade=FORCE」を使います。

(5)MySQLにログインし、テーブルがインポートされていることを確認します(以下、rootでログインの場合)。

# mysql -u root -p 
# use 対象のデータベース名;
# show tables;

終わりに

SQL ServerやPostgres SQLなど → MySQLの移行、MySQL → Oracleの移行ツールは検索すればわりとすぐに出てくるのですが、Oracle → MySQLは一筋縄ではいかず、方法探しと選定だけでも丸1日以上かかりました。
(考えてみれば同じOracle社管轄で高価なOracle Database → 安価なMySQLの移行方法がやたら出回るわけないのですが。)

MySQLインポート時にエラーが出ることがありますが、そのトラブルシューティングについては、
OracleからMySQLへのテーブル定義(DDL)の移行時のトラブルシューティング | Qiita
に書きましたので、そちらもご覧ください。
(エラー発生分以外はオプション-fにより、インポートされるので、その辺はご安心を)。

Sqlinesは、他DB → 他DBへのコンバートもできるようなので(例:SQL Server → Postgres SQL)機会があればやってみたいです。

参考

以下を参考にさせていただきました!ありがとうございました!

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
5