ALTER FAILOVER GROUP¶
修改现有 故障转移组 的属性。
在源账户中,可以执行以下操作:
为故障转移组重命名。
重置为复制和故障转移启用的指定对象类型列表。
设置或更新复制计划,以自动刷新辅助故障转移组。
在故障转移组中添加或移除以下类型的账户对象:
添加或移除启用复制和故障转移的目标账户。
将共享或数据库移动至另一个故障转移组。
在目标账户中,您可以执行以下操作:
将对象从源账户刷新到目标账户中。
将辅助故障转移组提升为主要故障转移组(即对故障转移对象组进行故障转移)。
暂停计划的复制。
恢复计划的复制。
语法¶
源账户
ALTER FAILOVER GROUP [ IF EXISTS ] <name> RENAME TO <new_name>
ALTER FAILOVER GROUP [ IF EXISTS ] <name> SET
[ OBJECT_TYPES = <object_type> [ , <object_type> , ... ] ]
[ ALLOWED_DATABASES = <db_name> [ , <db_name> , ... ] ]
[ ALLOWED_SHARES = <share_name> [ , <share_name> , ... ] ]
ALTER FAILOVER GROUP [ IF EXISTS ] <name> SET
OBJECT_TYPES = INTEGRATIONS [ , <object_type> , ... ]
ALLOWED_INTEGRATION_TYPES = <integration_type_name> [ , <integration_type_name> ... ]
ALTER FAILOVER GROUP [ IF EXISTS ] <name> SET
REPLICATION_SCHEDULE = '{ <num> MINUTE | USING CRON <expr> <time_zone> }'
ALTER FAILOVER GROUP [ IF EXISTS ] <name>
ADD <db_name> [ , <db_name> , ... ] TO ALLOWED_DATABASES
ALTER FAILOVER GROUP [ IF EXISTS ] <name>
MOVE DATABASES <db_name> [ , <db_name> , ... ] TO FAILOVER GROUP <move_to_fg_name>
ALTER FAILOVER GROUP [ IF EXISTS ] <name>
REMOVE <db_name> [ , <db_name> , ... ] FROM ALLOWED_DATABASES
ALTER FAILOVER GROUP [ IF EXISTS ] <name>
ADD <share_name> [ , <share_name> , ... ] TO ALLOWED_SHARES
ALTER FAILOVER GROUP [ IF EXISTS ] <name>
MOVE SHARES <share_name> [ , <share_name> , ... ] TO FAILOVER GROUP <move_to_fg_name>
ALTER FAILOVER GROUP [ IF EXISTS ] <name>
REMOVE <share_name> [ , <share_name> , ... ] FROM ALLOWED_SHARES
ALTER FAILOVER GROUP [ IF EXISTS ] <name>
ADD <org_name>.<target_account_name> [ , <org_name>.<target_account_name> , ... ] TO ALLOWED_ACCOUNTS
[ IGNORE EDITION CHECK ]
ALTER FAILOVER GROUP [ IF EXISTS ] <name>
REMOVE <org_name>.<target_account_name> [ , <org_name>.<target_account_name> , ... ] FROM ALLOWED_ACCOUNTS
目标账户
ALTER FAILOVER GROUP [ IF EXISTS ] <name> REFRESH
ALTER FAILOVER GROUP [ IF EXISTS ] <name> PRIMARY
ALTER FAILOVER GROUP [ IF EXISTS ] <name> SUSPEND [ IMMEDIATE ]
ALTER FAILOVER GROUP [ IF EXISTS ] <name> RESUME
参数¶
源账户
name
指定故障转移组的标识符。
RENAME TO new_name
new_name
为故障转移组指定新标识符。如果其他复制或故障转移组的标识符已经存在,则不能使用新标识符。
有关更多详细信息,请参阅 标识符要求。
SET ...
指定要为故障转移组设置的属性(由空格、逗号或换行符分隔)。
OBJECT_TYPES = object_type [ , object_type , ... ]
重置您要启用从源账户复制和故障转移到目标账户的对象类型的列表。
备注
对于数据库和共享对象:
如果 DATABASES 或 SHARES 包含在 OBJECT_TYPES 列表中,并且在重置列表后仍保留在 OBJECT_TYPES 列表中,则相应的允许对象列表(ALLOWED_DATABASES 或 ALLOWED_SHARES)保持不变。
如果重置 OBJECT_TYPES 列表以添加或移除 DATABASES,则 ALLOWED_DATABASES 列表将设置为 NULL。
如果重置 OBJECT_TYPES 列表以添加或移除 SHARES,则 ALLOWED_SHARES 列表将设置为 NULL。
使用 ADD、MOVE 和 REMOVE 子句修改允许的数据库或共享对象列表。
支持以下对象类型:
- ACCOUNT PARAMETERS:
所有账户级参数。这包括 :ref:` 账户参数 <label-account_parameters>` 和可以 :doc:` 为您的账户设置的 </user-guide/admin-account-management>` 参数。
- DATABASES:
将数据库对象添加到对象类型列表中。如果数据库对象已经包含在指定对象类型的列表中,则
ALLOWED_DATABASES
列表保持不变。要修改数据库列表,请使用 ADD、MOVE 或 REMOVE 子句。- INTEGRATIONS:
目前,仅支持安全性、API、存储、外部访问 [2] 和某些类型的通知集成。有关详细信息,请参阅 集成复制。
如果集成对象包含在指定对象类型的列表中,则必须设置
ALLOWED_INTEGRATION_TYPES
参数。- NETWORK POLICIES:
源账户中的所有网络策略。
- RESOURCE MONITORS:
源账户中的所有资源监视器。
- ROLES:
源账户中的所有角色。复制角色隐式包括对复制组中包含的对象类型的所有授权。例如,如果
ROLES
是唯一复制的对象类型,则只有角色的层次结构(即授权其他角色的角色)才会复制到目标账户。如果还包含USERS
对象类型,则还会复制向用户授权的角色。- SHARES:
将共享对象添加到对象类型列表中。如果共享对象已经包含在指定对象类型的列表中,则
ALLOWED_SHARES
列表保持不变。要修改共享列表,请使用 ADD、MOVE 或 REMOVE 子句。- USERS:
源账户中的所有用户。
- WAREHOUSES:
源账户中的所有仓库。
[2] 外部访问在 AWS Gov 区域处于预览状态,在 Azure Gov 区域不受支持。
ALLOWED_DATABASES = db_name [ , db_name , ... ]
指定数据库或数据库列表,以便将其从源账户复制和故障转移到目标账户。为了设置此参数,
OBJECT_TYPES
列表必须包括DATABASES
。db_name
指定数据库的标识符。
ALLOWED_SHARES = share_name [ , share_name , ... ]
指定共享或共享列表,以便将其从源账户复制和故障转移到目标账户。为了设置此参数,
OBJECT_TYPES
列表必须包括SHARES
。share_name
指定共享的标识符。
备注
如果 ALLOWED_DATABASES 或 ALLOWED_SHARES 列表被修改,则在下一次刷新操作发生时,列表中先前存在但现在已移除的所有对象都会从任何具有链接的辅助故障转移组的目标账户中删除。
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:
指定通知集成。
仅复制某些类型的通知集成。有关详细信息,请参阅 集成复制。
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
值,则刷新操作永远不会运行。
ADD db_name [ , db_name , ... ] TO ALLOWED_DATABASES
使用逗号分隔列表形式指定要启用复制和故障转移的附加数据库。要添加数据库,必须在指定对象类型的列表中包含 DATABASES。如果对象类型列表中尚未包括 DATABASES,则必须添加。
db_name
指定数据库的标识符。
MOVE DATABASES db_name [ , db_name , ... ] TO FAILOVER GROUP move_to_fg_name
使用逗号分隔列表形式,指定要从一个故障转移组移动到另一个故障转移组的数据库。对于数据库要移动到的故障转移组,指定对象类型列表中必须包含 DATABASES。
db_name
指定数据库的标识符。
move_to_fg_name
指定要将数据库移动到的故障转移组的标识符。
REMOVE db_name [ , db_name , ... ] FROM ALLOWED_DATABASES
使用逗号分隔列表形式,指定要从启用复制和故障转移的数据库列表中移除的数据库。
备注
当从主要故障转移组中移除数据库时,在下一次刷新操作发生时,在任何具有链接的辅助故障转移组的目标账户中,该数据库将被删除。
为了避免在目标账户中删除数据库,您可以在下次将修改后的主要故障转移组复制到目标账户 * 之前 * 删除辅助故障转移组。删除辅助故障转移组时,该组中包含的只读辅助数据库将成为目标账户中的独立读写数据库。
ADD share_name [ , share_name , ... ] TO ALLOWED_SHARES
使用逗号分隔列表形式,指定要启用复制和故障转移的附加共享。要添加共享,必须在指定对象类型的列表中包含 SHARES。如果对象类型列表中尚未包括 SHARES,则必须添加。
share_name
指定共享的标识符。
MOVE SHARES share_name [ , share_name , ... ] TO FAILOVER GROUP move_to_fg_name
使用逗号分隔列表形式,指定要从一个故障转移组移动到另一个故障转移组的共享。对于共享要移动到的故障转移组,指定对象类型列表中必须包含 SHARES。
share_name
指定共享的标识符。
move_to_fg_name
指定要将共享移动到的故障转移组的标识符。
REMOVE share_name [ , share_name , ... ] FROM ALLOWED_SHARES
使用逗号分隔列表形式,指定要从启用复制和故障转移的共享列表中移除的共享。
备注
当从主要故障转移组中移除共享时,在下一次刷新操作发生时,在任何辅助故障转移组的目标账户中,该共享将被删除。
ADD org_name.target_account_name [ , org_name.target_account_name , ... ] TO ALLOWED_ACCOUNTS
使用逗号分隔列表形式,指定要添加到主要故障转移组的目标账户,以启用将源账户中的指定对象复制和故障转移到目标账户的功能。此列表中的目标账户中的辅助故障转移组可以在发生故障转移时提升为主要故障转移组。
org_name
Snowflake 组织的名称。
target_account_name
要对其启用指定对象复制的目标账户。
REMOVE org_name.target_account_name [ , org_name.target_account_name , ... ] FROM ALLOWED_ACCOUNTS
使用逗号分隔列表形式,指定要从主要故障转移组中移除的目标账户列表,以禁用将源账户中的指定对象复制到目标账户。移除目标账户将禁用从当前账户到该目标账户的故障转移。
org_name
Snowflake 组织的名称。
target_account_name
要对其禁用指定对象复制的目标账户。
IGNORE EDITION CHECK
允许在以下场景中将对象复制到账户:
主要故障转移组位于 Business Critical(或更高版本)账户中,并且已签署业务协作协议,可根据 HIPAA 和 HITRUST 法规在账户中存储 PHI 数据。但是,对于一个或多个已批准复制的账户,无论它们是否是 Business Critical(或更高版本)账户,都没有此类协议。
默认情况下禁止此类场景。
目标账户
name
指定故障转移组的标识符。
REFRESH
将对象从源账户刷新到目标(当前)账户中。
PRIMARY
将目标(当前)账户中的辅助故障转移组及其指定对象提升到主故障转移组(在发生故障转移的情况下)。
SUSPEND [ IMMEDIATE ]
暂停辅助故障转移组的计划刷新(如果主要故障转移组已使用
REPLICATION_SCHEDULE
属性设置了计划刷新)。可选的
IMMEDIATE
关键字会取消辅助故障转移组(如有)正在进行的刷新操作。请注意,在语句返回的时间与取消刷新操作完成的时间之间可能会有稍许延迟。RESUME
恢复辅助故障转移组的计划刷新(如果主要故障转移组已使用
REPLICATION_SCHEDULE
属性设置了计划刷新)。
使用说明¶
需要以下最低权限:
要使用 ALTER FAILOVER GROUP ... REFRESH 更新辅助故障转移组,活动的主要角色必须拥有对故障转移组的 OWNERSHIP 或 REPLICATE 权限。
要使用 ALTER FAILOVER GROUP ... PRIMARY 对辅助故障转移组进行故障转移,角色必须拥有对故障转移组的 OWNERSHIP 或 FAILOVER 权限。
要对故障转移组进行任何其他更改,只有具有该组的 OWNERSHIP 权限才能执行此 SQL 命令。
要将数据库添加到故障转移组,活动角色必须具有 MONITOR 数据库的权限。
要将共享添加到故障转移组,活动角色必须对共享具有 OWNERSHIP 权限。
账户中的故障转移组和复制组的标识符必须是唯一的。
除数据库和共享之外的对象必须位于同一个故障转移组中。
一个数据库只能添加到一个故障转移组。
:doc:` 入站共享 </user-guide/data-share-consumers>` (来自提供商的共享) * 不能 * 添加到复制组或故障转移组。
如果正在执行刷新,将辅助故障转移组提升为主要故障转移组(在发生故障转移的情况下)会失败。
如果在更新复制计划时正在执行刷新,则刷新将持续直至完成,并在下一次刷新时使用新的计划。
故障转移时,所有辅助故障转移组上的计划刷新都会暂停。必须在每个辅助服务器上执行
ALTER FAILOVER GROUP ... RESUME
才能恢复自动刷新。要将数据库或共享从一个故障转移组(移出组)移动到另一个故障转移组(移至组),需要满足以下条件:
两个组的类型必须相同:FAILOVER GROUP。
如果将移出组中的最后一个数据库移动到另一个组中,则移出组的
allowed_databases
属性将设置为 NULL。同样的行为也适用于共享。如果移至组在
object_types
列表中没有要移动的对象类型(databases
或shares
),则必须在移动对象之前将其明确添加到移至组中。
如果从主要故障转移组中移除了数据库或共享对象(通过使用 REMOVE 参数或 SET 参数来修改 ALLOWED_DATABASES 或 ALLOWED_SHARES 列表),则在发生下一次刷新操作时,这些对象将从任何目标账户中删除。
为了避免在目标账户中删除这些对象,您可以在下次将修改后的主要故障转移组复制到目标账户 * 之前 * 删除辅助故障转移组。
要检索组织中已启用复制的账户列表,请使用 SHOW REPLICATION ACCOUNTS 命令。
要检索组织中的故障转移组列表,请参阅 SHOW FAILOVER GROUPS。
使用对组具有 OWNERSHIP 权限的角色执行自动 计划的刷新操作。如果计划刷新操作因权限不足而失败,请向对组具有 OWNERSHIP 权限的角色授予所需的权限。
关于元数据:
注意
客户应确保在使用 Snowflake 服务时,不会将个人数据(用户对象除外)、敏感数据、出口管制数据或其他受监管数据作为元数据输入。有关更多信息,请参阅 Snowflake 中的元数据字段。
示例¶
从源账户执行¶
将 myorg.myaccount3
添加到启用了从源账户复制指定对象和故障转移的目标账户列表中。
ALTER FAILOVER GROUP myfg ADD myorg.myaccount3 TO ALLOWED_ACCOUNTS;
重置对象类型列表,以便在源账户中复制并添加 db1
数据库:
ALTER FAILOVER GROUP myfg SET
OBJECT_TYPES = USERS, ROLES, WAREHOUSES, RESOURCE MONITORS, DATABASES
ALLOWED_DATABASES = db1;
将 db2
和 db3
数据库添加到数据库列表:
ALTER FAILOVER GROUP myfg
ADD db2, db3 TO ALLOWED_DATABASES;
将 db3
数据库移动到另一个故障转移组 myfg2
:
ALTER FAILOVER GROUP myfg
MOVE DATABASES db3 TO FAILOVER GROUP myfg2;
将 myfg
中的 db2
数据库移动到目前没有数据库的另一个故障转移组 myfg3
:
首先将
databases
添加到object_types
:ALTER FAILOVER GROUP myfg3 SET OBJECT_TYPES = DATABASES, SHARES;将
db2
移动到myfg3
:ALTER FAILOVER GROUP myfg MOVE DATABASES db2 TO FAILOVER GROUP myfg3;
从源账户的数据库列表中移除要进行复制和故障转移的所有数据库:
ALTER FAILOVER GROUP myfg
SET ALLOWED_DATABASES = NULL;
备注
执行上述语句会从要复制的数据库列表中移除所有数据库,但不会从用于复制和故障转移的指定对象类型列表中移除数据库对象。
要禁用所有数据库的复制和故障转移,并从指定对象类型的列表中移除数据库,请执行以下操作:
ALTER FAILOVER GROUP myfg
REMOVE databases FROM OBJECT_TYPES;
增加(或修改)自动计划刷新的间隔:
ALTER FAILOVER GROUP myfg
SET REPLICATION_SCHEDULE = '15 MINUTE';
从目标账户执行¶
刷新目标账户中故障转移组 myfg
中的对象:
ALTER FAILOVER GROUP myfg REFRESH;
将当前目标账户中的辅助故障转移组提升为主故障转移组:
ALTER FAILOVER GROUP myfg PRIMARY;
暂停自动刷新:
ALTER FAILOVER GROUP myfg SUSPEND;