PowerGres

第 3 回 データベースの移行 – SQL Server マイグレーション

このページに記載の情報は、2005 年にリリースした PowerGres Plus V2 を対象としています。PowerGres Plus V2 の販売はすでに終了しています。

PowerGres Plus の最新バージョンに関する情報は、製品紹介ページまたは PowerGres 体験記ページを参照してください。

SRA OSS では、Oracle データベースなど他のデータベースから、PostgreSQL や PowerGres へのマイグレーションサービスを提供しています。

詳細は「データベースマイグレーションサービス」のページをご覧ください。

第 3 回 データベースの移行 『やはりあった移行ツール』

はじめに

PowerGres Plus 体験記では、Oracle マイグレーションシリーズをすでにご紹介しました。 Oracle から PowerGres Plus へのデータベースの移行は、ora2pg というツールを利用して簡単に行うことができました。 SQL Server からの移行でも、このようなツールがないか探しましたが、なかなか見つかりませんでした。

しかし、灯台下暗し、PostgreSQL のコミュニティに以下の技術文書が登録されていました。 さらによく見ると、移行のためのスクリプトも添付されていました。

「Conversion of Microsoft SQL/ASP applications to PostgreSQL」

この資料は、以下のURLから参照できます。

https://www.postgresql.org/docs/techdocs.3

https://wiki.postgresql.org/wiki/File:5.pdf

または

https://techdocs.postgresql.org/

そこで、今回から 2 回に渡り、この移行資料を元に、SQL Server からのデータベースの移行と、アプリケーションの移行をご紹介します。 今回はデータベースの移行をご紹介します。

移行のモデルですが、SQL Server 2005 から PowerGres Plus (Windows 版) 2.0 にデータベースを移行します。 また、データは、「第 2 回 Visual Studio .NET を使ったアプリケーション開発」でご紹介したサンプルを使用します。

SQL Server からの移行

図 1: SQL Server からの移行

データベースの移行手順

以下の手順で、SQL Server から PowerGres Plus へデータベースを移行します。

  1. SQL Server からテーブル定義の移出
  2. SQL Server からデータの移出
  3. テーブル定義の修正 (修正は、ツールを使用可能)
  4. PowerGres Plus へのテーブル定義の移入
  5. PowerGres Plus へのデータの移入
ステップ 1: SQL Server からテーブル定義の移出

SQL Server を起動し、テーブル定義を移出します。

スクリプト生成ウィザードの起動

SQL Server では、テーブル定義はスクリプトとして出力されますので、スクリプト生成ウィザードを起動します。

オブジェクトエクスプローラから移行したいデータベースを選択し、右クリックします。 ポップアップメニューが表示されますので、タスク の中の スクリプトの生成 を選び、スクリプト生成ウィザードを起動します。 以降は、画面の説明に従って操作します。

スクリプト生成ウィザード

図 2: スクリプト生成ウィザード

スクリプトオプションの設定

SQL Server 固有キーワードを出力しないようにするため、スクリプトオプションの選択画面では、以下の項目を False に変更します。

スクリプトオプションの選択

図 3: スクリプトオプションの選択

出力オプションの設定

出力オプションの画面では、スクリプトをファイルに保存 および ANSI テキスト を選択します。

出力オプション

図 4: 出力オプション

スクリプトの生成

ウィザードの最後で 完了 ボタンをクリックすると、スクリプトの生成が始まります。 画面には進行状況が表示され、成功 と表示されれば完了です。

スクリプト生成の進行状況

図 5: スクリプト生成の進行状況

出力結果

出力ファイルは、以下のような内容になります。

出力ファイルの内容

図 6: 出力ファイルの内容

ステップ 3 SQL Server からデータの移出

SQL Server のデータを CSV ファイルとして出力します。

インポートおよびエクスポートウィザードの起動

オブジェクトエクスプローラから移行したいデータベースを選択し、右クリックします。 ポップアップメニューが表示されますので、タスク の中の データのエクスポート を選び、インポートおよびエクスポートウィザードを起動します。 以降は、画面の説明に従って操作します。

エクスポートウィザード

図 7: エクスポートウィザード

変換先の選択

変換先の選択画面では、フラット ファイル変換先 を選択します。

変換先の選択

図 8: 変換先の選択

データのエクスポート

ウィザードの最後で 完了 ボタンをクリックすると、データのエクスポートが始まります。 画面には進行状況が表示され、成功 と表示されれば完了です。

データ生成の進行状況

図 9: データ生成の進行状況

出力結果

出力ファイルは、以下のような内容になります。

出力ファイルの内容

図 10: 出力ファイルの内容

ステップ 3: テーブル定義の修正

出力したテーブル定義を見てみると、SQL Server 固有キーワードが数多く含まれており、これらを手作業で修正するのは大変です。

移行資料には、テーブル定義を修正してくれるスクリプトが付録として添付されています。 このスクリプトは、SQL Server 固有キーワードの削除、データ型の変換などを行っています。 今回は、このスクリプトを使ってテーブル定義を修正します。

mssqltopgsql.sh

図 11: mssqltopgsql.sh

スクリプトの準備

移行資料に添付されている以下の 3 つのファイルを用意します。

mssqltopgsql.sh テーブル定義を修正するスクリプト
mssqltopgsqlawk.txt mssqltopgsql.sh が呼び出すファイル
mssqltopgsqlsed.txt mssqltopgsql.sh が呼び出すファイル

サンプル一覧 に、mssqltopgsql.shmssqltopgsqlawk.txtmssqltopgsqlsed.txt というファイルで提供しておりますのでご使用ください。

スクリプトの実行

以下のように入力します。

sh ./mssqltopgsql.sh SQL Server の SQL ファイル > PowerGres Plus の SQL ファイル

mssqltopgsql.sh の実行例

図 12: mssqltopgsql.sh の実行例

スクリプトを実行すると変換後の SQL ファイルが出力されます。

mssqltopgsql.sh で変換後の SQL ファイル

図 13: mssqltopgsql.sh で変換後の SQL ファイル

変換後の SQL ファイルを見ると、「SET QUOTED_IDENTIFIERS」というキーワードが削除されていたり、tinyint が smallint に変換されています。

SQL ファイルの修正

変換後の SQL ファイルには、まだ SQL Server 固有のキーワードが残っています。 これらについては、エディタで修正を行います。 詳しくは、移行資料を参照してください。 また、移行資料から修正のポイントを抜粋し、付録として添付しましたので、こちらも参考にしてください。

ステップ 4: PowerGres Plus へのテーブル定義の移入

psql コマンドを使って、テーブル定義を移入します。以下のように入力します。

psql -f SQL ファイル データベース名

-f は、ファイルに記述した SQL を実行するオプションです。

psql の実行例

図 14: psql の実行例

ステップ 5: PowerGres Plus へのデータの移入

PowerGres Plus には、大規模データベースの運用を支援するための高速コピー機能があります。 高速コピーは、インデックスを含む大規模データベースの構築で特に威力を発揮します。 詳細は、「性能チューニングのポイント 第 3 回 高速 COPY の活用」でご紹介していますので、こちらもご覧ください。

今回は、この高速コピーを使ってデータの移入を行います。

高速コピーの設定

高速コピーを有効にするために、psql コマンドでデータベースに接続した後、以下のコマンドを入力します。

set ENABLE_DIRECT_COPY=on;

データの移入

高速コピーを使ってデータを移入します。 以下のように入力します。

copy テーブル名 from データファイル using delimeters ','

データファイルは CSV 形式なので、delimiters にカンマを指定します。

高速コピーの実行例

図 15: 高速コピーの実行例

以上で、PowerGres Plus へのデータベースの移行は完了です。

最後に

今回は、SQL Server マイグレーションのデータベース移行手順をご紹介しました。 この記事の調査のために、SQL Server から PostgreSQL への移行手順をいろいろと調べてみましたが、なかなかまとまった情報がありませんでした。 そんな中で見つけたのがコミュニティで公開している移行資料でした。 この資料には、移行手順が詳細に記述されており、SQL Server からの移行を検討されている方には、大変参考になると思います。 移行資料は、SQL Server 7.0 を対象とした内容ですが、今回は、SQL Server 2005 で確認した移行手順でご紹介しました。

次回はアプリケーションの移行をご紹介する予定です。

付録

今回ご紹介した移行資料「Conversion of Microsoft SQL/ASP applications to PostgreSQL」から、移行のポイントをご紹介します。

表 2: SQL Server 固有キーワード

dbo.
ON PRIMARY
TEXTIMAGE_ON
CLUSTERED
SET ANSI_NULLS
SET QUOTED_IDENTIFIERS
WITH NOCHECK
GO

データ型

SQL Server と PowerGres Plus では、データ型の定義が異なります。 PowerGres Plus に移行するには、以下のように置き換える必要があります。

表 3: データ型のマッピング
SQL Server PowerGres Plus
bit smallint
datetime timestamptz
smalldatetime timestamptz
nvarchar varchar
ntext text
image bytea
tinyint smallint

SQL の記述

SQL Server と PowerGres Plus では、SQL の記述方法が一部異なります。

表 4: ALTER TABLE を使って列の初期値を指定する際の書式

SQL Server

ALTER TABLE <tablename> ADD DEFAULT <value> FOR <columnname>;

PowerGres Plus

ALTER TABLE <tablename> ALTER <columnname> SET DEFAULT <value>;

表 5: 問い合わせで取得する行数を指定する際の書式

SQL Server

SELECT TOP <n> <statement>;

PowerGres Plus

SELECT <statement> LIMIT <n>;

VIEW の更新

PowerGres Plus は、VIEW を更新することができないので、RULE で置き換えます。 以下は、VIEWを更新するRULEの例です。

CREATE TABLE testtable (testvalue int);
    CREATE VIEW testview as select (testvalue) as presentvalue from testtable;

INSERT の RULE

CREATE RULE rule_testview_insert
AS ON INSERT TO testview
DO INSTEAD
INSERT INTO testtable (testvalue) VALUES (NEW.presentvalue);

UPDATE の RULE

CREATE RULE rule_testview_update
AS ON UPDATE TO testview
DO INSTEAD
UPDATE testtable SET testvalue = NEW.presentvalue where testvalue = OLD.presentvalue;

DELETE の RULE

CREATE RULE rule_testview_delete
AS ON DELETE TO testview
DO INSTEAD
DELETE FROM testtable where testvalue = OLD.presentvalue;

ストアドプロシジャ

PowerGres Plus は、CREATE PROCEDUR Eコマンドをサポートしていません。 SQL Server の CREATE PROCEDURE は、CREATE FUNCTION に置き換えます。

以下にストアドプロシジャを PL/pgSQL で作成するポイントを説明します。

PowerGres Plus へのストアドプロシジャの移行については、「Oracle マイグレーション 第 5 回 ストアドプロシジャの移行l」でもご紹介していますので、そちらもご覧ください。

製品・サービスに関するお問い合わせ
03-5979-2701

お問い合せ受付時間 月 - 金 10:00 - 17:00

メールフォームでのお問い合わせ

ページトップへ