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