Share via


Configurar o envio de logs no SharePoint Server

APLICA-SE A:yes-img-132013 yes-img-16 2016yes-img-192019 yes-img-seSubscription Edition no-img-sopSharePoint no Microsoft 365

Com o envio de logs, você faz backup dos logs de transação de um banco de dados primário para um banco de dados secundário em uma instância separada do SQL Server. No cenário descrito aqui, o envio de logs do SQL Server é usado junto com a Replicação do Sistema de Arquivos Distribuídos (DFSR) para copiar os bancos de dados e logs de transação para o farm de recuperação no Microsoft Azure, como mostrado abaixo.

Neste cenário de recuperação de desastre, o farm de produção do SharePoint Server está situado no local e o farm de recuperação está localizado no Azure. Você também pode adaptar a diretriz neste tópico para outros tipos de cenários de recuperação de desastre.

Elementos de uma solução de espera passiva no Azure

Elementos de uma solução de espera passiva no Azure

Na ilustração:

  • Dois ambientes são mostrados lado a lado: o farm SharePoint local e o farm de recuperação (em espera) no Azure.

  • Cada ambiente inclui um compartilhamento de arquivos.

  • O envio de logs é usado para copiar os logs de um servidor do banco de dados secundário no ambiente local para o compartilhamento de arquivos local.

  • A DFSR copia os arquivos do compartilhamento de arquivos no ambiente local para o compartilhamento de arquivos no ambiente Azure. Em um cenário WAN, a DFSR é mais eficiente do que enviar os logs diretamente para o servidor secundário no Azure.

  • O envio de log reproduz os logs do compartilhamento de arquivos no ambiente do Azure para a réplica primária no grupo de disponibilidade SQL Server Always On no ambiente de recuperação.

  • Os bancos de dados enviados por log não são anexados ao farm do SharePoint Server até que um exercício de recuperação seja realizado.

O seguinte diagrama mostra as sete fases que a recuperação de desastre completa do SharePoint Server na solução Azure. Fase 6: A configuração do envio de logs para o farm de recuperação é destacada neste diagrama e explicada nas seguintes seções.

Mapa de solução de recuperação de desastres

Usando o envio de logs para a recuperação de desastre

O envio de logs permite que você envie automaticamente arquivos de log da transação para os bancos de dados de uma instância do servidor do banco de dados primário para uma instância do servidor do banco de dados secundário. Em nosso ambiente de teste local, usamos Always On grupos de disponibilidade com duas réplicas para alta disponibilidade. Configuramos o envio de logs em ambas as réplicas. Cada réplica deve ser capaz de enviar logs de transação. Apenas a réplica ativa e que possui o banco de dados pode enviar logs. Contudo, se um evento de failover ocorresse e a réplica secundária ficasse ativa, ela teria que enviar os logs de transação, ao invés da réplica com falha.

Após os logs de transação serem recebidos no ambiente Azure, eles são restaurados, um de cada vez, em cada banco de dados do SharePoint no servidor do banco de dados secundário. Para mais informações sobre nosso ambiente de teste, consulte Ambiente da prova de conceito da Microsoft.

Observação

[!OBSERVAçãO] Algumas organizações usam um servidor do banco de dados de terceiros como um monitor para registrar o histórico e o status do backup, e restaurar as operações. Esse servidor de monitor opcional cria alertas quando as operações de backup falham.

Para obter informações detalhadas sobre o envio de logs, consulte os artigos listados na seguinte tabela.

Tabela: Artigos de referência para o envio de logs

URL Descrição
Sobre o envio de logs (SQL Server)
Descreve os backups do log de transação do envio de logs e as opções disponíveis.
Configurar o envio de logs (SQL Server)
Descreve como configurar o envio de logs no SQL Server 2012 usando o SQL Server Management Studio ou Transact-SQL.
Exibir o relatório de envio de logs (SQL Server Management Studio)
Explica como exibir o relatório de Status do envio de logs da transação no SQL Server Management Studio. Você pode executar um relatório de status em um servidor de monitor, servidor primário ou servidor secundário.

Considerações do desempenho

O envio de logs consiste em três serviços. Cada serviço realiza uma das seguintes operações:

  1. Faz backup do log de transação na instância do servidor primário.

  2. Copia o arquivo do log de transação para a instância do servidor secundário.

  3. Restaura o backup do log na instância do servidor secundário.

Cada serviço opera em um agendamento e é executado em um intervalo, o que pode ter um impacto significativo no servidor do banco de dados e, por padrão, no desempenho do farm do SharePoint.

Para definir corretamente os intervalos para o backup, cópia e restauração dos serviços para o envio de logs, você deve analisar a quantidade de dados sendo enviados por log. A quantidade de dados enviados por log é afetada pela quantidade diária de alterações nos bancos de dados de conteúdo. A porcentagem de mudança pode variar muito dependendo do conteúdo, alterações na manutenção e picos de uso.

Para ter uma porcentagem precisa da alteração, calcule a soma das alterações nos backups do log de transação para cada banco de dados de conteúdo que você envia por log em um determinado intervalo. Use esses dados para calcular a porcentagem de alteração comparada com o banco de dados primário.

A diretriz a seguir é derivada da experiência de envio de logs da equipe de campo da Microsoft com diversas versões do SharePoint Server.

  • Evite a diminuição do desempenho devido a todos os serviços iniciando ao mesmo tempo assegurando que todos os serviços de envio de logs sejam deslocados com pelo menos um minuto de atraso a partir do serviço anterior.

  • É melhor fazer backup e copiar muitos logs de transação pequenos, ao invés de alguns logs de transação grandes.

  • Agende os backups do log e a cópia em intervalos frequentes. Você pode restaurar os logs de transação em intervalos menos frequentes. Por exemplo, inicie usando intervalos de backup e cópia de cinco minutos, e um intervalo de restauração de 15 minutos.

Pré-requisitos para configurar o envio de logs

Verifique se você atende os seguintes pré-requisitos para usar o envio de logs para a solução de recuperação de desastre.

  • Os logins do SQL Server são contas de domínio que têm os níveis de permissão necessários para o envio de logs. Os procedimentos armazenados do envio de logs requerem uma associação na função do servidor fixa sysadmin.

  • O banco de dados primário deve usar o modelo de recuperação de log completo ou em massa.

    Cuidado

    Se você trocar o banco de dados para uma recuperação simples, o envio de logs irá parar de funcionar.

  • Antes de configurar o envio de logs, você deve criar um compartilhamento para tornar os backups do log de transação disponíveis para o servidor secundário. É um compartilhamento do diretório onde a transação dos backups de log é gerada.

Além dos Objetivos do ponto de recuperação (RPO), verifique se os dados do farm recuperados estão o mais completos e sem corrupção possível. Para atingir esses objetivos, você deve planejar e agendar com cuidado cada aspecto do envio de logs.

Infraestrutura do envio de logs

A infraestrutura do envio de logs usada para nosso ambiente de solução para a recuperação de desastre é mostrada no seguinte diagrama.

Infraestrutura do envio de logs e fluxo de dados

A infraestrutura de envio de log e o fluxo direcional entre as fazendas locais e do Azure.

O diagrama anterior mostra a infraestrutura do envio de logs e o fluxo de dados. O diagrama mostra os servidores do banco de dados do SQL Server e os servidores de arquivo no farm de produção e no farm de recuperação do Azure. Essas fazendas são quase idênticas e cada uma contém uma réplica primária e secundária para cada grupo de disponibilidade Always On. Os servidores de arquivo, FIL1 e AZ-FIL1, são configurados igualmente, inclusive o número de discos rígidos e tamanhos do disco. Os servidores adicionais no farm não são mostrados.

Para fornecer alta disponibilidade, cada réplica em um grupo de disponibilidade armazena um backup (logs completos, diferenciais e de transações) da outra réplica.

As réplicas primária e secundária (SQL-HA1 e SQL-HA2, respectivamente) fazem backups que são armazenados em seu parceiro no grupo de disponibilidade.

O envio de logs de transação é configurado na réplica secundária para minimizar o impacto dos backups nos bancos de dados de produção. Esses logs de transação são gravados em uma pasta compartilhada no servidor de arquivo local (FIL1). O Serviço de replicação do Sistema de arquivos distribuídos (DFS) do Windows Server copia os logs de transação de FIL1 para AZ-FIL1. Os logs de transação no AZ-FIL1 são restaurados para o AZ-SQL-HA1, a réplica primária para o grupo de disponibilidade no farm de recuperação.

Etapas requeridas para configurar e validar o envio de logs

As etapas requeridas para configurar, executar e validar o envio de logs são condensadas e resumidas na seguinte lista:

  1. Faça backup do banco de dados.

  2. Configure os backups completo e diferencial para uma pasta local e também uma pasta compartilhada no servidor de arquivo.

  3. Verifique se backups foram feitos na pasta local e na pasta compartilhada.

  4. Configure e teste a Replicação do Sistema de arquivos distribuídos (DFS).

  5. Crie o Namespace e a Replicação para transferir os logs de transação e os arquivos de backup entre os farms local e do Azure na pasta compartilhada no servidor de arquivo.

  6. Verifique todas as transferências após a execução do envio de logs.

  7. Configure e teste o envio de logs.

  8. Configure o envio de logs no servidor do banco de dados primário usando o seguinte script: Primary-Logshippingsetupparameter. Esse script cria serviços de backup, agenda-os para o envio de logs, então, inicia os serviços.

SET NOCOUNT ON
USE MSDB
GO
--@PrimServer : Primary Server name
--@SecServer  : DR/Secondary Server Name
--@SecInstance : DR/Secondary FQDN
--@Domain  : Domain Name
--@BkpDrive : Production Backup server Name
--@DBName : DatabaseName
DECLARE @LS_BackupJobIdAS uniqueidentifier,  @LS_PrimaryIdAS uniqueidentifier , @SP_Add_RetCode As int 
DECLARE @Time as nvarchar(10),@SecInstance as nvarchar(250), @PrimServer as nvarchar(50),@SecServer as nvarchar(50),
@Domain as nvarchar(50),@DBName as nvarchar(max),@BkpDrive as nvarchar(250),@CMD as nvarchar(max),@Counter int
----------------------------------------------------------------------------
IF OBJECT_ID ('tempdb.DBO.#LogShipping','U') IS NOT NULL DROP TABLE #LogShipping
Create table #LogShipping ( LSDBs nvarchar(max))
Set @PrimServer ='SQL1'
Set @SecServer ='SQL2'
Set @SecInstance ='SQL2.corp.adventureworks.com'
Set @Domain ='corp.adventureworks.com'
Set @BkpDrive ='FS1.corp.adventureworks.com'
Set @DBName = 'Social_DB'
Set @Time = '0130'
SET @DBName = UPPER(REPLACE(@DBName, ' ', ''))
SET @DBName = '''' + REPLACE(@DBName, ',', ''', ''') + ''''
Set @CMD =   ' Select ' +
'''DECLARE  @SP_Add_RetCode As int, @LS_BackupJobIdAS uniqueidentifier,  @LS_PrimaryIdAS uniqueidentifier
EXEC @SP_Add_RetCode = master.dbo.sp_add_log_shipping_primary_database ' + CHAR(10) +
'@database = ''''''  + db.Name + ''''''' + CHAR(10) +
',@backup_directory = ''''\\' + @BkpDrive + '\LS\' + ''' + db.Name + ''''' + '''' + CHAR(10) +
',@backup_share = ' + '''''\\' + @BkpDrive + '\LS\' + ''' + db.Name + ''''' + ''''  + CHAR(10) +
',@backup_job_name = ''''' + 'LSBackup_' + ''' + db.Name + ''''' + '''' + CHAR(10) +
',@backup_retention_period = 4320
,@backup_compression = 1
,@backup_threshold = 180 
,@threshold_alert_enabled = 1
,@history_retention_period = 5760 
,@backup_job_id = @LS_BackupJobId OUTPUT 
,@primary_id = @LS_PrimaryId OUTPUT 
,@overwrite = 1 ' +
'IF (@@ERROR = 0 AND @SP_Add_RetCode = 0) 
BEGIN 
DECLARE @LS_BackUpScheduleUIDAs uniqueidentifier ,@LS_BackUpScheduleIDAS int 
EXEC msdb.dbo.sp_add_schedule 
@schedule_name = ''''' + 'LSBackupSchedule_'+ @PrimServer + '_' + ''' + db.Name + ''''' + ''''  + CHAR(10) +
',@enabled = 1 
,@freq_type = 4 
,@freq_interval = 1 
,@freq_subday_type = 4 
,@freq_subday_interval = 13 
,@freq_recurrence_factor = 0 
,@active_start_date = 20090506 
,@active_end_date = 99991231 
,@active_start_time = ' + @Time  + CHAR(10) +
',@active_end_time = 235900 
,@schedule_uid = @LS_BackUpScheduleUID OUTPUT 
,@schedule_id = @LS_BackUpScheduleID OUTPUT 
EXEC msdb.dbo.sp_attach_schedule @job_id = @LS_BackupJobId ,@schedule_id = @LS_BackUpScheduleID  
EXEC msdb.dbo.sp_update_job @job_id = @LS_BackupJobId ,@enabled = 1 
END 
EXEC master.dbo.sp_add_log_shipping_alert_job 
EXEC master.dbo.sp_add_log_shipping_primary_secondary 
@primary_database = '''  + ''''' + db.Name + ''''' + ''''  + CHAR(10) + 
',@secondary_server = ''''' + @SecInstance + ''''''  + CHAR(10) +
',@secondary_database = ''' + ''''' + db.Name + ''''' + ''''  + CHAR(10) +
',@overwrite = 1 ''' +
' [LSDBs] FROM sys.databases db  where name in (' + @DBName + ')' +
'and    db.name  not in (''master'',''model'',''msdb'',''tempdb'',''metricsops'',''periscope'' )
and   Not (exists (select lss.Secondary_database from msdb.dbo.log_shipping_Secondary_databases lss where  db.Name = lss.Secondary_database)
or exists (select lsp.primary_database from msdb.dbo.log_shipping_primary_databases lsp where  db.Name = lsp.primary_database)
   )'
Insert #LogShipping (LSDBs)
Exec ( @CMD)
Set @Counter = @@rowcount
While (@counter > 0)
  Begin
  select top 1  @CMD = LSDBs from #LogShipping
  exec sp_executesql @CMD
  set @counter = @counter - 1
  delete top (1) from #LogShipping
  End
IF OBJECT_ID ('tempdb.DBO.#LogShipping','U') IS NOT NULL DROP TABLE #LogShipping
-- ****** End: Script to be run at Primary: [DB1-PSMSQL-01] ******
  1. Configure o envio de logs em um servidor do banco de dados secundário usando o seguinte script: Secondary-Logshippingsetupparameter. No ambiente de nosso laboratório, o servidor do banco de dados secundário está no farm de recuperação localizado em Azure.
-- ****** Begin: Script to be run at Secondary:  9.3 BUILD******
SET NOCOUNT ON
USE MSDB
GO
--@PrimServer : Primary Server name
--@SecServer  : DR/Secondary Server Name
--@SecInstance : DR/Secondary FQDN
--@Domain  : Domain Name
--@PrimaryBkpDrive : Production Backup server Name
--@BkpDrive : Secondary Backup server Name
--@DBName : DatabaseName
DECLARE @LS_BackupJobIdAS uniqueidentifier,  @LS_PrimaryIdAS uniqueidentifier , @SP_Add_RetCode As int 
DECLARE @Time as nvarchar(10),@SecInstance as nvarchar(250), @PrimServer as nvarchar(50),@SecServer as nvarchar(50),
@Domain as nvarchar(50),@DBName as nvarchar(max),@PrimaryBkpDrive as nvarchar(250),@BkpDrive as nvarchar(250),@CMD as nvarchar(max),@CMD2 as nvarchar(max),@Counter int
DECLARE  @Delimeter char(1),@DB nvarchar(200), @StartPos int, @Length int
IF OBJECT_ID ('tempdb.DBO.#LogShipping','U') IS NOT NULL DROP TABLE #LogShipping
Create table #LogShipping ( LSDBs nvarchar(max))
IF OBJECT_ID ('tempdb.DBO.#DBs','U') IS NOT NULL DROP TABLE #DBs
Create TABLE #DBs (Name nvarchar(200))
Set @PrimServer ='az-sql-ha1'
Set @SecServer =' az-sql-ha2'
Set @SecInstance ='SQL1.corp.adventureworks.com'
Set @Domain =' corp.adventureworks.com '
SET @PrimaryBkpDrive = 'fs1.corp.adventureworks.com'
Set @BkpDrive =' az-sp-fs.corp.adventureworks.com '
Set @DBName = 'Social_DB'
Set @Time = '0130'
--Parsing Function
SET @Delimeter = ','
WHILE LEN(@DBName) > 0
  BEGIN
    SET @StartPos = CHARINDEX(@Delimeter, @DBName)
    IF @StartPos < 0 SET @StartPos = 0
    SET @Length = LEN(@DBName) - @StartPos - 1
    IF @Length < 0 SET @Length = 0
    IF @StartPos > 0
      BEGIN
        SET @DB = Rtrim(Ltrim(SUBSTRING(@DBName, 1, @StartPos - 1)))
        SET @DBName = SUBSTRING(@DBName, @StartPos + 1, LEN(@DBName) - @StartPos)
      END
    ELSE
      BEGIN
        SET @DB = Rtrim(Ltrim(@DBName))
        SET @DBName = ''
      END
    INSERT #DBs (Name) VALUES(@DB)
END
--SET @DBName = UPPER(REPLACE(@DBName, ' ', ''))
--SET @DBName = '''' + REPLACE(@DBName, ',', ''', ''') + ''''
Set @CMD = 'Select ' +
''' DECLARE @LS_Secondary__CopyJobId AS uniqueidentifier, @LS_Secondary__RestoreJobId AS uniqueidentifier ,@LS_Secondary__SecondaryId AS uniqueidentifier , @LS_Add_RetCode As int ,@LS_Add_RetCode2 As int 
  DECLARE @LS_SecondaryCopyJobScheduleUIDAs uniqueidentifier ,@LS_SecondaryCopyJobScheduleIDAS int, @LS_SecondaryRestoreJobScheduleUIDAs uniqueidentifier ,@LS_SecondaryRestoreJobScheduleIDAS int 
  EXEC @LS_Add_RetCode = master.dbo.sp_add_log_shipping_secondary_primary 
@primary_server = ''''' + @PrimServer + ''''''+  CHAR(10) +
',@primary_database = '' + ' +  ''''''''' + db.Name + ''''''''' +  CHAR(10) +
' + '',@backup_source_directory = ' + '''''\\' + @PrimaryBkpDrive + '\LS\'' + db.Name + ''''''' +  CHAR(10) +
' ,@backup_destination_directory =  ' + '''''\\' + @BkpDrive + '\LS\'' + db.Name + ''''''' +  CHAR(10) +
',@copy_job_name = ''''LSCopy_DB1-PSMSQL-01_'' + db.Name + ''''''' +  CHAR(10) +
',@restore_job_name = ''''LSRestore_'+ @PrimServer + '_'' + db.Name + ''''''' +  CHAR(10) +
',@file_retention_period = 4320 
,@overwrite = 1 
,@copy_job_id = @LS_Secondary__CopyJobId OUTPUT 
,@restore_job_id = @LS_Secondary__RestoreJobId OUTPUT 
,@secondary_id = @LS_Secondary__SecondaryId OUTPUT 
IF (@@ERROR = 0 AND @LS_Add_RetCode = 0) 
BEGIN 
EXEC msdb.dbo.sp_add_schedule 
@schedule_name =''''DefaultCopyJobSchedule'''' 
,@enabled = 1 
,@freq_type = 4 
,@freq_interval = 1 
,@freq_subday_type = 4 
,@freq_subday_interval = 15 
,@freq_recurrence_factor = 0 
,@active_start_date = 20090506 
,@active_end_date = 99991231 
,@active_start_time = ' + @Time + ' 
,@active_end_time = 235900 
,@schedule_uid = @LS_SecondaryCopyJobScheduleUID OUTPUT 
,@schedule_id = @LS_SecondaryCopyJobScheduleID OUTPUT 
EXEC msdb.dbo.sp_attach_schedule 
@job_id = @LS_Secondary__CopyJobId 
,@schedule_id = @LS_SecondaryCopyJobScheduleID  
EXEC msdb.dbo.sp_add_schedule 
@schedule_name =''''DefaultRestoreJobSchedule'''' 
,@enabled = 1 
,@freq_type = 4 
,@freq_interval = 1 
,@freq_subday_type = 4 
,@freq_subday_interval = 15 
,@freq_recurrence_factor = 0 
,@active_start_date = 20090506 
,@active_end_date = 99991231 
,@active_start_time = ' + @Time + '
,@active_end_time = 235900 
,@schedule_uid = @LS_SecondaryRestoreJobScheduleUID OUTPUT 
,@schedule_id = @LS_SecondaryRestoreJobScheduleID OUTPUT 
EXEC msdb.dbo.sp_attach_schedule 
@job_id = @LS_Secondary__RestoreJobId 
,@schedule_id = @LS_SecondaryRestoreJobScheduleID  
END 
IF (@@ERROR = 0 AND @LS_Add_RetCode = 0) 
BEGIN 
EXEC @LS_Add_RetCode2 = master.dbo.sp_add_log_shipping_secondary_database 
@secondary_database = ' +  ''''''' + db.Name + ''''''' +  CHAR(10) + '
,@primary_server = ''''' + @PrimServer + '''''
,@primary_database = '+  ''''''' + db.Name + ''''''' +  CHAR(10) +
',@restore_delay = 0 
,@restore_mode = 1 
,@disconnect_users= 1 
,@restore_threshold = 180   
,@threshold_alert_enabled = 1 
,@history_retention_period= 5760 
,@overwrite = 1 
END 
IF (@@error = 0 AND @LS_Add_RetCode = 0) 
BEGIN 
EXEC msdb.dbo.sp_update_job @job_id = @LS_Secondary__CopyJobId ,@enabled = 0 
EXEC msdb.dbo.sp_update_job @job_id = @LS_Secondary__RestoreJobId ,@enabled = 1 
END '''  + '[LSDBs] FROM #DBs db'
--Print @CMD
Insert #LogShipping (LSDBs)
Exec ( @CMD)
Set @Counter = @@rowcount
While (@counter > 0)
  Begin
  select top 1  @CMD = LSDBs from #LogShipping
  exec sp_executesql @CMD
  set @counter = @counter - 1
  delete top (1) from #LogShipping
  End
IF OBJECT_ID ('tempdb.DBO.#LogShipping','U') IS NOT NULL DROP TABLE #LogShipping
IF OBJECT_ID ('tempdb.DBO.#DBs','U') IS NOT NULL DROP TABLE #DBs
-- ****** End: Script to be run at Secondary:  9.3 Build ******
  1. Verifique se os logs de transação são enviados para o compartilhamento e se o DFS está replicando esses logs para o compartilhamento no servidor de arquivo Azure. Abra o Monitor de atividades do serviço no SQL Server para verificar se os logs de transação foram enviados com sucesso. Abra as pastas compartilhadas nos servidores de arquivo nos farms de produção e do Azure para verificar se o DFS está transferindo os logs de transação.

Confira também

Conceitos

Configurar grupos de disponibilidade SQL Server Always On para o SharePoint Server

Outros recursos

Sobre o envio de logs (SQL Server)

Tutoriais de replicação