はじめに:「うっかり削除」からデータを守ろう
「あ、間違えて本番のテーブルをDROPしちゃった……!」
データベースを触っていると、誰でも一度はヒヤッとする瞬間がありますよね。普通のDBならすぐにバックアップを探して復元作業……となるところですが、Snowflakeなら大丈夫。Time TravelとFail-safeという2つの機能が、まるでセーフティネットのようにあなたのデータを守ってくれます。
この記事では、この2つの仕組みの違いと使い方を、初心者の方にもわかりやすく解説していきます!
Time TravelとFail-safeって何?
Time Travel:自分で過去に戻れるタイムマシン
Time Travelは、その名の通り「過去のデータに戻る」機能です。テーブルが更新・削除されても、設定した保持期間内であればユーザー自身がSQLで過去の状態を取り出せます。
- 保持期間: 1日〜90日(Enterprise版以上、Standard版は最大1日)
- 誰が使う?: あなた自身がSQLで操作可能
- 用途: 誤更新の復元、過去時点のデータ比較、テーブル復活など
過去データの参照方法については Snowflakeタイムトラベルでテーブルの過去データを参照する方法 でも詳しく紹介しています。
Fail-safe:Snowflakeが管理する最終防衛ライン
Fail-safeは、Time Travelの保持期間が切れた後にさらに7日間データを保管してくれる仕組みです。ただし、こちらはユーザーが直接アクセスできません。「もうダメだ……」というときにSnowflakeのサポートに連絡して復旧してもらう、最終手段です。

具体的な使い方を見てみよう
1. 保持期間を設定する
テーブル単位でDATA_RETENTION_TIME_IN_DAYSを指定します。0にするとTime Travelは無効になります。
-- 保持期間を7日に設定してテーブル作成
CREATE TABLE sales (
id INT,
amount NUMBER
) DATA_RETENTION_TIME_IN_DAYS = 7;
-- 既存テーブルの保持期間を変更
ALTER TABLE sales SET DATA_RETENTION_TIME_IN_DAYS = 30;
2. 過去のデータを参照する(AT / BEFORE句)
-- 5分前のデータを参照
SELECT * FROM sales AT(OFFSET => -60*5);
-- 特定の日時のデータを参照
SELECT * FROM sales AT(TIMESTAMP => '2026-05-06 09:00:00'::TIMESTAMP);
-- 特定のクエリ実行直前の状態を参照
SELECT * FROM sales BEFORE(STATEMENT => '8e5d0ca9-...');
3. 削除されたテーブルを復元する(UNDROP)
これが一番感動する瞬間です。誤ってDROPしたテーブルを一発で取り戻せます!
-- やってしまった……
DROP TABLE sales;
-- 一瞬で復活!
UNDROP TABLE sales;

UNDROPはテーブルだけでなく、スキーマやデータベースに対しても使えますよ注意点とベストプラクティス
- テーブルの種類で挙動が違う: 通常テーブルはTime Travel + Fail-safe、トランジェントテーブルはTime Travelのみ(最大1日)、テンポラリーテーブルはセッション中のみ。
- ストレージ料金がかかる: 保持期間中の旧データもストレージとして課金されます。大きなテーブルで保持期間を長くしすぎると料金が膨らむので注意。詳しくは Snowflakeのデータ保持期間とFail-safeでストレージ料金を抑えるコツ をどうぞ。
- Fail-safeはユーザー操作不可: 復旧にはサポートチケットが必要で、時間もかかります。あくまで「最終保険」と考えましょう。
- 権限が必要: UNDROPには元のオーナーロールが必要。RBACでのロール設計とあわせて運用しましょう。
まとめ
SnowflakeのTime TravelとFail-safeは、データを守る2層構造のセーフティネットです。日常的なミスはTime Travelでサクッと自分で復旧、いざというときはFail-safeでサポートに頼る、という使い分けを覚えておけば安心です。
ぜひ一度、テスト用テーブルでDROP→UNDROPを試してみてくださいね。きっと「Snowflakeすごい!」と感動するはずです✨
参考リンク
関連記事
- Snowflakeタイムトラベルでテーブルの過去データを参照する方法 – AT/BEFORE構文を使った過去データ参照を詳しく解説
- Snowflakeのデータ保持期間とFail-safeでストレージ料金を抑えるコツ – 保持期間とストレージコストの関係を整理
- Snowflakeタスク入門|定期実行ジョブを5分で作る方法 – 定期処理で誤更新が起きたときのリカバリにもTime Travelが活躍
- Snowflake RBAC入門|ロールで権限管理を始めよう – UNDROP権限の前提となるロール設計

