Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
データベースの引越しを Ora2Pg でスマートにやろう
Search
Yuichiro Narita
June 11, 2025
Technology
800
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
データベースの引越しを Ora2Pg でスマートにやろう
社内勉強会で使用した資料です
Yuichiro Narita
June 11, 2025
More Decks by Yuichiro Narita
See All by Yuichiro Narita
セキュリティ対策としての PostgreSQL マイナーバージョンアップ
jri_narita
0
690
本番環境への影響リスクが低い Real Application Testing (SQL Performance Analyzer) の実施方法の検討と実践
jri_narita
0
400
Other Decks in Technology
See All in Technology
「勝手に広まる」人気 AI エージェントを爆速で作ろう!(AWS Summit Japan 2026講演資料)
minorun365
PRO
10
2.6k
飲食店もAIで。レジ締めやハンディシステムをつくってる話 / Using AI for restaurant management
vtryo
0
200
2026 AI Memory Architecture
nagatsu
0
580
AIは、人間らしい仕事の夢を見るか?─ AI時代のtoB/toEプロダクトを再設計する
techtekt
PRO
0
160
AIに障害切り分けを全部やってもらった。 。 。 。
estie
0
260
Amazon Redshift zero-ETL 統合を活用した軽量なマルチプロダクトデータ可視化基盤 / Lightweight Multi-Product Data Visualization with Amazon Redshift Zero-ETL
kaminashi
0
110
データレイクの「見えない問題」を可視化する
sansantech
PRO
1
230
起点・思考・出力で分解する 〜PM業務の自動化設計〜
kazu_kichi_67
2
1.1k
toB プロダクトから見たWAF
tokai235
0
250
FPGAの開発コンペでZephyrを使ってみた
iotengineer22
0
220
When Platform Engineering Meets GenAI
sucitw
0
200
徹底討論!ECS vs EKS!
daitak
3
1.8k
Featured
See All Featured
Amusing Abliteration
ianozsvald
1
210
AI: The stuff that nobody shows you
jnunemaker
PRO
8
740
Bioeconomy Workshop: Dr. Julius Ecuru, Opportunities for a Bioeconomy in West Africa
akademiya2063
PRO
1
160
Navigating Weather and Climate Data
rabernat
0
250
The Spectacular Lies of Maps
axbom
PRO
1
830
jQuery: Nuts, Bolts and Bling
dougneiner
66
8.5k
The Cult of Friendly URLs
andyhume
79
6.9k
Fireside Chat
paigeccino
42
4k
ラッコキーワード サービス紹介資料
rakko
1
3.8M
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
333
23k
Designing Powerful Visuals for Engaging Learning
tmiket
1
430
Documentation Writing (for coders)
carmenintech
77
5.4k
Transcript
Copyright (c) The Japan Research Institute, Limited 1/12 データベースの引越しを Ora2Pgでスマートにやろう
Yuichiro Narita
Copyright (c) The Japan Research Institute, Limited 2/12 アジェンダ ⚫
Ora2Pg 概要 ⚫ 主要機能、特徴的な機能の紹介 ① アセスメント ② DDL変換・作成 ③ データ移行用DML作成 ④ データ検証 ⚫ まとめ 技術統括部 DB-Architチーム データ検証 アセスメント DDL変換・作成 データ移行用DML作成 参照 参照 参照 参照 作成 作成 作成 作成 参照 実行 実行 .html .sql .sql .txt 9テーブル、92カラム、3,231,829件 10インデックス 5プロシージャ TPCCスキーマ Ora2Pg OracleDB PostgreSQL
Copyright (c) The Japan Research Institute, Limited 3/12 Ora2Pg 概要
⚫ Oracle DB / MySQL / SQL Server から PostgreSQL への移行を支援するツール ⚫ 多機能でオープンソース ⚫ PostgreSQLのプロフェッショナルサービスを提供する HexaCluster社 (カナダ) のCTOを務める Gilles Darold氏が開発 ⚫ GitHubで確認できる限り、2016年以前から現在まで開発が続く (最新バージョンは 2025/4 の v25.0) ↓Ora2Pg の開発状況 (GitHub の Insight より) ↓参考:Teraterm の開発状況 ⚫ Perl で実装 (稼働環境には Perl と DBD::Oracle といったモジュールの導入が必要) ⚫ Google と MS Azure は Ora2Pg をバックエンドとしてデータベース移行サービスを構築 ⚫ 様々な企業や団体がデータベース移行の記事などで紹介 技術統括部 DB-Architチーム AWS Ora2pg と AWS DMS を使用して BLOB および CLOB テーブルを Oracle から PostgreSQL に移行する方法 | Amazon Web Services ブログ Microsoft Oracle から Azure Database for PostgreSQL へ: Ora2Pg 移行ガイド - Azure Database for PostgreSQL - Flexible Server | Microsoft Learn Google コンバージョンの発生元を準備する | Database Migration Service | Google Cloud SRA OSS Ora2Pg (Oracle/PostgreSQLマイグレーションツール) NTTテクノクロス このora2pgがすごい!Oracleのストアドプロシージャ2種をPostgreSQLに移行してみた! | NTTテクノクロスブログ SHIFT OracleからPostgreSQLへのデータ移行|SHIFT Group 技術ブログ PostgreSQL エンタープライズ・ コンソーシアム PGECons技術ドキュメントテンプレート Ver.3
Copyright (c) The Japan Research Institute, Limited 4/12 主要機能、特徴的な機能の紹介 -
①アセスメント ⚫ 移行難易度、移行コストのアセスメント機能 ⚫ Oracle DB に接続し、Ora2Pg で自動変換できないオブジェクトの存在をスキャンしレポート作成 (html or text) ⚫ ↓レポートの全体像 (次頁で詳述) 技術統括部 DB-Architチーム
Copyright (c) The Japan Research Institute, Limited 5/12 主要機能、特徴的な機能の紹介 -
①アセスメント 技術統括部 DB-Architチーム 1/2 オブジェクト種別ごとの総数 見込み移行コスト 自動変換できず手動書換えなどが必要な分、値が大きくなる 単位当たり5分 (confファイルから変更可能) 10の索引のうち、PostgreSQLで対応していない (自動変換できない) 索引構成表が 2つ存在するため、その分見込み移行コストが計上されている 言語、型、機能、エラーハンドリングの違いなどから プロシージャの移行は他のオブジェクトと比べて見込み移行コストが大きくなりやすい
Copyright (c) The Japan Research Institute, Limited 6/12 主要機能、特徴的な機能の紹介 -
①アセスメント 技術統括部 DB-Architチーム 2/2 Oracle提供パッケージ (DBMS_RANDOMなど) が含まれている数 コレクション型の定義の数 CONCATの数 ROWIDの数 ほぼ自動変換で対応可能:A 手動書換えなどが必要で見込み対応コストが~5人日:B 〃 5人日~:C ストアドファンクションがあるとレベル5 (シンプルなものであればレベル3)
Copyright (c) The Japan Research Institute, Limited 7/12 主要機能、特徴的な機能の紹介 -
②DDL変換・作成 技術統括部 DB-Architチーム ⚫ Oracle DB に接続し、変換内容をまとめたテキストファイルと PostgreSQL で実行できるDDLが記載されたSQLファイルを作成 ⚫ 実データを踏まえて手動書換えが必要なケースあり (TPCCスキーマでは1カラム、自動変換時に bigint となっていたが numeric に手動書換えが必要となった) columns.txt table.sql INDEXES_table.sql CONSTRAINTS_table.sql
Copyright (c) The Japan Research Institute, Limited 8/12 主要機能、特徴的な機能の紹介 -
③データ移行用DML作成 技術統括部 DB-Architチーム ⚫ Oracle DB に接続し、PostgreSQLで実行できるデータ移行用のSQLファイルを作成 ⚫ INSERTかCOPYを選択可能 INSERT.sql COPY.sql
Copyright (c) The Japan Research Institute, Limited 9/12 主要機能、特徴的な機能の紹介 -
④データ検証 技術統括部 DB-Architチーム ⚫ Oracle DB, PostgreSQL 両方に接続し、定義観点の検証、テーブル件数観点の検証、実データ観点の検証が可能 定義観点の検証:DDL実行前 DDL実行後 COLUMNS COUNT, INDEXES COUNT 以外の項目 UNIQUE CONSTRAINTS COUNT TRIGGER COUNT PRIMARY KEYS COUNT VIEW COUNT CHECK CONSTRAINTS COUNT MVIEW COUNT NOT NULL CONSTRAINTS COUNT SEQUENCE COUNT COLUMN DEFAULT VALUE COUNT TYPE COUNT FOREIGN KEYS COUNT FDW COUNT PARTITION COUNT FUNCTION COUNT TABLE COUNT SEQUENCE VALUES TABLE TRIGGERS COUNT SEQUENCE VALUES COUNT 不一致 一致
Copyright (c) The Japan Research Institute, Limited 10/12 主要機能、特徴的な機能の紹介 -
④データ検証 技術統括部 DB-Architチーム ⚫ Oracle DB, PostgreSQL 両方に接続し、定義観点の検証、テーブル件数観点の検証、実データ観点の検証が可能 テーブル件数観点の検証:DDL実行前 DDL実行後 データ移行後 不一致 一致 そもそも表がない
Copyright (c) The Japan Research Institute, Limited 11/12 主要機能、特徴的な機能の紹介 -
④データ検証 技術統括部 DB-Architチーム ⚫ Oracle DB, PostgreSQL 両方に接続し、定義観点の検証、テーブル件数観点の検証、実データ観点の検証が可能 ⚫ デフォルトでは、両DBからテーブルごとに10,000件抽出し、差分が10件あると検証を停止する (confファイルから変更可能) 実データ観点の検証:データ移行前 ----------------------------------------------------------------- Data validation for table ITEM: 10 FAIL ----------------------------------------------------------------- ORACLEDB:ITEM:1:[1|8845|YEf9V6oRDxlLEeW9buiQtmd|48.72|KUBCwq4oS2coriginalivEWj0wDJf] POSTGRES:ITEM:1:[|||] ORACLEDB:ITEM:2:[2|6957|45FC1IfVGpqgK5gfInkQ|10.38|W8WxWdOHIaFZ2SXEKJmdg61Wipy6cZPyJFkW] POSTGRES:ITEM:2:[|||] ORACLEDB:ITEM:3:[3|638|adKlHN8tiTz4Jj|2.74|gjtIV8ntROEOFkCnwnCPyugzthp6Y3OoriginalH7g] POSTGRES:ITEM:3:[|||] ORACLEDB:ITEM:4:[4|2035|1GCOZ1erLzeWS0zLggP|1.59|jiDbFoewzyAKMXnuFYo5EHvrrg5nVEAH7KEgxQO] POSTGRES:ITEM:4:[|||] ORACLEDB:ITEM:5:[5|6642|bxMqQrXAc3ecRD31F4et3q|45.5|lAg4l4NnE3QVxyVr7JXBzOoUZQkDh9ydK57MXkCNoFs] POSTGRES:ITEM:5:[|||] ORACLEDB:ITEM:6:[6|948|daTVDtsNKYUiipK4hxTOS|89.82|y0oOFTtKlNgqVaksSw0m1Zl4UpAfaFNXBvQ51l8Dn2C2Bm] POSTGRES:ITEM:6:[|||] ORACLEDB:ITEM:7:[7|2368|S7SU7VcBCFTEYQGvwhH7|6.42|vN44p76fr9I7FuJa0ycnmDVDu7voIJHHGzVnrKFRu5KavQq] POSTGRES:ITEM:7:[|||] ORACLEDB:ITEM:8:[8|2845|mgrgBeWlyig7vIvqb|54.01|fxOgz1B8NO4V5hDE28ek0Qf34enZZjVXIvNM0zpFfC] POSTGRES:ITEM:8:[|||] ORACLEDB:ITEM:9:[9|9705|aso1L6kkYElgtdOVjsMry|30.07|lDDYBoWKlLgZKtQAE5ampg3RM3pkkaEUsdXhsl7OxavbHGuREy] POSTGRES:ITEM:9:[|||] ORACLEDB:ITEM:10:[10|2338|wKJ10VjPpap2yf|74.66|GnmrU6v7fMXdndRvWPd6SAZZ4eteSf2FmiD] POSTGRES:ITEM:10:[|||] データ移行後 Data validation for table ITEM: OK CREATE TABLE item ( i_id integer, i_im_id bigint, i_name varchar(24), i_price decimal(5,2), i_data varchar(50) ) ; 参考:ITEM表の定義 不一致
Copyright (c) The Japan Research Institute, Limited 12/12 まとめ 技術統括部
DB-Architチーム ⚫ 導入、基本機能の試行は一日あれば十分可能 (学習コストは高くない) ⚫ 機能の制御が容易 (confファイルをviなどで編集) ⚫ スクラッチで移行ツールを設計・開発するより効率的で多機能 (制御可能項目は100以上) ⚫ 開発環境のオブジェクト定義が本番環境と同一であれば、アセスメントやDDL変換・作成は開発環境で実施可能 ⚫ Qiita や企業のテックブログなどで取り上げられており、情報が入手しやすい ⚫ 公式ドキュメントは英語のみ ⚫ すべて自動変換できるとは限らない為、アセスメントレポートを確認して手動変換にかかる工数を確保しておく <データシート:移行対象の規模感はP.2を参照> 処理 処理時間 (秒) アセスメントレポート作成 (P.4) 33 DDL変換・作成 (P.7) 127 データ移行用DML作成・INSERT (P.8) 132 データ移行用DML作成・COPY (P.8) 128 データ検証・定義観点 (P.9) 74 データ検証・テーブル件数観点 不一致 (P.10) 1 データ検証・テーブル件数観点 一致 (P.10) 1 データ検証・実データ観点 不一致 (P.11) 8 データ検証・実データ観点 一致 (P.11) 11