跨多个账户的数据库复制简介¶
借助此功能,您可在 Snowflake 账户(同一组织内)之间复制数据库,并保持数据库对象和存储的数据同步。支持跨 区域 和 云平台 的数据库复制。
备注
Snowflake 建议使用 账户复制功能 复制数据库。复制组和故障转移组 可启用多个数据库和其他账户对象的复制,并确保组中对象时间点的一致性。有关 功能可用性 和 受支持对象 的完整列表,请参阅 跨多个账户的复制和故障转移简介。
本主题内容:
什么是主数据库?¶
可以为任何现有的永久或临时数据库启用复制功能。启用复制会将数据库指定为 主数据库。一个账户中可以指定任意数量的数据库为主数据库。同样,主数据库可以复制到组织中任意数量的账户。这需要在每个目标账户中创建一个 辅助数据库,作为指定主数据库的副本。这些账户通常位于其他区域、相同或不同的云平台上,也可以与源账户位于同一区域。
全部 DML/DDL 操作在主数据库上执行。每个只读辅助数据库都可定期刷新主数据库快照,复制所有数据以及对数据库对象(即架构、表、视图等)上的 DDL 操作。
数据库复制概述¶
有关复制数据库对象的完整列表,请参阅 复制数据库对象。
账户中的其他对象¶
仅数据库 支持数据库复制。账户中的其他类型的对象可以通过 账户复制 进行复制。有关账户复制支持对象的完整列表,请参阅 复制对象。
访问控制¶
授予数据库对象的权限 不会 复制到辅助数据库。这包括对现有数据库对象的权限授予以及对未来对象的授予(即未来授予)。
授予权限可以通过 账户复制 进行复制。
参数¶
账户参数 不会 通过数据库复制进行复制。账户参数可以通过 账户复制 进行复制。
在架构或架构对象级别设置的对象参数会被复制:
参数
对象
架构、表
架构、表
架构、表
架构、管道
架构、表
参数复制仅适用于数据库中的对象(架构、表),并且仅当使用 CREATE <object>
<parameter>
或 ALTER <object>
...SET <parameter>
显式设置参数时才适用。数据库级参数不会被复制。
在主数据库对象上显式设置的参数会覆盖在辅助数据库对象上设置的参数。例如,如果主数据库中架构 s1
的 DATA_RETENTION_TIME_IN_DAYS 设置为 10,而辅助数据库中的数据库级 DATA_RETENTION_TIME_IN_DAYS 设置为 1,则复制后辅助数据库中架构 s1
的 DATA_RETENTION_TIME_IN_DAYS 将设置为 10。
在辅助数据库的数据库级显式设置的参数不会被覆盖。例如,如果辅助数据库参数 DATA_RETENTION_TIME_IN_DAYS 显式设置为 1 而主数据库参数 DATA_RETENTION_TIME_IN_DAYS 显式设置为 10,则 DATA_RETENTION_TIME_IN_DAYS 复制后辅助数据库仍设置为 1。
[1] 请注意,PIPE 对象不会被复制。如果在主数据库中的架构级设置了 PIPE_EXECUTION_PAUSED 参数,那么它会被复制到辅助数据库。在发生故障转移时,当辅助数据库升级为主数据库并创建管道时,参数设置将生效。
将数据库复制到较低版本的账户¶
如果满足以下任一条件,则当本地数据库升级为主数据库时,Snowflake 会显示错误消息:
主数据库位于 Business Critical(或更高版本)账户中,但批准复制的一个或多个账户位于较低版本中。Business Critical Edition 适用于具有极其敏感数据的 Snowflake 账户。
主数据库位于 Business Critical(或更高版本)账户中,并且已签署业务伙伴协议,可根据 HIPAA 和 HITRUST CSF 法规在账户中存储 PHI 数据,但一个或多个获准复制的账户未签署此类协议,无论它们是否为 Business Critical(或更高版本)账户。
实施此行为是为了防止 Business Critical(或更高版本)账户的账户管理员无意中将敏感数据复制到较低版本的账户。
账户管理员可以在执行 ALTER DATABASE ...ENABLE REPLICATION TO ACCOUNTS 语句时加入 子句,从而替换此默认行为。如果设置了 IGNORE EDITION CHECK,主数据库就可以复制到任何 Snowflake 版本上的指定账户。
数据库复制的当前限制¶
无法复制从共享创建的数据库。
如果主数据库包含带有不受支持的源对象的流,则刷新操作将失败。如果任何流的源对象已被删除,则该操作也会失败。
复制的源对象不支持仅追加流。
CREATE DATABASE ...AS REPLICA 命令不支持 WITH TAG 子句。
此子句不受支持,因为辅助数据库是只读的。如果主数据库指定 WITH TAG 子句,请删除该子句以创建辅助数据库。要验证您的数据库是否存在 WITH TAG 子句,请调用 Snowflake 账户中的 GET_DDL 函数并在函数实参中指定主数据库。如果在数据库上设置了标签,则函数输出将包括 ALTER DATABASE ...SET TAG 语句。
不支持暂存区和管道复制。您可以使用账户复制来复制暂存区和管道。有关更多信息,请参阅 暂存区、管道和加载历史记录复制。
不支持 密钥。您可以使用复制组或故障转移组复制密钥。