第5章 データコラボレーション / 想定学習時間:30〜40分 / 最終確認:2026年8月

5-5. レプリケーションとフェイルオーバー

🎯 この節の学習目標

1. レプリケーションとは:リージョンを越えたコピーの維持

ここまで学んだTime Travel・Fail-safeは「同じ場所での時間軸の保護」でした。しかし、リージョン全体の障害に備えたり、別リージョンのユーザーにデータを届けたりするには、物理的に別の場所にデータのコピーを維持する仕組みが必要です。それがレプリケーション(replication)です。

レプリケーションの単位は大きく2つあります。

単位内容
データベースレプリケーション個別のデータベースをレプリケーションする
アカウントレプリケーション(レプリケーショングループ/フェイルオーバーグループ)複数のデータベースに加え、ユーザー・ロール・ウェアハウス・シェアなどアカウントレベルのオブジェクトもまとめてレプリケーションする。グループ単位でリフレッシュ間隔をスケジュールできる

💡 具体例:データベースレプリケーションの基本操作

-- プライマリ側:データベースをレプリケーション可能として有効化する
ALTER DATABASE sales ENABLE REPLICATION TO ACCOUNTS myorg.dr_account;

-- セカンダリ側:プライマリのレプリカとしてデータベースを作成する
CREATE DATABASE sales AS REPLICA OF myorg.prod_account.sales;

-- セカンダリ側:リフレッシュを実行してプライマリの変更を取り込む
ALTER DATABASE sales REFRESH;

リフレッシュは差分ベースで行われ、タスクなどでスケジュール実行するのが一般的です(フェイルオーバーグループでは REPLICATION_SCHEDULE で自動化できます)。セカンダリはリフレッシュ時点までのデータを持つため、リフレッシュ間隔が目標復旧時点(RPO)の目安になります。

2. フェイルオーバーとフェイルバック

災害復旧(DR)の要となるのがフェイルオーバー(failover)です。プライマリ側のリージョンで障害が起きたとき、セカンダリをプライマリに昇格させ、書き込み可能なデータベースとして業務を継続します。障害復旧後に元のリージョンへ役割を戻す操作がフェイルバック(failback)で、実体は「元プライマリを再びプライマリに昇格し直す」操作です。

📝 試験のポイント

レプリケーション自体は多くのエディションで利用できますが、フェイルオーバー/フェイルバック(およびフェイルオーバーグループ)を使えるのはBusiness Criticalエディション以上です。「DR構成(フェイルオーバー)に必要なエディションはどれか」と問われたらBusiness Criticalと答えられるようにしておきましょう。セカンダリが昇格するまで読み取り専用である点もあわせて押さえます。

プライマリアカウント(リージョンA)読み書き可能。業務システムが接続
レプリケーション(定期リフレッシュ・差分転送。別リージョン/別クラウド可)
セカンダリアカウント(リージョンB)読み取り専用のレプリカを保持
リージョンAの障害時:セカンダリをプライマリに昇格(フェイルオーバー)
新プライマリ(リージョンB)書き込み可能に。クライアントリダイレクトで接続も切り替え、業務を継続

図:レプリケーションとフェイルオーバー。復旧後はフェイルバックで元のリージョンに役割を戻せる

3. レプリケーションの主な用途

用途説明
災害復旧(DR)リージョン規模の障害に備え、別リージョンにセカンダリを維持。フェイルオーバーで業務継続(Business Critical)
リージョン間のデータ共有の実現手段5-3で学んだとおり、ダイレクトシェアは同一リージョン・同一クラウド内が前提。別リージョンのコンシューマに共有するには、コンシューマ側リージョンへデータベースをレプリケーションし、そこからシェアを作成する(リスティングの自動フルフィルメントは、これをSnowflakeが自動で行う仕組み)
アカウント移行別リージョン・別クラウドへアカウントを引っ越す際の移送手段として使う

4. レプリケーションの対象・非対象と課金

すべてのオブジェクトがレプリケーションされるわけではありません。代表的な整理は次のとおりです。

レプリケーションされるレプリケーションされない
permanentテーブル・transientテーブル、ビュー、シーケンス、ファイルフォーマット、ストアドプロシージャ/UDFなどデータベース内のオブジェクト。アカウントレプリケーションではユーザー・ロール・ウェアハウス等も対象にできる。内部名前付きステージも、グループベースのレプリケーション(レプリケーション/フェイルオーバーグループ)で対象化でき、ディレクトリテーブルが有効ならステージに登録されたファイルもレプリケートされるtemporaryテーブル(セッション限りのため)、外部テーブルユーザーステージ・テーブルステージ上のファイルなど。イベントテーブルなど一部のオブジェクトにも制限がある

課金は次の3要素で構成されます。

5. クライアントリダイレクト:接続の切り替え

フェイルオーバーでセカンダリを昇格させても、BIツールやアプリケーションの接続文字列が旧プライマリを向いたままでは業務を再開できません。クライアントリダイレクト(Client Redirect)は、この接続の切り替えを担う機能です。

✅ この節のまとめ

練習問題

問1. レプリケーションにおけるセカンダリデータベースの説明として正しいものはどれか。

  1. プライマリと同時に読み書きでき、双方向で変更が同期される
  2. 読み取り専用であり、定期的なリフレッシュによってプライマリの変更が反映される
  3. プライマリと同一リージョン・同一クラウドにしか作成できない
  4. リフレッシュは不要で、プライマリへの書き込みが常にリアルタイムで反映される
解答と解説を見る

正解:B

セカンダリは読み取り専用のレプリカで、リフレッシュ(手動またはスケジュール)を実行した時点までのプライマリの変更を保持します。Aの双方向同期という仕組みはなく、書き込めるのは常にプライマリだけです。Cは逆で、別リージョン・別クラウドのアカウントへのレプリケーションこそが主目的です。Dはリフレッシュという明示的な同期の仕組みと矛盾し、リフレッシュ間隔分の遅延(RPO)が存在します。

問2. リージョン障害時にセカンダリをプライマリに昇格させて業務を継続する「フェイルオーバー」を利用するために必要なエディションはどれか。

  1. Standard
  2. Enterprise
  3. Business Critical
  4. どのエディションでも利用できる
解答と解説を見る

正解:C

フェイルオーバー/フェイルバック(およびフェイルオーバーグループ、クライアントリダイレクト)はBusiness Criticalエディション以上の機能です。AのStandardとBのEnterpriseではフェイルオーバーは利用できません(レプリケーション自体はより広いエディションで利用可能ですが、昇格による業務継続はできません)。Dはエディション要件を無視しており誤りです。エディションと機能の対応(例:Time Travel 90日=Enterprise以上、フェイルオーバー=Business Critical以上)は整理して覚えましょう。

問3. レプリケーションの課金・特性に関する説明として正しいものを2つ選べ。

  1. ゼロコピークローンと同様にメタデータ操作のみのため、セカンダリ側のストレージは課金されない
  2. リージョン間のデータ転送費用と、リフレッシュに使われるコンピュート費用が課金される
  3. セカンダリ側にはデータの物理コピーが保持され、そのストレージが課金される
  4. temporaryテーブルも含め、アカウント内のすべてのオブジェクトが必ずレプリケーションされる
解答と解説を見る

正解:BとC

レプリケーションの課金は「データ転送+リフレッシュのコンピュート+セカンダリのストレージ」の3要素です(B・C)。Aは誤りで、レプリケーションは別リージョンへの物理コピーであり、同一アカウント内でメタデータだけを作るゼロコピークローンとは根本的に異なります。Dも誤りで、temporaryテーブルや外部テーブル、ユーザーステージ・テーブルステージ上のファイルなどレプリケーションされないオブジェクトがあります(内部名前付きステージはグループベースのレプリケーションで対象化でき、ディレクトリテーブルが有効ならファイルもレプリケートできます)。

問4. フェイルオーバー時に、BIツールやアプリケーションの接続文字列を変更することなく新しいプライマリアカウントへ接続を切り替えたい。使用すべき機能はどれか。

  1. クライアントリダイレクト(接続オブジェクトのURL)
  2. リーダーアカウント
  3. ゼロコピークローン
  4. Data Exchange
解答と解説を見る

正解:A

クライアントリダイレクトは、アカウント固有URLの代わりに接続オブジェクトが提供する組織レベルのURLを使わせることで、フェイルオーバー時に接続オブジェクトの向き先を切り替えるだけでクライアントを新プライマリへ誘導する機能です。Bのリーダーアカウントは、Snowflakeアカウントを持たない相手とのデータ共有の仕組みです。Cのゼロコピークローンは同一アカウント内の複製であり、接続の切り替えとは無関係です。DのData Exchangeは招待制のデータ交換ハブであり、DRの機能ではありません。