Snowflake

Snowflake Database Replication DR設計

2026-03-26
更新: 2026-03-27
NicheeLab編集部

Database Replicationは、Snowflakeのデータベースを 別のリージョンまたは別のクラウドプロバイダーのアカウントに複製する機能です。Failover Groupと組み合わせることで、 災害復旧(DR)やビジネス継続性(BCP)を実現する堅牢なアーキテクチャを構築できます。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個々のデータベース不可(手動切替)Standard以上
Replication Group複数DB + 共有不可Business Critical以上
Failover Group複数DB + ロール + ウェアハウス + ネットワークポリシー等可能(自動/手動)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 GroupをPrimaryに昇格させます。 昇格後、元のソースアカウント側のFailover GroupはSecondaryに降格します。

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

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

RPO / RTO 設計

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

RPOはREPLICATION_SCHEDULEの間隔で決まります。 10分間隔で設定した場合、最悪ケースで直近10分のデータが失われる可能性があります。 RTOはフェイルオーバーコマンドの実行時間に依存し、 データベースのサイズよりもメタデータの量(テーブル数・ビュー数等)に影響されます。

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

フェイルオーバー後にアプリケーションの接続先を手動で変更するのは運用負荷が高いため、 SnowflakeはClient Redirect(Connection Failover)機能を提供しています。 Connection URLにOrganizationレベルのURLを使用することで、 フェイルオーバー時に自動的に新しいPrimaryアカウントにリダイレクトされます。

-- Organization URL形式(Client Redirect対応)
-- https://<org_name>-<connection_name>.snowflakecomputing.com

-- Connection(接続オブジェクト)の作成
CREATE CONNECTION prod_connection
  AS REPLICA OF myorg.source_account.prod_connection;

-- Primary接続の切り替え
ALTER CONNECTION prod_connection PRIMARY;

レプリケーション監視

-- レプリケーション遅延の確認(Secondaryアカウントで実行)
SELECT SYSTEM$REPLICATION_LAG('analytics');

-- リフレッシュ履歴と所要時間の確認
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,
  database_name,
  SUM(credits_used) AS total_credits,
  SUM(bytes_transferred) / POWER(1024, 3) AS gb_transferred
FROM SNOWFLAKE.ACCOUNT_USAGE.REPLICATION_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要件に合わせる:RPO = 10分なら REPLICATION_SCHEDULE = '10 MINUTE' を設定し、遅延監視アラートを構成する
  • Client Redirectを導入してアプリ側の変更を不要にする:Organization URLを使用し、フェイルオーバー時のアプリケーション再設定を排除する
  • クロスリージョン転送コストを見積もる:異なるクラウドリージョン間の転送には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(Organization URL)+ REPLICATION_SCHEDULE = '10 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(Organization URL)を使うとフェイルオーバー時にアプリの接続先変更が不要になります。REPLICATION_SCHEDULE = '10 MINUTE' でRPO 10分を実現できます。AはClient Redirectがなく接続先の手動変更が必要です。Cはレプリケーション機能ではなくデータコピーであり、ロールやポリシーの複製ができません。DはTime Travelでありレプリケーションとは無関係です。

よくある質問

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

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

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

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

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

セカンダリデータベースに対してSELECT SYSTEM$REPLICATION_LAG()を実行すると、プライマリとの遅延時間が返されます。また、SNOWFLAKE.ACCOUNT_USAGE.REPLICATION_GROUP_REFRESH_HISTORYビューでリフレッシュの履歴と所要時間を確認でき、RPO目標に対するギャップを継続的に監視できます。Snowsightのレプリケーションダッシュボードからもグラフで遅延推移を可視化できます。

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

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

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

NicheeLab編集部

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


関連記事
Snowflake

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

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

Snowflake

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

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

Snowflake

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

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

Snowflake

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

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

Snowflake

SnowPro Platform Associate完全解説|入門試験の攻略

SnowPro Associate: Platform Certification(SOL-C01)を徹底解説。最も簡単...

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