障害復旧向けのバックアップと不変ストレージ

バックアップは、組織が重要なデータを変更や削除から保護するのに役立ちます。

バックアップは、Snowflakeオブジェクトの個別のスナップショットを表します。バックアップするオブジェクト、バックアップする頻度、バックアップを保持する期間、および早期に削除されないように保持ロックを追加するかどうかを選択します。

Snowflakeバックアップのユースケース

以下のユースケースは、バックアップの一般的な用途です。

規制コンプライアンス:

保持ロック付きのバックアップは、組織、金融機関、および関連業界が、記録を不変形式で保持することを要求する規制に対処するのに役立ちます。

注釈

Snowflakeは、Cohasset Associatesに委託して、バックアップ機能が SEC 17a-4(f)、SEC 18a-6(e)、FINRA 規則4511(c)、CFTC 規則1.31(c)-(d)を含む主要な規制の記録保持要件に準拠しているかについての独立評価を実施しています。このCohassetによる評価は、Snowflakeの不変ストレージ制御がデータの作成、保護、保持をサポートしていることを独立したサードパーティにより検証するものであり、Snowflakeが評価対象の規制に従って、規制されたデータ保持に関する重要な業界基準を満たしているという確信をお客様に提供します。

保持ロックを使用したSnowflakeバックアップに適用される完全なコンプライアンスレポートについては、 Snowflakeコンプライアンスセンター をご参照ください。

復旧:

バックアップは、偶発的な変更または削除が発生した場合に、組織が個別のスナップショットを作成して、ビジネスクリティカルなデータを保護および回復するのに役立ちます。

サイバーの回復力:

保持ロックを使用したバックアップは、全体的なサイバーレジリエンス戦略の一部です。これらは、サイバー攻撃、特にランサムウェア攻撃時に組織がビジネスクリティカルなデータを保護するのに役立ちます。保持ロックにより、攻撃者が ACCOUNTADMIN または ORGADMIN ロールを使用してアカウントにアクセスした場合でも、このデータを削除することはありません。

主な概念

このセクションでは、Snowflakeのバックアップの主な概念の概要を説明します。

バックアップ

バックアップ は、オブジェクトのポイントインタイムスナップショットを表します。

  • オブジェクトは、単一のテーブル、スキーマ、またはデータベース全体のいずれかです。

  • 特定のバックアップはSnowflakeによって生成された一意の ID で識別できます。

  • バックアップは変更できません。ただし、削除は可能です。また、バックアップの有効期限は変更できます(保持ロック が適用されていない場合に限ります)。

日常業務では、個々のバックアップを操作することはほとんどありません。代わりに、それらを含む バックアップセット を管理します。たとえば、SHOW BACKUPS IN BACKUP SET コマンドを実行すると、バックアップのリストを取得できます。ALTER BACKUP SET コマンドを実行すると、新しいバックアップを作成できます。

バックアップセット

バックアップセット は、特定のデータベース、スキーマ、またはテーブルのバックアップのセットを含んでいるスキーマレベルのオブジェクトです。Snowflake には、バックアップセットについて CREATE、ALTER、DROP、SHOW、および DESCRIBE を実行する SQL コマンドがあります。

同じオブジェクトに対して複数のバックアップセットを持つことができます。

セット内のバックアップのライフサイクルは、バックアップセットに添付できるオプションの バックアップポリシー によって決定されます。バックアップセットにバックアップを手動で追加または削除することもできます。バックアップを削除する能力は、他の要因、特に 保持ロック法的保持 の影響を受けます。

バックアップポリシー

バックアップポリシー は、バックアップセット内のバックアップのライフサイクルを定義する設定を含むスキーマレベルのオブジェクトです。これらの設定には、スケジュール、有効期限、保持ロックが含まれます。

  • スケジュール は、バックアップがいつ作成されるかを決定します。スケジュールは、分単位の間隔として、またはcron式として定義できます。たとえば、スケジュールが1時間に設定されている場合、オブジェクトのバックアップは60分ごとに作成されます。

  • 有効期限 は、バックアップが有効な時間の長さです。バックアップの有効期限が切れると、その特定のバックアップに法的保持が適用されない限り、Snowflakeは自動的に削除します。

    Tip

    バックアップセットに保持ロックがなく、特定のバックアップに法的保持が適用されていない場合は、有効期限が終了する前にバックアップを手動で削除できます。手動で1度にバックアップを削除することができます。その際は、常に法的保持を持たない最も古いバックアップから始めます。

各バックアップポリシーには、スケジュールと有効期限プロパティのどちらかまたは両方が必要です。たとえば、スケジュールと有効期限付きのポリシーを作成し、そのポリシーが適用されるすべてのバックアップセットのバックアップのすべての作成と削除をSnowflakeに許可することができます。または、古いバックアップの削除を自分で管理する場合は、スケジュールありの有効期限なしのポリシーを作成することもできます。あるいは、有効期限があるがスケジュールがないポリシーを作成し、バックアップの作成を自分で管理することもできます。スケジュールなし、有効期限なしのポリシーは作成できません。

バックアップポリシーをバックアップセットに関連付ける場合は、バックアップセットの作成時に実行するか、後でポリシーを適用できます。あるいは、バックアップポリシーが関連付けられていないバックアップセットを使用することもできます。その場合は、新しいバックアップを取得するタイミングと古いバックアップを期限切れにするタイミングを手動で制御します。

バックアップポリシーは複数のバックアップセットに適用できます。バックアップポリシーを変更すると、Snowflakeはそのポリシーがアタッチされているすべてのバックアップセットに変更を適用します。

保持ロック

保持ロック は、定義された有効期限の間、バックアップを削除から保護します。保持ロック付きのバックアップを使用すると、規制コンプライアンスとサイバーレジリエンスに対応したバックアップが可能です。保持ロックを使用したバックアップセットには、次の制限が適用されます。

  • バックアップは、ACCOUNTADMIN ロールを含む、どのロールでも削除できません。

  • バックアップの有効期限を減らすことはできませんが、有効期限を増やすことはできます。

  • セットに期限切れのバックアップがある場合は、バックアップセットをドロップすることはできません。

  • 期限切れのバックアップがあるバックアップセットを含むスキーマをドロップすることはできません。

  • 期限切れのバックアップがあるバックアップセットを含むデータベースをドロップすることはできません。

  • 期限切れのバックアップを持つバックアップセットがあるデータベースを含むアカウントをドロップすることはできません。

重要

保持ロック付きのバックアップポリシーをバックアップセットに適用すると、 元に戻せません 。規制コンプライアンスに必要な強力な保証により、バックアップセットに保持ロックを設定すると、ロックを取り消すことはできません。Snowflakeサポートもそのような保持ロックを取り消すことはできません。削除できないバックアップセットとそれを含むスキーマとデータベースの予期しないストレージ料金を回避するために、長い有効期間のバックアップセットに保持ロックを設定する前には慎重に計画してください。

Snowflake組織が削除された場合、その組織はSnowflakeカスタマーではなくなります。この場合、Snowflakeは保持ロック付きのバックアップを含むすべてのバックアップを削除します。Snowflake組織を削除するには、Snowflakeサポートの関与が必要です。これは、管理者が誤って実行できるものではありません。

バックアップライフサイクルの概要

次の図は、Snowflakeオブジェクト、バックアップ、バックアップセット、およびバックアップポリシーが互いにどのように関連しているかを示しています。この図には、最も単純な種類のバックアップである、単一のテーブルに対するバックアップが含まれています。バックアップ操作ごとに、新しいバックアップが作成されます。その特定のオブジェクトのすべてのバックアップは、バックアップセットにグループ化されます。バックアップセット内のバックアップの自動追加および削除は、バックアップポリシーで制御されます。バックアップから情報を回復するには、CREATE コマンドを使用して特定のバックアップから新しいオブジェクトを作成します。

バックアップの主要な概念

バックアップの仕組み

バックアップは、 クローン に類似したSnowflakeオブジェクトの ゼロコピー 複製です。バックアップは、作成時にテーブルデータのコピーを作成しません。バックアップメカニズムは、データのコピーにかかる追加のコストや時間を発生させずに、テーブルデータをバックアップします。

Snowflakeは不変のファイルにデータを格納し、バックアップからテーブルの基礎となるデータファイルへのポインターを維持します。テーブルが進化して変更されると、Snowflakeは、そのファイルを参照する期限切れのバックアップがある限り、各データファイルが削除から保護されるようにします。

バックアップの運用上の制限

Snowflakeは、バックアップに次の制限を適用します。

  • バックアップポリシーの保持ロックは変更できません。

  • ポリシーに保持ロックがある場合は、有効期限を増やすことはできますが、減らすことはできません。

  • スケジュールされたバックアップの最小スケジュール間隔は1時間(60分間)です。

バックアップの技術的制限

現在は、特定のデータベースに対して最大2つのデータベースバックアップセットを作成できます。同様に、特定のスキーマに対して最大2つのスキーマバックアップセットを、特定のテーブルに対して2つのテーブルバックアップセットを作成できます。オブジェクトは、2つ以上のバックアップセットに引き続き表示される可能性があります。たとえば、あるテーブルに、1つまたは2つの関連するバックアップセットがある場合があります。同じテーブルが1つまたは2つのスキーマバックアップセットと、1つまたは2つのデータベースバックアップセットにも含まれている場合もあります。

バックアップと他の障害復旧およびビジネス継続性機能との比較

バックアップには、複製やTime TravelなどのSnowflakeの他のビジネス継続性および障害復旧機能とは異なる次の利点があります。

  • バックアップの長期保持を有効にすることができます。長期の保持は、ランサムウェアやイン内部攻撃などの脅威に対する回復、規制コンプライアンス、サイバー回復力に役立ちます。

  • 保持ロックにより、アカウント管理者を含むどのユーザーもバックアップを削除できません。

  • 複製のリフレッシュなど、他のデータ転送操作に使用する時間とは異なる時間枠でバックアップをスケジュールできます。

  • 個々のテーブルオブジェクト、またはスキーマ全体やデータベースなどのコンテナオブジェクトをバックアップして復元できます。

  • 保持ロックを含むバックアップポリシーを使用すると、バックアップ実行後にバックアップの保持時間が短縮されるのを防ぐことができます。これは、保持間隔をゼロに縮小できるTime Travel機能とは異なります。

  • Time TravelやFail-safeとは異なり、バックアップはテーブルやテーブルデータだけでなく、さまざまな種類のオブジェクトからのデータを保持します。

  • バックアップを取る速度とストレージ効率は、クローンに使用されるゼロコピーメカニズムと似ています。

  • 同じオブジェクトのすべてのバックアップがバックアップセットにグループ化される方法では、クローンを使用して独自のバックアップメカニズムを実装する場合よりも管理が簡単になります。たとえば、多数のオブジェクトを管理したり、クローンされたオブジェクトを追跡するための命名スキームを用意したり、古いクローンを削除するためのスケジューリングメカニズムを実装したりする必要はありません。また、クローンオブジェクトとは異なり、バックアップは作成後に変更することはできません。

  • 各バックアップは、指定された時点での単一のテーブル、スキーマ、またはデータベースを表します。バックアップには、ユーザーやロールなどのアカウントレベルのオブジェクトは含まれません。一部の種類のテーブルやその他のデータベースレベルのオブジェクトは、スキーマやデータベースバックアップに含まれません。詳細については、 バックアップオブジェクト をご参照ください。

  • バックアップ関連のオブジェクトは、関連するデータベース、スキーマ、またはテーブルと同じクラウドサービスプロバイダー(CSP)リージョンに保存されます。ビジネス継続性と障害復旧のシナリオでは、通常、バックアップとSnowflakeアカウント複製を組み合わせます。これにより、すべてのバックアップセットとバックアップポリシーを別のリージョンまたは別の CSP に複製し、元のリージョンまたは CSP に影響を与える停止が発生した場合でも、復旧させることができます。

  • バックアップセットとバックアップポリシーはクローンできません。そのようなオブジェクトを含むスキーマやデータベースをクローンした場合、それらはクローンされたスキーマやデータベースには含まれません。

バックアップオブジェクト

テーブル、スキーマ、データベースのバックアップセットを作成できます。

テーブルから他のオブジェクトへの参照

ビューや関数などのオブジェクトは、バックアップ内のスキーマやデータベースの外部にあるオブジェクトを参照できます。バックアップから復元した後もそのような参照が引き続き機能するようにするには、以下のいずれかの戦略を使用します。

  • テーブルとそれらが参照するその他のオブジェクトがすべて同じスキーマまたは同じデータベースにある場合は、スキーマまたはデータベース全体のバックアップセットを作成します。そうすれば、Snowflakeはバックアップから復元する際に、相互接続されたすべてのオブジェクトを一度に復元します。

  • バックアップセット内のオブジェクトがバックアップセットに含まれていないオブジェクトを参照している場合は、バックアップが復元されると、復元されたオブジェクトからの参照は他のデータベースまたはスキーマにある元のオブジェクトをポイントすることに注意してください。バックアップの取得後に、これらの他のオブジェクトをドロップしたり、プロパティを変更したりすると、復元されたオブジェクトへのアクセス時にエラーが発生する可能性があります。

  • アカウントレベルのオブジェクトの場合、復元されたオブジェクトからの参照は*すべて*、元のアカウントレベルのオブジェクトを指します。これは、アカウントレベルのオブジェクトがバックアップの一部ではないためです。たとえば、スキーマバックアップには、セキュリティ統合を参照するシークレットが含まれている場合があります。セキュリティ統合はアカウントレベルのオブジェクトであり、バックアップに含めることはできません。

データベースとスキーマのバックアップに含まれるオブジェクトのタイプ

次のテーブルは、データベースまたはスキーマのバックアップに含まれるオブジェクトのリストです。

オブジェクト

バックアップに含まれるか

メモ

永続テーブル

有り

テーブルのTime Travel情報は、バックアップの一部としては保存されません。

一時テーブル

有り

このようなテーブルは、復元する後も一時テーブルであり続けます。一時スキーマや一時データベースは、復元する後も一時プロパティを保持します。

仮テーブル

無し

仮テーブルはセッションスコープであり、バックアップには含まれません。

動的テーブル

有り

動的テーブルにはバックアップの独自のデータ定義言語(DDL)構文を使用します。CREATEBACKUPSETFORDYNAMICTABLE および CREATEDYNAMICTABLEFROMBACKUPSET コマンドを実行できます。バックアップから動的テーブルを復元すると、テーブルは一時停止状態で復元されます。Snowflakeは、最初のリフレッシュ時に新しいテーブルを 自動的に初期化 します。

外部テーブル

無し

ハイブリッドテーブル

無し

Apache Iceberg™ tables

無し

テーブルの制約

有り

イベントテーブル

無し

シーケンス

有り

ビュー

有り

マテリアライズドビュー

無し

セキュアビュー

有り

ファイル形式

有り

内部ステージ

無し

外部ステージ

無し

仮ステージ

無し

ディレクトリテーブル

無し

パイプ

無し

ストアドプロシージャ

有り

SQL、Javascript、 Python、Java、Scalaプロシージャはすべてサポートされています。

ユーザー定義関数(UDFs)

有り

SQL、Javascript、 Python、Java、Scala関数はすべてサポートされています。スカラー関数 UDFs およびユーザー定義のテーブル関数(UDTFs)は両方ともバックアップに含まれています。バックアップのJava UDFs には、 クローニングの制限 と同じ要件があります。

ストリーム

無し

タスク

有り

バックアップはスナップショットに含まれています。バックアップから復元されたタスクは一時停止されており、再開する必要があります。

データメトリック関数(DMFs)

無し

ポリシー

有り

次の種類のポリシーは、スキーマまたはデータベースバックアップに含まれます。

  • 列レベルのセキュリティ(マスキング)

  • 行アクセスポリシー

  • タグベースのマスキングポリシー

バックアップに含まれるテーブルに他の種類のポリシー(例: 集約ポリシー、投影ポリシー、ストレージライフサイクルポリシー)が適用されている場合、バックアップの作成は失敗します。

付与

有り

ロールをドロップすると、関連する所有権の付与は DROPROLE コマンドを実行するロールに転送されます。この場合、所有権以外の付与は削除されます。したがって、復元されたオブジェクトへの付与は、バックアップの作成時に存在していた付与とは異なる場合があります。

データベースロール

無し

オブジェクトのタグ付け

有り

アラート

有り

ネットワークルール

有り

Githubリポジトリ

無し

モデル

無し

モデルモニター

無し

データセット

無し

Notebooks

無し

連絡先

無し

Cortex検索サービス

無し

dbtプロジェクト

無し

イメージリポジトリ

無し

リスト

無し

組織リスト

無し

パイプ

無し

ポリシー(集約)

無し

ポリシー(認証)

無し

ポリシー(機能)

無し

ポリシー(結合)

無し

ポリシー(パッケージ)

無し

ポリシー(パスワード)

無し

ポリシー(プライバシー)

無し

ポリシー(投影)

無し

ポリシー(セッション)

無し

プロビジョニングされたスループット

無し

セマンティックビュー

無し

サービス

無し

Streamlits

無し

Snowflakeがオブジェクトとバックアップセットを関連付ける方法

データベース、スキーマ、またはテーブルのバックアップセットを作成すると、Snowflakeはバックアップセットをそのデータベース、スキーマ、またはテーブルの内部 ID に関連付けます。元のオブジェクトを削除すると、そのバックアップセットにバックアップを追加することはできません。この動作は、同じ名前のオブジェクトを再作成したり、バックアップから復元されたオブジェクトと置き換えたりした場合にも当てはまります。

代わりに元のオブジェクトの名前を変更した場合は、同じバックアップセットにバックアップを追加して、そのオブジェクトのバックアップを引き続き作成できます。その場合、 SHOWBACKUPSETS の出力は、名前が変更されたオブジェクトの OBJECT_NAME 値を反映するように変更されます。

テーブルのバックアップを作成したいが、CREATE OR REPLACE ステートメントなどによりそのテーブルを頻繁にドロップして再作成している場合は、テーブルを含むスキーマまたはデータベースのバックアップセットにそのテーブルを含めます。そうすることで、テーブルの変更に関係なく、同じバックアップセットを使い続けることができます。

バックアップからテーブルを復元すると、復元されたテーブルは元の名前とは異なる名前で起動します。元のテーブルの内容をバックアップデータで完全に置き換え、同じテーブルのさらなるバックアップには同じバックアップセットを使用し続けると想定します。その場合は、元のテーブルの内容を削除するには TRUNCATE または DELETE ステートメントを使用し、復元されたテーブルからデータをコピーするには INSERT ... SELECT ステートメントを使用します。元のテーブルはドロップしないで、復元されたテーブルの名前を元のテーブルの名前に変更します。

バックアップと暗号化

バックアップセット内のデータは、他のSnowflakeオブジェクトやテーブルデータと同じエンドツーエンドの暗号化によって保護されます。Snowflakeの暗号化の詳細については、 Snowflakeのエンドツーエンド暗号化について をご参照ください。

キーのローテーションは、バックアップ内のデータにも適用されます。

バックアップとデータ系統

Snowflakeは、データベース、スキーマ、テーブルバックアップを含む データ系統 メタデータを保存しません。バックアップからオブジェクトを復元した後は、復元されたデータの系統情報を表示するために Snowsight は使用できません。

バックアップのコスト

次のテーブルは、バックアップの料金を説明しています。

クレジット消費の詳細については、 Snowflakeサービス利用表 をご参照ください。

コストコンポーネント

説明

課金対象

バックアップコンピューティング

Snowflake管理のコンピューティングサービスは、スケジュールされたバックアップの作成と有効期限を生成します。

有り

復元コンピューティング

Snowflake管理のウェアハウスは、バックアップからオブジェクトを復元するために使用されます。

有り

バックアップストレージ

バックアップデータを格納するためのSnowflake管理のクラウドオブジェクトストレージ。

バックアップで保持されたバイトに対して請求されます。クローンで保持されたバイトと同様です。

バックアップストレージのコストは、 TABLE_STORAGE_METRICS ビューで RETAINED_FOR_CLONE_BYTES 列を使用して、また BACKUP_STORAGE_USAGE ビューで監視できます。

アクセス制御権限

次のテーブルは、権限と、バックアップの管理および使用のために権限が付与されるオブジェクト型を示しています。

権限

オブジェクト型

説明

CREATE BACKUP POLICY

スキーマ

スキーマにバックアップポリシーを作成する能力を付与します。この権限を与えるロールには、スキーマに対する USAGE 権限も必要です。

CREATE BACKUP SET

スキーマ

スキーマにバックアップセットを作成する能力を付与します。この権限を与えるロールには、スキーマに対する USAGE 権限も必要です。 バックアップセットを実際に作成するには、バックアップセットの対象となるオブジェクトに対する適切な権限も必要です。テーブルバックアップには SELECT、スキーマバックアップまたはデータベースバックアップには USAGE が必要です。

APPLY

バックアップポリシー

特定のバックアップポリシーを適用する能力を付与します。ACCOUNTADMIN ロールを持つユーザーのみがこの権限を付与できます。

APPLY BACKUP RETENTION LOCK

アカウント

保持ロック付きのバックアップポリシーを作成および適用する能力を付与します。この権限は に付与されます ACCOUNTADMIN ロールおよび は委任できます。

この権限は、ロールが以下を実行できるようにするために必要です。

  • 保持ロック付きのバックアップポリシーを作成します。

  • バックアップセットに保持ロック付きバックアップポリシーを適用します。

  • 保持ロック付きポリシーで保護されたバックアップセットに、ユーザーにより手動で、またはスケジュールに従って自動で、バックアップを作成します。

APPLY LEGAL HOLD

アカウント

スナップショットに対し法的保持を追加または削除する能力を付与します。デフォルトでは、 ACCOUNTADMIN ロールにこの権限があります。

Snowflakeがバックグラウンドでバックアップを自動的に作成または期限切れにする場合、次の権限要件が適用されます。バックアップセットの所有者は、以下の権限を持っている必要があります。

  • バックアップセットの対象となるオブジェクトに対する適切な権限。テーブルバックアップの場合は SELECT、スキーマバックアップまたはデータベースバックアップの場合は USAGE。

  • バックアップセットの対象の親スキーマまたはデータベースに対する権限。

  • バックアップセットの親スキーマおよびデータベースに対する任意の権限。

これらの権限のいずれかが欠落していると、バックアップの自動的な作成または有効期限切れは失敗します。ACCOUNT_USAGE BACKUP_OPERATION_HISTORY ビューを使用して、これらのバックグラウンド処理を監視できます。

バックアップポリシーおよびセットの作成に必要な権限の付与

注釈

  • これらの権限を付与するために使用されるロールには、スキーマに対する OWNERSHIP 権限、または CREATEBACKUPSET もしくは CREATEBACKUPPOLICY 権限 WITHGRANTOPTION を持つ必要です。

  • カスタムアカウントロールまたはデータベースロールに次の権限を付与できます。

ロール myrole がスキーマ myschema でバックアップポリシーを作成できるようにするには、次のステートメントを実行します。

GRANT CREATE BACKUP POLICY ON SCHEMA policy_schema TO ROLE myrole;
Copy

ロール myrole がスキーマ myschema でバックアップセットを作成できるようにするには、次のステートメントを実行します。

GRANT CREATE BACKUP SET ON SCHEMA policy_schema TO ROLE myrole;
Copy

バックアップポリシーに対する APPLY 権限のロールへの付与

注釈

  • ACCOUNTADMIN ロールを持つユーザーのみがこの権限を付与できます。

  • この権限は、カスタムアカウントロールまたはデータベースロールに付与できます。

ロール myrole がバックアップセットにスキーマ hourly_backup_policy を適用できるようにするには、次のステートメントを実行します。

GRANT APPLY ON BACKUP POLICY hourly_backup_policy TO ROLE myrole;
Copy

ロールに APPLY BACKUPRETENTION 権限を付与する

バックアップセットに保持ロック付きのバックアップポリシーを適用する権限をロールに付与することができます。

ACCOUNTADMIN ロールを持つユーザーのみがこの権限を付与できます。

重要

保持ロック付きのバックアップポリシーをバックアップセットに適用すると、 元に戻せません 。規制コンプライアンスに必要な強力な保証により、一度バックアップセットに保持ロックを設定すると、ロックを取り消すことはできません。Snowflakeサポートもそのような保持ロックを取り消すことはできません。保持ロック付きで作成されたバックアップは、有効期限が終了するまで削除できません。

Snowflake組織が削除された場合、その組織はSnowflakeカスタマーではなくなります。この場合、Snowflakeは保持ロック付きのバックアップを含むすべてのバックアップを削除します。

ロール retention_lock_admin_role がバックアップセットに保持ロック付きのバックアップポリシーを適用できるようにするには、次のステートメントを実行します。

GRANT APPLY BACKUP RETENTION LOCK ON ACCOUNT TO ROLE retention_lock_admin_role;
Copy

バックアップの作成と構成

このセクションでは、バックアップを作成および復元するためのワークフロー例を示します。

  1. hourly_backup_policy という名前のバックアップポリシーを作成します。このポリシーで取得されたバックアップは、1時間ごとに作成され、各バックアップは90日後に期限切れになります。

    CREATE BACKUP POLICY hourly_backup_policy
      SCHEDULE = '60 MINUTE'
      EXPIRE_AFTER_DAYS = 90
      COMMENT = 'Hourly backups expire after 90 days';
    
    Copy
  2. テーブル t1 についてバックアップポリシー hourly_backup_policy を使用するバックアップセットを作成します。

    CREATE BACKUP SET t1_backups
      FOR TABLE t1
      WITH BACKUP POLICY hourly_backup_policy;
    
    Copy
  3. スキーマ s1 についてバックアップポリシー hourly_backup_policy を使用するバックアップセットを作成します。

    CREATE BACKUP SET s1_backups
      FOR SCHEMA s1
      WITH BACKUP POLICY hourly_backup_policy;
    
    Copy
  4. データベース d1 についてバックアップポリシー hourly_backup_policy を使用するバックアップセットを作成します。

    CREATE BACKUP SET d1_backups
      FOR DATABASE d1
      WITH BACKUP POLICY hourly_backup_policy;
    
    Copy

スケジュールされた保持ロック付きのバックアップを作成する

スケジュールに従って保持ロック付きのバックアップを自動的に作成するバックアップセットを作成します。保持ロックは、誰かが(権限を持つユーザーであっても)、このポリシーがアタッチされているバックアップセットのバックアップを削除したり変更したりすることを防ぎます。

アカウントに APPLY BACKUP RETENTION LOCK 権限を持つロールのみが、保持ロック付きのバックアップポリシーを作成できます。

重要

保持ロック付きのバックアップポリシーをバックアップセットに適用すると、 元に戻せません 。規制コンプライアンスに必要な強力な保証により、一度バックアップセットに保持ロックを設定すると、ロックを取り消すことはできません。Snowflakeサポートもそのような保持ロックを取り消すことはできません。保持ロック付きで作成されたバックアップは、有効期限が終了するまで削除できません。

Snowflake組織が削除された場合、その組織はSnowflakeカスタマーではなくなります。この場合、Snowflakeは保持ロック付きのバックアップを含むすべてのバックアップを削除します。

  1. 有効期限が90日の日次バックアップを作成する、保持ロック付きのポリシーを作成します。

    CREATE BACKUP POLICY daily_backup_policy_with_lock
      WITH RETENTION LOCK
      SCHEDULE = '1440 MINUTE'
      EXPIRE_AFTER_DAYS = 90
      COMMENT = 'regulatory backups: they have a retention lock and expire after 90 days';
    
    Copy
  2. テーブル t2 についてバックアップポリシー daily_backup_policy_with_lock を使用するバックアップセットを作成します。

    CREATE BACKUP SET t2_backups
      FOR TABLE t2
      WITH BACKUP POLICY daily_backup_policy_with_lock;
    
    Copy
  3. スキーマ s2 についてバックアップポリシー daily_backup_policy_with_lock を使用するバックアップセットを作成します。

    CREATE BACKUP SET s2_backups
      FOR SCHEMA s2
      WITH BACKUP POLICY daily_backup_policy_with_lock;
    
    Copy
  4. データベース d2 についてバックアップポリシー daily_backup_policy_with_lock を使用するバックアップセットを作成します。

    CREATE BACKUP SET d2_backups
      FOR DATABASE d2
      WITH BACKUP POLICY daily_backup_policy_with_lock;
    
    Copy

バックアップを手動で作成する

バックアップは、いつでもバックアップセットに手動で追加できます。これを実行すると、バックアップセットに関連付けられているデータベース、スキーマ、またはテーブルのバックアップが作成されます。バックアップセットにバックアップポリシーによってスケジュールされたバックアップも含まれているかどうかに関係なく、手動でバックアップを作成できます。バックアップセットに関連付けられたバックアップポリシーがあり、そのポリシーが有効期限を定義している場合、その有効期間は手動バックアップにも適用されます。

次の例では、テーブルバックアップセット t1_backups を作成してから、そこに最初のバックアップを追加します。

CREATE BACKUP SET t1_backups FOR TABLE t1;
ALTER BACKUP SET t1_backups ADD BACKUP;
Copy

次の例では、1時間ごとにバックアップするバックアップポリシーと、そのポリシーを使用するテーブルバックアップセット t2_backups を作成してから、そのバックアップセットに手動バックアップを追加します。

CREATE BACKUP POLICY hourly_backup_policy
  SCHEDULE = '60 MINUTE'
  EXPIRE_AFTER_DAYS = 7;

CREATE BACKUP SET t2_backups FOR TABLE t2 WITH BACKUP POLICY hourly_backup_policy;
-- Wait several hours. Then the backup set already contains several scheduled backups.
-- You can manually add a backup at any time, in addition to the scheduled backups.
ALTER BACKUP SET t2_backups ADD BACKUP;
Copy

同様のコマンドを実行して、スキーマまたはデータベースのバックアップセットにバックアップを追加できます。ALTER BACKUP SET コマンドでスキーマまたはデータベースのバックアップセットの名前を置き換えます。

バックアップセットのバックアップポリシーを一時停止する

バックアップセットのバックアップポリシーを一時停止すると、そのバックアップポリシーが、そのバックアップセットでスケジュールされた新しいバックアップの作成に使用されなくなります。また、バックアップポリシーを使用するバックアップセット内の既存のバックアップの有効期限も一時停止します。同じポリシーを使用する他のバックアップセットは影響を受けません。

次の例では、バックアップセット t2_backups のバックアップポリシーを一時停止します。

ALTER BACKUP SET t2_backups SUSPEND BACKUP POLICY;
Copy

バックアップセットの作成プロセスのみ、または有効期限切れプロセスのみを選択的に一時停止することもできます。次の例では、バックアップセット t3_backups の新しいバックアップの作成を一時停止し、バックアップセット t4_backups の古いバックアップの有効期限切れ処理を一時停止します。

ALTER BACKUP SET t3_backups SUSPEND BACKUP CREATION POLICY;
ALTER BACKUP SET t4_backups SUSPEND BACKUP EXPIRATION POLICY;
Copy

ALTER BACKUP SET コマンドの詳細については、 ALTER BACKUP SET をご参照ください。

バックアップセットのバックアップポリシーを再開する

一時停止したバックアップポリシーを再開できます。これを実行すると、バックアップポリシーに従ってバックアップの作成と有効期限切れプロセスが再開されます。ポリシーが一時停止されている間に有効期限に達したバックアップがある場合、Snowflakeはポリシーが再開されるとすぐにそれらのバックアップを削除します。

次の例では、バックアップセット t1_backup のバックアップポリシーを再開します。

ALTER BACKUP SET t1_backups
  RESUME BACKUP POLICY;
Copy

バックアップセットの作成プロセスのみ、または有効期限切れプロセスのみを選択的に再開することもできます。次の例では、バックアップセット t3_backups の新しいバックアップの作成を再開し、バックアップセット t4_backups の古いバックアップの有効期限切れ処理を再開します。

ALTER BACKUP SET t3_backups SUSPEND BACKUP CREATION POLICY;
ALTER BACKUP SET t4_backups SUSPEND BACKUP EXPIRATION POLICY;
Copy

ALTER BACKUP SET コマンドの詳細については、 ALTER BACKUP SET をご参照ください。

バックアップを復元する

特定のバックアップの ID を使用して、バックアップセットからオブジェクトを復元できます。たとえば、現在のスキーマでテーブル t1 をバックアップセット t1_backups から復元するには、次のステートメントを実行します。

  1. 復元するテーブルバックアップの ID を backup_id 列で探します。

    SHOW BACKUPS IN BACKUP SET t1_backups ->> SELECT "created_on", "backup_id", "expire_on" FROM $1;
    
    Copy
    +-------------------------------+--------------------------------------+-------------------------------+
    | created_on                    | backup_id                            | expire_on                     |
    |-------------------------------+------------------------------------------+---------------------------|
    | 2024-08-19 17:12:28.991 -0700 | 983e0b66-91eb-41cb-8a0b-037abfec1914 | 2024-08-20 17:12:28.991 -0700 |
    | 2024-08-19 18:12:33.824 -0700 | b5624ef0-1f35-452f-b132-09d8f0592e52 | 2024-08-20 18:12:33.824 -0700 |
    | 2024-08-19 19:12:43.830 -0700 | eca1a94a-fd40-46db-a2bc-4afba6a38c0a | 2024-08-20 19:12:43.830 -0700 |
    | 2024-08-19 20:12:45.446 -0700 | 8ee2fd7e-1afe-42e1-acd7-79582765a910 | 2024-08-20 20:12:45.446 -0700 |
    | 2024-08-19 21:12:55.305 -0700 | d38caf14-f8a5-4ba8-a248-8287e0cdcf40 | 2024-08-20 21:12:55.305 -0700 |
    +-------------------------------+--------------------------------------+-----------+-------------------+
    
  2. 復元するスキーマバックアップの ID を backup_id 列で探します。

    SHOW BACKUPS IN BACKUP SET s1_backups;
    
    Copy
    +-------------------------------+--------------------------------------+-------------------------------+
    | created_on                    | backup_id                            | expire_on                     |
    |-------------------------------+--------------------------------------+-------------------------------|
    | 2024-08-19 17:12:28.991 -0700 | 0a0382e1-d265-46e9-b152-4c3b2b859e65 | 2024-08-20 17:12:28.991 -0700 |
    | 2024-08-19 18:12:33.824 -0700 | 8dbcf919-3393-4590-928f-5481d7f2502f | 2024-08-20 18:12:33.824 -0700 |
    | 2024-08-19 19:12:43.830 -0700 | 8ee2fd7e-1afe-42e1-acd7-79582765a910 | 2024-08-20 19:12:43.830 -0700 |
    | 2024-08-19 20:12:45.446 -0700 | bd729a79-01bc-444d-a550-adaaa31ab62f | 2024-08-20 20:12:45.446 -0700 |
    | 2024-08-19 21:12:55.305 -0700 | 9a8802c5-5fbd-4200-a09d-43e046103939 | 2024-08-20 21:12:55.305 -0700 |
    +-------------------------------+--------------------------------------+-------------------------------+
    
  3. 復元するデータベースバックアップの ID を backup_id 列で探します。

    SHOW BACKUPS IN BACKUP SET d1_backups;
    
    Copy
    +-------------------------------+--------------------------------------+-------------------------------+
    | created_on                    | backup_id                            | expire_on                     |
    |-------------------------------+--------------------------------------+-------------------------------|
    | 2024-08-19 17:12:28.991 -0700 | 42435925-4e77-4b01-ba89-8163ac03e12f | 2024-08-20 17:12:28.991 -0700 |
    | 2024-08-19 18:12:33.824 -0700 | 29c2c1b9-6599-4f0b-87b8-d43377fd7c77 | 2024-08-20 18:12:33.824 -0700 |
    | 2024-08-19 19:12:43.830 -0700 | a4283984-a063-4415-acc4-0e3c19259fad | 2024-08-20 19:12:43.830 -0700 |
    | 2024-08-19 20:12:45.446 -0700 | ffe25397-64b9-4c5f-b061-23a1885dc2dc | 2024-08-20 20:12:45.446 -0700 |
    | 2024-08-19 21:12:55.305 -0700 | 28e12b8a-aab8-40a8-ae39-9a5a5f654d66 | 2024-08-20 21:12:55.305 -0700 |
    +-------------------------------+--------------------------------------+-------------------------------+
    
  4. 2024-08-19 18:12:33に取得されたテーブル t1 のバックアップを復元します。

    CREATE TABLE restored_t1 FROM BACKUP SET t1_backups IDENTIFIER 'b5624ef0-1f35-452f-b132-09d8f0592e52';
    
    Copy
  5. 2024-08-19 18:12:33に取得されたスキーマ s1 のバックアップを復元します。

    CREATE SCHEMA restored_s1 FROM BACKUP SET s1_backups IDENTIFIER '8dbcf919-3393-4590-928f-5481d7f2502f';
    
    Copy
  6. 2024-08-19 18:12:33に取得されたデータベース d1 のバックアップを復元します。

    CREATE DATABASE restored_d1 FROM BACKUP SET d1_backups IDENTIFIER '29c2c1b9-6599-4f0b-87b8-d43377fd7c77';
    
    Copy

バックアップセットからバックアップを削除する

バックアップセットについては、法的保持を持たない最も古いバックアップのみを削除できます。バックアップ ID を指定して実行します。is_under_legal_hold プロパティを調べると、法的保持を持たないバックアップを見つけることができます。created_on プロパティを調べると、最も古いバックアップを見つけることができます。

注釈

保持ロック付きのバックアップポリシーがそのバックアップセットにアタッチされている場合や、その特定のバックアップに法的保持が適用されている場合は、そのバックアップセットからバックアップを削除することはできません。

バックアップセットから削除するバックアップは、セット内の最も古いバックアップである必要があります。

  1. 削除するテーブルバックアップの ID を次の出力の backup_id 列から見つけます。created_on 列で昇順に並べ替えると、最も古いバックアップが最初に配置されます。LIMIT 1 を SELECT コマンドに追加すると、バックアップの詳細を含む最も古い行のみが返されます。

    SHOW BACKUPS IN BACKUP SET t1_backups ->>
      SELECT "created_on", "backup_id", "expire_on" FROM $1
        WHERE "is_under_legal_hold" = 'N'
        ORDER BY "created_on";
    
    Copy
    +-------------------------------+--------------------------------------+-------------------------------+
    | created_on                    | backup_id                            | expire_on                     |
    |-------------------------------+--------------------------------------+-------------------------------|
    | 2024-08-19 17:12:28.991 -0700 | 983e0b66-91eb-41cb-8a0b-037abfec1914 | 2024-08-20 17:12:28.991 -0700 |
    | 2024-08-19 18:12:33.824 -0700 | b5624ef0-1f35-452f-b132-09d8f0592e52 | 2024-08-20 18:12:33.824 -0700 |
    | 2024-08-19 19:12:43.830 -0700 | eca1a94a-fd40-46db-a2bc-4afba6a38c0a | 2024-08-20 19:12:43.830 -0700 |
    | 2024-08-19 20:12:45.446 -0700 | 8ee2fd7e-1afe-42e1-acd7-79582765a910 | 2024-08-20 20:12:45.446 -0700 |
    | 2024-08-19 21:12:55.305 -0700 | d38caf14-f8a5-4ba8-a248-8287e0cdcf40 | 2024-08-20 21:12:55.305 -0700 |
    +-------------------------------+--------------------------------------+-------------------------------+
    
  2. 2024-08-19 17:12:28に作成された t1_backups バックアップを、 backup_id を使用して削除します。

    ALTER BACKUP SET t1_backups DELETE BACKUP IDENTIFIER '983e0b66-91eb-41cb-8a0b-037abfec1914';
    
    Copy
  3. 削除するスキーマバックアップの ID を次の出力の backup_id 列から見つけます。

    SHOW BACKUPS IN BACKUP SET s1_backups ->>
      SELECT "created_on", "backup_id", "expire_on" FROM $1 ORDER BY "created_on";
    
    Copy
    +-------------------------------+--------------------------------------+-------------------------------+
    | created_on                    | backup_id                            | expire_on                     |
    |-------------------------------+--------------------------------------+-------------------------------|
    | 2024-08-19 17:12:28.991 -0700 | 28e12b8a-aab8-40a8-ae39-9a5a5f654d66 | 2024-08-20 17:12:28.991 -0700 |
    | 2024-08-19 18:12:33.824 -0700 | 46a1e22a-8557-432f-a14c-1261a4ca2b34 | 2024-08-20 18:12:33.824 -0700 |
    | 2024-08-19 19:12:43.830 -0700 | 3e42fef6-b895-4055-a59f-179744d015d3 | 2024-08-20 19:12:43.830 -0700 |
    | 2024-08-19 20:12:45.446 -0700 | 7807d24e-285e-4741-b332-87c32bad5cb6 | 2024-08-20 20:12:45.446 -0700 |
    | 2024-08-19 21:12:55.305 -0700 | e022e619-ee83-45a0-b2b7-9007e284bdb3 | 2024-08-20 21:12:55.305 -0700 |
    +-------------------------------+--------------------------------------+-------------------------------+
    
  4. 2024-08-19 17:12:28に作成された s1_backups バックアップを、 backup_id を使用して削除します。

    ALTER BACKUP SET s1_backups DELETE BACKUP IDENTIFIER '28e12b8a-aab8-40a8-ae39-9a5a5f654d66';
    
    Copy
  5. 削除するデータベースバックアップの ID を次の出力の backup_id 列から見つけます。

    SHOW BACKUPS IN BACKUP SET d1_backups ->>
      SELECT "created_on", "backup_id", "expire_on" FROM $1 ORDER BY "created_on";
    
    Copy
    +-------------------------------+--------------------------------------+-------------------------------+
    | created_on                    | backup_id                            | expire_on                     |
    |-------------------------------+--------------------------------------+-------------------------------|
    | 2024-08-19 17:12:28.991 -0700 | d3a77432-c98d-4969-91a9-fffae5dd655c | 2024-08-20 17:12:28.991 -0700 |
    | 2024-08-19 18:12:33.824 -0700 | 0a0382e1-d265-46e9-b152-4c3b2b859e65 | 2024-08-20 18:12:33.824 -0700 |
    | 2024-08-19 19:12:43.830 -0700 | 25e01ee0-ea9d-4bb7-af7f-f3fe87f9409e | 2024-08-20 19:12:43.830 -0700 |
    | 2024-08-19 20:12:45.446 -0700 | a12294f5-fc63-49cf-84f1-c7b72f7664af | 2024-08-20 20:12:45.446 -0700 |
    | 2024-08-19 21:12:55.305 -0700 | 28e12b8a-aab8-40a8-ae39-9a5a5f654d66 | 2024-08-20 21:12:55.305 -0700 |
    +-------------------------------+--------------------------------------+-------------------------------+
    
  6. 2024-08-19 17:12:28に作成された d1_backups バックアップを、 backup_id を使用して削除します。

    ALTER BACKUP SET d1_backups DELETE BACKUP IDENTIFIER 'd3a77432-c98d-4969-91a9-fffae5dd655c';
    
    Copy
  7. 2024-08-19 21:12:55に作成された、より新しい d1_backups バックアップの削除を試行します。Snowflakeがバックアップセット内の最も古いバックアップ以外のバックアップの削除を防ぐ仕組みに注目します。

    ALTER BACKUP SET d1_backups DELETE BACKUP IDENTIFIER '28e12b8a-aab8-40a8-ae39-9a5a5f654d66';
    
    Copy
    Backup '28e12b8a-aab8-40a8-ae39-9a5a5f654d66' cannot be deleted as it is not the oldest active backup in the backup set D1_BACKUPS.
    

バックアップセットを削除する

DROP BACKUP SET コマンドを使用してバックアップセットを削除できます。

注釈

保持ロックがあり、期限切れのバックアップが含まれているバックアップセットは削除できません。また、バックアップのいずれかに法的保持がある場合も、バックアップセットを削除できません。

t1_backups バックアップセットを削除します。

DROP BACKUP SET t1_backups;
Copy

s1_backups バックアップセットを削除します。

DROP BACKUP SET s1_backups;
Copy

d1_backups バックアップセットを削除します。

DROP BACKUP SET d1_backups;
Copy

特定のテーブルのバックアップを含むすべてのバックアップセットを検索する

次の例は、特定のスキーマとデータベース内の特定のテーブルを含むすべてのバックアップセットを検索する方法を示しています。その SHOWTABLES コマンドは、パイプ演算子を使用して、データベース、スキーマ、テーブルの名前を取得し、変数に保存します。その SHOW BACKUP SETS 出力はフィルタリングされ、テーブルを含むデータベース、テーブルを含むスキーマ、またはその単一のテーブル自体をバックアップするバックアップセットを表示します。

フィルタリングされた SHOW BACKUP SETS の出力を見ると、データベース``my_big_important_database`` のデータベースバックアップセットが2つ、スキーマ my_big_important_database.public のスキーマバックアップセットが1つ、およびテーブル my_big_important_database.public.my_small_secondary_table のテーブルバックアップセットが1つあります。

SHOW TABLES IN SCHEMA public ->>
  SET (dname, sname, tname) =
    (SELECT "database_name", "schema_name", "name" FROM $1
      WHERE "name" = 'MY_SMALL_SECONDARY_TABLE' AND "kind" = 'TABLE');

SHOW BACKUP SETS ->> SELECT "object_kind", "name", "database_name", "schema_name", "object_name" FROM $1
  WHERE ("object_kind" = 'TABLE' AND "database_name" = $dname AND "schema_name" = $sname AND "object_name" = $tname)
    OR ("object_kind" = 'SCHEMA' AND "database_name" = $dname AND "object_name" = $sname)
    OR ("object_kind" = 'DATABASE' AND "object_name" = $dname);
Copy
+-------------+------------------+---------------------------+-------------+---------------------------+
| object_kind | name             | database_name             | schema_name | object_name               |
|-------------+------------------+---------------------------+-------------+---------------------------|
| DATABASE    | DATABASE_BACKUP  | MY_BIG_IMPORTANT_DATABASE | PUBLIC      | MY_BIG_IMPORTANT_DATABASE |
| DATABASE    | DATABASE_BACKUP2 | MY_BIG_IMPORTANT_DATABASE | PUBLIC      | MY_BIG_IMPORTANT_DATABASE |
| SCHEMA      | SCHEMA_BACKUP3   | MY_BIG_IMPORTANT_DATABASE | PUBLIC      | PUBLIC                    |
| TABLE       | TABLE_BACKUP2    | MY_BIG_IMPORTANT_DATABASE | PUBLIC      | MY_SMALL_SECONDARY_TABLE  |
+-------------+------------------+---------------------------+-------------+---------------------------+

依存関係のあるテーブルのバックアップを作成する

次の例では、別のスキーマのシーケンスと外部キーを参照するテーブルのテーブルバックアップを作成する方法を示します。準備のために、シーケンスとテーブルを含むスキーマ other_schema を作成します。次に、シーケンスと他のテーブルを参照し、 public スキーマにメインテーブルを作成します。

USE DATABASE my_big_important_database;

CREATE SCHEMA other_schema;
USE SCHEMA other_schema;

CREATE SEQUENCE my_sequence;
CREATE TABLE my_dimension_table (id INT AUTOINCREMENT PRIMARY KEY);

USE SCHEMA public;
CREATE TABLE dependent_table
(
   id INT DEFAULT my_big_important_database.other_schema.my_sequence.NEXTVAL PRIMARY KEY,
   foreign_id INT,
   FOREIGN KEY (foreign_id) REFERENCES my_big_important_database.other_schema.my_dimension_table(id)
 );

SELECT GET_DDL('TABLE','dependent_table');
Copy

その GET_DDL()出力は、他のスキーマをポイントする参照を示しますː

+-------------------------------------------+
| GET_DDL('TABLE','DEPENDENT_TABLE')        |
|-------------------------------------------|
| create or replace TABLE DEPENDENT_TABLE ( |
|     ID NUMBER(38,0) NOT NULL DEFAULT MY_BIG_IMPORTANT_DATABASE.OTHER_SCHEMA.MY_SEQUENCE.NEXTVAL,
|     FOREIGN_ID NUMBER(38,0),                |
|     primary key (ID),                       |
|     foreign key (FOREIGN_ID) references MY_BIG_IMPORTANT_DATABASE.OTHER_SCHEMA.MY_DIMENSION_TABLE(ID)
| );                                        |
+-------------------------------------------+

次に、テーブルのバックアップセットを作成し、バックアップを追加します。

CREATE BACKUP SET dependency_experiments FOR TABLE dependent_table;
ALTER BACKUP SET dependency_experiments ADD BACKUP;
SHOW BACKUPS IN BACKUP SET dependency_experiments;
Copy

その SHOWBACKUPS 出力には、復元する操作に使用する backup_id 値が含まれます。

+-------------------------------+--------------------------------------+------------------------+---------------------------+--------------+-----------+
| created_on                    | backup_id                            | backup_set_name        | database_name             | schema_name  | expire_on |
|-------------------------------+--------------------------------------+------------------------+---------------------------+--------------+-----------|
| 2025-07-01 11:53:27.860 -0700 | 0fd44138-b571-449b-be0a-72779501f80e | DEPENDENCY_EXPERIMENTS | MY_BIG_IMPORTANT_DATABASE | OTHER_SCHEMA | NULL      |
+-------------------------------+--------------------------------------+------------------------+---------------------------+--------------+-----------+

そのテーブルを新しい名前で復元し、復元されたテーブルが他のスキーマのオブジェクトを参照していることを確認します。

CREATE TABLE restored_dependent_table FROM BACKUP SET dependency_experiments
  IDENTIFIER '0fd44138-b571-449b-be0a-72779501f80e';

SELECT GET_DDL('TABLE','restored_dependent_table');
Copy
+----------------------------------------------------+
| GET_DDL('TABLE','RESTORED_DEPENDENT_TABLE')        |
|----------------------------------------------------|
| create or replace TABLE RESTORED_DEPENDENT_TABLE ( |
|     ID NUMBER(38,0) NOT NULL DEFAULT MY_BIG_IMPORTANT_DATABASE.OTHER_SCHEMA.MY_SEQUENCE.NEXTVAL,
|     FOREIGN_ID NUMBER(38,0),                         |
|     foreign key (FOREIGN_ID) references MY_BIG_IMPORTANT_DATABASE.OTHER_SCHEMA.MY_DIMENSION_TABLE(ID),
|     primary key (ID)                                 |
| );                                                 |
+----------------------------------------------------+

参照されるオブジェクトが存在しなくなった場合に何が起こるかを説明するために、シーケンスをドロップし、同じバックアップからテーブルを再度復元します。

DROP SEQUENCE my_big_important_database.other_schema.my_sequence;
CREATE TABLE OR REPLACE restored_dependent_table FROM BACKUP SET dependency_experiments
  IDENTIFIER '0fd44138-b571-449b-be0a-72779501f80e';

SELECT * FROM restored_dependent_table;
Copy

テーブルのクエリは引き続き機能します。

+----+------------+
| ID | FOREIGN_ID |
|----+------------|
+----+------------+
0 Row(s) produced. Time Elapsed: 0.129s

ただし、存在しなくなったシーケンスに依存するため、GET_DDL()、 DESCRIBEおよび INSERT などの操作はすべて失敗します:

SELECT GET_DDL('TABLE','restored_dependent_table');
Copy
002073 (02000): SQL compilation error:
Sequence used as a default value in table 'MY_BIG_IMPORTANT_DATABASE.OTHER_SCHEMA.RESTORED_DEPENDENT_TABLE'
  column 'ID' was not found or could not be accessed.
DESC TABLE restored_dependent_table;
Copy
+------------+--------------+--------+-------+----------------------------------------+-------------+------------+-------+------------+---------+-------------+----------------+
| name       | type         | kind   | null? | default                                | primary key | unique key | check | expression | comment | policy name | privacy domain |
|------------+--------------+--------+-------+----------------------------------------+-------------+------------+-------+------------+---------+-------------+----------------|
| ID         | NUMBER(38,0) | COLUMN | N     | [sequence cannot be found or accessed] | Y           | N          | NULL  | NULL       | NULL    | NULL        | NULL           |
| FOREIGN_ID | NUMBER(38,0) | COLUMN | Y     | NULL                                   | N           | N          | NULL  | NULL       | NULL    | NULL        | NULL           |
+------------+--------------+--------+-------+----------------------------------------+-------------+------------+-------+------------+---------+-------------+----------------+
INSERT INTO restored_dependent_table (foreign_id) VALUES (2);
Copy
002073 (02000): SQL compilation error:
Sequence used as a default value in table 'MY_BIG_IMPORTANT_DATABASE.OTHER_SCHEMA.RESTORED_DEPENDENT_TABLE'
  column 'ID' was not found or could not be accessed.

動的テーブルのバックアップを作成する

動的テーブルには常に他のテーブルへの参照があります。そのため、動的テーブルにはスキーマバックアップまたはデータベースバックアップを使用して、元のテーブルと動的テーブルを同じバックアップに含めることができます。

動的テーブルのテーブルバックアップを作成する場合は、 DYNAMIC キーワードを CREATE BACKUP SET コマンドに含め、バックアップから復元するときには CREATE TABLE コマンドにも含めます。次の例では、動的テーブルと、そのテーブルのテーブルバックアップセットを設定し、最初のバックアップを作成します。

CREATE DYNAMIC TABLE my_dynamic_table
  TARGET_LAG = '1 minute'
  WAREHOUSE = my_wh
  AS SELECT * FROM my_base_table WHERE col1 IS NOT NULL;

CREATE BACKUP SET dynamic_table_backups
  FOR DYNAMIC TABLE my_dynamic_table;

ALTER BACKUP SET dynamic_table_backups ADD BACKUP;
Copy

次の例は、さまざまな時間に作成されたバックアップのバックアップ IDs を特定する方法を示しています。この場合、最新のバックアップは結果セットの最初の行になります。次に、バックアップの ID を CREATE DYNAMIC TABLE コマンドで使用します。

SHOW BACKUPS IN BACKUP SET dynamic_table_backups
  ->> SELECT "created_on", "backup_id" FROM $1
        ORDER BY "created_on" DESC;

CREATE DYNAMIC TABLE restored_dynamic_table
  FROM BACKUP SET dynamic_table_backups
    IDENTIFIER '<backup_id_from_SHOW_BACKUPS_output>';
Copy

Tip

バックアップから動的テーブルを復元すると、Snowflakeは最初のリフレッシュ時に新しいテーブルを 自動的に初期化 します。

バックアップおよびバックアップ操作を監視する

次のビューをクエリすると、存在するバックアップ関連オブジェクト、それらのプロパティ、およびストレージの使用量を判断できます。

情報スキーマ:

アカウント使用状況:

組織の使用状況:

SQL 参照トピック

バックアップポリシー

バックアップセット

バックアップ

実際の CREATEBACKUP コマンドを実行するわけではありません。新しいバックアップを作成するには、ALTER BACKUP SET ... ADD BACKUP を実行します。または、スケジュールのあるバックアップポリシーにバックアップセットを関連付けると、Snowflakeは指定されたスケジュールに基づいて、バックアップセットにバックアップを自動的に作成します。古いバックアップを削除するには、ALTER BACKUP SET ... DELETE BACKUP を実行します。このような操作では、特定のバックアップの識別子を指定する必要があります。次のコマンドを使用して、バックアップの識別子と、各バックアップの作成日などの他の情報を見つけることができます。

バックアップからのオブジェクトの復元

構文 CREATE object_kind FROM BACKUP SET を使用して、適切な種類のバックアップセットから各種のオブジェクトを復元します。

バックアップセットにあるそれ以降のバックアップは、復元されたオブジェクトではなく、元のオブジェクトを使用します。これは、復元されたオブジェクトの名前を元のオブジェクトと同じ名前に変更した場合でも当てはまります。復元後も同じバックアップセットを引き続き使用する場合は、オブジェクトを新しい名前で復元してから、データを元のオブジェクトに転送し直します。

ビュー

次のシステムビューには、バックアップ、バックアップセット、およびバックアップポリシーに関連するメタデータが含まれています。

情報スキーマビュー

INFORMATION_SCHEMA スキーマ内のこれらのビューには、現存するバックアップ関連オブジェクトに関する情報が含まれています。

アカウント使用状況ビュー:

ACCOUNT_USAGE スキーマ内のこれらのビューには、アカウントレベルでの、現存する、またはドロップされたバックアップ関連オブジェクト、バックアップで実行された操作、およびそれらが使用するストレージに関する情報が含まれています。

組織の使用状況ビュー

ORGANIZATION_USAGE スキーマ内のこれらのビューには、組織レベルでの、現存する、またはドロップされたバックアップ関連オブジェクト、バックアップで実行された操作、およびそれらが使用するストレージに関する情報が含まれています。

用語の変更

この機能は、スナップショットではなく バックアップ と呼ばれるようになりました。すべての SQL コマンド、ビュー、および権限で BACKUP という用語を使用します。

  • CREATE BACKUP POLICY、CREATE BACKUP SET

  • ALTER BACKUP POLICY、ALTER BACKUP SET

  • DROP BACKUP POLICY、DROP BACKUP SET

  • SHOW BACKUP POLICIES、SHOW BACKUP SETS、SHOW BACKUPS IN BACKUP SET

  • アカウント使用状況、組織の使用状況、情報スキーマのBACKUPS、BACKUP_POLICIES、BACKUP_SETS ビュー

  • APPLY BACKUP POLICY、APPLY BACKUP RETENTION LOCK 権限

以前の SNAPSHOT/SNAPSHOTS 名はまだ存在しますが非推奨であり、同等の BACKUP/BACKUPS が推奨されます。例:

  • CREATE SNAPSHOT POLICY は非推奨です。代わりに CREATE BACKUP POLICY を使用してください。

  • SNAPSHOTS ビューは非推奨です。代わりに BACKUPS ビューを使用してください。

  • APPLY SNAPSHOT POLICY 権限は非推奨です。代わりに APPLY BACKUP POLICY 権限を使用してください。

非推奨となったコマンド、ビュー、権限は引き続き機能しますが、Snowflakeは将来のリリースでそれらを削除する予定です。