Database Replicationは、Snowflakeのデータベースを 別のリージョンまたは別のクラウドプロバイダーのアカウントに複製する機能です。Failover Groupと組み合わせることで、 災害復旧(DR)やビジネス継続性(BCP)を実現する堅牢なアーキテクチャを構築できます。 データベースのレプリケーション自体は全エディションで使えますが、フェイルオーバー(セカンダリの昇格)・Failover Group・Client RedirectにはBusiness Critical Edition以上が必要です。
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を作成
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;| 指標 | 定義 | 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に含まれます。
フェイルオーバー後にアプリケーションの接続先を手動で変更するのは運用負荷が高いため、 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;| 機能 | Standard | Enterprise | Business Critical |
|---|---|---|---|
| Database Replication(読み取り専用) | 可 | 可 | 可 |
| Failover Group | 不可 | 不可 | 可 |
| Client Redirect | 不可 | 不可 | 可 |
| クロスクラウドレプリケーション | 可 | 可 | 可 |
Architecture / DR
問題 1
Business Critical Editionを利用する企業が、US-EAST-1(AWS)のプロダクション環境に対してEU-WEST-1にDRサイトを構築したい。要件は「RPO 10分以内」「フェイルオーバー時にアプリケーション接続先の変更が不要であること」「ロール・ネットワークポリシーも含めて複製すること」である。最も適切な構成はどれか。
正解: 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 章。登録不要・無料。
NicheeLab編集部
データエンジニアリング・クラウド資格の専門家。Databricks・Snowflake等の認定資格を保有し、実務経験に基づいた問題作成・解説を行っています。NicheeLab運営。
Snowflake資格一覧|全11試験(SnowPro)の難易度・費用
Snowflake認定資格(SnowPro)全11試験の一覧・難易度・費用・出題範囲を徹底解説。SnowparkとDat...
Snowflake試験の難易度ランキング|全11資格を徹底比較
Snowflake(SnowPro)認定全11試験の難易度をランキング形式で比較。学習時間・合格に必要なスキルから分析。...
Snowflake資格の勉強方法|効率的な学習ルートと合格のコツ
Snowflake認定資格(SnowPro)に最短で合格するための勉強方法。公式リソース・学習スケジュールを徹底ガイド。...
SnowPro Core試験完全解説|出題範囲・問題例・合格戦略
SnowPro Core Certification(COF-C03)を徹底解説。出題範囲・100問の試験形式・合格ライ...
SnowPro Platform Associate(SOL-C01)完全解説|現在は予約不可・試験内容と次の受験先
SnowPro Associate: Platform(SOL-C01)は2026年10月時点でSnowflakeの公式...