jobs.sp_add_target_group_member (Azure 弹性作业) (Transact-SQL)

适用于:Azure SQL 数据库

将数据库或数据库组添加到 Azure 弹性作业服务中用于Azure SQL 数据库的目标组。

Transact-SQL 语法约定

语法

[jobs].sp_add_target_group_member [ @target_group_name = ] 'target_group_name'
         [ @membership_type = ] 'membership_type' ]
        [ , [ @target_type = ] 'target_type' ]
        [ , [ @refresh_credential_name = ] 'refresh_credential_name' ]
        [ , [ @server_name = ] 'server_name' ]
        [ , [ @database_name = ] 'database_name' ]
        [ , [ @elastic_pool_name = ] 'elastic_pool_name' ]
        [ , [ @target_id = ] 'target_id' OUTPUT ]

参数

@target_group_name

要向其添加成员的目标组的名称。 target_group_name为 nvarchar(128),没有默认值。

@membership_type

指定是包括目标组成员还是将其排除。 membership_type 为 nvarchar(128),默认值为“Include”。 membership_type的有效值为“Include”或“Exclude”。

@target_type

目标数据库或数据库集合的类型,包括Azure SQL 数据库逻辑服务器中的所有数据库、弹性池中的所有数据库或单个数据库。 target_type为 nvarchar(128),没有默认值。

target_type的有效值为 SqlElasticPoolSqlDatabaseSqlServer

@refresh_credential_name

数据库范围的凭据的名称。 refresh_credential_name为 nvarchar(128),没有默认值。

使用 Microsoft Entra 身份验证(以前为 Azure Active Directory)时,省略 @refresh_credential_name 参数。 仅用于基于凭据的身份验证。

@server_name

应添加到指定目标组的Azure SQL 数据库逻辑服务器的名称。 当target_type为SqlServerserver_name时,应指定server_name。 server_name为 nvarchar(128),没有默认值。

包括.database.windows.net作为@server_name一部分。

@database_name

应添加到指定目标组的数据库的名称。 当target_type为SqlDatabase时,应指定database_name database_name为 nvarchar(128),没有默认值。

@elastic_pool_name

应添加到指定目标组的Azure SQL 数据库弹性池的名称。 当target_type为SqlElasticPoolelastic_pool_name时,应指定elastic_pool_name。 elastic_pool_name为 nvarchar(128),没有默认值。

@target_id 输出

分配给目标组成员的目标标识号,前提是其已创建并添加到目标组。 target_id是 uniqueidentifier 类型的输出变量,默认值为 NULL.

返回代码值

0(成功)或 1(失败)

注解

如果将服务器或弹性池包括在目标组中,则执行作业时,作业就会在服务器或弹性池中的所有单一数据库上执行。

为弹性作业的所有目标选择一种方法。 例如,对于单个弹性作业,不能将一个目标服务器配置为使用数据库范围的凭据,另一个服务器则使用 Microsoft Entra ID 身份验证。 有关详细信息,请参阅身份验证

权限

默认情况下,只有 sysadmin 固定服务器角色的成员才可以执行此存储过程。 仅 sysadmin 的成员可以使用此存储过程来编辑其他用户拥有的作业的属性。

示例

将一个数据库添加到目标组

以下示例演示如何使用 Microsoft Entra(前 Azure Active Directory)身份验证将服务器中的一个数据库添加到名为 ElasticJobGroup的目标组。

连接并运行以下命令,将master数据库添加到名为ElasticJobGroupjob_database 的目标组:

-- Connect to the job database specified when creating the job agent

-- Create a target group containing elastic job database
EXEC jobs.sp_add_target_group 'ElasticJobGroup';

-- Add a server target member
EXEC jobs.sp_add_target_group_member
@target_group_name = 'ElasticJobGroup',
@target_type = 'SqlDatabase',
@server_name = 'server1.database.windows.net',
@database_name = 'master';

--View the recently created target group and target group members
SELECT * FROM jobs.target_groups 
WHERE target_group_name='ServerGroup1';
GO
SELECT * FROM jobs.target_group_members 
WHERE target_group_name='ServerGroup1';
GO

将多个数据库添加到目标组

以下示例将组中的所有 London 数据库和 NewYork 服务器添加到该组 Servers Maintaining Customer Information。 在这种情况下 ElasticJobs,必须连接到创建作业代理时指定的作业数据库。

使用 Microsoft Entra 身份验证(前为 Azure Active Directory)时,省略 @refresh_credential_name 参数,仅当使用数据库范围的凭据时,才应提供此参数。 在以下示例中,已注释掉 @refresh_credential_name 参数。

--Connect to the jobs database specified when creating the job agent
USE ElasticJobs;
GO

-- Create a target group containing server(s)
EXEC jobs.sp_add_target_group @target_group_name =  N'Servers Maintaining Customer Information';
GO

-- Add a server target member
EXEC jobs.sp_add_target_group_member
@target_group_name = N'Servers Maintaining Customer Information',
@target_type = N'SqlServer',
--@refresh_credential_name=N'refresh_credential', --database-scoped credential
@server_name=N'London.database.windows.net';
GO

-- Add a server target member
EXEC jobs.sp_add_target_group_member
@target_group_name = N'Servers Maintaining Customer Information',
@target_type = N'SqlServer',
--@refresh_credential_name=N'refresh_credential', --database-scoped credential
@server_name=N'NewYork.database.windows.net';
GO

--View the recently added members to the target group
SELECT * FROM [jobs].target_group_members 
WHERE target_group_name= N'Servers Maintaining Customer Information';
GO

排除逻辑服务器上的数据库

以下示例演示如何对逻辑服务器 server1.database.windows.net中的所有数据库执行作业,但命名 MappingDB 的数据库或命名 MappingDB2的数据库除外。

连接到 job_database,然后运行以下命令:

--Connect to the job database specified when creating the job agent

-- Create a target group containing server(s)
EXEC [jobs].sp_add_target_group N'ServerGroup';
GO

-- Add a server target member
EXEC jobs.sp_add_target_group_member
@target_group_name = N'ServerGroup',
@target_type = N'SqlServer',
@server_name=N'server1.database.windows.net';
GO

--Exclude one database from a server target group
EXEC [jobs].sp_add_target_group_member
@target_group_name = N'ServerGroup',
@membership_type = N'Exclude',
@target_type = N'SqlDatabase',
@server_name = N'server1.database.windows.net',
@database_name = N'MappingDB';
GO

--Exclude another database from a server target group
EXEC [jobs].sp_add_target_group_member
@target_group_name = N'ServerGroup',
@membership_type = N'Exclude',
@target_type = N'SqlDatabase',
@server_name = N'server1.database.windows.net',
@database_name = N'MappingDB2';
GO

--View the recently created target group and target group members
SELECT * FROM [jobs].target_groups 
WHERE target_group_name = N'ServerGroup';
GO
SELECT * FROM [jobs].target_group_members
WHERE target_group_name = N'ServerGroup';
GO

创建目标组(池)

以下示例演示如何以一个或多个弹性池中的所有数据库为目标。

连接到 job_database,然后运行以下命令:

--Connect to the job database specified when creating the job agent

-- Create a target group containing pool(s)
EXEC jobs.sp_add_target_group 'PoolGroup';

-- Add an elastic pool(s) target member
EXEC jobs.sp_add_target_group_member
@target_group_name = 'PoolGroup',
@target_type = 'SqlElasticPool',
@server_name = 'server1.database.windows.net',
@elastic_pool_name = 'ElasticPool1';

-- View the recently created target group and target group members
SELECT * FROM jobs.target_groups 
WHERE target_group_name = N'PoolGroup';
GO
SELECT * FROM jobs.target_group_members 
WHERE target_group_name = N'PoolGroup';
GO