Database Replicationは、Snowflakeのデータベースを 別のリージョンまたは別のクラウドプロバイダーのアカウントに複製する機能です。Failover Groupと組み合わせることで、 災害復旧(DR)やビジネス継続性(BCP)を実現する堅牢なアーキテクチャを構築できます。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 | 個々のデータベース | 不可(手動切替) | Standard以上 |
| Replication Group | 複数DB + 共有 | 不可 | Business Critical以上 |
| Failover Group | 複数DB + ロール + ウェアハウス + ネットワークポリシー等 | 可能(自動/手動) | 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 GroupをPrimaryに昇格させます。 昇格後、元のソースアカウント側のFailover GroupはSecondaryに降格します。
-- ターゲットアカウントでPrimaryに昇格(DR発動)
ALTER FAILOVER GROUP prod_dr_group PRIMARY;
-- フェイルバック:元のソースアカウントで再びPrimaryに戻す
-- (ターゲットアカウントで変更されたデータが逆方向にレプリケートされた後に実行)
ALTER FAILOVER GROUP prod_dr_group PRIMARY;| 指標 | 定義 | Snowflakeでの制御方法 | 典型的な値 |
|---|---|---|---|
| RPO(Recovery Point Objective) | 許容できるデータ損失の最大時間 | REPLICATION_SCHEDULE の間隔 | 10分〜1時間 |
| RTO(Recovery Time Objective) | 復旧までに許容される最大ダウンタイム | ALTER FAILOVER GROUP ... PRIMARY の実行時間 | 数分〜数十分 |
RPOはREPLICATION_SCHEDULEの間隔で決まります。 10分間隔で設定した場合、最悪ケースで直近10分のデータが失われる可能性があります。 RTOはフェイルオーバーコマンドの実行時間に依存し、 データベースのサイズよりもメタデータの量(テーブル数・ビュー数等)に影響されます。
フェイルオーバー後にアプリケーションの接続先を手動で変更するのは運用負荷が高いため、 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;| 機能 | 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(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のレプリケーションダッシュボードからもグラフで遅延推移を可視化できます。
NicheeLab編集部
データエンジニアリング・クラウド資格の専門家。Databricks・Snowflake等の認定資格を保有し、実務経験に基づいた問題作成・解説を行っています。NicheeLab運営。
Snowflake資格一覧|全11試験(SnowPro)の難易度・費用
Snowflake認定資格(SnowPro)全11試験の一覧・難易度・費用・出題範囲を徹底解説。...
Snowflake試験の難易度ランキング|全11資格を徹底比較
Snowflake(SnowPro)認定全11試験の難易度をランキング形式で比較。学習時間・合格に必要なスキルから分析。...
Snowflake資格の勉強方法|効率的な学習ルートと合格のコツ
Snowflake認定資格(SnowPro)に最短で合格するための勉強方法。公式リソース・学習スケジュールを徹底ガイド。...
SnowPro Core試験完全解説|出題範囲・問題例・合格戦略
SnowPro Core Certification(COF-C03)を徹底解説。出題範囲・100問の試験形式・合格ライ...
SnowPro Platform Associate完全解説|入門試験の攻略
SnowPro Associate: Platform Certification(SOL-C01)を徹底解説。最も簡単...