UNDROP SNAPSHOT

备注

Snowflake 的支持政策和服务级别协议 中规定的服务级别目前不包括此操作。

恢复以前移除的 块存储卷的快照。Snowflake 恢复快照后,数据就可供使用。

另请参阅:

管理快照DROP SNAPSHOTCREATE SNAPSHOT

语法

UNDROP SNAPSHOT { <name> | IDENTIFIER( <id> ) }
 [ RENAME TO <new_snapshot_name> ];
Copy

参数

name

指定要恢复的快照的名称。如果指定快照名称,该命令将恢复最近删除的带有该名称的快照。

如果标识符包含空格或特殊字符,则整个字符串必须放在双引号内。放在双引号内的标识符也区分大小写。

有关更多信息,请参阅 标识符要求

IDENTIFIER( id )

为要恢复的快照指定系统生成的标识符。

如果您有多个同名的已删除快照,您可以查询 BLOCK_STORAGE_SNAPSHOTS view 以获取要恢复的已删除快照的系统生成的标识符。然后,使用 IDENTIFIER 关键字 来指定要恢复此快照。恢复的快照将保留其原始名称。

有关通过系统生成的标识符恢复快照的示例,请参阅 示例

备注

在为笔记本、表、块存储快照、架构和数据库执行 UNDROP 命令时,只能使用系统生成的标识符和 IDENTIFIER() 关键字。

RENAME TO new_snapshot_name

指定快照恢复后的名称。这允许您将快照恢复为其他名称。

访问控制要求

用于执行此操作的 角色 必须至少具有以下 权限

权限

对象

备注

OWNERSHIP

快照

OWNERSHIP is a special privilege on an object that is automatically granted to the role that created the object, but can also be transferred using the GRANT OWNERSHIP command to a different role by the owning role (or any role with the MANAGE GRANTS privilege).

对架构中的对象进行操作至少需要父数据库的一项权限和父架构的一项权限。

有关创建具有指定权限集的自定义角色的说明,请参阅 创建自定义角色

有关对 安全对象 执行 SQL 操作的相应角色和权限授予的一般信息,请参阅 访问控制概述

使用说明

  • 快照只能恢复到删除时快照所在的数据库和架构。例如,如果您在架构 s1 中创建并删除快照,然后将会话中的当前架构更改为 s2 并尝试取消删除快照,快照将在架构 s1 中恢复,而不在当前架构 s2 中恢复。

  • 如果已存在同名快照,UNDROP SNAPSHOT 会返回错误。在这种情况下,您可以选择使用 RENAME TO 参数指定其他名称。

  • UNDROP SNAPSHOT 依赖于 Snowflake Time Travel 功能。仅当对象在 :ref:` 数据保留期 <label-time_travel_data_retention_period>` 内被删除时,才可以恢复。默认保留期为 24 小时。数据保留期过后,将无法恢复快照。

示例

使用名称恢复快照

以下示例展示如何恢复之前删除的名为 example_snapshot 的快照:

UNDROP SNAPSHOT example_snapshot;
Copy
+--------------------------------------------------+
| status                                           |
|--------------------------------------------------|
| Snapshot EXAMPLE_SNAPSHOT successfully restored. |
+--------------------------------------------------+

使用 ID 恢复快照

使用 IDENTIFIER() 按 ID 恢复已删除的快照。您可以通过 BLOCK_STORAGE_SNAPSHOTS view 视图中的 snapshot_id 列来查找要恢复的特定快照的快照 ID。例如,如果您有多个名为 MY_SNAPSHOT 的已删除快照,并且要恢复倒数第二个已删除的快照 MY_SNAPSHOT,请按以下步骤操作:

  1. 在 Account Usage LOCK_STORAGE_SNAPSHOTS 视图中,找到已删除表对应的表 ID:

    SELECT snapshot_id,
        snapshot_name,
        database_name,
        schema_name,
        created_on,
        deleted_on
      FROM SNOWFLAKE.ACCOUNT_USAGE.BLOCK_STORAGE_SNAPSHOTS
      WHERE database_name = 'TUTORIAL_DB'
        AND schema_name = 'DATA_SCHEMA'
        AND snapshot_name = 'MY_SNAPSHOT'
        AND deleted_on IS NOT NULL
      ORDER BY deleted_on;
    
    Copy

    输出示例:

    +-------------+---------------+---------------+-------------+-------------------------------+-------------------------------+
    | SNAPSHOT_ID | SNAPSHOT_NAME | DATABASE_NAME | SCHEMA_NAME | CREATED_ON                    | DELETED_ON                    |
    |-------------+---------------+---------------+-------------+-------------------------------+-------------------------------|
    |           1 | MY_SNAPSHOT   | TUTORIAL_DB   | DATA_SCHEMA | 2025-09-06 09:51:47.131 -0700 | 2025-09-15 14:21:49.683 -0700 |
    +-------------+---------------+---------------+-------------+-------------------------------+-------------------------------+
    
  2. 通过快照 ID 取消删除 MY_SNAPSHOT;要恢复倒数第二个已删除的快照,请使用上一个语句输出中的快照 ID 1。

    执行以下语句后,快照将以其原始名称 MY_SNAPSHOT 恢复:

    UNDROP SNAPSHOT IDENTIFIER(1);
    
    Copy
语言: 中文