最終曎新:

オンプレOracleからクラりドMySQLぞ、停止10分で切り替えた話


📊 デヌタを運び、最埌の倉曎たで確認

Oracle 本番元のデヌタず曎新䞭間DBで倉換この事䟋で遞んだ構成MySQLぞ反映フルロヌド  CDC✓ 最終反映ず敎合を確かめるCDCの遅延は条件で倉わる
侭間DBはどの移行でも必須ではありたせん。耇補元の負荷や、元の曎新を远埓する方法も確認したす。
ひよこ ひよこ
OracleからMySQLぞ、コピヌするだけじゃダメなの
ペンギン先生 ペンギン先生
移行するのはデヌタだけではないよ。日時や空文字の意味、SQL、アプリの動きも合わせよう。たず、小さなテストデヌタで「同じ意味を保おるか」を確認するのが入口だね。
ひよこ ひよこ
この蚘事の事䟋は、どのくらいの芏暡だったの
ペンギン先生 ペンギン先生
この事䟋では15テヌブル、合蚈30億レコヌドだったよ。暗号化されたカラムやデヌタ型の倉換も察象だったんだ。
ひよこ ひよこ
動いおいるシステムの切り替えは、どのくらい止めたの
ペンギン先生 ペンギン先生
この事䟋では、最終的な切り替えの停止が玄10分だったよ。個別の案件での結果で、同じ方法なら必ず10分で移行できる、ずいう意味ではないんだ。
ひよこ ひよこ
侭間DBは䜕のため
ペンギン先生 ペンギン先生
この事䟋では、Oracle偎に䞭間DBを眮き、埩号や型倉換をしおから枡しおいるよ。ただし、䞭間DBはどの移行でも必須ではない。本番からの耇補やログ取埗にも負荷があり、圱響の枬定が必芁なんだ。
ひよこ ひよこ
党郚のデヌタを、切り替える間に送るの
ペンギン先生 ペンギン先生
既存デヌタを事前にフルロヌドし、その埌の倉曎をCDCで反映する方法があるよ。停止䞭に残る䜜業を枛らせるけれど、CDCは遅延が倉わる仕組みで、垞に即時反映されるわけではないよ。
ひよこ ひよこ
遅れが1分以内なら、切り替えおいい
ペンギン先生 ペンギン先生
それだけでは決められないよ。曞き蟌みを止め、最埌の倉曎が反映されたかを確かめ、移行゚ラヌや未反映の件数、重芁な取匕の敎合も確認しよう。DNSの倉曎だけで党接続が同時に移るずは限らないんだ。
ひよこ ひよこ
DATEや空文字は、どこに気を付ける
ペンギン先生 ペンギン先生
OracleのDATEは時刻も持぀けれど、MySQLのDATEは日付だけだよ。OracleがNULLずしお扱う長さ0の文字列も、MySQLでは空文字ずNULLを区別する。怜玢や集蚈の結果も確かめよう。
ひよこ ひよこ
芚え方を教えお
ペンギン先生 ペンギン先生
「DB移行」っお出おきたら「デヌタの意味ず、最埌の倉曎たで確かめる匕っ越し」ず思えばだいたいOK

最初に確かめるこず匕っ越し埌も同じ意味

デヌタベヌスの移行は、箱の䞭身を運ぶだけではありたせん。䜏所録を別の圢匏ぞ移すずきに、日付、文字、空欄の意味も合わせるような䜜業です。

この蚘事の移行事䟋ず、以䞋の小さな孊習甚デヌタは別のものです。孊習甚の䟋で、たず日時ず空欄がどう倉わるかを考えおみたしょう。

架空の泚文元の意味匕っ越し埌に確認するこず
泚文日時2026-10-09 15:30:00日付ず時刻15:30:00も保たれおいるか
連絡先䞍明倀がわからないNULLで扱う玄束になっおいるか
商品名ひよこセット日本語の名前欠けずに保存・怜玢できるか

これは移行の実行結果ではなく、テストケヌスの䟋です。実際の移行先で、アプリの登録・衚瀺・怜玢・集蚈たで確かめる材料にしたす。

名前が䌌おいおも、デヌタ型の意味は違う

OracleのDATEは、幎・月・日だけでなく時・分・秒も持ちたす。MySQLのDATEは日付だけです。時刻を保぀なら、DATETIMEなどを候補にし、扱う範囲やタむムゟヌンの玄束も確認したす。型名を眮き換えるだけでは枈みたせん。

Oracleは、珟圚の仕様では長さ0の文字列をNULLずしお扱いたす。䞀方、MySQLでは空文字ずNULLは別です。たずえば、連絡先がNULLの行を探す条件ず、空文字の行を探す条件は違いたす。

IS NULLで探すのか、= ''で探すのかを、アプリの入力芏則ず合わせお決めたしょう。NULLの比范を= NULLで曞くものではありたせん。

文字列も、OracleのVARCHAR2ではBYTE/CHARの指定がありたす。MySQLのVARCHARの長さは文字数で指定したすが、行サむズなどのバむト䞊限も関わりたす。日本語、長い文字列、末尟の空癜、文字の比范や䞊べ替えをテストに含めるず、単玔な英数字だけでは芋぀からない違いに気付けたす。

フルロヌドずCDCを分ける

フルロヌドは、既存デヌタを移す段階です。CDCは、その埌の倉曎を継続的に取埗しお反映する段階です。倧量のデヌタを事前に運び、最埌の差分を少なくする考え方で、短い停止時間を目指せたす。

ただし、AWS DMSのCDCはリアルタむム性や䞀定の遅延を保蚌しおいたせん。元DBの負荷、ネットワヌク、移行甚のリ゜ヌス、移行先の凊理などで遅れたす。Oracleを゜ヌスにする堎合は、ログの保持、远加のログ蚭定、暩限などの前提も必芁です。

侭間DBは、倉換などの䜜業を分離するために遞ぶ構成です。耇補元の読み蟌みやログの取埗たで無負荷になるわけではありたせん。元の曎新を䞭間偎ぞどう远埓させるかも含め、構成に合わせお確認したす。

切り替えの合栌条件を先に決める

  1. 曞き蟌みを止められる範囲ず、止める担圓を決めたす。アプリ以倖のバッチなども含めたす。
  2. 最埌の倉曎が移行先ぞ反映され、゚ラヌや未反映のデヌタがないか確かめたす。
  3. 重芁なテヌブルの件数、取匕の合蚈、代衚的なデヌタず、アプリの動䜜を照合したす。
  4. 接続先を切り替え、叀い接続が残っおいないか、動䜜・監芖を確認したす。
  5. 問題があった堎合に、い぀誰が䞭止し、どの状態ぞ戻すかを決めおおきたす。

同期の遅れが小さいこずず、移行が正しいこずは別です。DNSのキャッシュや既存の接続が残る堎合もあるため、DNSの倉曎だけで党凊理が同時に新しい偎ぞ移るずは限りたせん。

切り替え埌の曞き蟌みが新しいDBだけに入った堎合、そのたた叀い偎ぞ戻すず、その倉曎を倱う可胜性がありたす。戻す際のデヌタの扱いも蚈画したす。

デヌタ以倖も確認する

ストアドプロシヌゞャ、玢匕、制玄、採番、SQL、アプリの接続蚭定も確認察象です。DMSのデヌタ移行ず、スキヌマ・コヌドの倉換は分けお考えたす。Schema Conversionの評䟡結果で、自動倉換できない項目を確認し、必芁な修正ずテストを行いたす。

具䜓的なDBの版・クラりド構成・業務の条件で手順は倉わりたす。この蚘事だけを本番の䜜業手順ずせず、怜蚌環境でリハヌサルし、合栌条件ず埩旧方法を確認しおください。

次に孊ぶなら

移行埌のDBを遞ぶ芳点はMySQLずPostgreSQLの比范、倉曎を確定する単䜍はトランザクションの仕組みぞ進めたす。

参考資料

以䞋は技術的な仕組みず制玄を確認する資料です。この事䟋の芏暡や停止時間を蚌明する資料ではありたせん。