はじめに:なぜDR構成が必要なの?
こんにちは!今回はちょっと大人の話題、Snowflakeのデータベースレプリケーションを使ったDR(災害対策)構成について解説します。「DR」は Disaster Recovery の略で、地震・大規模障害・リージョン全体のダウンなどが起きてもサービスを止めないために、別の場所にデータの“分身”を準備しておく仕組みのこと。
Snowflakeには Time TravelやFail-safe といった「うっかり削除」対策の機能もありますが、これらはあくまで同じリージョン内の話。もしリージョン全体が落ちたら太刀打ちできません。そこで登場するのが データベースレプリケーション です。
レプリケーションの基本概念
レプリケーションは、あるアカウントのプライマリデータベースを、別アカウント(別リージョンやクラウド)のセカンダリデータベースへコピーし、定期的に最新状態に同期する仕組みです。
- プライマリ: 書き込みOKの本番データベース
- セカンダリ: プライマリから同期される読み取り専用のレプリカ
もしプライマリのリージョンで障害が起きたら、セカンダリを「昇格」させて新しいプライマリにすることでサービスを継続できます。これが フェイルオーバー です。

具体的な使い方(SQL例)
1. アカウントを「組織(Organization)」でリンクする
まず、ORGADMINロールで、複製先となる別リージョンのSnowflakeアカウントを同じ組織内に作成しておきます。これで両アカウント間の通信が可能になります。
2. プライマリデータベースを有効化
-- プライマリ側(本番アカウント)で実行
ALTER DATABASE my_db ENABLE REPLICATION TO ACCOUNTS myorg.dr_account;
3. セカンダリデータベースを作成
-- セカンダリ側(DRアカウント)で実行
CREATE DATABASE my_db
AS REPLICA OF myorg.prod_account.my_db;
4. 同期を実行
-- セカンダリ側で実行(初回 & 定期的に)
ALTER DATABASE my_db REFRESH;
このREFRESHをタスクで1時間ごとなどにスケジュールしておくと、自動同期が実現します。

フェイルオーバーの実行
本番リージョンに障害が起きたら、セカンダリ側でこのコマンドを実行します。
-- セカンダリを新プライマリに昇格
ALTER DATABASE my_db PRIMARY;
これで読み書きOKの状態に変わります。事前に フェイルオーバーグループ(Failover Group) を作っておけば、データベースだけでなくユーザー・ロール・ウェアハウスもまとめて切り替えられて便利です。
注意点
- レプリケーションには追加のクレジット(計算+データ転送)がかかります。リソースモニターで監視を。
- セカンダリは読み取り専用。書き込もうとするとエラーになります。
- 更新頻度を上げるほどRPO(失われる時間)は短くなりますが、コスト増。要件とのバランスが大切。
- セキュアデータシェアもレプリケート可能です(Business Critical以上)。
まとめ
データベースレプリケーションを使えば、別リージョンに自動同期される“予備のDB”を簡単に作れて、万が一のときも素早くサービス復旧できます。最初は小さなDBで試してみて、フェイルオーバーの手順を体で覚えておくのがおすすめです!
参考リンク
関連記事
- Snowflake Time TravelとFail-safe入門|誤操作からデータを守る2層バックアップ – 同一リージョン内のデータ保護機能。DRと組み合わせて使います
- Snowflakeセキュアデータシェアリング入門|データを安全に共有する仕組み – シェアもレプリケート対象にできます
- Snowflakeのデータ保持期間とFail-safeでストレージ料金を抑えるコツ – レプリケーション分のストレージコストも要チェック
- Snowflakeリソースモニター入門|予算超過を防ぐ仕組み – レプリケーションのクレジット監視に有用

