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
830
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
750
本番環境への影響リスクが低い Real Application Testing (SQL Performance Analyzer) の実施方法の検討と実践
jri_narita
0
410
Other Decks in Technology
See All in Technology
「顧客の声を聞かなければ何も始まらない」 ── 顧客の声から生まれた『AI返信補助機能』の開発プロセス / AICon2026_shikata_imai
rakus_dev
1
270
システム監視入門
grimoh
1
150
Playwright × AI Agent でE2Eテストはどう変わるか AI駆動テストの可能性と実用検証の結果
taiga7543
2
810
発表と総括 / Presentations and Summary
ks91
PRO
0
190
41歳でAWSが好きすぎてITエンジニアになったおっさんの話
yama3133
1
740
インシデント事例と パッケージの全量解析に学ぶ ソフトウェアサプライチェーンの守り方 / supply-chain-attack-defense
flatt_security
0
910
AmplifyHostingConstructからSSRフレームワークのためのホスティング設計を考察する/amplify-hosting-construct
fossamagna
1
310
副作用のある Lambda でも Lambda Power Tuning は使えるのか / lambda-power-tuning-side-effects
koukihosaka
2
150
クラウドを使う側から、作る側へ / 大吉祥寺.pm 2026前夜祭
fujiwara3
6
1.2k
Devsumi 2026 Summer 人もAIも使える共通基盤を事業の加速装置にする~デザインシステム運用に学ぶ組織レバレッジ~ 渡辺 凌央
legalontechnologies
PRO
1
290
伝票作成AIエージェントを支える、LLMOpsとインフラの選択肢 / AICon2026_takeda
rakus_dev
0
270
Webアプリ認証の全体像 / The Big Picture of Web App Authentication
kitano_yuichi
1
430
Featured
See All Featured
What the history of the web can teach us about the future of AI
inesmontani
PRO
1
640
Lightning Talk: Beautiful Slides for Beginners
inesmontani
PRO
2
610
The agentic SEO stack - context over prompts
schlessera
0
850
Deep Space Network (abreviated)
tonyrice
0
230
Organizational Design Perspectives: An Ontology of Organizational Design Elements
kimpetersen
PRO
1
770
SEO for Brand Visibility & Recognition
aleyda
0
4.6k
Information Architects: The Missing Link in Design Systems
soysaucechin
0
1k
How to Ace a Technical Interview
jacobian
281
24k
YesSQL, Process and Tooling at Scale
rocio
174
15k
Leveraging Curiosity to Care for An Aging Population
cassininazir
1
420
Breaking role norms: Why Content Design is so much more than writing copy - Taylor Woolridge
uxyall
0
350
My Coaching Mixtape
mlcsv
0
170
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