Trabalhar com Perfis do Agente de Replicação

Aplica-se a: SQL ServerAzure SQL Managed Instance

Este tópico descreve como trabalhar com Perfis de Agente de Replicação no SQL Server utilizando SQL Server Management Studio, Transact-SQL ou Objetos de Gestão de Replicação (RMO). O comportamento de cada agente de replicação é controlado por um conjunto de parâmetros que podem ser definidos através de perfis de agentes. Cada agente tem um perfil predefinido, e alguns têm perfis pré-definidos adicionais; Num dado momento, apenas um perfil está ativo para um agente.

Usando o SQL Server Management Studio

Para aceder à caixa de diálogo Perfis de Agente a partir do SQL Server Management Studio

  1. Na página Geral da caixa de diálogo Propriedades do Distribuidor - <Distribuidor> , clique em Definições de Perfil.

Para aceder à caixa de diálogo Perfis de Agente a partir do Monitor de Replicação

  • Para abrir a caixa de diálogo para todos os agentes, clique com o botão direito num Publisher e depois clique em Perfis de Agentes.

  • Para abrir a caixa de diálogo de um único agente:

    1. Expanda um grupo de Publishers no painel esquerdo do Replication Monitor, expanda um Publisher e depois clique numa publicação.

    2. Para os perfis de Distribution Agent e Merge Agent, clique com o botão direito numa subscrição no separador All Subscriptions e depois clique em Agent Profile. Para outros agentes, clique com o botão direito no agente no separador Agentes e depois clique em Perfil do Agente.

Para especificar um perfil para um agente

  1. Se a caixa de diálogo Perfis de Agente mostrar perfis para mais do que um agente, selecione um agente.

  2. Selecione um perfil na coluna Predefinido para novos da grelha Perfis de agente. Por predefinição, o perfil só é aplicado a agentes relativos a novas publicações e subscrições.

  3. Para especificar que todos os agentes do tipo selecionado para publicações ou subscrições existentes devem usar este perfil, clique em Alterar agentes existentes.

Para visualizar e editar os parâmetros associados a um perfil

  1. Se a caixa de diálogo Perfis de Agente mostrar perfis para mais do que um agente, selecione um agente.

  2. Clique no botão de propriedades (...) ao lado de um perfil.

  3. Veja os parâmetros e os valores na caixa de diálogo <Propriedades do Perfil ProfileName>.

    • Parâmetros em perfis definidos pelo utilizador podem ser editados; parâmetros em perfis de sistema pré-definidos não podem.

    • Para visualizar todos os parâmetros de um agente, despeje a caixa Mostrar apenas parâmetros usados neste perfil . Para informações sobre os parâmetros do agente, consulte os links no final deste tópico.

  4. Clique em Fechar.

Para criar um perfil definido pelo utilizador

  1. Se a caixa de diálogo Perfis de Agente mostrar perfis para mais do que um agente, selecione um agente.

  2. Clique em Novo.

  3. Na caixa de diálogo de inicialização do Novo Perfil de Agente , selecione um perfil existente sobre o qual basear o novo perfil.

  4. Na caixa de diálogo Novo Perfil de Agente , insira valores nas caixas de texto Nome e Descrição .

  5. Modificar parâmetros para adaptar o perfil. Para visualizar todos os parâmetros de um agente, despeje a caixa Mostrar apenas parâmetros usados neste perfil . Para informações sobre os parâmetros do agente, consulte os links no final deste tópico.

  6. Selecione OK.

Para eliminar um perfil definido pelo utilizador

  1. Se a caixa de diálogo Perfis de Agente mostrar perfis para mais do que um agente, selecione um agente.

  2. Se um perfil estiver associado a um ou mais agentes, altere o perfil desses agentes:

    1. Selecione um perfil diferente na grelha de perfis de agentes .

    2. Clique em Alterar agentes existentes.

      Note

      Isto alterará o perfil de todos os agentes do tipo selecionado para publicações ou subscrições existentes, não apenas para aqueles que usam o perfil que pretende eliminar.

  3. Selecione o perfil que quer eliminar e depois clique em Eliminar.

  4. Selecione OK.

Usando Transact-SQL

Para criar um novo perfil de agente

  1. No Distribuidor, execute sp_add_agent_profile (Transact-SQL). Especifique @name, um valor de 1 para @profile_type e um dos seguintes valores para @agent_type:

    Se este perfil se tornar o novo perfil padrão para o seu tipo de agente de replicação, especifique um valor de 1 para @default. O identificador do novo perfil é devolvido usando o parâmetro de saída @profile_id . Isto cria um novo perfil com um conjunto de parâmetros de perfil baseados no perfil padrão para o tipo de agente dado.

  2. Depois de criado o novo perfil, adicione, remova ou modifique os parâmetros predefinidos para personalizar o perfil.

Para modificar um perfil de agente existente

  1. No Distribuidor, execute sp_help_agent_profile (Transact-SQL). Especifique um dos seguintes valores para @agent_type:

    Isto devolve todos os perfis do tipo de agente especificado. Anote o valor de profile_id no conjunto de resultados do perfil que pretende alterar.

  2. No Distribuidor, execute sp_help_agent_parameter (Transact-SQL). Especifique o identificador do perfil a partir do passo 1 para @profile_id. Isto devolve todos os parâmetros para o perfil. Note o nome de quaisquer parâmetros a modificar ou remover do perfil.

  3. Para alterar o valor de um parâmetro num perfil, execute sp_change_agent_parameter (Transact-SQL). Especifique o identificador de perfil do passo 1 para @profile_id, o nome do parâmetro a alterar para @parameter_name e um novo valor para o parâmetro para @parameter_value.

    Note

    Não pode alterar o perfil de um agente existente para se tornar o perfil padrão de um agente. Deve, em vez disso, criar um novo perfil como perfil predefinido, como mostrado no procedimento anterior.

  4. Para remover um parâmetro de um perfil, execute sp_drop_agent_parameter (Transact-SQL). Especifique o identificador de perfil do passo 1 para @profile_id e o nome do parâmetro a remover para @parameter_name.

  5. Para adicionar um novo parâmetro a um perfil, deve fazer o seguinte:

    • Consulte a tabela MSagentparameterlist (Transact-SQL) no Distribuidor para determinar que parâmetros de perfil podem ser definidos para cada tipo de agente.

    • No Distribuidor, execute sp_add_agent_parameter (Transact-SQL). Especifique o identificador de perfil do passo 1 para @profile_id, o nome de um parâmetro válido para adicionar para @parameter_name e o valor do parâmetro para @parameter_value.

Para eliminar um perfil de agente

  1. No Distribuidor, execute sp_help_agent_profile (Transact-SQL). Especifique um dos seguintes valores para @agent_type:

    Isto devolve todos os perfis do tipo de agente especificado. Anote o valor de profile_id no conjunto de resultados para o perfil a remover.

  2. No Distribuidor, execute sp_drop_agent_profile (Transact-SQL). Especifique o identificador do perfil a partir do passo 1 para @profile_id.

Utilizar perfis de agente durante a sincronização

  1. No Distribuidor, execute sp_help_agent_profile (Transact-SQL). Especifique um dos seguintes valores para @agent_type:

    Isto devolve todos os perfis do tipo de agente especificado. Tome nota do valor de profile_name no conjunto de resultados do perfil a utilizar.

  2. Se o agente for iniciado a partir de uma tarefa do agente, edite a etapa da tarefa que inicia o agente para especificar o valor de profile_name obtido na etapa 1 após o parâmetro da linha de comandos -ProfileName. Para mais informações, consulte Visualizar e Modificar os Parâmetros do Prompt de Comando do Agente de Replicação (SQL Server Management Studio).

  3. Ao iniciar o agente a partir do prompt de comandos, especifique o valor de profile_name obtido no passo 1 após o parâmetro de linha de comando -ProfileName .

Exemplo (Transact-SQL)

Este exemplo cria um perfil personalizado para o Merge Agent chamado custom_merge, altera o valor do parâmetro -UploadReadChangesPerBatch, adiciona um novo parâmetro -ExchangeType e devolve informações sobre o perfil que é criado.

DECLARE @profilename AS sysname;
DECLARE @profileid AS int;
SET @profilename = N'custom_merge';

-- Create a temporary table to hold the returned 
-- Merge Agent profiles.
CREATE TABLE #profiles (
    profile_id int, 
    profile_name sysname,
    agent_type int,
    [type] int,
    description varchar(3000),
    def_profile bit)

INSERT INTO #profiles (profile_id, profile_name, 
    agent_type, [type],description, def_profile)
    EXEC sp_help_agent_profile @agent_type = 4;

SET @profileid = (SELECT profile_id FROM #profiles 
    WHERE profile_name = @profilename);

IF (@profileid IS NOT NULL)
BEGIN
    EXEC sp_drop_agent_profile @profileid;
END
DROP TABLE #profiles

-- Add a new merge agent profile. 
EXEC sp_add_agent_profile @profile_id = @profileid OUTPUT, 
@profile_name = @profilename, @agent_type = 4, 
@description = N'custom merge profile';

-- Change the value of uploadreadchangesperbatch in the profile.
EXEC sp_change_agent_parameter @profile_id = @profileid, 
    @parameter_name = N'-UploadReadChangesPerBatch', @parameter_value = 50;

-- Add a new parameter ExchangeType the profile. 
EXEC sp_add_agent_parameter @profile_id = @profileid, 
    @parameter_name = N'-ExchangeType', @parameter_value = 1;

-- Verify the new profile. 
EXEC sp_help_agent_parameter @profileid;
GO

Utilização do RMO

Para criar um novo perfil de agente

  1. Crie uma ligação ao Distribuidor usando uma instância da ServerConnection classe.

  2. Crie uma instância da AgentProfile classe.

  3. Defina as seguintes propriedades no objeto:

  4. Chame o Create método para criar o perfil no servidor.

  5. Uma vez que o perfil exista no servidor, pode personalizá-lo adicionando, removendo ou alterando os valores dos parâmetros do agente de replicação.

  6. Para atribuir o perfil a um trabalho de agente de replicação existente, chame o AssignToAgent método. Passe o nome da base de dados de distribuição para distributionDBName e o ID do trabalho para agentID.

Para modificar um perfil de agente existente

  1. Crie uma ligação ao Distribuidor usando uma instância da ServerConnection classe.

  2. Crie uma instância da ReplicationServer classe. Passe o ServerConnection objeto criado no passo 1.

  3. Chame o método LoadProperties. Se este método devolver false, verifique se o distribuidor existe.

  4. Chame o método EnumAgentProfiles. Passe um AgentType valor para restringir os perfis devolvidos a um tipo específico de agente de replicação.

  5. Obtenha o objeto desejado AgentProfile do retorno ArrayList, onde a Name propriedade do objeto corresponde ao nome do perfil.

  6. Chame um dos seguintes métodos de AgentProfile para alterar o perfil:

    • AddParameter - adiciona um parâmetro suportado ao perfil, onde o nome é o nome do parâmetro do agente de replicação e o valor é o valor especificado. Para enumerar todos os parâmetros de agente suportados para um dado tipo de agente, chame o EnumParameterInfo método. Este método devolve um ArrayList de AgentProfileParameterInfo objetos que representam todos os parâmetros suportados.

    • RemoveParameter - remove um parâmetro existente do perfil, onde name é o nome do parâmetro do agente de replicação. Para enumerar todos os parâmetros atuais do agente definidos para o perfil, chame o EnumParameters método. Este método retorna um ArrayList de AgentProfileParameter objetos que representam o parâmetro existente para este perfil.

    • ChangeParameter - altera a definição de um parâmetro existente no perfil, onde name é o nome do parâmetro agente e newValue é o valor para o qual o parâmetro está a ser alterado. Para enumerar todos os parâmetros atuais do agente definidos para o perfil, chame o EnumParameters método. Este método devolve um ArrayList de AgentProfileParameter objetos que representam os parâmetros existentes deste perfil. Para enumerar todas as definições suportadas dos parâmetros do agente, chame o EnumParameterInfo método. Este método devolve uma ArrayList quantidade de AgentProfileParameterInfo objetos que representam os valores suportados para todos os parâmetros.

Para eliminar um perfil de agente

  1. Crie uma ligação ao Distribuidor usando uma instância da ServerConnection classe.

  2. Crie uma instância da AgentProfile classe. Defina o nome do perfil para Name e o ServerConnection do passo 1 para ConnectionContext.

  3. Chame o método LoadProperties. Se este método devolver falso, ou o nome especificado estava incorreto ou o perfil não existe no servidor.

  4. Verifique se a Type propriedade está definida para User, o que indica o perfil do cliente. Não deve remover um perfil que tenha um valor de System para Type.

  5. Chame o Remove método para remover o perfil definido pelo utilizador representado por este objeto do servidor.

Seguimento: Após alterar os parâmetros do agente

As alterações nos parâmetros do agente entram em vigor na próxima vez que o agente é iniciado. Se o agente estiver a funcionar continuamente, deve parar e reiniciar o agente. A partir do SQL Server 2017 CU3, algumas alterações nos parâmetros dos agentes entram em vigor sem necessidade de reiniciar os Agentes.