ALTER DATABASE¶
修改现有数据库的属性。
数据库修改包括以下内容:
更改数据库的名称或更改 Time Travel 数据保留期(如果您使用的是 Snowflake Enterprise Edition 或更高版本)。
启用并管理数据库复制和故障转移。
语法¶
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
}
[ , ... ]
数据库复制和故障转移语法¶
数据库复制
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
数据库故障转移
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
参数¶
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:
0
或1
Enterprise Edition(或更高版本):
0
至90
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'
指定应引入并在活动事件表中可用的消息的严重级别。引入指定级别(以及更严重级别)的消息。
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;
Database Replication 示例¶
将本地数据库 mydb1``(在账户 ``account1
中)提升为主数据库,并指定 myorg
组织中的账户 account2
和 account3
可以各自存储该数据库的副本:
ALTER DATABASE mydb1 ENABLE REPLICATION TO ACCOUNTS myorg.account2, myorg.account3;
禁用对 mydb1
主数据库的复制:
ALTER DATABASE mydb1 DISABLE REPLICATION;