用于灾难恢复和不可变存储的备份¶
备份可帮助组织保护关键数据免遭修改或删除。
备份代表 Snowflake 对象的离散快照。您可以选择备份对象、备份频率、保留备份的时长以及是否添加保留锁定,这样它们就不会被过早删除。
Snowflake 备份用例¶
以下用例是备份的典型应用:
- 法规合规性:
带保留锁定的备份可帮助组织、金融机构和相关行业满足要求记录以不可变格式保留的法规。
备注
Snowflake 已聘请 Cohasset Associates 对我们的备份功能进行独立评估,以确保其符合关键的监管记录保存要求,包括 SEC 17a-4(f)、SEC 18a-6(e)、FINRA Rule 4511(c) 和 CFTC Rule 1.31(c)-(d)。此次 Cohasset 评估提供了独立的第三方验证,证明 Snowflake 的不可变存储控制机制支持数据的创建、保护和保留,并使客户确信 Snowflake 符合所评估法规所要求的关键行业数据保留标准。
有关适用于启用了保留锁定的 Snowflake 备份的完整合规报告,请参阅 Snowflake 合规中心 (https://trust.snowflake.com/resources?s=jv88d2ujxzj9kcnz43w31&name=snowflake-cohasset-assessment)。
- 恢复:
备份可帮助组织创建离散快照,以保护和恢复业务关键性数据,以防意外修改或删除。
- 网络弹性:
带保留锁定的备份是整体网络弹性战略的一部分。它们帮助组织在网络攻击(尤其是勒索软件攻击)期间保护业务关键数据。保留锁定确保攻击者无法删除此类数据,即使他们使用 ACCOUNTADMIN 或 ORGADMIN 角色获得账户访问权限。
关键概念¶
本部分概述 Snowflake 中备份的关键概念。
备份¶
备份 代表对象的时间点快照。
对象可以是单个表、架构或整个数据库。
特定的备份可以通过 Snowflake 生成的唯一 ID 来识别。
无法修改备份。但是,可以删除,并且可以修改备份的有效期(除非应用 保留锁定)。
在日常操作期间,您很少与单个备份进行交互。相反,您可以管理包含它们的 备份集。例如,您可以通过运行 SHOW BACKUPS IN BACKUP SET 命令来获得备份列表。您可以通过运行 ALTERBACKUPSET 命令来创建新备份。
备份集¶
备份集 是架构级对象,包含特定数据库、架构或表的一组备份。Snowflake 提供 SQL 命令,用于对备份集进行 CREATE、ALTER、DROP、SHOW 和 DESCRIBE 操作。
您可以为同一个对象设置多个备份集。
集合内备份的生命周期由可选的 备份策略 决定,您可以将其附加到备份集。您还可以在备份集中手动添加或删除备份。您删除备份的能力受其他因素的影响,尤其是 保留锁定 和 法律保留。
备份策略¶
备份策略 是架构级对象,包含定义备份集内备份生命周期的设置。这些设置包括时间表、到期时间和保留锁定。
时间表 决定何时创建备份。时间表可以定义为以分钟为单位的时间间隔,也可以定义为 cron 表达式。例如,如果将时间表设置为一小时,则每 60 分钟进行一次对象备份。
到期期限 是备份的有效时长。备份到期后,Snowflake 会自动将其删除,除非对该特定备份进行了法律保留。
小技巧
如果备份集没有保留锁定且特定备份未应用法律保留,则可以在有效期结束之前手动删除备份。您可以手动逐一删除备份,始终从没有法律保留的最早备份开始。
每个备份策略都必须具有一个或两个计划和有效期属性。例如,您可以创建一个具有计划和过期时间的策略,并让 Snowflake 在该策略应用的所有备份集里,自动处理备份的创建和删除。或者,如果您想自己管理旧备份的移除,则可以创建有时间表且没有有效期的策略。或者,您可以创建有有效期但没有时间表的策略,然后自己管理备份创建。您无法创建没有时间表和有效期的策略。
如果将备份策略与备份集相关联,则可以在创建备份集时进行关联,也可以稍后应用该策略。或者,您可以拥有一个没有关联备份策略的备份集。在这种情况下,您可以手动控制何时进行新备份和使旧备份过期。
您可以将一个备份策略应用于多个备份集。如果您修改备份策略,Snowflake 会将变更应用到该策略所关联的所有备份集。
保留锁定¶
保留锁定 可保护备份在规定的有效期内不被删除。您可以使用带保留锁定的备份进行备份,以实现合规性和网络弹性。以下限制适用于具有保留锁定的备份集:
任何角色(包括 ACCOUNTADMIN 角色)都无法删除备份。
您无法缩短备份的有效期,但可以延长该期限。
如果备份集中有任何未到期的备份,您无法删除该备份集。
如果架构包含的备份集有任何未到期的备份,您无法删除该架构。
如果数据库包含的备份集有任何未到期的备份,您无法删除该数据库。
如果账户包含的数据库具有含任何未到期备份的备份集,您无法删除该账户。
重要
对备份集应用带保留锁定的备份策略是 不可逆操作。由于监管合规性所需的强保障要求,对备份集设置保留锁定后,您将无法撤销该锁定。Snowflake 支持部门也无法撤销此类保留锁定。在对具有较长有效期的备份集设置保留锁定前,请谨慎规划,以避免产生不可删除的备份集及其所含架构和数据库的意外存储费用。
如果删除了 Snowflake 组织,该组织将不再是 Snowflake 客户。此种情况下,Snowflake 会删除所有备份(包括带保留锁定的备份)。删除 Snowflake 组织需要 Snowflake 支持部门介入。管理员不可能意外执行此操作。
法律保留¶
Snowflake 备份的 法律保留 功能可防止备份被覆盖或删除。这样,您就可以根据自己的法律要求保留 Snowflake 数据库、架构或表。
Snowflake 允许您对特定备份进行法律保留。当 Snowflake 备份处于法律保留状态时,以下条件适用:
任何人都无法修改备份。
任何人都无法删除备份。即使备份已经过了 EXPIRE_AFTER_DAYS 期限,也是如此。
对备份的访问记录在案,可进行审计。
与保留锁定不同,特权用户可以移除法律保留。
重要
如果要复制备份集,请确保该备份集中的备份处于法律保留状态后立即执行刷新。如果您在复制包含法律保留的备份集之前执行故障转移,则当您回退到原始主账户时,原始备份集可能会被覆盖,从而可能擦除法律保留。
备份生命周期概述¶
下图显示了 Snowflake 对象、备份、备份集和备份策略之间的关系。该图涉及最简单的备份:单个表的备份。每项备份操作都会生成一个新备份。该特定对象的所有备份都组合在一个备份集中。备份集中备份的自动添加和移除受备份策略的约束。要从备份中恢复信息,您可以使用 CREATE 命令从特定备份中创建新对象。
备份的工作原理¶
备份是 Snowflake 对象的 零复制 复制,类似于 克隆。备份在创建时不会复制表数据。备份机制会备份表数据,而不会产生数据复制的额外成本或时间。
Snowflake 将数据存储在不可变的文件中,并维护从备份指向表底层数据文件的指针。随着表的演变和修改,只要有引用该文件的未到期备份,Snowflake 就会确保每个数据文件免遭删除。
备份限制¶
Snowflake 对备份强制执行以下限制:
您无法修改备份策略的保留锁定。
当策略有保留锁定时,您可以延长到期期限,但不能缩短到期期限。
定时备份的最小计划间隔为 1 小时(60 分钟)。
备份的限制¶
目前您最多可以为特定数据库创建两个数据库备份集。同样,您最多可以为特定架构创建两个架构备份集,为特定表创建两个表备份集。一个对象可能仍出现在两个以上的备份集中。例如,一个表可能有一个或两个关联的表备份集。同一个表也可能包含在一个或两个架构备份集中,以及一个或两个数据库备份集中。
备份与其他灾难恢复和业务连续性功能的比较¶
备份具有以下优势,这些优势与其他 Snowflake 业务连续性和灾难恢复功能(例如复制和 Time Travel)不同:
您可以为备份启用长期保留。长期保留有助于恢复、合规和网络弹性,以抵御勒索软件或内部攻击等威胁。
保留锁定确保任何用户(包括账户管理员)都无法删除备份。
您可以将备份安排在与其他数据传输操作(例如复制刷新)不同的时间范围内。
您可以对单个表对象或容器对象(例如整个架构或数据库)进行备份和恢复。
通过使用包含保留锁定的备份策略,您可以防止备份后缩短备份的保留时间。这与 Time Travel 功能不同,在 Time Travel 功能中,您可以将保留间隔缩短到零。
与 Time Travel 和故障安全不同,备份可以保存来自更多类型对象的数据,而不仅仅是表和表数据。
备份的速度和存储效率类似于用于克隆的零复制机制。
与使用克隆实现自己的备份机制相比,将同一对象的所有备份组合到备份集中的方式使管理更加简单。例如,您不必管理大量对象,不必设计命名架构来跟踪克隆对象,也不必实施计划机制来删除旧克隆。此外,与克隆对象不同,备份在创建后无法修改。
每个备份都代表截至指定时间点的单个表、架构或数据库。备份不包括账户级对象,例如用户或角色。某些类型的表和其他数据库级对象不包含在架构和数据库备份中。有关更多信息,请参阅 备份对象。
与备份相关的对象与关联的数据库、架构或表存储在同一个云服务提供商 (CSP) 区域中。对于业务连续性和灾难恢复场景,您通常将备份与 Snowflake 账户复制相结合。这样,所有备份集和备份策略都可以复制到不同的区域或不同的 CSP,即使出现影响原始区域或 CSP 的停机也能恢复。
无法克隆备份集和备份策略。如果您克隆包含此类对象的架构或数据库,则它们不会包含在克隆的架构或数据库中。
备份对象¶
您可以为表、架构和数据库创建备份集。
从表到其他对象的引用¶
对象(例如视图或函数)可以引用备份中架构或数据库之外的对象。为确保此类引用在您从备份恢复后继续运行,请使用以下策略之一:
如果表及其引用的其他对象都在同一个架构或同一个数据库中,则为整个架构或数据库创建备份集。这样,当您从备份恢复时,Snowflake 可以一次恢复所有相互连接的对象。
如果备份集中的对象引用未包含在备份集中的对象,请注意,恢复备份时,恢复对象的引用指向来自其他数据库或架构的原始对象。如果您在进行备份后删除了这些其他对象或更改了其属性,则在访问恢复的对象时可能会遇到错误。
对于账户级对象,来自恢复对象的任何引用 始终 指向原始账户级对象。那是因为账户级对象不是任何备份的一部分。例如,架构备份可能包含一个涉及安全集成的密钥。安全集成是账户级对象,不能包含在任何备份中。
数据库和架构备份中的对象类型¶
下表列出了数据库或架构备份中包含的对象:
对象 |
包含在备份中 |
备注 |
|---|---|---|
永久表 |
是 |
表的 Time Travel 信息不作为备份的一部分存储。 |
瞬态表 |
是 |
恢复这些表后,它们仍然是临时表。恢复瞬态架构和瞬态数据库后,它们也会保留瞬态属性。 |
临时表 |
否 |
临时表受会话范围限制,不包含在备份中。 |
动态表 |
是 |
动态表有自己的备份数据定义语言 (DDL) 语法。您可以运行 CREATE BACKUP SET FOR DYNAMIC TABLE 和 CREATE DYNAMIC TABLE FROM BACKUP SET 命令。从备份恢复动态表时,该表将以暂停状态恢复。Snowflake 会在首次刷新新表时 自动初始化 新表。 |
外部表 |
否 |
|
混合表 |
否 |
|
Apache Iceberg™ 表 |
否 |
|
表约束条件 |
是 |
|
事件表 |
否 |
|
序列 |
是 |
|
视图 |
是 |
|
物化视图 |
否 |
|
安全视图 |
是 |
|
文件格式 |
是 |
|
内部暂存区 |
否 |
|
外部暂存区 |
否 |
|
临时暂存区 |
否 |
|
目录表 |
否 |
|
管道 |
否 |
|
存储过程 |
是 |
SQL、Javascript、Python、Java 和 Scala 过程都受支持。 |
用户定义的函数 (UDFs) |
是 |
SQL、Javascript、Python、Java 和 Scala 函数都受支持。标量 UDFs 和用户定义的表函数 (UDTFs) 都包含在备份中。Java UDFs 在备份中与在 克隆的限制 中具有相同的要求。 |
流 |
否 |
|
任务 |
是 |
任务包含在备份中。从备份恢复的任务已暂停,必须恢复。 |
数据指标函数 (DMFs) |
否 |
|
策略 |
是 |
架构或数据库备份中包含以下类型的策略:
如果备份中包含的任何表应用了任何其他类型的策略(例如聚合策略、投影策略或存储生命周期策略),则备份创建将失败。 |
权限 |
是 |
如果您删除某个角色,则关联的所有权授权将转移到执行 DROP ROLE 命令的角色。在这种情况下,所有权以外的授权将被删除。因此,恢复对象的授权可能与创建备份时存在的授权不同。 |
数据库角色 |
否 |
|
Object Tagging |
是 |
|
警报 |
是 |
|
网络规则 |
是 |
|
Github 存储库 |
否 |
|
模型 |
否 |
|
模型监视器 |
否 |
|
数据集 |
否 |
|
笔记本 |
否 |
|
Contacts |
否 |
|
Cortex Search Service |
否 |
|
Dbt 项目 |
否 |
|
镜像仓库 |
否 |
|
列表 |
否 |
|
组织列表 |
否 |
|
管道 |
否 |
|
策略(聚合) |
否 |
|
策略(身份验证) |
否 |
|
策略(功能) |
否 |
|
策略(联接) |
否 |
|
策略(包) |
否 |
|
策略(密码) |
否 |
|
策略(隐私) |
否 |
|
策略(投影) |
否 |
|
策略(会话) |
否 |
|
预置吞吐量 |
否 |
|
语义视图 |
否 |
|
服务 |
否 |
|
Streamlit |
否 |
Snowflake 如何将对象与其备份集相关联¶
当您为数据库、架构或表创建备份集时,Snowflake 会将备份集与该数据库、架构或表的内部 ID 关联。如果您删除原始对象,则无法再向该备份集添加任何备份。即使您重新创建同名对象,或者将其替换为从备份恢复的对象,此行为也适用。
如果您改为重命名原始对象,则可以通过向同一备份集添加更多备份来继续对其进行更多备份。在这种情况下,SHOW BACKUP SETS 的输出会更改以反映重命名对象的 OBJECT_NAME 值。
如果您想备份某个表,但您频繁删除并重新创建该表(可能通过 CREATE OR REPLACE 语句),请将其包含在包含该表的架构或数据库的备份集中。这样,无论表有何更改,您都可以继续使用相同的备份集。
当您从备份恢复表时,恢复的表以不同于原始表的名称开头。假设您想要将原始表的内容完全替换为备份数据,并继续使用相同的备份集对同一表进行更多备份。在这种情况下,使用 TRUNCATE 或 DELETE 语句移除原始表的内容,并使用 INSERT ... SELECT 语句从恢复的表中复制数据。不要删除原始表,也不要将恢复的表重命名为原始表的名称。
备份和加密¶
备份集中的数据受与其他 Snowflake 对象和表数据相同的端到端加密保护。有关 Snowflake 加密的更多信息,请参阅 了解 Snowflake 中的端到端加密。
密钥轮换也适用于备份中的数据。
备份和数据沿袭¶
Snowflake 不使用数据库、架构和表备份保留 数据沿袭 元数据。从备份恢复对象后,您无法使用 Snowsight 查看恢复的数据的沿袭信息。
备份成本¶
下表描述了备份的费用。
有关 Credit 消耗的信息,请参阅 Snowflake 服务消耗表。
成本组成部分 |
描述 |
已计费 |
|---|---|---|
备份计算 |
Snowflake 管理的计算服务生成计划的备份创建和到期。 |
是 |
恢复计算 |
Snowflake 管理的仓库用于从备份中恢复对象。 |
是 |
备份存储 |
Snowflake 管理的云对象存储,用于存储备份数据。 |
按备份的保留字节计费,类似于为克隆保留的字节。 |
您可以使用 RETAINED_FOR_CLONE_BYTES 列在 TABLE_STORAGE_METRICS 视图中监控备份存储成本,也可以在 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 权限,或者必须具有 CREATE BACKUP SET 或 CREATE BACKUP POLICY 权限 WITH GRANT OPTION。
您可以向自定义账户角色或数据库角色授予以下权限。
要使角色 myrole 能够在架构 myschema 中创建备份策略,请执行以下语句:
GRANT CREATE BACKUP POLICY ON SCHEMA policy_schema TO ROLE myrole;
要使角色 myrole 能够在架构 myschema 中创建备份集,请执行以下语句:
GRANT CREATE BACKUP SET ON SCHEMA policy_schema TO ROLE myrole;
向角色授予备份策略的 APPLY 权限¶
备注
只有拥有 ACCOUNTADMIN 角色的用户才能授予此权限。
您可以向自定义账户角色或数据库角色授予此权限。
要使角色 myrole 能够将备份策略 hourly_backup_policy 应用到备份集,请执行以下语句:
GRANT APPLY ON BACKUP POLICY hourly_backup_policy TO ROLE myrole;
向角色授予 APPLY BACKUP RETENTION LOCK 权限¶
您可以向角色授予在备份集上应用具有保留锁定的备份策略的权限。
只有拥有 ACCOUNTADMIN 角色的用户才能授予此权限。
重要
对备份集应用带保留锁定的备份策略是 不可逆操作。由于监管合规性所需的强保障要求,对备份集设置保留锁定后,您将无法撤销该锁定。Snowflake 支持部门也无法撤销此类保留锁定。在有效期结束之前,使用保留锁定创建的备份无法删除。
如果删除了 Snowflake 组织,该组织将不再是 Snowflake 客户。此种情况下,Snowflake 会删除所有备份(包括带保留锁定的备份)。
要使角色 retention_lock_admin_role 能够对备份集应用具有保留锁定的备份策略,请执行以下语句:
GRANT APPLY BACKUP RETENTION LOCK ON ACCOUNT TO ROLE retention_lock_admin_role;
创建和配置备份¶
本部分提供创建和恢复备份的示例工作流程。
创建名为
hourly_backup_policy的备份策略。使用此策略创建的备份每小时生成一次,且每个备份在 90 天后过期。CREATE BACKUP POLICY hourly_backup_policy SCHEDULE = '60 MINUTE' EXPIRE_AFTER_DAYS = 90 COMMENT = 'Hourly backups expire after 90 days';
使用备份策略
hourly_backup_policy为表t1创建备份集。CREATE BACKUP SET t1_backups FOR TABLE t1 WITH BACKUP POLICY hourly_backup_policy;
使用备份策略
hourly_backup_policy为架构s1创建备份集。CREATE BACKUP SET s1_backups FOR SCHEMA s1 WITH BACKUP POLICY hourly_backup_policy;
使用备份策略
hourly_backup_policy为数据库d1创建备份集。CREATE BACKUP SET d1_backups FOR DATABASE d1 WITH BACKUP POLICY hourly_backup_policy;
创建具有保留锁定的计划备份¶
创建备份集,按计划自动创建具有保留锁定的备份。保留锁定可防止任何人(甚至是特权用户)删除或修改该策略所附加到的任何备份集中的备份。
只有拥有账户 APPLY BACKUP RETENTION LOCK 权限的角色才能创建具有保留锁定的备份策略。
重要
对备份集应用带保留锁定的备份策略是 不可逆操作。由于监管合规性所需的强保障要求,对备份集设置保留锁定后,您将无法撤销该锁定。Snowflake 支持部门也无法撤销此类保留锁定。在有效期结束之前,使用保留锁定创建的备份无法删除。
如果删除了 Snowflake 组织,该组织将不再是 Snowflake 客户。此种情况下,Snowflake 会删除所有备份(包括带保留锁定的备份)。
创建具有保留锁定的策略,用于创建有效期为 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';
使用备份策略
daily_backup_policy_with_lock为表t2创建备份集。CREATE BACKUP SET t2_backups FOR TABLE t2 WITH BACKUP POLICY daily_backup_policy_with_lock;
使用备份策略
daily_backup_policy_with_lock为架构s2创建备份集。CREATE BACKUP SET s2_backups FOR SCHEMA s2 WITH BACKUP POLICY daily_backup_policy_with_lock;
使用备份策略
daily_backup_policy_with_lock为数据库d2创建备份集。CREATE BACKUP SET d2_backups FOR DATABASE d2 WITH BACKUP POLICY daily_backup_policy_with_lock;
手动创建备份¶
您可以随时手动将备份添加到备份集中。此操作会生成与备份集关联的数据库、架构或表的备份。无论备份集是否还有由备份策略计划的备份,您都可以手动创建备份。如果存在与备份集关联的备份策略,并且该策略定义了有效期,则该有效期也适用于手动创建的备份。
以下示例创建了一个表备份集 t1_backups,然后向其添加第一个备份:
CREATE BACKUP SET t1_backups FOR TABLE t1;
ALTER BACKUP SET t1_backups ADD BACKUP;
以下示例创建了一个包含每小时备份的备份策略、一个使用该策略的表备份集 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;
您可以运行类似的命令,将备份添加到架构或数据库备份集。替换 ALTER BACKUP SET 命令中架构或数据库备份集的名称。
暂停备份集上的备份策略¶
暂停备份集上的备份策略时,将阻止使用该备份策略在该备份集中创建新的计划备份。您还可以暂停该备份集中使用备份策略的现有备份的到期时间。使用相同策略的其他备份集不受影响。
以下示例暂停备份集 t2_backups 的备份策略:
ALTER BACKUP SET t2_backups SUSPEND BACKUP POLICY;
您还可以有选择地仅暂停备份集的创建过程或仅暂停其过期过程。以下示例暂停在备份集 t3_backups 中创建新备份,并暂停备份集 t4_backups 中旧备份的过期:
ALTER BACKUP SET t3_backups SUSPEND BACKUP CREATION POLICY; ALTER BACKUP SET t4_backups SUSPEND BACKUP EXPIRATION POLICY;
有关 ALTER BACKUP SET 命令的更多信息,请参阅 ALTER BACKUP SET。
恢复备份集上的备份策略¶
您可以恢复暂停的备份策略。根据备份策略,此操作会恢复备份的创建和到期。如果在策略暂停期间有任何备份已达到到期时间,Snowflake 将在策略恢复后立即删除这些备份。
以下示例恢复备份集 t1_backup 的备份策略:
ALTER BACKUP SET t1_backups
RESUME BACKUP POLICY;
您还可以有选择地仅恢复备份集的创建过程或仅暂停其过期过程。以下示例恢复在备份集 t3_backups 中创建新备份,并恢复备份集 t4_backups 中旧备份的过期:
ALTER BACKUP SET t3_backups SUSPEND BACKUP CREATION POLICY;
ALTER BACKUP SET t4_backups SUSPEND BACKUP EXPIRATION POLICY;
有关 ALTER BACKUP SET 命令的更多信息,请参阅 ALTER BACKUP SET。
恢复备份¶
您可以使用特定备份的 ID,从备份集恢复对象。例如,要从当前架构中的备份集 t1_backups 恢复表 t1,请执行以下语句:
在
backup_id列中找到要恢复的表备份的 ID:SHOW BACKUPS IN BACKUP SET t1_backups ->> SELECT "created_on", "backup_id", "expire_on" FROM $1;
+-------------------------------+--------------------------------------+-------------------------------+ | 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 | +-------------------------------+--------------------------------------+-----------+-------------------+
在
backup_id列中找到要恢复的架构备份的 ID:SHOW BACKUPS IN BACKUP SET s1_backups;
+-------------------------------+--------------------------------------+-------------------------------+ | 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 | +-------------------------------+--------------------------------------+-------------------------------+
在
backup_id列中找到要恢复的数据库备份的 ID:SHOW BACKUPS IN BACKUP SET d1_backups;
+-------------------------------+--------------------------------------+-------------------------------+ | 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 | +-------------------------------+--------------------------------------+-------------------------------+
恢复在 2024 年 8 月 19 日 18:12:33 备份的表
t1:CREATE TABLE restored_t1 FROM BACKUP SET t1_backups IDENTIFIER 'b5624ef0-1f35-452f-b132-09d8f0592e52';
恢复在 2024 年 8 月 19 日 18:12:33 备份的架构
s1:CREATE SCHEMA restored_s1 FROM BACKUP SET s1_backups IDENTIFIER '8dbcf919-3393-4590-928f-5481d7f2502f';
恢复在 2024 年 8 月 19 日 18:12:33 备份的数据库
d1:CREATE DATABASE restored_d1 FROM BACKUP SET d1_backups IDENTIFIER '29c2c1b9-6599-4f0b-87b8-d43377fd7c77';
从备份集中删除备份¶
对于任何备份集,您只能删除没有法律保留的最早备份。您可以通过指定备份 ID 来完成此操作。您可以通过检查 is_under_legal_hold 属性来找到没有法律保留的备份。您可以通过检查 created_on 属性来找到最早的备份。
备注
如果某个备份集关联了带有保留锁定的备份策略,或者该特定备份已应用法律保留,则您无法删除该备份集中的任何备份。
从备份集中删除的备份必须是备份集中最早的备份。
在以下输出的
backup_id列中找到要删除的表备份的 ID。按created_on列升序排序,将最早的备份放在首位。您可以向 SELECT 命令添加LIMIT 1,仅返回包含最早备份的详细信息的行。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";
+-------------------------------+--------------------------------------+-------------------------------+ | 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 | +-------------------------------+--------------------------------------+-------------------------------+
使用
backup_id删除在 2024 年 8 月 19 日 17:12:28 创建的t1_backups备份:ALTER BACKUP SET t1_backups DELETE BACKUP IDENTIFIER '983e0b66-91eb-41cb-8a0b-037abfec1914';
在以下输出的
backup_id列中找到要删除的架构备份的 ID:SHOW BACKUPS IN BACKUP SET s1_backups ->> SELECT "created_on", "backup_id", "expire_on" FROM $1 ORDER BY "created_on";
+-------------------------------+--------------------------------------+-------------------------------+ | 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 | +-------------------------------+--------------------------------------+-------------------------------+
使用
backup_id删除在 2024 年 8 月 19 日 17:12:28 创建的s1_backups备份:ALTER BACKUP SET s1_backups DELETE BACKUP IDENTIFIER '28e12b8a-aab8-40a8-ae39-9a5a5f654d66';
在以下输出的
backup_id列中找到要删除的数据库备份的 ID:SHOW BACKUPS IN BACKUP SET d1_backups ->> SELECT "created_on", "backup_id", "expire_on" FROM $1 ORDER BY "created_on";
+-------------------------------+--------------------------------------+-------------------------------+ | 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 | +-------------------------------+--------------------------------------+-------------------------------+
使用
backup_id删除在 2024 年 8 月 19 日 17:12:28 创建的d1_backups备份:ALTER BACKUP SET d1_backups DELETE BACKUP IDENTIFIER 'd3a77432-c98d-4969-91a9-fffae5dd655c';
尝试删除在 2024 年 8 月 19 日 21:12:55 创建的更新
d1_backups备份。注意 Snowflake 如何防止您删除备份集中最早备份以外的备份。ALTER BACKUP SET d1_backups DELETE BACKUP IDENTIFIER '28e12b8a-aab8-40a8-ae39-9a5a5f654d66';
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;
删除 s1_backups 备份集:
DROP BACKUP SET s1_backups;
删除 d1_backups 备份集:
DROP BACKUP SET d1_backups;
查找所有包含特定表备份的备份集¶
以下示例说明如何在特定架构和数据库中查找包含特定表的所有备份集。SHOW TABLES 命令使用管道运算符检索数据库、架构和表的名称,并将它们存储在变量中。对 SHOW BACKUP SETS 输出进行筛选以显示备份集,该备份集备份包含该表的数据库,或者包含该表或单个表的架构。
SHOW BACKUP SETS 的筛选输出显示有两个针对数据库 my_big_important_database 的数据库备份集、一个针对架构 my_big_important_database.public 的备份集,以及一个针对表 my_big_important_database.public.my_small_secondary_table 的表备份集。
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);
+-------------+------------------+---------------------------+-------------+---------------------------+
| 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');
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;
SHOW BACKUPS 输出包含用于恢复操作的 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');
+----------------------------------------------------+
| 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;
查询表仍然有效:
+----+------------+
| ID | FOREIGN_ID |
|----+------------|
+----+------------+
0 Row(s) produced. Time Elapsed: 0.129s
但是,GET_DDL()、DESCRIBE 和 INSERT 之类的操作都会失败,因为它们依赖于已不存在的序列:
SELECT GET_DDL('TABLE','restored_dependent_table');
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;
+------------+--------------+--------+-------+----------------------------------------+-------------+------------+-------+------------+---------+-------------+----------------+
| 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);
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.
为动态表创建备份¶
动态表总是涉及对某些其他表的引用。出于这个原因,您可能更愿意对动态表使用架构备份或数据库备份,这样原始表和动态表就可以包含在同一个备份中。
如果您为动态表创建表备份,则当您从备份恢复时,应在 CREATE BACKUP SET 命令以及 CREATE TABLE 命令中包含关键字 DYNAMIC。以下示例设置动态表、该表的表备份集,并创建第一个备份:
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;
以下示例说明如何确定在不同时间创建的备份的备份 IDs。在这种情况下,最新的备份是结果集中的第一行。然后,在 CREATE DYNAMIC TABLE 命令中使用备份的 ID。
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>';
小技巧
当您从备份恢复动态表时,Snowflake 会在首次刷新新表时 自动初始化 新表。
添加和移除法律保留¶
在处理 Snowflake 备份的法律保留之前,请了解其目的和要求。有关更多信息,请参阅 法律保留。
假设组织的法律或合规团队发送了诉讼保留请求,具体说明了需要保留哪些类型的数据。在这种情况下,您可以遵循以下流程:
与法律团队合作,确定相关数据的存储位置以及哪些备份集包含关联对象。
对备份集内相应时间段的备份进行法律保留。这样做会禁用该备份的任何自动到期。您可以对 Snowflake 根据计划自动创建的备份或您手动创建的备份设置法律保留。无论备份集是否具有相关的备份策略、有效期或保留锁定,法律保留均适用。
对于复制包含备份集的数据库的任何辅助账户,您可以执行刷新操作。这样,在任何故障转移和故障恢复操作中,法律保留和相关的备份都得以保留。
您可以使用 Snowflake 访问控制和日志来审核处于法律保留状态的数据的访问权限。
法律案件结束且法律团队批准移除法律保留后,具有 APPLY LEGAL HOLD 权限的用户将解除法律保留。然后,正常的自动到期将恢复。
此示例显示了在法律保留生命周期内对特定备份集内备份可使用的 SQL 命令序列。您可以使用 SHOW BACKUPS IN BACKUP SET 命令找到相关备份的标识符,然后检查 "is_under_legal_hold" 列以查看是否已存在法律保留。然后,您在特定备份中添加或移除法律保留。
USE ROLE <role_name>; -- use a role that has the APPLY LEGAL HOLD privilege
SHOW BACKUPS IN BACKUP SET <backup_set_name>
->> SELECT * FROM $1 WHERE "is_under_legal_hold" = 'N';
ALTER BACKUP SET <backup_set_name>
MODIFY BACKUP IDENTIFIER '<backup_identifier>'
ADD LEGAL HOLD;
USE ROLE <role_name>; -- use a role that has the APPLY LEGAL HOLD privilege
SHOW BACKUPS IN BACKUP SET <backup_set_name>
->> SELECT * FROM $1 WHERE "is_under_legal_hold" = 'Y';
ALTER BACKUP SET <backup_set_name>
MODIFY BACKUP IDENTIFIER '<backup_identifier>'
REMOVE LEGAL HOLD;
小技巧
您还可以查询 INFORMATION_SCHEMA.BACKUPS 或 ACCOUNT_USAGE.BACKUPS 视图中的 "is_under_legal_hold" 列,检查是否存在法律保留。
监控备份和备份操作¶
您可以通过查询以下视图来确定存在哪些与备份相关的对象、它们的属性以及它们使用的存储空间。
Information Schema:
Account Usage:
Organization usage:
SQL 参考主题¶
备份策略¶
备份集¶
备份¶
您没有运行实际的 CREATE BACKUP 命令。要创建新备份,请运行 ALTER BACKUP SET ... ADD BACKUP。或者,当您将备份集与具有计划的备份策略关联时,Snowflake 会根据指定的计划自动在备份集中创建备份。要删除较旧的备份,请运行 ALTER BACKUP SET ... DELETE BACKUP。此类操作需要您为特定备份指定标识符。您可以使用以下命令查找备份标识符以及其他信息,例如每个备份的创建时间。
从备份中恢复对象¶
您可以使用语法 CREATE object_kind FROM BACKUP SET 从相应的备份集恢复每种对象。
备份集中的其他备份使用原始对象,而不是恢复的对象。即使您将恢复的对象重命名为与原始对象相同的名称,也是如此。如果要在恢复后继续使用相同的备份集,则应使用新名称恢复对象,然后将数据传输回原始对象。
视图¶
以下系统视图包含与备份、备份集和备份策略相关的元数据。
Information Schema 视图¶
INFORMATION_SCHEMA 架构中的这些视图包含有关当前存在的备份相关对象的信息:
Account Usage 视图¶
ACCOUNT_USAGE 架构中的这些视图包含账户级别的信息,涉及当前存在或已被删除的备份相关对象、对备份执行的操作以及它们所使用的存储:
Organization 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
Account Usage、Organization Usage 和 Information Schema 中的 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 计划在未来的版本中将其移除。