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
870
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
820
本番環境への影響リスクが低い Real Application Testing (SQL Performance Analyzer) の実施方法の検討と実践
jri_narita
0
420
Other Decks in Technology
See All in Technology
20260804_Q4AzureUpdateBite_FabricDataAgentの精度を高める設計.pdf
matayuuu
1
150
Agent 時代の Kaggle 展望 / kaggle-in-the-agentic-era
upura
1
830
【AG-UI × A2UI × MCP Apps】Generative UIをやさしく解説する
nrinetcom
PRO
1
140
AIペネトレーションテスト・ セキュリティ検証「AgenticSec」紹介資料
laysakura
2
9.2k
カートの信頼性を担保するWireMockを使ったe2eテスト
ykagano
0
530
Master Dataグループ紹介資料
sansan33
PRO
1
4.8k
ボトムアップ文化が強い組織で セキュリティをどう根付かせていくかの現在進行形の話 / Making Security Stick in a Bottom-Up Organization
yamaguchitk333
0
250
修正PRを食べてレビュースキルが賢くなる:Claude Codeによる自己改善サイクル
yuyaumetsu
6
1.6k
ソフトウェアサプライチェーンの構造的リスクとコンテナ環境の保護
kyohmizu
4
610
Digitization部 紹介資料
sansan33
PRO
2
7.7k
コネクションをピン留めさせずに SELECTクエリのタイムアウトを設定した話
codmoninc
0
150
猫付きpingコマンドを自作
uyuki234
0
260
Featured
See All Featured
Testing 201, or: Great Expectations
jmmastey
46
8.2k
Test your architecture with Archunit
thirion
1
2.3k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
162
16k
SEO Brein meetup: CTRL+C is not how to scale international SEO
lindahogenes
1
2.8k
Scaling GitHub
holman
464
140k
KATA
mclloyd
PRO
35
15k
Writing Fast Ruby
sferik
630
63k
The Pragmatic Product Professional
lauravandoore
37
7.4k
The Anti-SEO Checklist Checklist. Pubcon Cyber Week
ryanjones
0
210
ReactJS: Keep Simple. Everything can be a component!
pedronauck
666
130k
Why Your Marketing Sucks and What You Can Do About It - Sophie Logan
marketingsoph
0
390
SEO in 2025: How to Prepare for the Future of Search
ipullrank
3
3.8k
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