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
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
Yuichiro Narita
June 11, 2025
Technology
840
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
760
本番環境への影響リスクが低い Real Application Testing (SQL Performance Analyzer) の実施方法の検討と実践
jri_narita
0
410
Other Decks in Technology
See All in Technology
エンタープライズデータへ安全につなぐ Production-ready なエージェント設計 ― AI × MCP リファレンスアーキテクチャ ― #AIDevDay
cdataj
1
230
AIがコードを書く時代、人間は何を保証するのか———馬場さんと考える、開発者に求められる新しい責任と価値 - TECH PLAY
netmarkjp
0
320
QAタスクをスキル化したいときに考えること
aomoriringo
0
130
システム監視入門
grimoh
5
740
人依存からAIネイティブの体制へ:バックエンド開発の裏側【SORACOM Discovery 2026】
soracom
PRO
0
130
NetBoxを利用した作業効率化の試み_NetDevNight4
tnoha
0
260
CTOキーノート:AI時代の「つなぐ」を再定義 ― 真のIoTとリアルワールドAI【SORACOM Discovery 2026】
soracom
PRO
0
320
plamo-3-translateの開発
pfn
PRO
0
110
運用を犠牲にせずコストを制御し事業成長を支える B2B SaaS ID管理基盤におけるS3 Tableのログストレージ活用
kaminashi
1
100
A Bag-of-Documents Model for Query Specificity
dtunkelang
0
160
Oracle Base Database Service 技術詳細
oracle4engineer
PRO
15
110k
AIエージェントの知識表現と推論に なぜグラフが使われるのか - 記号的AIの復権とニューラルAIとの統合
yohei1126
1
200
Featured
See All Featured
The Spectacular Lies of Maps
axbom
PRO
1
880
Google's AI Overviews - The New Search
badams
0
1.1k
First, design no harm
axbom
PRO
2
1.2k
A Modern Web Designer's Workflow
chriscoyier
698
190k
Technical Leadership for Architectural Decision Making
baasie
3
450
Designing for humans not robots
tammielis
254
26k
How to build an LLM SEO readiness audit: a practical framework
nmsamuel
1
820
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
141
35k
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
10
1.3k
Imperfection Machines: The Place of Print at Facebook
scottboms
270
14k
Bridging the Design Gap: How Collaborative Modelling removes blockers to flow between stakeholders and teams @FastFlow conf
baasie
0
620
Embracing the Ebb and Flow
colly
88
5.1k
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