ALTER DATABASE

修改现有数据库的属性。

数据库修改包括以下内容:

  • 更改数据库的名称或更改 Time Travel 数据保留期(如果您使用的是 Snowflake Enterprise Edition 或更高版本)。

  • 启用并管理数据库复制和故障转移。

另请参阅:

CREATE DATABASEDESCRIBE DATABASEDROP DATABASESHOW DATABASESUNDROP DATABASE

语法

ALTER DATABASE [ IF EXISTS ] <name> RENAME TO <new_db_name>

ALTER DATABASE [ IF EXISTS ] <name> SWAP WITH <target_db_name>

ALTER DATABASE [ IF EXISTS ] <name> SET [ DATA_RETENTION_TIME_IN_DAYS = <integer> ]
                                        [ MAX_DATA_EXTENSION_TIME_IN_DAYS = <integer> ]
                                        [ EXTERNAL_VOLUME = <external_volume_name> ]
                                        [ CATALOG = <catalog_integration_name> ]
                                        [ DEFAULT_DDL_COLLATION = '<collation_specification>' ]
                                        [ LOG_LEVEL = '<log_level>' ]
                                        [ TRACE_LEVEL = '<trace_level>' ]
                                        [ COMMENT = '<string_literal>' ]

ALTER DATABASE <name> SET TAG <tag_name> = '<tag_value>' [ , <tag_name> = '<tag_value>' ... ]

ALTER DATABASE <name> UNSET TAG <tag_name> [ , <tag_name> ... ]

ALTER DATABASE [ IF EXISTS ] <name> UNSET { DATA_RETENTION_TIME_IN_DAYS         |
                                            MAX_DATA_EXTENSION_TIME_IN_DAYS     |
                                            EXTERNAL_VOLUME                     |
                                            CATALOG                             |
                                            DEFAULT_DDL_COLLATION               |
                                            COMMENT
                                          }
                                          [ , ... ]
Copy

数据库复制和故障转移语法

数据库复制

ALTER DATABASE <name> ENABLE REPLICATION TO ACCOUNTS <account_identifier> [ , <account_identifier> ... ] [ IGNORE EDITION CHECK ]

ALTER DATABASE <name> DISABLE REPLICATION [ TO ACCOUNTS <account_identifier> [ , <account_identifier> ... ] ]

ALTER DATABASE <name> REFRESH
Copy

数据库故障转移

ALTER DATABASE <name> ENABLE FAILOVER TO ACCOUNTS <account_identifier> [ , <account_identifier> ... ]

ALTER DATABASE <name> DISABLE FAILOVER [ TO ACCOUNTS <account_identifier> [ , <account_identifier> ... ] ]

ALTER DATABASE <name> PRIMARY
Copy

参数

name

指定要更改的数据库的标识符。如果标识符包含空格、特殊字符或大小写混合字符,则整个字符串必须放在双引号内。放在双引号内的标识符也区分大小写。

RENAME TO new_db_name

指定数据库的新标识符,它对于您的账户必须是唯一的。

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

重命名对象时,引用该对象的其他对象必须使用新名称进行更新。

SWAP WITH target_db_name

在两个指定的数据库之间交换所有对象(架构、表、视图等)和元数据(包括标识符)。还可交换对数据库及其所含对象授予的所有访问控制权限。SWAP WITH 实质上是将两个数据库的重命名作为单个操作执行。

SET ...

指定要为数据库设置的一个(或多个)属性(用空格、逗号或新行分隔):

DATA_RETENTION_TIME_IN_DAYS = num

指定可以对数据库执行 Time Travel 操作(CLONE 和 UNDROP)的天数,并指定在数据库中创建的所有架构的默认 Time Travel 保留时间。

您可以指定的值取决于您使用的 Snowflake Edition:

  • Standard Edition:01

  • Enterprise Edition(或更高版本):090

MAX_DATA_EXTENSION_TIME_IN_DAYS = integer

对象参数,用于指定 Snowflake 可以延长数据库中表的数据保留期以防止表上的流过时的最大天数。

有关此参数的详细说明,请参阅 MAX_DATA_EXTENSION_TIME_IN_DAYS

EXTERNAL_VOLUME = external_volume_name

对象参数,指定要用于 Iceberg 表 的默认外部卷。

有关此参数的详细信息,请参阅 EXTERNAL_VOLUME

CATALOG = catalog_integration_name

对象参数,指定要用于 Iceberg 表 的默认目录集成。

有关此参数的详细信息,请参阅 CATALOG

DEFAULT_DDL_COLLATION = 'collation_specification'

指定以下项的默认 排序规则规范

  • 添加到数据库中现有表的任何新列。

  • 添加到数据库的新表中的所有列。

设置该参数 不会 更改任何现有列的排序规则规范。

有关该参数的更多详细信息,请参阅 DEFAULT_DDL_COLLATION

LOG_LEVEL = 'log_level'

指定应引入并在活动事件表中可用的消息的严重级别。引入指定级别(以及更严重级别)的消息。

有关级别的更多信息,请参阅 LOG_LEVEL。有关设置日志级别的更多信息,请参阅 设置日志级别

TRACE_LEVEL = 'trace_level'

控制如何将跟踪事件引入到事件表中。

有关级别的更多信息,请参阅 TRACE_LEVEL。有关设置跟踪级别的更多信息,请参阅 设置跟踪级别

TAG tag_name = 'tag_value' [ , tag_name = 'tag_value' , ... ]

指定 标签 名称和标签字符串值。

标签值始终为字符串,标签值的最大字符数为 256。

有关在语句中指定标签的信息,请参阅 对象和列的标签配额

COMMENT = 'string_literal'

为数据库添加注释或覆盖现有注释。

UNSET ...

指定要为数据库取消设置的一个(或多个)属性和/或参数,这会将它们重置为默认值:

  • DATA_RETENTION_TIME_IN_DAYS

  • MAX_DATA_EXTENSION_TIME_IN_DAYS

  • EXTERNAL_VOLUME

  • CATALOG

  • DEFAULT_DDL_COLLATION

  • TAG tag_name [ , tag_name ... ]

  • COMMENT

您可以使用单个 ALTER 语句重置多个属性/参数;但是,每个属性/参数 必须 用逗号分隔。重置属性/参数时,请仅指定名称;指定属性的值将返回错误。

数据库复制和故障转移参数

ENABLE REPLICATION TO ACCOUNTS account_identifier [ , account_identifier ... ]

将本地数据库提升为用于复制的主数据库。主数据库可以在一个或多个账户中复制,使这些账户中的用户可以查询各个 *辅助*(即副本)数据库中的对象。

或者,修改现有主数据库,以添加到可存储数据库副本的账户列表或从该列表中移除。

提供组织中可存储此数据库副本的账户列表(用逗号分隔)。

account_identifier

账户的唯一标识符。首选标识符为 organization_name.account_name。若要查看组织中已启用复制的账户列表,请查询 SHOW REPLICATION ACCOUNTS

虽然旧版账户定位器也可以用作账户标识符,但不建议使用,因为旧版账户定位器未来可能无法运行。有关使用账户定位器作为账户标识符的更多详细信息,请参阅 数据库复制和故障转移使用说明

IGNORE EDITION CHECK

允许在以下任一场景中将数据复制到较低版本的账户:

  • 主数据库位于 Business Critical(或更高版本)账户中,但批准复制的一个或多个账户位于较低版本中。Business Critical Edition 适用于具有极其敏感数据的 Snowflake 账户。

  • 主数据库位于 Business Critical(或更高版本)账户中,并且已签署业务伙伴协议,可根据 HIPAA 和 HITRUST 法规在账户中存储 PHI 数据,但一个或多个获准复制的账户未签署此类协议,无论它们是否为 Business Critical(或更高版本)账户。

默认情况下,这两种场景都是禁止的,以防止 Business Critical(或更高版本)账户的账户管理员无意中将敏感数据复制到较低版本的账户。

DISABLE REPLICATION [ TO ACCOUNTS account_identifier [ , account_identifier ... ] ]

禁用对此主数据库的复制,这意味着无法刷新其他账户中此数据库的副本(即辅助数据库)。任何辅助数据库仍链接到主数据库,但刷新辅助数据库的请求将被拒绝。

请注意,禁用对主数据库的复制并不会阻止将其复制到同一账户;因此,SHOW REPLICATION DATABASES 输出中仍将列出该数据库。

(可选)提供组织中以逗号分隔的账户列表,从而仅在指定账户中禁用对此数据库的复制。

account_identifier

账户的唯一标识符。首选标识符为 organization_name.account_name。若要查看组织中已启用复制的账户列表,请查询 SHOW REPLICATION ACCOUNTS

虽然旧版账户定位器也可以用作账户标识符,但不建议使用,因为旧版账户定位器未来可能无法运行。有关使用账户定位器作为账户标识符的更多详细信息,请参阅 数据库复制和故障转移使用说明

REFRESH

根据主数据库的快照刷新辅助数据库。快照包括对对象和数据的更改。

ENABLE FAILOVER TO ACCOUNTS account_identifier [ , account_identifier ... ]

指定组织中以逗号分隔的账户列表,在此列表中,可以将此主数据库的副本提升为主数据库。

account_identifier

账户的唯一标识符。首选标识符为 organization_name.account_name。若要查看组织中已启用复制的账户列表,请查询 SHOW REPLICATION ACCOUNTS

虽然旧版账户定位器也可以用作账户标识符,但不建议使用,因为旧版账户定位器未来可能无法运行。有关使用账户定位器作为账户标识符的更多详细信息,请参阅 数据库复制和故障转移使用说明

DISABLE FAILOVER [ TO ACCOUNTS account_identifier [ , account_identifier ... ] ]

禁用对此主数据库的故障转移,这意味着不能将此数据库的副本(即辅助数据库)提升为主数据库。

(可选)提供组织中以逗号分隔的账户列表,从而仅在指定账户中禁用对此数据库的故障转移。

account_identifier

账户的唯一标识符。首选标识符为 organization_name.account_name。若要查看组织中已启用复制的账户列表,请查询 SHOW REPLICATION ACCOUNTS

虽然旧版账户定位器也可以用作账户标识符,但不建议使用,因为旧版账户定位器未来可能无法运行。有关使用账户定位器作为账户标识符的更多详细信息,请参阅 数据库复制和故障转移使用说明

PRIMARY

将指定的辅助(副本)数据库提升为主数据库。升级后,数据库变为可写入。同时,先前的主数据库变成了只读辅助数据库。

使用说明

  • 若要重命名数据库,用于执行操作的角色必须对数据库具有 CREATE DATABASE 全局权限和 OWNERSHIP 权限。

  • 若要交换两个数据库,用于执行操作的角色必须对这两个数据库都具有 OWNERSHIP 权限。

  • 若要更新注释,用于执行操作的角色必须被授予或继承对数据库的 MODIFY 权限。

  • 关于元数据:

    注意

    客户应确保在使用 Snowflake 服务时,不会将个人数据(用户对象除外)、敏感数据、出口管制数据或其他受监管数据作为元数据输入。有关更多信息,请参阅 Snowflake 中的元数据字段

数据库复制和故障转移使用说明

备注

Snowflake 建议使用 账户复制功能 复制数据库。复制组和故障转移组 可启用多个数据库和其他账户对象的复制,并确保组中对象时间点的一致性。有关 功能可用性受支持对象 的完整列表,请参阅 跨多个账户的复制和故障转移简介

  • 只有账户管理员(具有 ACCOUNTADMIN 角色的用户)才能启用并管理数据库复制和故障转移。

  • 当主数据库初始复制到辅助数据库时,将应用默认的 10 TB 大小限制。要更改或移除这一大小限制,请在账户级别设置 INITIAL_REPLICATION_SIZE_LIMIT_IN_TB 参数。

    请注意,当前没有默认大小限制应用于辅助数据库的后续刷新。

  • 识别账户的首选方法是使用组织名称和账户名称作为账户标识符。如果您决定改用旧版账户定位器,则可能需要包含额分段以唯一标识账户。请参阅下表:

    账户标识符

    远程账户的位置

    organization_name.account_name

    可以使用的首选账户标识符(无论存储主数据库的账户属于哪个区域或区域组)。

    account_locator

    与存储主数据库的账户所在区域相同,但账户不同。

    snowflake_region.account_locator

    与存储主数据库的账户所在区域组相同,但所在区域不同。

    region_group.snowflake_region.account_locator

    与存储主数据库的账户所在 区域组 不同。

一般示例

将数据库 db1 重命名为 db2

ALTER DATABASE IF EXISTS db1 RENAME TO db2;
Copy

Database Replication 示例

将本地数据库 mydb1``(在账户 ``account1 中)提升为主数据库,并指定 myorg 组织中的账户 account2account3 可以各自存储该数据库的副本:

ALTER DATABASE mydb1 ENABLE REPLICATION TO ACCOUNTS myorg.account2, myorg.account3;
Copy

禁用对 mydb1 主数据库的复制:

ALTER DATABASE mydb1 DISABLE REPLICATION;
Copy
语言: 中文