PCDBE 合格対策
🔬 DEEP DIVE

移行 ディープダイブ

DMS / Datastream / 異種DB変換 / ゼロダウンタイム移行 / フォールバックを実例で深掘り。

🎯 1. DMS vs Datastream を完全理解

観点DMSDatastream
目的DB の完全移行(プライマリ切替)CDC イベントの継続流し込み
ターゲットCloud SQL / AlloyDBBigQuery / GCS / Pub/Sub
プライマリ切替あり (Promote)なし (ソースが Primary のまま)
用途リフトアンドシフトハイブリッド・分析統合
対応ソースMySQL / PG / SQL Server / Oracle 等MySQL / PG / Oracle / SQL Server / MongoDB
一発判定: 「DBを移行する」 = DMS。「変更を他システムに流す」 = Datastream。

🚀 2. ゼロダウンタイム移行: 完全フロー

┌─ Phase 0: 準備 ────────────────────────────────────────┐ │ ├ ソース DB バックアップ │ │ ├ ターゲット DB 構築 (HA 構成) │ │ ├ ネットワーク確立 (VPN / Cloud Interconnect) │ │ ├ DMS ジョブ準備 (Continuous モード) │ │ └ アプリ側で「読み取り用」「書き込み用」接続を分離 │ └─────────────────────────────────────────────────────────┘ ↓ ┌─ Phase 1: 初期移行 ────────────────────────────────────┐ │ ├ DMS スナップショット取得 (数時間〜) │ │ ├ CDC 開始 (バイナリログ / WAL から継続適用) │ │ └ レプリ遅延を継続監視 (< 5秒目標) │ └─────────────────────────────────────────────────────────┘ ↓ ┌─ Phase 2: テスト ──────────────────────────────────────┐ │ ├ ステージング環境でカットオーバー リハーサル │ │ ├ 整合性チェック (行数・サンプル・ハッシュ) │ │ └ アプリ E2E テスト (読み取りを新DBへ) │ └─────────────────────────────────────────────────────────┘ ↓ ┌─ Phase 3: カットオーバー (実行) ───────────────────────┐ │ ├ アプリの書き込みを一時停止 (数秒) │ │ ├ 残りのバイナリログが適用完了まで待機 │ │ ├ DMS Promote (新DBを Primary に昇格) │ │ ├ アプリの接続先を新DBへ切替 │ │ └ 書き込み再開 │ └─────────────────────────────────────────────────────────┘ ↓ ┌─ Phase 4: 後処理 ──────────────────────────────────────┐ │ ├ リバースレプリケーション開始 (新→旧、保険) │ │ ├ 監視強化 (CPU/接続/エラー) │ │ ├ 数日〜数週間の様子見 │ │ └ 問題なければ旧DB廃止 │ └─────────────────────────────────────────────────────────┘

📋 3. カットオーバー時のチェックリスト

🌐 4. AWS RDS → Cloud SQL 移行(クロスクラウド)

手順

  1. AWS RDS でバイナリログ有効化(automated backups 有効が前提)
  2. AWS RDS → GCP の VPN または Cloud Interconnect 接続確立
  3. AWS RDS に replica ユーザー 作成
  4. Google Cloud で DMS Continuous ジョブ 作成(ソース = AWS RDS)
  5. 初期スナップショット + CDC レプリ開始
  6. カットオーバー
注意点: AWS DMS(Amazon の DMS)ではなく、Google Cloud の DMS が AWS RDS をソースに対応している。

🛡 5. Oracle → AlloyDB 異種移行

必要なステップ

  1. DMA (Database Migration Assessment) で変換難易度を評価
  2. Ora2Pg / DMS Migration Assistant でスキーマ変換
  3. 手動移行が必要なもの:
    • PL/SQL ストアドプロシージャ → PL/pgSQL に書き換え
    • DBMS_* パッケージ → 代替関数
    • マテリアライズドビュー(更新仕様差注意)
    • カスタムドメイン型
  4. DMS Heterogeneous ジョブで初期 + CDC
  5. カットオーバー後、リバースレプリは Striim で実装

🔄 6. リバースレプリケーション パターン

同種 DB の場合

新 Primary ↓ DMS (逆方向ジョブ) 旧 DB (リードレプリカ状態)

数日〜数週間運用後、問題なければ停止。シンプル。

異種 DB の場合

新 PostgreSQL ↓ Striim or 手動 CDC 旧 Oracle

商用ツール (Striim) や手動構築。複雑度高、テスト必須。

🔍 7. 整合性検証 4 階層

  1. 行数チェックSELECT COUNT(*) を旧新で比較(最も基本)
  2. ハッシュチェックMD5(STRING_AGG(column1::text, '' ORDER BY id)) で全体を厳密比較
  3. サンプリングチェック — ランダム n 行を抽出し詳細比較(NULL/空文字に注意)
  4. アプリ E2E テスト — 主要業務フローを実行(最終確認)

🚫 8. 移行プロジェクトで起きやすい失敗 TOP 5

  1. 事前テスト不足 → 本番でアプリが動かない
  2. ロールバック計画なし → 問題発生時に詰む
  3. DDL/DML 互換性確認漏れ → ストアドプロシージャが動かない
  4. DMS 遅延の監視不足 → カットオーバーで詰む
  5. コミュニケーション不足 → カットオーバー中にアプリ側が動けない

💡 9. シナリオ別の正解パターン

シナリオ正解
MySQL → Cloud SQL MySQL (ニアゼロ)DMS Continuous
PostgreSQL → AlloyDBDMS Continuous
SQL Server → Cloud SQL PostgreSQL (異種)DMS Heterogeneous
Oracle → AlloyDBDMS Heterogeneous / Ora2Pg + DMS
Oracle 移行で固有機能フル活用Bare Metal Solution (リフトアンドシフト)
Oracle の変更を BigQuery 分析Datastream
MySQL の変更を Pub/Sub に流すDatastream
>10TB のオフライン転送Transfer Appliance
S3 → GCSStorage Transfer Service
MongoDB アプリ移行Firestore (MongoDB-compatible) + mongodump/restore
AWS RDS → Cloud SQLGoogle Cloud DMS (AWS RDS をソース対応)