Snowflake

Snowflake Database Replication DR設計

2026-03-26
更新: 2026-03-27
NicheeLab編集部
目次
  1. Primary / Secondary アーキテクチャ
  2. レプリケーションの種類
  3. Failover Group の作成
  4. フェイルオーバー手順
  5. RPO / RTO 設計
  6. Client Redirect(接続リダイレクト)
  7. レプリケーション監視
  8. Edition要件まとめ
  9. DR設計ベストプラクティス
  10. 問題で確認
  11. よくある質問

Database Replicationは、Snowflakeのデータベースを 別のリージョンまたは別のクラウドプロバイダーのアカウントに複製する機能です。Failover Groupと組み合わせることで、 災害復旧(DR)やビジネス継続性(BCP)を実現する堅牢なアーキテクチャを構築できます。 データベースのレプリケーション自体は全エディションで使えますが、フェイルオーバー(セカンダリの昇格)・Failover Group・Client RedirectにはBusiness Critical Edition以上が必要です。

Primary / Secondary アーキテクチャ

SnowflakeのレプリケーションはPrimary-Secondaryモデルで動作します。 Primaryデータベース(またはFailover Group)が書き込み可能な正系で、 Secondaryは読み取り専用の複製です。 Secondaryは定期的にPrimaryから増分スナップショットを受信して同期します。

┌──────────────────────────────┐     レプリケーション     ┌──────────────────────────────┐
│  Source Account (US-EAST-1)  │ ──────────────────────→ │  Target Account (EU-WEST-1)  │
│                              │    増分スナップショット     │                              │
│  [Primary]                   │                         │  [Secondary / 読み取り専用]     │
│   ├─ DB: analytics           │                         │   ├─ DB: analytics (replica)   │
│   ├─ DB: raw_data            │                         │   ├─ DB: raw_data (replica)    │
│   ├─ Roles / Users           │                         │   ├─ Roles / Users (replica)   │
│   └─ Network Policies        │                         │   └─ Network Policies (replica)│
└──────────────────────────────┘                         └──────────────────────────────┘
        ↑ 通常運用は Primary で実行                          ↑ DR発動時に Primary に昇格

レプリケーションの種類

種類対象フェイルオーバーEdition要件
Database Replication個々のデータベースBusiness Critical以上なら可(ALTER DATABASE ... PRIMARYで手動昇格)Standard以上
Replication Group複数DB + 共有不可Standard以上(DB・共有以外のオブジェクトを含めるならBusiness Critical以上)
Failover Group複数DB + ロール + ウェアハウス + ネットワークポリシー等可能(ALTER FAILOVER GROUP ... PRIMARYで手動昇格)Business Critical以上

Failover Group の作成

-- ソースアカウントでFailover Groupを作成
CREATE FAILOVER GROUP prod_dr_group
  OBJECT_TYPES = DATABASES, ROLES, USERS, WAREHOUSES, NETWORK POLICIES, INTEGRATIONS
  ALLOWED_DATABASES = analytics, raw_data
  ALLOWED_INTEGRATION_TYPES = SECURITY INTEGRATIONS
  ALLOWED_ACCOUNTS = myorg.target_account
  REPLICATION_SCHEDULE = '10 MINUTE';

-- ターゲットアカウントでSecondary Failover Groupを作成
CREATE FAILOVER GROUP prod_dr_group
  AS REPLICA OF myorg.source_account.prod_dr_group;

-- 手動でレプリケーションを実行(テスト用)
ALTER FAILOVER GROUP prod_dr_group REFRESH;

フェイルオーバー手順

DR発動時は、ターゲットアカウントにサインインし、FAILOVER権限を持つロールでFailover GroupをPrimaryに昇格させます。 これは手動の操作で、Snowflakeが障害を検知して自動で切り替えることはありません。 昇格後、元のソースアカウント側のFailover Groupは読み取り専用のSecondaryに降格します。

-- ターゲットアカウントでPrimaryに昇格(DR発動。手動で実行)
ALTER FAILOVER GROUP prod_dr_group PRIMARY;

-- 元のソースアカウント(Secondaryになった側)でスケジュール更新を再開
-- (フェイルオーバーするとSecondaryのスケジュール更新は停止する)
ALTER FAILOVER GROUP prod_dr_group RESUME;

-- フェイルバック:元のソースアカウントで再びPrimaryに戻す
-- (ターゲットアカウントで変更されたデータが逆方向にレプリケートされた後に実行)
ALTER FAILOVER GROUP prod_dr_group PRIMARY;

RPO / RTO 設計

指標定義Snowflakeでの制御方法典型的な値
RPO(Recovery Point Objective)許容できるデータ損失の最大時間REPLICATION_SCHEDULE の間隔(遅れは最大で間隔の2倍)10分〜1時間
RTO(Recovery Time Objective)復旧までに許容される最大ダウンタイム障害を判断して ALTER FAILOVER GROUP ... PRIMARY を手動で実行するまでの時間数分〜数十分

RPOはREPLICATION_SCHEDULEの間隔で決まりますが、セカンダリはプライマリより最大で間隔の2倍遅れることがあります。 10分間隔で設定した場合、最悪ケースで直近20分のデータが失われる可能性があります。 RPO Assurance(2026年9月GA)を有効にすると、スケジュールの代わりにSnowflakeが継続的にリフレッシュを管理し、RPO目標30分を目指します(フェイルオーバーは引き続き手動です)。 RTOは、障害を判断してフェイルオーバー(と接続の切り替え)を自分で実行するまでの時間で決まります。Snowflakeが自動で切り替えることはありません。 また、リフレッシュの実行中はフェイルオーバーできないため、その完了待ちや中断の時間もRTOに含まれます。

Client Redirect(接続リダイレクト)

フェイルオーバー後にアプリケーションの接続先を手動で変更するのは運用負荷が高いため、 SnowflakeはClient Redirect(Connection Failover)機能を提供しています(Business Critical以上)。 アプリケーションが接続オブジェクトの接続URLで接続するようにしておけば、 ターゲットアカウントで ALTER CONNECTION ... PRIMARY を実行したときに接続先が新しいPrimaryアカウントに切り替わります。 Failover Groupを昇格しても接続は自動では切り替わらないため、両方を実行します。

-- 接続URLの形式(Client Redirect)
-- https://<org_name>-<connection_name>.snowflakecomputing.com

-- ソースアカウント:プライマリ接続を作成し、ターゲットへのフェイルオーバーを許可
CREATE CONNECTION prod_connection;
ALTER CONNECTION prod_connection ENABLE FAILOVER TO ACCOUNTS myorg.target_account;

-- ターゲットアカウント:セカンダリ接続を作成
CREATE CONNECTION prod_connection
  AS REPLICA OF myorg.source_account.prod_connection;

-- フェイルオーバー時(ターゲットアカウントで手動実行):Primary接続の切り替え
ALTER CONNECTION prod_connection PRIMARY;

レプリケーション監視

-- レプリケーション遅延の推移の確認(Secondaryアカウントで実行)
SELECT timestamp, lag_seconds, primary_snapshot_timestamp
FROM TABLE(INFORMATION_SCHEMA.REPLICATION_GROUP_LAG_HISTORY(
  REPLICATION_GROUP_NAME => 'prod_dr_group'));

-- リフレッシュ履歴と所要時間の確認
SELECT
  replication_group_name,
  phase_name,
  start_time,
  end_time,
  DATEDIFF('SECOND', start_time, end_time) AS duration_sec,
  primary_snapshot_timestamp
FROM SNOWFLAKE.ACCOUNT_USAGE.REPLICATION_GROUP_REFRESH_HISTORY
WHERE start_time >= DATEADD(DAY, -7, CURRENT_TIMESTAMP())
ORDER BY start_time DESC;

-- レプリケーションのクレジット消費監視
SELECT
  start_time::DATE AS usage_date,
  replication_group_name,
  SUM(credits_used) AS total_credits,
  SUM(bytes_transferred) / POWER(1024, 3) AS gb_transferred
FROM SNOWFLAKE.ACCOUNT_USAGE.REPLICATION_GROUP_USAGE_HISTORY
WHERE start_time >= DATEADD(MONTH, -1, CURRENT_TIMESTAMP())
GROUP BY 1, 2
ORDER BY usage_date DESC;

Edition要件まとめ

機能StandardEnterpriseBusiness Critical
Database Replication(読み取り専用)可可可
Failover Group不可不可可
Client Redirect不可不可可
クロスクラウドレプリケーション可可可

DR設計ベストプラクティス

  • Failover Groupにロール・ネットワークポリシーを含める:データベースだけ複製してもRBAC設定が欠落するとアクセスできないため、OBJECT_TYPESにROLES/USERS/NETWORK POLICIESを含める
  • 定期的なDRドリル(訓練)を実施:四半期ごとにフェイルオーバー→フェイルバックの手順を実行し、RTOの実測値を記録する
  • REPLICATION_SCHEDULE をRPO要件に合わせる:セカンダリの遅れは最大で間隔の2倍になるため、RPO = 10分なら REPLICATION_SCHEDULE = '5 MINUTE' 以下を設定し、遅延監視アラートを構成する
  • Client Redirectを導入してアプリ側の変更を不要にする:アプリは接続URLで接続し、フェイルオーバー時は ALTER CONNECTION ... PRIMARY の実行だけで済むようにして、アプリケーションの再設定を排除する
  • クロスリージョン転送コストを見積もる:異なるクラウドリージョン間の転送にはGB単位で課金されるため、初回フルスナップショットのコストを事前に試算する

問題で確認

Architecture / DR

問題 1

Business Critical Editionを利用する企業が、US-EAST-1(AWS)のプロダクション環境に対してEU-WEST-1にDRサイトを構築したい。要件は「RPO 10分以内」「フェイルオーバー時にアプリケーション接続先の変更が不要であること」「ロール・ネットワークポリシーも含めて複製すること」である。最も適切な構成はどれか。

  1. Database Replicationで各データベースを個別に複製し、フェイルオーバー時にアプリのConnection Stringを手動変更する
  2. Failover Group(OBJECT_TYPES = DATABASES, ROLES, USERS, NETWORK POLICIES)+ Client Redirect(接続URL)+ REPLICATION_SCHEDULE = '5 MINUTE'
  3. Snowpipeで全テーブルのデータをEU-WEST-1のステージにコピーし、Taskで定期的にロードする
  4. Time TravelのDATA_RETENTION_TIME_IN_DAYSを90日に設定してデータ保護を最大化する

正解: B

3つの要件すべてを満たすのはBです。Failover GroupでOBJECT_TYPESにROLES/USERS/NETWORK POLICIESを含めることでアカウントレベルのオブジェクトも複製できます。Client Redirect(接続URL)を使うと、フェイルオーバー時は ALTER CONNECTION ... PRIMARY で接続先を切り替えるだけで、アプリの接続先変更が不要になります。セカンダリの遅れは最大でスケジュール間隔の2倍なので、REPLICATION_SCHEDULE = '5 MINUTE' なら遅れは最大約10分に収まり、RPO 10分以内を満たせます。なお、昇格(ALTER FAILOVER GROUP ... PRIMARY)は自動ではなく手動で実行します。AはClient Redirectがなく接続先の手動変更が必要で、データベース単位の複製ではロールやネットワークポリシーも複製できません。Cはレプリケーション機能ではなくデータコピーであり、ロールやポリシーの複製ができません。DはTime Travelでありレプリケーションとは無関係です。

よくある質問

Database ReplicationとFailover Groupの違いは何ですか?

Database Replicationは個々のデータベースを別リージョン/アカウントに複製する機能で、全エディションで利用可能です(セカンダリを昇格するフェイルオーバーにはBusiness Critical以上が必要)。Failover Groupは複数のデータベース、共有、ユーザー/ロール、ウェアハウスなどを一つのグループとしてまとめてフェイルオーバーできる機能で、Business Critical以上が必要です。DR設計ではFailover Groupを使うことで、データベース単体だけでなくアカウントレベルのオブジェクト(ロール・ネットワークポリシーなど)も含めた一括フェイルオーバーが実現できます。

レプリケーションのコストはどのように発生しますか?

レプリケーションコストは主に2つの要素で構成されます。(1) データ転送コスト:ソースリージョンからターゲットリージョンへのデータ移動に対する課金(同一クラウド同一リージョンでは無料)、(2) コンピュートコスト:レプリケーションの増分スナップショット作成に消費されるServerless Credit。初回のフルスナップショットが最もコストが高く、以降は差分のみが転送されるため段階的にコストが減少します。Failover Group・Replication Groupの消費クレジットはREPLICATION_GROUP_USAGE_HISTORYビューで監視できます。

レプリケーション遅延の確認方法はありますか?

ターゲットアカウントでINFORMATION_SCHEMA.REPLICATION_GROUP_LAG_HISTORYテーブル関数を実行すると、セカンダリのグループがプライマリからどれだけ遅れていたかの推移が返されます。また、SNOWFLAKE.ACCOUNT_USAGE.REPLICATION_GROUP_REFRESH_HISTORYビューでリフレッシュの履歴と所要時間を確認でき、RPO目標に対するギャップを継続的に監視できます。Snowsightの[Admin]→[Accounts]→[Replication]ページでも、グループごとのレプリケーション遅延(前回のリフレッシュからの経過時間)を確認できます。

クラウドの基礎から読む

資格の話をしない、クラウドそのものの入門 8 章があります。登録なしで全部読めます。

第 0 部・無料

クラウド自体がはじめての方へ

サーバー・ネットワーク・データベースの前提知識なしで読める 8 章。登録不要・無料。

この記事で学んだ内容を問題で確認しましょう

16,000問以上の問題で実力チェック

無料で問題を解いてみる
この記事の著者

NicheeLab編集部

データエンジニアリング・クラウド資格の専門家。Databricks・Snowflake等の認定資格を保有し、実務経験に基づいた問題作成・解説を行っています。NicheeLab運営。


関連記事
Snowflake

Snowflake資格一覧|全11試験(SnowPro)の難易度・費用

Snowflake認定資格(SnowPro)全11試験の一覧・難易度・費用・出題範囲を徹底解説。SnowparkとDat...

Snowflake

Snowflake試験の難易度ランキング|全11資格を徹底比較

Snowflake(SnowPro)認定全11試験の難易度をランキング形式で比較。学習時間・合格に必要なスキルから分析。...

Snowflake

Snowflake資格の勉強方法|効率的な学習ルートと合格のコツ

Snowflake認定資格(SnowPro)に最短で合格するための勉強方法。公式リソース・学習スケジュールを徹底ガイド。...

Snowflake

SnowPro Core試験完全解説|出題範囲・問題例・合格戦略

SnowPro Core Certification(COF-C03)を徹底解説。出題範囲・100問の試験形式・合格ライ...

Snowflake

SnowPro Platform Associate(SOL-C01)完全解説|現在は予約不可・試験内容と次の受験先

SnowPro Associate: Platform(SOL-C01)は2026年10月時点でSnowflakeの公式...

Snowflakeの記事一覧 (102件)
© 2026 NicheeLab All rights reserved.