商用DBからPostgreSQLへの移行検証結果～安心してPostgreSQLをエンタープライズ領域で利用するために～2014年12月12日
PostgreSQL エンタープライズ・コンソーシアム
技術部会
http://www.pgecons.org/

自己紹介






名前
 小山田 政紀（おやまた まさのり）
所属企業
 株式会社富士通ソーシアルサイエンスラボラトリ（略称：富士通SSL）
 富士通SSLはWG2に参画 本年度のWG2主査企業（WG2に参画し、3年目）

経歴
2010/4 入社
 2010/7～10

2010/11～

社内システムの開発等
OSS調査・検証（Eucalyptus、KVM等）
OSSミドルウェアサポート（PostgreSQL担当）

得意分野
PostgreSQL OSSの検証作業
© PostgreSQL Enterprise Consortium

2

目次
1.
2.
3.

4.
5.

はじめに（本日お伝えしたいこと）
PGEConsについて技術部会の活動内容
PostgreSQL技術紹介
さいごに© PostgreSQL Enterprise Consortium31. はじめに（本日お伝えしたいこと)① 企業の基幹業務へのPostgreSQLの導入が加速している② ミッションクリティカル性の高い領域へのPostgreSQLの普及促進、課題解決に奮闘している企業連携の団体（PGECons）があること③ PGEConsの活動内容と活動成果のご紹介© PostgreSQL Enterprise Consortium

4

PostgreSQLのエンタープライズにおける活用【PGEConsで紹介してきた活用事例】
 住友電気工業様 2005年より社内標準DBをPostgreSQLに

 ヤマハモーターソリューション様 世界各地の拠点の基幹業務システムに採用

 株式会社キャム様 クラウド・SaaS型 統合基幹業務システム「CAM MACS」

 株式会社スポットライト様 スマートフォンを使った共通来店ポイントサービス「スマポ」© PostgreSQL Enterprise Consortium

5

PostgreSQLのエンタープライズにおける活用【その他の導入事例】
英気象庁
 年間サポート費用と保守費用の負担が大きいため、商用DBMSへの依存度を低下させることを狙って、PostgreSQLを活用

ITメディア様の記事より
http://techtarget.itmedia.co.jp/tt/news/1407/24/news01.html

仏社会保障システム
 メインフレームからの移行
Let’s postgres の記事より
http://lets.postgresql.jp/documents/case/Bull_Case_in_France/

エンタープライズ領域へのPostgreSQLの普及が進んでいる© PostgreSQL Enterprise Consortium

6

2．PGECons （PostgreSQL Enterprise Consortium）
について© PostgreSQL Enterprise Consortium

7

2. PGECons について
 PGEConsの発足と目的
 2012年4月11日発足
 ミッションクリティカル性の高いエンタープライズ領域へのPostgreSQLの普及を推進するため、各種ツールや
PostgreSQL本体に関する利用技術情報の収集と提供および、その整備などの活動を企業ベースで展開する
活動項目

概要

情報発信

会員の導入実績を基に、PostgreSQLおよび周辺ツールに関する情報を集約し、情報発信サイトやセミナ等を通じて提供する

共同検証

エンタープライズ領域への適用に向けて必要となる情報を、実証を通じて充実を図る

開発コミュニティへのフィードバック

よりミッションクリティカル性の高い領域への適用に向けた技術的な課題を集約し、開発コミュニティに要望を発信する

開発プロジェクト支援

会員間での機能拡張に関する連携開発や、必要な周辺ツールの開発
プロジェクト支援を進める© PostgreSQL Enterprise Consortium

8平成26年度 体制・会員構成
 会員は法人およびそれに準ずる団体で構成
平成26年度体制
理事長
運営委員長
運営副委員長
技術部会長
広報・発信部会長：日本電信電話株式会社：日本電気株式会社：株式会社 日立製作所：富士通株式会社：日本ヒューレットパッカード
株式会社
広報・発信副部会長 ：株式会社アシスト

総会
監事

理事会
事務局
運営委員会
技術部会

WG

種別
正会員

広報・発信部会

WG

事務局長：SRA OSS, Inc. 日本支社

監事

：税理士法人ジャストスタッフ

WG

概要

理事

理事会に参加、理事長および運営委員長は理事のうちから就任する

運営委員

運営委員会に参加、部会長およびWG長は運営委員から就任する

総会議決権

あり

ワーキンググループ（WG）に参加し、活動に貢献

一般会員

メーリングリストやWebなどから、活動情報を取得することが可能© PostgreSQL Enterprise Consortium無し
9平成26年度 参加会員一覧（１/２）（2014年12月12日 現在）

 47社（正会員 17社、一般会員30社）が活動
参加法人名 （順不同）

正会員
（17社）

運
営
委
員

（株）アシスト

日本ヒューレット・パッカード（株）

SRA OSS, Inc. 日本支社（株）日立製作所

NECソリューションイノベータ（株）（株）日立ソリューションズ

日本電気（株）

富士通（株）

日本電信電話（株）（株）富士通ソーシアルサイエンスラボラトリ

TIS（株）

特定非営利活動法人 LPI-Japan

サイオステクノロジー（株）

フューチャーアーキテクト（株）

NTTソフトウェア（株）

ZEKKO（株）

大日本印刷（株）© PostgreSQL Enterprise Consortium

10平成26年度 参加会員一覧（２/２）（2014年12月12日 現在）
参加法人名 （順不同）（株）アイ・ティ・プロデュース（株）キャム日本アイ・ビー・エム（株）

岩通ソフトシステム（株）

キーウェアソリューションズ（株）（株）フィックスターズ（株）エクサジャパンシステム（株）（株）マインド

SFKメディカル（株）

住友電気工業（株）

ミューテック（株）（株）エニブラ住友電工情報システム（株）（株）メトロシステムズ（株）seiwa

ヤマハモーターソリューション（株）

エンタープライズDB（株）（株）中電シーティーアイ

ローリーコンサルティング（株）（株）オンザマーク（株）デジタル・ヒュージ・テク
ノロジー（株）アイ・アイ・エム

関電システムソリューション
ズ（株）（株）ニイズ（株）インフォメーションクリ
エーティブ

クオリカ（株）東芝ソリューション（株）（株）ギークフィード

一般会員 （株）エム・オー・エム・テクノ（30社） ロジー

© PostgreSQL Enterprise Consortium11

WGの活動風景
 検討会

 実機検証© PostgreSQL Enterprise Consortium

12

３．技術部会の活動内容© PostgreSQL Enterprise Consortium

13

過去セミナーのアンケートよりテーマを選定
PGEConsへの期待「性能や移行、高可用性、設計・運用に関する
情報発信」

PostgreSQL採用の課題「個々のコメントから具体的テーマを選定」© PostgreSQL Enterprise Consortium14技術部会の活動内容と方針
 技術部会 性能WG （WG1）： 性能向上に向けた機能の活用指針を作成
 性能向上を狙ったハードウェア活用、パーティショニングを観点に測定
 バージョンアップによる差を定点観測
 実測結果と共に、性能ボトルネックを解決するノウハウをご紹介 移行WG （WG2）：DB移行ガイドの作成
 DB移行時の各プロセスのガイドの詳細化や広範囲化を中心に活動
 PostgreSQL活用の課題である、移行費用見積のベースとなる成果物を作成
 設計運用WG（WG3）：設計や運用面の技術情報を整備
 可用性をテーマにエンタープライズ領域に求められる技術情報の整備・検証の実施 PostgreSQLの安定運用に必要な技術ノウハウをご紹介© PostgreSQL Enterprise Consortium15WG1（性能ＷＧ）の活動テーマ
大規模DBを見据えたPostgreSQLの性能検証
 大規模DBの特徴

使用ユーザー数が多い 対応方法 主な検証内容

スケールアップ 多コアCPU検証 ※1
 多同時接続検証 ※1
 WAL書き込み改善 ※2

スケールアウト コネクションプール
（pgpool-II） クラスタDB（PostgresXC,Postgres-XL※2）

スキーマ・クエリの最適化

 パーティショニングの有効ケース
 多パーティションでのオー
バヘッド

ストレージ高速化

 SSDを有効活用するデータ配置

データ量が多い
高性能が求められる※1 「定点観測」と呼び毎年実施※2 2014年度に検証予定

PostgreSQLの性能向上に向けた機能の活用指針を作成© PostgreSQL Enterprise Consortium

16

WG1 活動内容

ダウンロード可能

2013年度活動成果 ～多数のデータと詳細な解説の報告書（67p）を作成～
 定点観測 Postgres-XC検証

CPUコア数1～80に対して、良好なスケール性を確認。

スケールアウトによる性能向上を確認。特に参照系におけるス
ケールが顕著。

 パーティショニング検証

 SSD検証

約180パーティションの表の検索性能が高速である
ことを確認。データロード
も動的関数の使用により効率化可能。

更新系処理の高速化に非常に有効であることを確認。全データをSSDに配置すると特に顕著

大規模DBを見据えた性能評価結果を公開© PostgreSQL Enterprise Consortium17WG2（移行ＷＧ）の活動テーマ・活動内容

WG2の活動内容は、後程詳細に説明します。

© PostgreSQL Enterprise Consortium18WG3（設計・運用WG） の活動テーマ
可用性
 PostgreSQLの代表的なシステム構成（シングル・HA・レプリケーション）の特徴・適用領域の整理と検証
 災害対策を想定したシステム構成の拡張と検証（※1）


バックアップ バックアップ手法の整理と運用例、および検証

監視 死活・性能監視に必要な情報と分析手法の整理、対処方法の検証

セキュリティ・監査(※1)
 利用できる機能の整理と実用レベルのバランス調査と検証※1 2014年度に検証予定

PostgreSQL運用に必要な技術ノウハウ提供を目指す© PostgreSQL Enterprise Consortium

19

WG3 活動内容

ダウンロード可能

 企業システムに求められる「非機能要求」とDBMSに求められる要求（要件）を整理
 DB要件を実現するPostgreSQLの代表的なシステム構成の整理と分類
 バックアップ／リカバリ、監視に求められる要件の整理
 運用技術検証
・基礎検証、高負荷下での可用性検証
・バックアップ／リカバリ検証
・監視ケーススタディ

商用データベースにも引けを取らないことを確認！
© PostgreSQL Enterprise Consortium

20

4. PostgreSQL技術紹介
WG2（移行WG）成果物のご紹介© PostgreSQL Enterprise Consortium

21

商用DBからPostgreSQLに移行するメリット
ベンダ・ロックインの回避
 運用コストの削減
 PostgreSQLの適用領域が広い


多
様
な
技
術
へ
の
対
応

・新しいデータ型（NoSQL分野）への対応（JSON、XML等）
・他DBMSとのデータ連携(FDW)
・全文検索、GIS機能

・インストールが簡単
・設定が簡単・日本語マニュアル、書籍が充実
・クラウド上でも利用可能
・Oracle技術者が覚えやすい
スモールビジネス

・多コアCPU対応（80コアまで性能改善）
・バックアップ、レプリケーション
機能も充実
・プラットフォームに依存しない
エンタープライズ

適用領域

適応領域でデータベースを使い分けず、データベースを
PostgreSQLに統一することが可能© PostgreSQL Enterprise Consortium

22

4.1. 2012/2013年度の成果物のご紹介© PostgreSQL Enterprise Consortium23WG2（移行WG）活動内容
活動テーマ：異種DBMSからPostgreSQLへの移行
課題認識• 異種DBMSシステムをPostgreSQLへ移行するプロセスが確立していないことが、普及を妨げる大きな障壁と認識• 移行作業をどのように進めればよいかがわからない。
• 初期段階で移行に必要なトータルコストを算出できない。
• 過去の経験則や点在するノウハウに依存しているのが現状

活動目標•異種DBMSからPostgreSQLへの移行を検討する際のガイドラインを提示する。（難易度判断、留意すべき事項、移行手順）

成果物•「異種DBMSからPostgreSQLへの移行ガイド」を作成© PostgreSQL Enterprise Consortium

24

「異種DBMSからPostgreSQLへの移行ガイド」の文章構成


移行作業の全体像を解説DB移行フレームワーク編 (21ページ)

DB移行フレームワーク

移行作業に含まれる作業内容、手順の
調査













DBMS移行時の作業内容

システム構成調査編 (29ページ)
異種DB間連携調査編 (18ページ)
スキーマ移行調査編 (25ページ+別表)
データ移行・文字コード変換編 (49ページ)
ストアドプロシージャ移行調査編(34ページ)
アプリケーション移行調査編 (10ページ)
SQL移行調査編 (18ページ+別表)
組み込み関数移行調査編 (15ページ+
別表)チューニング編 (30ページ+別表)
バージョンアップ編 (39ページ+別表7)

移行作業を試行する検証

アセスメントPostgreSQLの
構成検討

移行判定

システム構成移行

中断

異種DB連携検討
異なるDBMS間のデータ連携

スキーマ移行

定義移行
データ移行

データ移行

監視やバックアップはWG3（バージョンアップのみ実施）

SQL、ストアードプロシージャ、組み込み関数移行

アプリケーション移行

運用移行
性能改善

データ移行調査および実践編 (60ページ+
別表3)
アプリケーション移行実践編 (25ページ+
別表)

試験
未実施のため、文書は今後公開

チューニング
システム切り替え

データ移行© PostgreSQL Enterprise Consortium

25

「異種DBMSからPostgreSQLへの移行ガイド」の各文章

ダウンロード可能項番

作成文書（作成年度）

記載概要

1

DB移行フレームワーク編（2012年）

移行作業全体の解説

2

システム構成調査編（2012年）

DBMSの一般的なシステム構成とPostgreSQLの構成

3

異種DB間連携調査編（2012年）

異種DBMSとPostgreSQLのデータ連携方法

4

スキーマ移行調査編（2012年）

異種DBMSとPostgreSQLのスキーマの違いと書き換え方針

5

SQL移行調査編（2012年）

異種DBMSとPostgreSQLのSQL互換性調査結果と書き換え方針

6

ストアドプロシージャ移行調査編（2012、2013年）

異種DBMSのストアドプロシージャをPostgreSQLに移行する際の書
き換え方針

7

組み込み関数移行調査編（2012年）

Oracle, PostgreSQLの組み込み関数互換性調査結果と書き換え方針

8

チューニング（2013年）

PostgreSQLのチューニング手法を記載

9

バージョンアップ編（2013年）

PostgreSQLのバージョンアップ手法と検証結果

10

データ移行調査および実践編（2012年）
データ移行・文字コード変換編（2013年）※1

異種DBMSからPostgreSQLへのデータ移行時の注意点と実施結果

11

アプリケーション移行調査および実践編（2012年）APIやトランザクションの差異と対処方法。および異種DBMSから
PostgreSQLに移行した際のアプリケーションの移行結果



赤字部分を本日紹介※1 「データ移行調査および実践編」としてまとめて紹介© PostgreSQL Enterprise Consortium

26

スキーマ移行調査編 （1/2）

ダウンロード可能 異種DBMSとPostgreSQLのスキーマの違いは？
 Oracle, PostgreSQLのDDL互換性を調査
 各種DDLの相違点をもとにした移行方針を解説
 組み込みデータ型対応表 （一部抜粋）© PostgreSQL Enterprise Consortium

27

スキーマ移行調査編 （2/2）
Ora2Pg ※1を使い、Oracleのスキーマを移行する際に、手作業で修正必要な部分を解説

分類

Oracle型

PostgreSQL対応
型

データ型

データ型

文字
(固定長)

NCHAR(n)真数

NUMBER(n,m) numeric(n,m)

char(n)decimal(n,m)

単位
n:文字数

Ora2Pgによる変換例（Oracle→変換後）
NCHAR(10)→char※2 charはchar(1)と同等

NUMBER(5) → numeric(5)n:桁数
m:小数点以下の桁数 NUMBER(10)→ numeric(10)n:桁数
m:小数点以下の桁数

integerbigint日時

ダウンロード可能

TIMESTAMP

timestamp [ (p) p：ミリ秒小数点以下の TIMESTAMP(6)→ timestamp] [ without time 桁数
TIMESTAMP(6) WITH TIME
zone ]
ZONE→ timestamp

TIMESTAMPWITH
TIMEZONEtimestamp [ (p) p：ミリ小秒小数点以] with time zone 下の桁数

移行時の修正方法
Oracleを確認して、文字数を指定する。
例:char→char(10)に書き換える
精度とスケールに応じてPostgreSQLのデー
タ型を指定する。
※3 numeric型は、非常に大きな桁数で数値を格納でき、正確な計算を行える。
ただし PostgreSQLのnumeric は算術演算
パフォーマンスが悪いため、大きな桁数が必要ない場合は、integer, bigint型を使用する。
例:numeric(5)→intger
例:numeric(10)→bigint
TIMESTAMP型のミリ秒以下の桁数を指定する。タイムゾーンを持つ場合は、データ型にタ
イムゾーンを指定する。
例: timestamp → timestamp(6)例: timestamp → timestamp(6) with timezone

※1 Oracleのスキーマ、データをPostgreSQLに投入可能な形式に変換するツール© PostgreSQL Enterprise Consortium

28

SQL移行調査編 （1/2）

ダウンロード可能 異種DBMSのSQLはPostgreSQLでも動くのか？
 Oracle, SQL Server, PostgreSQLのSQL互換性を調査
 互換性がないSQLの書き換え方針を調査
 SQL差異表 （一部抜粋）© PostgreSQL Enterprise Consortium

29

SQL移行調査編 （2/2）

ダウンロード可能 代表的な書き換え例
 SELECT結果の行数を制限するSQLはDBMS毎に異なる。
OracleSQL Server

SELECT * FROMSELECT TOP 10 *(SELECT * FROM tbl
FROM tbl
ORDER BY id)
ORDER BY id
WHERE ROWNUM <= 10

PostgreSQLSELECT * FROM tbl
ORDER BY id
LIMIT 10 OFFSET 0※PostgreSQL（8.4以降）は標準SQLの構文に対応
SELECT * FROM tbl OFFSET 0 ROW FETCH FIRST 10 ROWS ONLY MERGE PostgreSQLでは未実装。WITH句を使った書き換え方法を紹介

 CONNECT BY
 Oracle独自の階層問い合わせ 再帰SQL（標準SQL準拠）を使った書き換え方法を紹介© PostgreSQL Enterprise Consortium

30

組み込み関数移行調査編 （1/2）

ダウンロード可能 異種DBMSの関数はPostgreSQLでも動くのか？
 Oracle, PostgreSQLの組み込み関数互換性を調査
 組み込み関数対応表 （一部抜粋）© PostgreSQL Enterprise Consortium

31

組み込み関数移行調査編 （2/2）

ダウンロード可能 代表的な書き換え例
 ADD_MONTHS ： 月を演算する関数
SQL> SELECT ADD_MONTHS(‘2013/3/22’,1) FROM DUAL;
ADD_MONT-------13-04-22

 PostgreSQL に ADD_MONTHS 関数は存在しない。
 算術演算子を使った書き換え
postgres=# SELECT date ‘ 2013-03-22’ + interval ‘1 months’;?column?
--------------------2013-04-22 00:00:00(1 行)

 Oracle互換関数ライブラリ（Orafce）を利用する方法も© PostgreSQL Enterprise Consortium32

バージョンアップ （1/3）

ダウンロード可能

PostgreSQL移行後のバージョンアップはどのように実施すべきか？



 各バージョンアップ手法のメリット・デメリットを整理※ バージョンアップ元：既存PostgreSQL、バージョンアップ先：新規PostgreSQL
No.

手法（使用ツール）

説明

対応バージョン
アップ

1

データベースクラスタの継続利用

データベースクラスタをそのまま残し、PostgreSQLのバイナリのみ
新規バージョンに置き換える。

マイナー

2

バックアップ・リストア（pg_dump/pg_restore）

既存PostgreSQLからpg_dumpで取得したバックアップを、psqlまたはpg_restoreを用いて新規PostgreSQLにリストアする。

マイナー/メジャー

3

バージョンアップツールの利用（pg_upgrade/コピーモード）

既存データベースクラスタのデータを、新規PostgreSQLのデータ
ベースクラスタにコピーするモード

マイナー/メジャー

4

バージョンアップツールの利用（pg_upgrade/リンクモード）

既存データベースクラスタと新規データベースクラスタをハードリンクで繋ぎ、データを共有するモード

マイナー/メジャー

5

レプリケーション（Slony-I）

異なるメジャーバージョン間でも、PostgreSQLのレプリケーション構成を実現できるSlony-Iを用いて、バージョンアップを行う。

マイナー/メジャー

ベースバックアップとアーカイブロ
グ（pg_receivexlog、
pg_basebackup、pg_upgrade）

以下のように各手法を組み合わせ、移行日に大規模なデータコ
ピーが発生することを回避した手法。（ベースバックアップを利用して、バージョンアップの事前試行も可能）
事前：ベースバックアップ（pg_basebackup）
都度：アーカイブログ転送（pg_receivexlog）
移行日：PITR、バージョンアップ（pg_upgrade）

マイナー/メジャー

6© PostgreSQL Enterprise Consortium33

バージョンアップ （2/3）
※

ダウンロード可能

各バージョンアップ手法の実機検証の結果
No.

手法（使用ツール）

実施バージョ
ンアップ

サービスの
停止

サービス
停止時間

手順の
難易度

異なるサーバ間のバージョンアップ

推奨1

データベースクラスタの継続利
用

マイナー

必要

9秒

易

不可

○

2

バックアップ・リストア（pg_dump/pg_restore）

メジャー

必要

289秒

易

可能

○

3

バージョンアップツールの利用（pg_upgrade/コピーモード）

メジャー

必要

40秒

易

不可

○

4

バージョンアップツールの利用（pg_upgrade/リンクモード）

メジャー

必要

19秒

易

不可

○

5

レプリケーション（Slony-I）

メジャー

必要

48秒（※）

難

可能

△

6

ベースバックアップとアーカイ
ブログ（pg_receivexlog、
pg_basebackup、
pg_upgrade）

メジャー

必要

28秒

並

可能

○

主キーがないテーブルは、 Slony-Iではレプリケーションできない。
本検証では、主キーが無いテーブルには、pg_dump/pg_restoreを利用。
バージョンアップ時のデータを生成には、JdbcRunnerの付属テーブル構造の1つである「Tiny TPC-C」を利用


JdbcRunner : http://hp.vector.co.jp/authors/VA052413/jdbcrunner/© PostgreSQL Enterprise Consortium34

バージョンアップ （3/3）

ダウンロード可能

各バージョンアップ手法のメリット、デメリット

項番

手法（使用ツール）

メリット

デメリット・注意点

1

データベースクラスタの継続利用

・バイナリの追加インストールだけでマイナーバージョ
ンアップできる。
・新規PostgreSQLのための領域を確保しなくて良い。

・メジャーバージョンアップでは利用できない。
・PostgreSQLの停止を伴う

2

バックアップ・リストア（pg_dump/pg_restore）

一般的な（枯れた）手法であるため、参考資料が豊富であり、難易度も高くない。

・バックアップ・リストア中にデータ差分が発生した場合に再度バックアップとリストアを実行する必要がある。
・PostgreSQLの停止を伴う。（バックアップ＋リストア時間）
・データ量が増えると、実行時間も長くなる。

3

バージョンアップツールの利用（pg_upgrade/コピーモード）

・「バックアップ・リストア（pg_dump/pg_restore）」と比較すると、高速にバージョンアップが可能。
・PostgreSQLの停止を伴う。（バージョンアップ時間）
・バージョンアップ時の変換等、挙動について注意点 ・サーバ間のデータ移行ができないが明記されている。

4

バージョンアップツールの利用（pg_upgrade/リンクモード）「バージョンアップツールの利用（pg_upgrade/コピーモード）」よりも、高速にバージョンアップが可能。

• 基本的に旧バージョンでのデータベースクラスタはできない。
PostgreSQLの停止を伴う。（バージョンアップ時間）
・サーバ間のデータ移行ができない

稼働中のPostgreSQLのデータを移行できる（負荷はかかるため試験は必須）。

・レプリケーションソフトウェアであるため、バージョンアップ向けのドキュメントが整備されているとは言い難い。
・実施手順が他の手法に比べて複雑。
・レプリケーションできないデータが存在する（ラージオブジェクトや主キーがないテーブルのデータ等)

5

レプリケーション（Slony-I）

6・ダウンタイムを削減することが可能。
アーカイブログが蓄積（物理バックアップ時点からの差分）さ
ベースバックアップとアーカイブログ
・試験的にバージョンアップを行うことが行えるため、 れすぎると、その適用が長時間になる可能性がある。
（pg_receivexlog、pg_basebackup、バージョンアップ中のトラブルを未然に防ぐことが
pg_upgrade）
可能。
© PostgreSQL Enterprise Consortium

35データ移行調査および実践編 （1/4）

ダウンロード可能 異種DBMSのデータをPostgreSQLに持ってくるには

どうすればいい？
 異種DBMSからPostgreSQLへデータ移行を行う場合に発生する作業や注意点について調査
 実際にデータ移行を試行し、調査結果の妥当性を検証
Extract

CSVファイルなど

文字コードはどうする？

異種DBMSTransform
使用するツール、
コマンドは？

PostgreSQL
投入可能形式

Load

どのくらい時間がかかる？
© PostgreSQL Enterprise Consortium

PostgreSQL

36

データ移行調査および実践編 （2/4）


ダウンロード可能

郵便番号のデータを利用（約１２万件）
Oracle、SQL Server、DB2からデータを抽出しPostgreSQLに投入
各DBMSのデータをファイル（CSV）に抽出
コード変換のタイミング別検証（データ抽出時／出力ファイル／データ投入時）

ＯｒａｃｌｅSQL*Plus／spool（SQL Developper）

SQL
Serverbcp

ＤＢ２

CLP／EXPORT

文字コード変換（SJIS→UTF-8）

文字コード変換（SJIS→UTF-8）

copy／
pg_bulkload

CSV

PostgreSQL

LoadTransform
nkf／iconv

文字コード変換（SJIS→UTF-8）

Extract© PostgreSQL Enterprise Consortium37データ移行調査および実践編 （3/4）
検証項目

検証結果

データの抽出／投入•••

ファイルの文字コード変換

ダウンロード可能DBMS、ツール、文字コード変換のタイミングに関わらず、データ移行に成功
出力時にデータを””でデータを囲うなど、ツールにより出力形式が異なる結果となった→ 今回は、形式の違いがデータ投入の成否に影響しなかった
データ抽出時の文字コードはDBMSによる差を確認• Oracle（SQL*Plus）、DB2（CLP／EXPORT）はUTF-8出力• SQL Server（bcp）はUTF-16出力

nkfとiconvには大きな変換性能差© PostgreSQL Enterprise Consortium38データ移行調査および実践編 （4/4）

ダウンロード可能 検証結果 文字コード変換によるロード性能への影響
 COPY（WAL出力） COPY（WAL出力抑止）
 pg_bulkload

データロード時の
文字コード変換

データロード時の
文字コード変換無し© PostgreSQL Enterprise Consortium39

アプリケーション移行実践編 （1/5）

ダウンロード可能 実際に異種DBMSからPostgreSQLへアプリケーショ

ン移行を行うと、どういう問題が発生するか？
 異種DBMSで稼動するアプリケーションを

PostgreSQL（9.2.2）上に移行して評価を行った。
 移行対象アプリケーション
 Commander4J バーコードラベルを作成するJavaのOSSアプリケーション
 対応DB：Oracle, SQLServer, MySQL ステップ数：71Ks
 テーブル数：39
 SQL数：3390
 ストアドプロシージャ：なし© PostgreSQL Enterprise Consortium40アプリケーション移行実践編 （2/5）

ダウンロード可能 SQL変更箇所の抽出に db_syntax_diff を使用

 db_syntax_diff
 Oracle DatabaseからPostgreSQLへアプリケーションを移行する際に修正が必要となる箇所を報告するツール
 NTT OSSセンタで開発されたOSS ライセンスは The PostgreSQL License https://github.com/db-syntax-diff より取得可能 アプリケーションのソースコードを指定して実行すると、修正が必要なSQLのパターンとマッチングして報告。
 修正が必要なSQLのパターンはXML形式で定義するため、必要に応じてチェックパターンのカスタマイズが可能© PostgreSQL Enterprise Consortium41

アプリケーション移行実践編 （3/5）

ダウンロード可能 db_syntax_diff の出力例 （一部抜粋）© PostgreSQL Enterprise Consortium42

アプリケーション移行実践編 （4/5）


ダウンロード可能移行実施の手順 db_syntax_diffをJavaソースコードと環境構築用のSQLファイル（スキーマ定義DDL、データ投入DML）に対して実行 db_syntax_diffの実行結果をもとに、SQL文を修正
 PostgreSQL用JDBCドライバの追加
DBMS別分岐処理への PostgreSQL 用処理の追加


DBMS別に分岐している処理にPostgreSQL用JDBCドライバでの分岐と処理を追加

ソースの修正例（赤字が追加箇所）
if (hst.getDatabaseParameters().getjdbcDriver().equals("com.mysql.jdbc.Driver")){jComboBoxjdbcDriver.setSelectedIndex(1);}if (hst.getDatabaseParameters().getjdbcDriver().equals("oracle.jdbc.driver.OracleDriver")){jComboBoxjdbcDriver.setSelectedIndex(2);}[省略]//PG add ->if (hst.getDatabaseParameters().getjdbcDriver().equals("org.postgresql.Driver")){jComboBoxjdbcDriver.setSelectedIndex(5);}//PG add end

 修正後アプリケーションの動作確認
Commander4j の基本機能が正常動作するか？
© PostgreSQL Enterprise Consortium43

アプリケーション移行実践編 （5/5）

ダウンロード可能

 移行実施結果
試験工程が全工程の90%以上を占めた
 ツールでSQL修正箇所を自動検出し、修正作業が短く済んだ。
 修正有無に関わらず、関連するSQLはすべて試験を実施した。

 db_syntax_diff で検出できなかった箇所は試験工程で対応した。
項番

作業項目

所要時間比率#1

AP修正（PostgreSQLへの接続）

2.8%

#2

AP修正（db_syntax_diffに基づく修正）

5.8%

#3

試験およびエラー修正

91.4%

#1
#2
#3

© PostgreSQL Enterprise Consortium

44

4.2. 2014年度の活動内容のご紹介© PostgreSQL Enterprise Consortium45

2013年度終了時の課題と2014年度の活動テーマ
「異種DBMSからPostgreSQLへの移行ガイド」で定義した「試験」が未着手

DB移行フレームワーク
アセスメント移行判定 DB移行後の試験を標準化し、システム構成移行

PostgreSQLへの移行を推進したい

中断

異種DB連携検討
テーブル定義移行認確

定義移行



「異種DBMSからPostgreSQLへの移行ガイド」を利用した移行事例を提示したい

データ移行
アプリケーション移行確認

 不足があれば、フィードバック

データ移行確認アプリケーション移行

運用移行
監視やバックアップはWG3試験（2014年度）

 各文章の有用性を確認

ロール/権限移行移行確認

チューニング

システム切り替え

未着手のテーマ© PostgreSQL Enterprise Consortium

性能確認

データ移行

46

移行結果確認試験概要


現時点で検討している試験は下表の通りです。
№

試験項目

概要

1

テーブル定義移行

DDLの移行結果についての試験を行う。
対象DDLは、主にDB初期化時に使用するDDLとする。
ただし、アプリケーションで任意のテーブル作成等が可能である場合は、考慮する。
また、インデックスやパーティショニング等について、PostgreSQLへ移行時に性能問題の発生が懸念される箇所については抽出した後、対処方法の検討を行う。

2

アプリケーション
移行

アプリケーションは下記を想定している。
SQL、ストアドプロシージャ、ドライバ定義、プールライブラリ定義、ORマッパー（Hibernate）定義※ アプリケーションにレグレッションテストが同梱されている場合は利用を検討する。

3

データ移行

データ移行結果についての試験を行う。
観点としては、件数および、データ内容比較を行う。

4

性能

PostgreSQLへ移行後、性能劣化が無いことを確認する。

5

ロール/権限移行

ロール/権限が適切に移行されているか確認する。
併せて、OracleとPostgreSQLの権限対応表を可能な限り整備する。

※赤字部分を本日紹介© PostgreSQL Enterprise Consortium47データ移行確認項目


下表の試験を検討しています。
項番

1

2

3



カテゴリ

小項番

作業内容

データファイル数（テーブル数）

移行元から出力したCSVファイルと、PostgreSQLから出力したCSVファイル数が同一であることを確認する。

データ件数

移行元に格納されているテーブル毎のデータ件数と、
PostgreSQLに格納されているテーブル毎のデータ件数が同一であることを確認する。

データサイズ

想定値と近似値かを確認する。

データ比較

移行元から出力したCSVファイルと、PostgreSQLから出力したCSVファイルの内容が同一であることを確認する。
CSV出力機能の差異などで差分が発生した場合でも、目視または事前定義した例外項目で問題なしと判断できれば試
験は合格とする。

外字

外字が正しく出力されるか確認する。

データ件数

データサイズ

データ内容

データ移行確認は、可能な限り自動化を検討© PostgreSQL Enterprise Consortium

48

データ移行確認時の問題点


異種DBMSとPostgreSQLから抽出したデータを比較する際の問題点は？
 データ順番(データ抽出時にORDER BYなどを指定するか、出力したCSVファイル

をOSコマンド等でソート）
 日付データの差異（PostgreSQLは、日付データのミリ秒末尾にゼロが補完されな
いため、異種DBMSのデータ末尾のゼロを削除）
 NULLの文字コード差異（NULLの代替文字に置換） 等
抽出

整形
CSVファイル

異種DBMS
比較抽出

CSVファイル

データの変換タイミングは検討課題

整形PostgreSQL© PostgreSQL Enterprise Consortium49

2014年度活動成果予定
 前述した試験項目の詳細をご紹介
 各試験項目の実施手法や詳細な手順

 「異種DBMSからPostgreSQLへの移行ガイド」を利用した移行事例の提示
 移行対象のアプリケーションとして、「infoScoop」を選択
 infoScoopは企業情報ポータル（EIP）として動作するOSS Oracle 11g → PostgreSQL 9.4への移行

 infoScoop移行時に発生した課題と解決方法を提示
 移行ツール（Ora2Pgやdb_syntax_diff等）の利用結果やアプリケー

ションの修正箇所等

PGEConsで一緒に活動しませんか？
© PostgreSQL Enterprise Consortium50

5. さいごに© PostgreSQL Enterprise Consortium51成果物の公開

ダウンロード可能 PGEConsサイトから、無料でダウンロードいただけます http://www.pgecons.org/© PostgreSQL Enterprise Consortium52

2014年度活動スケジュール
全体の統括

運営委員会

「コミュニティへのフィードバック」の
具体化検討

総会

広報部会

•成果発表会

次年度に向けた活動検討

東京：
4月25日
大阪（成果発表会のみ）
5月16日

事例中心
セミナー

東京：
9月18日

総会
•成果発表会

WEB掲載・イベント企画・その他広報活動
WG活動統括

技術部会

平成26年度報告会準備

性能ＷＧ
（ＷＧ１）

WG参加者募集

移行ＷＧ
（ＷＧ２）

WG参加者募集

設計運用ＷＧ（ＷＧ３）

WG参加者募集

活動準備
テーマ検討

性能測定

分析
成果物作成

昨年度から引き続き活動を継続
テーマ
詳細化

４月～６月

活動実施

７月～９月

１０月～１２月© PostgreSQL Enterprise Consortium

１月～３月
53

会員募集
 正会員・一般会員を広く募集いたします WGで一緒に活動を行っていただける団体様⇒ 正会員 PostgreSQLのエンタープライズ領域に興味を持っている団体様 ⇒ 一般会員

お問い合わせ先：
PostgreSQLエンタープライズ・コンソーシアム事務局
メール
Web： jimukyoku@pgecons.org： http://www.pgecons.org/© PostgreSQL Enterprise Consortium54

ご清聴ありがとうございました！

© PostgreSQL Enterprise Consortium55