CREATE FAILOVER GROUP¶
在系统中创建由指定对象组成的新故障转移组。
有关更多详细信息,请参阅 跨多个账户的复制和故障转移简介。
此命令可用于:
在源账户中创建故障转移组,以便将指定对象复制和故障转移到同一组织中的目标账户。
在目标账户中创建辅助故障转移组,作为同一组织中的源账户中主要故障转移组的副本。
语法¶
CREATE FAILOVER GROUP [ IF NOT EXISTS ] <name>
OBJECT_TYPES = <object_type> [ , <object_type> , ... ]
[ ALLOWED_DATABASES = <db_name> [ , <db_name> , ... ] ]
[ ALLOWED_SHARES = <share_name> [ , <share_name> , ... ] ]
[ ALLOWED_INTEGRATION_TYPES = <integration_type_name> [ , <integration_type_name> , ... ] ]
ALLOWED_ACCOUNTS = <org_name>.<target_account_name> [ , <org_name>.<target_account_name> , ... ]
[ IGNORE EDITION CHECK ]
[ REPLICATION_SCHEDULE = '{ <num> MINUTE | USING CRON <expr> <time_zone> }' ]
辅助故障转移组
CREATE FAILOVER GROUP [ IF NOT EXISTS ] <secondary_name>
AS REPLICA OF <org_name>.<source_account_name>.<name>
参数¶
name
指定故障转移组的标识符。标识符必须以字母字符开头,且不能包含空格或特殊字符,除非标识符字符串放在双引号内(例如
"My object"
)。放在双引号内的标识符也区分大小写。有关更多详细信息,请参阅 标识符要求。
OBJECT_TYPES = object_type [ , object_type , ... ]
要启用从源账户复制和故障转移到目标账户的对象类型。
支持以下对象类型:
- ACCOUNT PARAMETERS:
所有账户级参数。这包括 账户参数 和可以 :doc:` 为您的账户设置的 </user-guide/admin-account-management>` 参数。
- DATABASES:
将数据库对象添加到对象类型列表中。如果指定对象类型的列表中包含数据库对象,则必须设置
ALLOWED_DATABASES
参数。- INTEGRATIONS:
目前,仅支持安全性、API、存储、外部访问 [1] 和某些类型的通知集成。有关详细信息,请参阅 集成复制。
如果集成对象包含在指定对象类型的列表中,则必须设置
ALLOWED_INTEGRATION_TYPES
参数。- NETWORK POLICIES:
源账户中的所有网络策略。
- RESOURCE MONITORS:
源账户中的所有资源监视器。
- ROLES:
源账户中的所有角色。复制角色隐式包括对复制组中包含的对象类型的所有授权。例如,如果
ROLES
是唯一复制的对象类型,则只有角色的层次结构(即授权其他角色的角色)才会复制到目标账户。如果还包含USERS
对象类型,则还会复制向用户授权的角色。- SHARES:
将共享对象添加到对象类型列表中。如果指定对象类型的列表中包含共享对象,则必须设置
ALLOWED_SHARES
参数。- USERS:
源账户中的所有用户。
- WAREHOUSES:
源账户中的所有仓库。
要将复制对象类型的列表修改为指定的目标账户,请使用 ALTER FAILOVER GROUP 重置对象类型的列表。
ALLOWED_DATABASES = db_name [ , db_name , ... ]
指定数据库或数据库列表,以便将其从源账户复制和故障转移到目标账户。 为了设置此参数,
OBJECT_TYPES
列表必须包括DATABASES
。db_name
指定数据库的标识符。
ALLOWED_SHARES = share_name [ , share_name , ... ]
指定共享或共享列表,以便将其从源账户复制和故障转移到目标账户。为了设置此参数,
OBJECT_TYPES
列表必须包括SHARES
。share_name
指定共享的标识符。
ALLOWED_INTEGRATION_TYPES = integration_type_name [ , integration_type_name , ... ]
要启用从源账户复制和故障转移到目标账户的集成类型。
此属性要求
OBJECT_TYPES
列表包含INTEGRATIONS
以设置此参数。支持以下集成类型:
- SECURITY INTEGRATIONS:
指定安全集成。
此属性要求
OBJECT_TYPES
列表包括ROLES
。- API INTEGRATIONS:
指定 API 集成。
将 API 集成复制到目标账户后,API 集成复制需要进行额外设置。有关更多信息,请参阅 更新 API 集成的远程服务。
- STORAGE INTEGRATIONS:
指定存储集成。
- EXTERNAL ACCESS INTEGRATIONS:
指定 :doc:` 外部访问集成 </developer-guide/external-network-access/creating-using-external-network-access>`。
有关更多信息,请参阅 存储过程和用户定义函数 (UDFs) 的复制。
备注
外部访问在 AWS Gov 区域处于预览状态,在 Azure Gov 区域不受支持。
- NOTIFICATION INTEGRATIONS:
指定通知集成。
仅复制某些类型的通知集成。有关详细信息,请参阅 集成复制。
ALLOWED_ACCOUNTS = org_name.target_account_name [ , org_name.target_account_name , ... ]
指定目标账户或目标账户列表,以便将源账户中的指定对象复制和故障转移到其中。此列表中的目标账户中的辅助故障转移组可以在发生故障转移时提升为主要故障转移组。
org_name
Snowflake 组织的名称。
target_account_name
要对其启用指定对象复制的目标账户。
IGNORE EDITION CHECK
允许在以下场景中将对象复制到账户:
主要故障转移组位于 Business Critical(或更高版本)账户中,并且已签署业务协作协议,可根据 HIPAA 和 HITRUST 法规在账户中存储 PHI 数据。但是,对于一个或多个已批准复制的账户,无论它们是否是 Business Critical(或更高版本)账户,都没有此类协议。
默认情况下禁止此类场景。
REPLICATION_SCHEDULE ...
指定辅助故障转移组的刷新计划。
USING CRON expr time_zone
指定辅助组刷新的 cron 表达式和时区。支持标准 cron 实用程序语法的子集。
有关时区列表,请参阅 ` tz 数据库时区列表 <https://en.wikipedia.org/wiki/List_of_tz_database_time_zones (link removed)>`_ (在维基百科中)。
cron 表达式由以下字段组成:
# __________ minute (0-59) # | ________ hour (0-23) # | | ______ day of month (1-31, or L) # | | | ____ month (1-12, JAN-DEC) # | | | | __ day of week (0-6, SUN-SAT, or L) # | | | | | # | | | | | * * * * *
支持以下特殊字符:
*
通配符。指定字段的任何出现。
L
代表“last”。在星期几字段中使用时,它允许您指定结构,例如给定月份的“最后一个星期五”(“5L”)。在日期字段中,它指定该月的最后一天。
/n
指示给定时间单位的第 n 个实例。每个时间量子都是独立计算的。例如,如果在月份字段中指定
4/3
,则刷新计划为 4 月、7 月和 10 月(即每 3 个月一次,从一年中的第 4 个月开始)。在随后的几年中保持相同的计划。也就是说,刷新 不会 计划在 1 月(10 月运行后 3 个月)运行。
备注
cron 表达式当前仅根据指定的时区进行计算。更改账户的 TIMEZONE 参数值(或在用户或会话级别设置该值) :emph:` 不会 ` 更改刷新的时区。
cron 表达式定义刷新的所有 有效 运行时间。Snowflake 尝试根据此计划刷新辅助组;但是,如果在下一个有效运行时间开始之前未完成上一次运行,则跳过任何有效运行时间。
当 cron 表达式中同时包含一个月中的特定某一天和一周中的某一天时,刷新将安排在满足该月中的某一天 或 一周中的某一天的日期。例如,
SCHEDULE = 'USING CRON 0 0 10-20 * TUE,THU UTC'
计划在该月第 10 天到第 20 天之间的任何一天以及这些日期之外的星期二或星期四的 0AM 进行刷新。
num MINUTE
指定刷新之间的等待时间间隔(以分钟为单位)。仅接受正整数。
还支持
num M
语法。为了避免歧义,设置了 基本间隔时间:
创建对象时(使用 CREATE <object>) :emph:` 或 `
当设置不同的间隔时(使用 ALTER <object> ...SET REPLICATION_SCHEDULE)
基本间隔时间从当前时钟时间开始间隔计数器。例如,如果将 INTERVAL 值设置为
10
,并且在 9:03 AM 启用计划刷新,则刷新将在 9:13 AM、9:23 AM 运行,以此类推。请注意,我们尽最大努力确保绝对精度,但仅保证刷新不会在设定的时间间隔发生 之前 执行(例如,在当前示例中,刷新可以首先在上午 9:14 AM 运行,但绝对不会在上午 9:12 AM 运行)。备注
支持的最大值为
11520
(8 天)。如果复制计划具有更大的num MINUTE
值,则刷新操作永远不会运行。
辅助故障转移组参数
secondary_name
指定辅助故障转移组的标识符。标识符必须以字母字符开头,且不能包含空格或特殊字符,除非标识符字符串放在双引号内(例如
"My object"
)。放在双引号内的标识符也区分大小写。有关更多详细信息,请参阅 标识符要求。辅助故障转移组 (
secondary_name
) 和主要故障转移组 (name
) 的标识符可以相同,但并非必须相同。AS REPLICA OF org_name.source_account_name.name
指定要从中创建辅助故障转移组的主要故障转移组的标识符。
org_name
Snowflake 组织的名称。
source_account_name
要从中启用对指定对象进行复制和故障转移的源账户。
name
源账户中主要故障转移组的标识符。
访问控制要求¶
权限 |
对象 |
备注 |
---|---|---|
CREATE FAILOVER GROUP |
账户 |
Only the ACCOUNTADMIN role has this privilege by default. The privilege can be granted to additional roles as needed. |
MONITOR |
数据库 |
要将数据库添加到故障转移组,活动角色必须具有 MONITOR 数据库的权限。 |
OWNERSHIP |
共享 |
要将共享添加到故障转移组,活动角色必须对共享具有 OWNERSHIP 权限。 |
有关创建具有指定权限集的自定义角色的说明,请参阅 创建自定义角色。
使用说明¶
账户中的故障转移组和复制组的标识符必须是唯一的。
除数据库和共享之外的对象必须位于同一个故障转移组中。
一个数据库只能添加到一个故障转移组。
:doc:` 入站共享 </user-guide/data-share-consumers>` (来自提供商的共享) * 不能 * 添加到复制组或故障转移组。
要检索组织中已启用复制的账户组,请使用 SHOW REPLICATION ACCOUNTS。
要检索组织中的故障转移组列表,请参阅 SHOW FAILOVER GROUPS。
如果目标账户中存在您 不希望在复制过程中删除 的账户对象(例如用户或角色),请使用 SYSTEM$LINK_ACCOUNT_OBJECTS_BY_NAME 系统函数,将全局标识符应用于通过复制以外的方式创建的对象。有关更多信息,请在创建故障转移组之前参阅 :ref:` 将全局 IDs 应用于目标账户中通过脚本创建的对象 <label-apply_global_ids_to_objects>`。
使用对组具有 OWNERSHIP 权限的角色执行自动 计划的刷新操作。如果计划刷新操作因权限不足而失败,请向对组具有 OWNERSHIP 权限的角色授予所需的权限。
关于元数据:
注意
客户应确保在使用 Snowflake 服务时,不会将个人数据(用户对象除外)、敏感数据、出口管制数据或其他受监管数据作为元数据输入。有关更多信息,请参阅 Snowflake 中的元数据字段。
对于新升级到 Business Critical Edition(或更高版本)的账户,故障转移功能可能需要最多 12 小时才能可用。
示例¶
在源账户上执行¶
在源账户中创建名为 myfg
的故障转移组,启用对用户、角色、仓库、资源监视器、数据库 db1
、共享 s1
的复制,以及从源账户到 myaccount2
账户的故障转移:
CREATE FAILOVER GROUP myfg
OBJECT_TYPES = USERS, ROLES, WAREHOUSES, RESOURCE MONITORS, DATABASES, SHARES, INTEGRATIONS, NETWORK POLICIES
ALLOWED_DATABASES = db1
ALLOWED_SHARES = s1
ALLOWED_INTEGRATION_TYPES = SECURITY INTEGRATIONS
ALLOWED_ACCOUNTS = myorg.myaccount2
REPLICATION_SCHEDULE = '10 MINUTE';
在目标账户上执行¶
在目标账户中创建故障转移组,作为源账户中故障转移组 myfg
的副本。
CREATE FAILOVER GROUP myfg
AS REPLICA OF myorg.myaccount1.myfg;