インテージテクノスフィア技術ブログ

株式会社インテージテクノスフィアの社員達がシステム開発や仕事に関する技術情報を随時掲載いたします

データベース移行ツールMicrosoft SQL Server Migration Assistant (SSMA)の使用感想

こんにちは、アイダです。今回は2つのRDBMS、Oracle Databese と Microsoft SQL Server 間の移行作業を行ったSさんからの投稿です。 当ブログではAWSなどクラウドの投稿が続いておりましたが、当社では自社にて物理サーバ環境(オンプレミス)および仮想サーバ環境(VMware)を保有し、データセンターとして長年お客様にご利用いただいております。以下当社HPの業務紹介リンクです。

www.intage-technosphere.co.jp

今回はオンプレミスから仮想サーバへDB移行を実施されたとのことですが、なぜこの移行を実施したのか、理由や移行に利用したツールの使い方について投稿いただきました。ではSさんお願い致します。

はじめに

私の部署では、Oracle Databese で作成された社内システムを SQL Server に移行する作業を行っています。移行作業を効率に行うために、Microsoft SQL Server Migration Assistant (SSMA)という移行ツールを採用しました。

使い方や実作業で得た感想を共有させていただきます。

背景

私の部署は、Oracle Databese、SQL Server、SAP HANAのデータベース上で稼働する社内システムの運用管理を担っています。

Oracle データベースは、優れているデータベースシステムで、現在もデータベース管理、アプリケーション開発、安定稼働などに特に不満があるわけではありません。ただし、下記の理由で自社が開発した、Oracle データベースを使用している業務システムをMicrosoft SQL Server に移行することになりました。

  1. ほかのデータベースと比較して、オラクルのライセンス料が高いので、社内の仮想環境のサーバーに容易に導入することができません。

  2. Oracle データベースを利用している社内システムが近年のシステムリプレースで大分少なくなりました。

現行のシステムを Oracle から SQL Server へ移行することで、移行作業の工数が発生するが、運用面とコスト面で下記の効果が期待できます。

  1. データベースのライセンス費用を大幅に削減できます。

  2. 仮想サーバーに移行することで、ハードウェアのリソースを柔軟に増強できます。

  3. データベース運用人材の育成費用の削減ができます。

一般的に異なるデータベース間の移行はデータベースオブジェクト定義、アプリケーションを書き替える必要があります。また、データを移行するプログラムを用意しなければなりません。

このような移行作業はかなりの工数がかかります。そして、新旧両方のデータベースのスキールを持つ技術者が必要で、そのような人材は容易に確保できません。

そこでデータベース移行作業を効率に行うために、プロジェクト準備の段階で、Oracle から SQL Server への移行ツールの活用を検討していました。

最終的に今回は Microsoft SQL Server Migration Assistant (SSMA)という移行ツールを採用しました。

SSMAとは

Microsoft SQL Server Migration Assistant (SSMA) は、 SQL Server 以外のデータベースからSQL Server への移行作業を自動化するために Microsoft が無償で提供しているGUIベースのマイグレーションツールです。 移行元としては、次のデータソースに対応しています。

.Microsoft Access

.DB2

.MySQL

.Oracle

.SAP ASE

※対応データソースごとにソフトを提供しています。

そのうち、SSMA for Oracleは、OracleデータベースからSQL Serverへの移行作業の効率化および自動化をサポートします。

GUIベースでデータベース移行の評価、スキーマ変換、データ移行、データベースオブジェクト変換、 移行後の評価などの効率化と自動化が可能になります。2020/08時点の最新バージョンのSSMA 8.12 for Oracleは、移行元としてOracle 9.0以降のデータベースをサポートします。

SSMA for Oracle は下記のターゲットバージョンに移行できます。

.SQL Server 2012~2016

.SQL データベース

.SQL Data Warehouse

SSMA for Oracleのインストール

Microsoft ダウンロード センターSQL Server Migration Assistantから最新のバージョンをダウンロードします。

www.microsoft.com

  • 2020年8月19日現在Microsoft SQL Server Migration Assistant 8.12 for Oracleが最新です。

  • 当部署が使用時の最新バージョンはMicrosoft SQL Server Migration Assistant 8.9 for Oracleでした。

Microsoftのドキュユメント「SSMA for Oracle クライアントのインストール」に従ってインストールします。

docs.microsoft.com

  • 前提条件としてインストール先の端末に「Oracle Instant Client」と「SQL Server Management Studio」をインストールする必要があります。

  • 既定のインストール場所は C:\Program Files\Microsoft SQL Server Migration Assistant for Oracle です。

  • インストール完了後、デスクトップに「Microsoft SQL Server Migration Assistant for Oracle」アイコンが作られます。

  • このアイコンをダブルクリックすると「Microsoft SQL Server Migration Assistant for Oracle」が起動されます。

SSMA for Oracleの使い方

今回は実業務で取り出せるソースがあったので、それを使って移行ツールの使い方を紹介したいと思います。

移行元のORACLEオブジェクトが下記のとおりです。

<移行操作の流れ>

  1. 移行プロジェクトの作成(New Project...)

  2. 移行元データベースに接続(Reconnect to Oracle)

  3. 移行対象オブジェクトの評価(Create Report)

  4. 移行先データベースに接続(Reconnect to SQL Server)

  5. スキーマ変換(Convert Schema)

  6. データベース同期(Synchronize with Database)

  7. データ移行(Migrate Data)

上記の流れは、Microsoft社のチュートリアルを参考しました。

docs.microsoft.com

1.移行プロジェクトの作成(New Project...)

デスクトップの「Microsoft SQL Server Migration Assistant for Oracle」アイコンをダブルクリックします。

「SQL Server Migration Assistant for Oracle」画面が表示されます。

「File」-「New Project」をクリックします。

プロジェクト名、保管先、移行先の DBMS 製品を選択し、「OK」ボタンを押します。

2. 移行元データベースに接続(Reconnect to Oracle)

SSMAはすべての Oracle スキーマに関するメタデータを取得し、[Oracle Metadata Explorer] ペインに表示します。そのため、 移行元のoracle データベースに接続する必要があります。

「Connect to Oracle」ボタンを押します。「Connect to Oracle」画面で接続情報を入力し、「Connect」ボタンを押します。

Oracle DBの移行対象のスキーマを選択することができます。今回は、スキーマMASTERとSDSを選択します。このときSYSとSYSTEMは除外することができません。

「OK」ボタンを押します。

少し時間がかかりますが、「Oracle Metadata Explorer」ペインに選択されたスキーマのオブジェクトが表示されます。

3. 移行対象オブジェクトの評価

SSMAのオブジェクトの評価は、移行元のオブジェクトに対してソース分析を行い、互換性がない箇所や、代替方法や、推奨情報などを教えてくれます。

まず、Oracle Metadata Explorerから移行元のオブジェクトを選択します。

MASTERからテーブルITG_TOKMSTを選択します。

SDSからすべてのオブジェクトを移行先に持っていきたいので全部のオブジェクトを選択します。

Oracle Metadata Explorerから「Schemas」をクリックしてから、「Create Report」をクリックします。

プロジェクトフォルダーの下に評価の結果レポートが作成されます。ブラウザで閲覧できます。

下記の評価結果のサンプルは、このツールで移行できるスキーマの全体の状況が表示されます。

下記の画像は、プロシージャP_SDS_0010の評価結果です。

ORACLE関数SUBSTRBが変換できないことを教えてくれます。

これらの結果レポートを使えば、SSMAで自動変更できないソースの箇所を特定できるため、移行工数の見積を作成する時に参考になります。また、エラー情報から足りないオブジェクトを発見することができます。

4. 移行先データベースに接続

SSMAはソース変換のために、移行先のデータベースのメタデータが必要なので移行先のSQL Serverに接続します。

SSMAは移行先に接続するとSQL Serverインスタンス内のすべてのデータベースに関するメタデータを取得し、「SQL Server Metadata Explorer」ペインにすべてのオブジェクトを表示します。

「Connect to SQL Server」ボタンをクリックします。「Connect to SQL Server」画面で移行先DBに接続するための情報を入力します。

正常に移行先のデータベースに接続できたら、「SQL Server Metadata Explorer」ペインで移行先のデータベースにある既存のオブジェクトが表示されます。

5. スキーマ変換

スキーマ変換は、設定したスキーマのマッピング、データタイプのマッピングの通りに、Oracle データベースオブジェクトを SQL Server データベースオブジェクトに変換します。

スキーマのマッピングを設定

デフォルトでは移行先のスキーマが移行元と同じです。

今回の例は移行元のスキーマMASTERとSDSを移行先のスキーマGMISMSTDB.dboに統合するので、手動で移行先のスキーマを指定します。

スキーマ「MASTER」、「Schema Mapping」タブ、「Modify」ボタンを順にクリックします。

「Choose Target Schema」画面で「 Target Schema」に「GMISMSTDB.dbo」を入力してから、「OK」ボタンをクリックします。

ソーススキーマ「MASTER」のターゲットスキーマが「GMISMSTDB.dbo」になったことを確認します。

同様、ソーススキーマ「SDS」のターゲットスキーマを「GMISMSTDB.dbo」に変更します。

データタイプのマッピングを設定

ターゲットのテーブル列の属性を変更することができます。今回の例では、デフォルトの設定を使用します。

スキーマ変換を実行

スキーマのマッピング、データタイプのマッピングを設定した後、下記のようにスキーマ変換処理を実行します。

移行元のスキーマを選択して、「Convert Schema」ボタンをクリックします。

例では、すべてのスキーマを変換するので、「Schemas」を選択します。

スキーマ変換でSQL Serverに変換されたオブジェクトが「SQL Server Metadata Explorer」ペインに表示され、ローカルのプロジェクトの下に保存されます。

この時点ではまだ、実際の移行先のデータベースに反映されていません。また、SSMAはスキーマ変換で解決できない箇所がエラービューに表示されます。

「Oracle Metadata Explorer」ペインにエラーのオブジェクトが赤マークが付けられます。

「Oracle Metadata Explorer」ペインでエラーのオブジェクトをクリックすると移行元のソースと変換後のソースが表示されます。ここで変換後のソースを修正することができます。

今回の移行では、当部署の担当者がMicrosoft SQL Server Management Studio(SSMS)に慣れていたので、先に下記データベースの同期をしてから、評価レポートを参照しながらSSMSで修正するようにしました。

6. データベース同期

データベース同期は、Oracle スキーマを SQL Server に変換した後、結果として得られたデータベースオブジェクトを移行先 SQL Server に読み込みます。

「SQL Server Metadata Explorer」ペインで対象のオブジェクトを複数選択し、右クリックし、[Synchronize with Database] をクリックします。

下記の画面で「OK」ボタンをクリックします。

これで選択されたオブジェクトが移行先のデータベースに作成されます。

SSMSで移行されたオブジェクトの定義文を確認、修正することができます。

例:テーブルの定義

例:プロシージャの定義

7. データ移行

テーブルの定義を移行先のデータベースに反映された後に、SSMAを使ってテーブルのデータを移行することができます。

「Oracle Metadata Explorer」ペインで、移行するデータを含むテーブルを複数選択し、「Migrate Data」ボタンをクリックします。

移行元の接続情報、認証情報を入力します。

次に移行先のデータベースの接続情報と認証情報を入力します。

移行元、移行先に正常に接続できれば、移行元のテーブルデータが移行先のデータベースに転送されます。

データ移行のレポートが表示されます。

以上、当部署のSSMA for Oracle移行ツールの使い方の紹介でした。

使用感想

当部署があまり高度で複雑なデータベースの機能を使用してないので、分かってないところがきっとあると思います。

その前提で今まで使用した感想をまとめておきます。

メリット

  • SSMA for Oracleツールの導入がデフォルトの設定のままで手順の通りに簡単にインストールできました。

  • SSMA for Oracleは、GUIベースのマイグレーションツールなので、Microsoft 社の開発ツールを使用した経験を持つ人なら直感的に操作できると思います。

  • Oracle のオブジェクトを100%変換できませんが、テーブル、ビュー、プロシージャ、関数のほとんどの部分は Oracle から SQL Server に変換してくれます。手でオブジェクトを書き直す方法より効率がいいです。

  • 移行対象オブジェクトの評価機能があり、事前にツールで変換できないところを教えてくれます。そのレポートを参考に、見積したり、変換できないところを修正することができます。

  • データ移行が簡単にできるので、データ移行のプログラムの作成を省くことができます。

デメリット

  • デフォルトの設定で使用できますが、データのソート順や変換後のデータ型が最適なものにならない可能性があります。それを理解して事前に定義した上で実施しないと後からリカバリに手間がかかります。例えば、デフォルト変換で小数点以下を持たないNUMBER(Oracle)→numeric(SQLServer)になるので、int・tinyint・smallintに変換したい場合は事前にテーブルデータのマッピングを修正する必要があります。また、デフォルト変換でDATE(Oracle)→datetime2(SQL Server)になるが、datetimeに変換したい場合、上記と同様な修正が必要です。

  • 勉強の資料、ドキュメントが少ないです。Microsoft社のマニュアルがあるが、日本語の翻訳文章は、読みにくいです。

docs.microsoft.com

以上となります。