跨多个账户的复制和故障转移简介¶
此功能可将一个 源 账户中的对象复制到同一组织中的一个或多个 目标 账户。每个目标账户中的复制对象被称为 辅助 对象,是源账户中 主 对象的副本。支持跨 区域 和 云平台 的复制。
本主题内容:
对复制和故障转移/故障回复的区域支持¶
Amazon Web Services、Google Cloud Platform 和 Microsoft Azure 上的所有 Snowflake 区域都支持复制。
客户可以跨 区域组 内的所有区域进行复制。要在属于不同的区域组(即从 Snowflake 商业区到 Snowflake 政府或 Virtual Private Snowflake 区域)之间进行复制,请联系 Snowflake 支持部门 (https://community.snowflake.com/s/article/How-To-Submit-a-Support-Case-in-Snowflake-Lodge) 以启用访问权限。
复制组和故障转移组¶
复制组 是源账户中定义的对象集合,这些对象可作为复制到一个或多个目标账户的单元。复制组为复制对象提供只读访问权限。
故障转移组 是一个也能进行故障转移的复制组。目标账户中的辅助故障转移组提供为复制对象提供只读访问。当辅助故障转移组提升为主要故障转移组时,可提供读写访问。故障转移组中允许使用的账户列表中指定的任何目标账户都可以提升为主要故障转移组。
复制和故障转移组可为目标账户上的对象提供时间点一致性。可以包含在复制组或故障转移组中的对象在 复制对象 中列示如下。
复制功能/版本矩阵¶
请注意,某些复制功能仅适用于 Business Critical Edition(或更高版本)。下表列出了每个 Snowflake 版本复制功能的可用性:
功能 |
标准型 |
Enterprise |
Business Critical |
VPS |
---|---|---|---|---|
数据库复制 |
✔ |
✔ |
✔ |
✔ |
共享复制 |
✔ |
✔ |
✔ |
✔ |
复制组 |
✔ |
✔ |
✔ |
✔ |
账户对象(数据库和共享除外)复制 |
✔ |
✔ |
||
故障转移组 |
✔ |
✔ |
||
受 Tri-Secret Secure 保护的数据 |
✔ |
✔ |
复制对象¶
此功能支持复制下面列出的对象。数据库复制和共享复制适用于所有版本。所有其他对象的复制仅适用于 Business Critical Edition(或更高版本)。有关功能可用性的详细信息,请参阅 复制功能/版本矩阵。
对象 |
类型或功能 |
复制 |
备注 |
---|---|---|---|
✔ |
不支持某些数据库的复制,否则可能会导致刷新操作失败。有关更多信息,请参阅 当前复制的局限性。 |
||
安全、API、通知、存储、外部访问 [1] |
✔ |
有关受支持类型的其他注意事项和详细信息,请参阅 集成复制。 |
|
✔ |
|||
✔ |
|||
✔ |
如果您在组中包含 |
||
✔ |
|
||
✔ |
入站共享 (来自提供商的共享)的复制 不 受支持。 |
||
✔ |
|||
✔ |
数据库复制¶
此功能支持复制数据库。快照包括对对象和数据的更改。如果复制了 roles
(在相同或不同的复制组或故障转移组中),数据库刷新还会将辅助数据库上的权限授予以及将数据库中的对象(架构、表、视图等)同步到账户中的角色。有关更多详细信息,请参阅 数据库对象的授权。
不支持某些数据库的复制,否则可能会导致刷新操作失败。有关更多信息,请参阅 当前复制的局限性。
复制数据库对象¶
复制主数据库时,其数据库对象和数据的快照将传输到辅助数据库。但是,某些数据库对象不会被复制。下表列出了会复制到辅助数据库的数据库对象。
有关这些对象的具体使用信息,请参阅 复制的注意事项。
对象 |
类型或功能 |
复制 |
备注 |
---|---|---|---|
表 |
永久表 |
✔ |
|
瞬态表 |
✔ |
||
临时表 |
|||
聚类表的自动群集 |
✔ |
||
动态表 |
✔ |
有关更多信息,请参阅 复制和动态表。 |
|
外部表 |
|||
混合表 [2] |
|||
Iceberg 表 |
|||
表约束条件 |
✔ |
除非数据库中的外键引用另一个数据库中的主/唯一键。. |
|
事件表 [2] |
|||
序列 |
✔ |
||
视图 |
视图 |
✔ |
如果视图引用了其他数据库中的任何对象(例如表列、其他视图、 UDFs 或暂存区), . 则必须复制这两个数据库。 |
物化视图 |
✔ |
||
安全视图 |
✔ |
||
文件格式 |
✔ |
||
暂存区 |
暂存区 |
✔ |
仅支持复制组和故障转移组。不支持数据库复制。. 有关更多信息,请参阅 暂存区、管道和加载历史记录复制。 |
临时暂存区 |
|||
管道 |
✔ |
仅支持复制组和故障转移组。不支持数据库复制。. 有关更多信息,请参阅 暂存区、管道和加载历史记录复制。 |
|
存储过程 |
✔ |
有关更多信息,请参阅 存储过程和用户定义函数 (UDFs) 的复制。 |
|
流 |
✔ |
有关更多信息,请参阅 复制和流。 |
|
任务 |
✔ |
有关更多信息,请参阅 复制和任务。 |
|
数据指标函数 (DMFs) |
数据质量 |
✔ |
有关更多信息,请参阅 数据指标函数的复制 (DMFs)。 |
UDFs |
✔ |
有关更多信息,请参阅 存储过程和用户定义函数 (UDFs) 的复制。 |
|
策略 |
列级安全性(掩码) |
✔ |
有关掩码、行访问和基于标签的掩码策略的信息,请参阅 策略复制注意事项。 |
行访问策略 |
✔ |
||
基于标签的掩码策略 |
✔ |
||
会话策略 |
✔ |
有关会话、密码和身份验证策略,请参阅 复制和安全策略。 |
|
密码策略 |
✔ |
||
身份验证策略 |
✔ |
||
标签 |
Object Tagging |
✔ |
对于标签,请参阅 复制和标签。 |
警报 |
✔ |
||
密钥 |
外部 API 身份验证密钥 |
✔ |
您可以使用复制组和故障转移组来复制密钥。有关更多详细信息,请参阅 复制和密钥。 |
网络规则 |
✔ |
有关使用网络规则的网络策略的复制的信息,请参阅 复制网络策略。 |
|
类实例 |
Snowflake 类 的实例(例如, ANOMALY_DETECTION (SNOWFLAKE.ML) 类或 BUDGET (SNOWFLAKE.CORE) 类的实例)不会被复制。有关 Snowflake 类的完整列表,请参阅 可用类。 |
||
包策略 |
Python UDF、UDTF、存储过程 |
✔ |
如果在源账户上设置了 包策略,以成功复制账户对象,则 必须 将包含该包策略的数据库复制到相同或不同复制或故障转组中的目标账户。否则,刷新操作将失败,出现 悬空引用错误。 |
2024_03 BCR 捆绑包 支持 在刷新操作期间跳过事件表和混合表。如果您在 选择退出期 内禁用该捆绑包,当主数据库中存在事件表或混合表时,则会阻止刷新辅助数据库。
数据库复制和加密¶
Snowflake 可保护源账户和目标账户之间静止和传输中的元数据和数据集。账户 主密钥 (https://csrc.nist.gov/glossary/term/master_key) (AMK) 对账户内的密钥层次结构进行加密,如 分层密钥模型 所示。无论您是否在目标账户中启用 Tri-Secret Secure,Snowflake 都会使用目标账户中的账户主密钥和密钥层次结构来加密目标账户中的复制数据。
当您在目标账户中启用 Tri-Secret Secure 时,Snowflake 会使用目标账户中的复合主密钥和相应的密钥层次结构来加密数据。请注意,默认情况下,目标账户不会启用 Tri-Secret Secure;您必须启用此功能。
有关 Snowflake 中数据加密的更多信息,请参阅 了解 Snowflake 中的端到端加密。
集成复制¶
需要 Business Critical Edition(或更高版本)。如需咨询升级事宜,请联系 Snowflake 支持部门 (https://community.snowflake.com/s/article/How-To-Submit-a-Support-Case-in-Snowflake-Lodge)。
账户复制支持复制以下功能的集成:
以下类型的安全集成:
联合身份验证和 SSO(即 SAML2)
SCIM
Snowflake OAuth
External OAuth
有关安全集成的更多信息,请参阅 跨多个账户复制安全集成和网络策略。
API 集成。
将 API 集成复制到目标账户后,必须向复制的外部函数授予对远程服务的访问权限。有关更多信息,请参阅 更新 API 集成的远程服务。
以下类型的通知集成:
TYPE = EMAIL
TYPE = QUEUE 和 DIRECTION = OUTBOUND
存储集成。
复制存储集成时,必须在目标账户中为云存储建立新的信任关系。要了解更多信息,请参阅 配置辅助存储集成的云存储访问权限。
外部访问集成。
有关外部访问集成的更多信息,请参阅 外部网络访问概述。
网络策略复制¶
需要 Business Critical Edition(或更高版本)。
此功能支持复制网络策略。
有关更多信息,请参阅 跨多个账户复制安全集成和网络策略。
参数复制¶
需要 Business Critical Edition(或更高版本)。
此功能支持复制账户级参数和对象参数。当复制组中包含对象时,系统就会复制对象参数。例如,如果复制了 WAREHOUSES
,则系统就会复制仓库特定的参数(例如 STATEMENT_TIMEOUT_IN_SECONDS)。有关完整列表,请参阅 对象参数。
账户级参数复制包括所有 账户参数 和 在账户上设置的参数。当复制组的对象类型列表中包含 ACCOUNT PARAMETERS
时,系统将会复制账户级参数(例如, DATA_RETENTION_TIME_IN_DAYS)。
资源监视器复制¶
需要 Business Critical Edition(或更高版本)。
此功能支持将资源监视器和资源监视器上授予的权限复制到角色。辅助资源监视器遵循与其主资源监视器相同的配额重置计划。例如,如果主资源监视器上的配额在当月的 1 日重置,并且辅助资源监视器在当月的 15 日首次复制,则其配额将在下个月 1 日与主资源监视器一起重置。
复制资源监视器电子邮件通知设置¶
资源监视器复制中不包含资源监视器的电子邮件通知设置。非管理员用户的电子邮件通知可以使用资源监视器复制。但是,目前无法复制账户管理员通知设置:
如果复制或故障转移组的
object_types
列表中包含users
和resource monitors
,则会复制非管理员用户的通知设置:仓库级资源监视器的
notify_users
列表将复制到目标账户。非管理员用户的电子邮件通知 通过目标账户发送。
如果复制或故障转移组的
object_types
列表中包含resource monitors
,但不包含users
,则二级仓库级资源监视器的notify_users
列表为空。不 复制账户管理员通知设置:
账户管理员必须使用 Web 界面在每个账户中 启用电子邮件通知。
如果账户管理员在源账户和/或目标账户中启用了电子邮件通知,则资源监视器通知会发送给他们。
角色复制¶
需要 Business Critical Edition(或更高版本)。
此功能支持复制角色,包括角色层次结构。必须复制角色对象才能复制访问权限。复制的访问权限已在下面的 角色和授权的复制 中列出。
备注
所有角色都会被复制,包括 ORGADMIN 角色。
用户复制¶
需要 Business Critical Edition(或更高版本)。
此功能支持将用户及其属性复制到目标账户、以下用户身份验证方法,以及支持使用 SCIM 配置用户和组:
身份验证方法 |
适用于目标账户 |
备注 |
---|---|---|
密码 |
✔ |
|
带有 MFA(多重身份验证)的密码 |
✔ |
在源账户中注册了 MFA 的用户在登录每个目标账户时必须分别注册 MFA。 |
✔ |
在源账户中注册了 MFA 的用户在登录每个目标账户时必须分别注册 MFA。 |
|
密钥对身份验证 |
✔ |
|
✔ |
有关复制联合 SSO(即 SAML2)安全集成的详细信息,请参阅 跨多个账户复制安全集成和网络策略。 |
|
✔ |
有关复制 OAuth 安全集成的详细信息,请参阅 跨多个账户复制安全集成和网络策略。 |
|
✔ |
有关复制 OAuth 安全集成的详细信息,请参阅 跨多个账户复制安全集成和网络策略。 |
|
✔ |
有关复制 SCIM 安全集成的详细信息,请参阅 跨多个账户复制安全集成和网络策略。 |
备注
如果 USERS
和 ROLES
对象被复制到目标账户,这些对象类型在目标账户中是只读的,无法修改。必须在源账户中创建用户和角色,然后才能将其复制到每个目标账户。请参阅 复制与只读辅助对象。
仓库复制¶
需要 Business Critical Edition(或更高版本)。如需咨询升级事宜,请联系 Snowflake 支持部门 (https://community.snowflake.com/s/article/How-To-Submit-a-Support-Case-in-Snowflake-Lodge)。
此功能支持复制仓库和授予角色的仓库权限(如果复制了 roles
)。主仓库的状态不会被复制。仓库以暂停状态下复制到每个目标账户,并可在目标账户中恢复。
角色和授权的复制¶
需要 Business Critical Edition(或更高版本)。
要将对象上的授权复制到角色,必须将角色从源账户复制到目标账户。要复制复制组或故障转移组中的角色,必须在 object_types
列表中包含 roles
。角色可以与授予权限的数据对象分属不同的复制组或故障转移组。
复制 roles
时, 只有 在以下情况下,对象的权限才会复制到目标账户:
该权限由对象所有者授予,或由被对象所有者使用 WITH GRANT OPTION 参数授予权限的角色间接授予。
权限授予的被授予者和授予者角色都位于目标账户中。
对象是复制的(即对象类型包含在
object_types
列表中)。
否则,系统不会复制对象的授权。
备注
如果在目标账户的活动管道上删除了具有 OWNERSHIP 权限的角色,刷新操作将会失败。
复制组和故障转移组的权限 不会 被复制。如果在复制组或故障转移组上授予了 REPLICATE 或 FAILOVER 权限,则需要在源账户 和 目标账户中同时授予这些权限。有关这些权限的详细信息,请参阅 复制权限。
数据库对象的授权¶
如果 roles
和 databases
已复制到目标账户(在相同或不同的复制组或故障转移组中),刷新辅助数据库时会将数据库和数据库对象(架构、表、视图等)的授权同步到目标账户中的现有角色(即已复制到目标账户的角色)。请注意,只有数据库复制所支持对象的授权才会同步。有关支持对象的列表,请参阅 复制数据库对象。
目前不支持外部表复制。因此,外部表的授权也不会被复制。
对象的未来授权¶
如果将角色复制到目标账户,那么在数据库或架构级的 未来授权 也会复制到目标账户。这也包括不支持复制的对象上的未来授权。例如,目前还不支持外部表复制,但会复制外部表上的未来授权。在目标账户中创建外部表时,在未来外部表上授予的权限将按计划实现。
对象创建和所有权¶
如果在从源账户刷新期间在目标账户中创建了新对象,且角色未复制到目标账户,则系统会将新对象的 OWNERSHIP 权限授予 ACCOUNTADMIN 角色。
如果将角色复制到目标账户,则下一次复制角色时,目标账户上的 OWNERSHIP 权限将授予与源账户中拥有 OWNERSHIP 权限的角色相同的角色。如果对象和角色在同一个复制(或故障转移)组中,则可以在目标账户中创建新对象的同时复制角色。
刷新目标账户中对象的用户¶
执行 :ref:` ALTER FAILOVER GROUP ... REFRESH <label-alter_failover_group>` 命令从源账户刷新目标账户中对象的用户必须使用具有故障转移组的 REPLICATE 权限的角色。在以下情况下,Snowflake 通过执行失败刷新操作来保护目标账户中的此用户:
如果源账户中不存在该用户,则刷新操作失败。
如果源账户中存在该用户,但未向该用户授予具有 REPLICATE 权限的角色,则刷新操作失败。
复制计划¶
作为最佳实践,Snowflake 建议使用 REPLICATION_SCHEDULE 参数安排自动刷新。可以在使用 CREATE <object> 或稍后(使用 ALTER <object>)创建新复制组或故障转移组时定义计划。
当您创建辅助复制或故障转移组时,Snowflake 会自动执行初始刷新。下一次刷新是根据上一次刷新的开始时间和调度间隔或基于 cron 表达式的下一次有效时间来调度的。例如,如果刷新计划间隔为 10 分钟,且上一次的刷新操作(计划刷新或手动触发刷新)开始时间为 12:01,则下一次刷新的计划时间为 12:11。
Snowflake 会确保在任何给定时间仅执行一次刷新。如果在计划下一次刷新时,刷新仍在执行,则下一次刷新将延迟到当前执行的刷新完成时开始。例如,如果计划每小时后 15 分钟执行一次刷新,而之前的刷新在 12:16 完成,则下一次刷新将在之前执行的刷新完成后执行。
备注
使用对复制或故障转移组具有 OWNERSHIP 权限的角色执行自动计划的刷新操作。如果计划刷新操作因权限不足而失败,请向对组具有 OWNERSHIP 权限的角色授予所需的权限。
暂停和恢复计划的复制¶
执行刷新时,无法将辅助故障转移组提升为主故障转移组。要顺利进行故障转移,请暂停目标账户中的计划复制。故障转移完成后,计划的复制才会恢复。有关更多信息,请参阅 ALTER FAILOVER GROUP。
复制到较低版本的账户¶
如果满足以下任一条件,Snowflake 将会显示错误消息:
只有数据库和/或共享对象的主复制组位于 Business Critical(或更高版本)账户中,但一个或多个获准复制的账户位于较低版本中。Business Critical Edition 适用于具有极其敏感数据的 Snowflake 账户。
具有任何 对象类型 的主复制组或故障转移组位于 Business Critical(或更高版本)账户中,并且已签署业务协作协议,可根据 HIPAA 和 HITRUST CSF 法规在账户中存储 PHI 数据。但是,对于一个或多个已启用复制的账户,无论它们是否是 Business Critical(或更高版本)账户,都没有此类协议。
实施此行为是为了防止 Business Critical(或更高版本)账户的账户管理员无意中将敏感数据复制到较低版本的账户。
账户管理员(具有 ACCOUNTADMIN 角色的用户)或具有 CREATE REPLICATION GROUP/CREATE FAILOVER GROUP 或 OWNERSHIP 权限的用户可以在执行 CREATE <object> 或 ALTER <object> 语句时加入 IGNORE EDITION CHECK 子句,从而覆盖此默认行为。如果已设置 IGNORE EDITION CHECK,在这些特定情况下,主复制组或故障转移组可能会复制到较低 Snowflake 版本上的指定账户。
备注
故障转移组只能在 Business Critical Edition(或更高版本)账户中创建。因此,故障转移组 只 能复制到 Business Critical Edition(或更高版本)账户。
当前复制的局限性¶
无法复制从共享创建的数据库。
如果主数据库包含带有不受支持的源对象的流,则刷新操作将失败。如果任何流的源对象已被删除,则该操作也会失败。
复制的源对象不支持仅追加流。