ALTER FAILOVER GROUP¶
修改现有 故障转移组 的属性。
在源账户中,可以执行以下操作:
- 为故障转移组重命名。 
- 重置为复制和故障转移启用的指定对象类型列表。 
- 设置或更新复制计划,以自动刷新辅助故障转移组。 
- 在故障转移组中添加或移除以下类型的账户对象: - 数据库 
- 共享 
- 安全集成 
- API 集成 
- 存储集成 
- 外部访问集成 
- 某些类型的通知集成(请参阅 集成复制) 
 
- 添加或移除启用复制和故障转移的目标账户。 
- 将共享或数据库移动至另一个故障转移组。 
在目标账户中,您可以执行以下操作:
- 将对象从源账户刷新到目标账户中。 
- 将辅助故障转移组提升为主要故障转移组(即对故障转移对象组进行故障转移)。 
- 暂停计划的复制。 
- 恢复计划的复制。 
- 另请参阅:
- CREATE FAILOVER GROUP , DROP FAILOVER GROUP , SHOW FAILOVER GROUPS, SYSTEM$SCHEDULE_ASYNC_REPLICATION_GROUP_REFRESH 
语法¶
源账户
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
  COMMENT = '<string_literal>'
ALTER FAILOVER GROUP [ IF EXISTS ] <name> SET
  REPLICATION_SCHEDULE = '{ <num> MINUTE | USING CRON <expr> <time_zone> }'
ALTER FAILOVER GROUP [ IF EXISTS ] <name> SET
  ERROR_INTEGRATION = <integration_name>
ALTER FAILOVER GROUP [ IF EXISTS ] <name> SET
  TAG <tag_name> = '<tag_value>' [ , <tag_name> = '<tag_value>' ... ]
ALTER FAILOVER GROUP [ IF EXISTS ] <name> UNSET
  { COMMENT | REPLICATION_SCHEDULE | ERROR_INTEGRATION } [ , ... ]
ALTER FAILOVER GROUP [ IF EXISTS ] <name> UNSET
  TAG <tag_name> [ , <tag_name> ... ]
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、存储、外部访问和某些类型的通知集成。有关详细信息,请参阅 集成复制。 - 如果集成对象包含在指定对象类型的列表中,则必须设置 - ALLOWED_INTEGRATION_TYPES参数。
- NETWORK POLICIES:
- 源账户中的所有网络策略。 
- RESOURCE MONITORS:
- 源账户中的所有资源监视器。 
- ROLES:
- 源账户中的所有角色。复制角色隐式包括对故障转移组中包含的对象类型的所有授权。例如,如果 - ROLES是唯一复制的对象类型,则只有角色的层次结构(即授权其他角色的角色)才会复制到目标账户。如果还包含- USERS对象类型,则还会复制向用户授权的角色。
- SHARES:
- 将共享对象添加到对象类型列表中。如果共享对象已经包含在指定对象类型的列表中,则 - ALLOWED_SHARES列表保持不变。要修改共享列表,请使用 ADD、MOVE 或 REMOVE 子句。
- USERS:
- 源账户中的所有用户。 
- WAREHOUSES:
- 源账户中的所有仓库。 
 - 备注 - 如果复制用户和角色,则会自动复制用户的编程访问令牌。 
- 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) 的复制。 
- NOTIFICATION INTEGRATIONS:
- 指定通知集成。 - 仅复制某些类型的通知集成。有关详细信息,请参阅 集成复制。 
 
- COMMENT = 'string_literal'
- 为故障转移组添加注释或覆盖现有注释。 - 默认值:
- NULL
 
- 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值,则刷新操作永远不会运行。
 
 - 默认值:
- NULL
 
- ERROR_INTEGRATION = integration_name
- 指定故障转移组发生刷新错误时用于发送电子邮件/推送通知的通知集成的名称。有关更多详细信息,请参阅 复制组和故障转移组的错误通知。 
 
- 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属性设置了计划刷新)。
- UNSET ...
- 为故障转移组指定一个(或多个)要取消设置的属性,从而将其重置为默认值: - COMMENT
- REPLICATION_SCHEDULE
- ERROR_INTEGRATION
- TAG tag_name [ , tag_name ... ]
 - 您可以使用单个 ALTER 语句重置多个属性;但是,每个属性 必须 用逗号分隔。此外,在重置属性时,仅指定名称;无需指定任何值。 
使用说明¶
- 需要以下最低权限: - 要使用以下语句刷新辅助故障转移组: 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 权限的角色授予所需的权限。 
- 在这种情况下,ALTER FAILOVER GROUP ...如果手动触发,SUSPEND IMMEDIATE 命令不会取消正在进行的刷新操作。有关信息,请参阅 取消未自动安排的正在进行的刷新操作。 
- 取消 SECONDARY_DOWNLOADING_METADATA 或者 SECONDARY_DOWNLOADING_DATA 阶段正在进行的刷新操作,可能会导致目标账户的状态不一致。有关更多信息,请参阅 查看正在进行的刷新操作的当前阶段。 
- 如果您使用标签创建复制或故障转移组,或者通过对复制或故障转移组设置标签来进行修改,则 标签继承 不适用于您在复制或故障转移组中指定的任何对象。 - 标签继承仅适用于具有 亲子关系 的对象,例如数据库、架构和表。复制或故障转移组没有子对象。 
- 您无法对辅助复制或故障转移组设置标签或修改标签,因为这些对象是只读的。 
- 刷新辅助复制或故障转移组时,在主组上设置的任何标签都会在辅助组上设置。 
- 关于元数据: - 注意 - 客户应确保在使用 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;