AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / dba / Perguntas / 326574
Accepted
Hannah Vernon
Hannah Vernon
Asked: 2023-04-29 06:21:25 +0800 CST2023-04-29 06:21:25 +0800 CST 2023-04-29 06:21:25 +0800 CST

Grupos de Disponibilidade Distribuída recusando-se a ressincronizar meu banco de dados FILESTREAM com SUSPEND_FROM_CAPTURE

  • 772

A configuração do meu laboratório doméstico consiste em quatro servidores executados no HyperV em dois hosts físicos. As instâncias do SQL Server são SQLAG101, SQLAG102, SQLAG201 e SQLAG202.

SQLAG101 e SQLAG102 são membros do SQLAG100 Availability Group e estão na rede 192.168.0.0/24.

SQLAG201 e SQLAG202 são membros do SQLAG200 Availability Group e estão na rede 192.168.2.0/24.

O tráfego é roteado entre as duas sub-redes, que são locais para meu laboratório (ou seja, há muito pouca latência envolvida).

SQLDAG é um Grupo de Disponibilidade Distribuído que abrange SQLAG100 e SQLAG200. Isso está funcionando bem há cerca de 6 meses, com failover automático entre os servidores membros do AG e failovers manuais entre os dois AGs funcionando corretamente e sem perda de dados.

No meu servidor de teste, estou vendo os seguintes erros no meu Distributed AG Forwarder para um banco de dados usando FILESTREAM:

O sistema operacional retornou o erro '2(O sistema não pode encontrar o arquivo especificado.)' ao tentar 'CreateFileW' em 'F:\SQLServer\HV2019\FILESTREAM\dag_test_db\dag_test_db_fg_fs_f01\3e6a0757-7405-4ee2-b8a8-df878b8cd7ce\a10e3ae8 -922c-4821-904e-7555c031630d\0000008f-000292b0-0006' em 'fsdohdlr.cpp'(2474).

A movimentação de dados dos Grupos de Disponibilidade Always On para o banco de dados 'dag_test_db' foi suspensa pelo seguinte motivo: "system" (Source ID 3; Source string: 'SUSPEND_FROM_CAPTURE'). Para retomar a movimentação de dados no banco de dados, você precisará retomar o banco de dados manualmente. Para obter informações sobre como retomar um banco de dados de disponibilidade, consulte os Manuais Online do SQL Server.

(adoro essa referência do Books Online, btw)

Para solucionar problemas, abandonei completamente o dag_test_dbencaminhador e os encaminhadores secundários. Em seguida, fiz um backup completo do primário, restaurei-o no encaminhador e continuei restaurando os backups de log conforme necessário antes de adicionar o dag_test_dbretorno ao Grupo de Disponibilidade dos encaminhadores por meio deALTER DATABASE [dag_test_db] SET HADR AVAILABILITY GROUP = SQLAG200;

Inicialmente, o painel do grupo de disponibilidade para os encaminhadores AG (SQLAG200) mostrou o banco de dados como sendo sincronizado, mas após cerca de uma hora o estado de sincronização é exibido NOT SYNCHRONIZINGe a descrição do motivo da integridade da sincronização é exibida SUSPEND_FROM_CAPTURE.

A execução chkdsk /fna unidade F: não relata erros.

dbcc checkdb (dag_test_db)do primário não retorna nenhum erro.

Escrevi uma consulta para ler todos os dados do filestream; talvez isso mostre algo interessante. Assim que tiver os resultados desse teste, atualizarei a pergunta. A consulta está usando ApplicationIntent=ReadOnlyvia sqlcmd.exe para se conectar à instância do encaminhador. Esta é a consulta, para os interessados:

USE [dag_test_db];
GO
DECLARE @d varbinary(max);
DECLARE @f nvarchar(260);
DECLARE cur CURSOR LOCAL FORWARD_ONLY READ_ONLY
FOR
SELECT
      [f].[file_data]
    , [f].[original_file_name]
FROM [dbo].[files] [f];

OPEN cur;
FETCH NEXT FROM cur INTO @d, @f;
WHILE @@FETCH_STATUS = 0
BEGIN
    PRINT @f + N': ' + CONVERT(nvarchar(11), LEN(@d), 0);
    FETCH NEXT FROM cur INTO @d, @f;
END
CLOSE cur;
DEALLOCATE cur;

Talvez algum jovem e arrojado engenheiro da Microsoft possa me ajudar a entender o que está causando um erro em fsdohdlr.cpp at 2474?

DBCC CHECKDB ([dag_test_db]) WITH NO_INFOMSGS;no primário global não mostra nenhuma corrupção.

Converter o nome do arquivo na mensagem de erro para um LSN decimal e usar fn_dblogno primário global para exibir o conteúdo do log mostra:

LSN atual Operação Contexto ID da transação LogBlockGeneration Tag Bits Comprimento Fixo do Registro de Log Comprimento do Registro de Log LSN anterior Bits de Sinalização Reserva de Log AllocUnitId AllocUnitName ID da página ID do slot Página Anterior LSN PartitionId RowFlags Num Elements Offset in Row Modify Size Checkpoint Begin CHKPT Begin DB Version Max XDESID Num Transactions Checkpoint End CHKPT End DB Version Minimum LSN Dirty Pages Oldest Replicated Begin LSN Next Replicated End LSN Last Distributed Backup End LSN Last Distributed End LSN Repl Min Hold LSN Server UID SPID Beginlog Status Xact Type Begin Time Transaction Name Transaction SID Parent Transaction ID Oldest Active Transaction ID Xact ID Xact Node ID Xact Node Local ID End AGE End Time Transaction Begin Replicated Records Oldest Active LSN Server Name Database Name Mark Name Master XDESID Master DBID Preplog Begin LSN Prepare Time Virtual Clock Previous Savepoint Savepoint Name Rowbits First Bit Rowbits Bit Count Rowbits Bit Value Number of Locks Lock Information LSN before writes Pages Written Command Type Publication ID Article ID Partial Status Command Byte Offset New Value Old Value New Split Page Linhas excluídas Bytes liberados ID da tabela CI ID do índice de IC NewAllocUnitId ID do grupo de arquivos Metastatus Status do arquivo ID do arquivo Nome Físico Nome Lógico Formato LSN RowsetId TextPtr Deslocamento da Coluna Bandeiras Tamanho do texto Desvio Tamanho antigo Novo tamanho Descrição Contagem de extensão alocada em massa Id do conjunto de linhas em massa AllocUnitId em massa Alocação em massa primeiro IAM Page ID IDs de extensão alocados em massa VLFs adicionados InvalidateCache Id Chaves InvalidateCache ID da página de origem CopyVerionInfo LSN da página de origem CopyVerionInfo ID do slot de origem CopyVerionInfo Contagem de slots de origem CopyVerionInfo Conteúdo do RowLog 0 RowLog Conteúdo 1 RowLog Conteúdo 2 RowLog Conteúdo 3 RowLog Conteúdo 4 RowLog Conteúdo 5 Tipo de registro de compactação Informação de compressão PageFormat PageType PageFormat PageFlags PageFormat PageLevel PageFormat PageStat PageFormat FormatOption registro de registro
0000008F:000292B0:0006 LOP_FS_DOWNLEVEL_OP LCX_NULL 0000:0022f09f 0 0x0000 24 360 0000008F:000292B0:0005 0x0002 366 NULO NULO NULO NULO NULO NULO NULO NULO NULO NULO NULO NULO NULO NULO NULO NULO NULO NULO NULO NULO NULO NULO NULO NULO NULO NULO NULO NULO NULO NULO NULO NULO NULO NULO NULO NULO NULO NULO NULO NULO NULO NULO NULO NULO NULO NULO NULO NULO NULO NULO NULO NULO NULO NULO NULO NULO NULO NULO NULO NULO NULO NULO NULO NULO NULO NULO NULO NULO NULO NULO NULO NULO NULO NULO NULO NULO NULO NULO NULO NULO NULO NULO NULO NULO NULO NULO Operation CREATE;File Id 65537;Name 3e6a0757-7405-4ee2-b8a8-df878b8cd7ce\a10e3ae8-922c-4821-904e-7555c031630d\0000008f-000292b0-0006 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 0x000018008F000000B0920200050002009FF022000000910001004A01010000007000C00001000000010001000000000000000000000046003A005C00530051004C005300650072007600650072005C004D005300530051004C00310035002E004800560032003000310039005C004D005300530051004C005C0044004100540041005C006400610067005F0074006500730074005F00640062005F00660067005F0066007300330065003600610030003700350037002D0037003400300035002D0034006500650032002D0062003800610038002D006400660038003700380062003800630064003700630065005C00610031003000650033006100650038002D0039003200320063002D0034003800320031002D0039003000340065002D003700350035003500630030003300310036003300300064005C00300030003000300030003000380066002D00300030003000320038006600360038002D0030003000310030000001

O arquivo referenciado na mensagem de erro existe no sistema de arquivos do encaminhador:

C:\Users\Hannah>dir F:\SQLServer\HV2019\FILESTREAM\dag_test_db\dag_test_db_fg_fs_f01\3e6a0757-7405-4ee2-b8a8-df878b8cd7ce\a10e3ae8-922c-4821-904e-7555c031 630d\0000008f-000292b0-0006
 O volume na unidade F não tem rótulo.
 O número de série do volume é 90BA-CEC3

 Diretório de F:\SQLServer\HV2019\FILESTREAM\dag_test_db\dag_test_db_fg_fs_f01\3e6a0757-7405-4ee2-b8a8-df878b8cd7ce\a10e3ae8-922c-4821-904e-7555c031630d

28/04/2023 22:27 797.346 0000008f-000292b0-0006
               1 Arquivo(s) 797.346 bytes
               0 Dir(s) 123.663.937.536 bytes livres

icaclspara o caminho em questão no encaminhador mostra:

icacls F:\SQLServer\HV2019\FILESTREAM\dag_test_db\dag_test_db_fg_fs_f01\3e6a0757-7405-4ee2-b8a8-df878b8cd7ce\a10e3ae8-922c-4821-904e-7555c031630d
F:\SQLServer\HV2019\FILESTREAM\dag_test_db\dag_test_db_fg_fs_f01\3e6a0757-7405-4ee2-b8a8-df878b8cd7ce\a10e3ae8-922c-4821-904e-7555c031630d NT SERVICE\MS$H V2019:(I)(OI)(CI)(F )
                                                                                                                                           DIREITOS DO PROPRIETÁRIO:(I)(OI)(CI)(F)
                                                                                                                                           BUILTIN\Administradores:(I)(OI)(CI)(F)

1 arquivo processado com sucesso; Falha ao processar 0 arquivos

As permissões parecem boas pelo que posso ver - o serviço SQL Server como controle total sobre o arquivo e, de fato, toda a estrutura de pastas de F:\SQLServer\HV2019.

sql-server
  • 1 1 respostas
  • 99 Views

1 respostas

  • Voted
  1. Best Answer
    Hannah Vernon
    2023-05-01T10:50:54+08:002023-05-01T10:50:54+08:00

    Não consegui determinar conclusivamente qual SUSPEND_FROM_CAPTUREera a causa raiz do problema. Aparentemente, esse status indica que o encaminhador (ou secundário) não pode mais ler o fluxo de logs do primário de forma a permitir que o secundário acompanhe o primário.

    Para resolver isso no encaminhador, removi o banco de dados do SQLAG200 Availability Group primário (ou seja, o encaminhador) e, em seguida, descartei-o do secundário do SQLAG200 Availability Group. Em seguida, restaurei o banco de dados de backups no secundário SQLAG200 e o primário SQLAG200, garantindo que os backups de log de transações aplicáveis ​​fossem restaurados para trazer cada cópia do banco de dados o mais próximo possível do estado na cópia primária global do banco de dados no SQLAG100. Depois que as restaurações foram concluídas, consegui que o encaminhador alcançasse o primário global:

    ALTER DATABASE [dag_test_db] SET HADR AVAILABILITY GROUP = [SQLAG200];
    ALTER DATABASE [dag_test_db] SET HADR RESUME;
    

    Isso associa o banco de dados recém-restaurado ao Grupo de Disponibilidade dos encaminhadores e, por extensão, ao Grupo de Disponibilidade primário global por meio do Grupo de Disponibilidade Distribuído.

    Depois que o encaminhador estava a bordo, fiz o seguinte nos encaminhadores secundários:

    ALTER DATABASE [dag_test_db] SET HADR AVAILABILITY GROUP = [SQLAG200];
    ALTER DATABASE [dag_test_db] SET HADR RESUME;
    

    E, finalmente, parece estável. O que aprendi com tudo isso foi que, em nenhum momento, a cópia primária do banco de dados ficou offline ou ficou indisponível para meu cliente de teste C# Filestream. Ele apenas continuou gravando arquivos no dag_test_dbgrupo de arquivos do fluxo de arquivos. Pode demorar um pouco, mas enquanto o principal estiver online, o negócio não ficará muito chateado.

    Estou feliz por ter um laboratório doméstico configurado como este, onde posso praticar como lidar com esses tipos de problemas antes que eles afetem um banco de dados de produção real.

    O Microsoft CSS tem um sinalizador de rastreamento não documentado que pode ser usado na inicialização do SQL Server para desabilitar vários fluxos de log, que é um novo recurso no SQL Server 2022. No meu caso, habilitar esse sinalizador de rastreamento resolveu o problema; remover o sinalizador de rastreamento fez com que o problema ocorresse quase imediatamente.

    • 1

relate perguntas

  • SQL Server - Como as páginas de dados são armazenadas ao usar um índice clusterizado

  • Preciso de índices separados para cada tipo de consulta ou um índice de várias colunas funcionará?

  • Quando devo usar uma restrição exclusiva em vez de um índice exclusivo?

  • Quais são as principais causas de deadlocks e podem ser evitadas?

  • Como determinar se um Índice é necessário ou necessário

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host

    • 12 respostas
  • Marko Smith

    Como fazer a saída do sqlplus aparecer em uma linha?

    • 3 respostas
  • Marko Smith

    Selecione qual tem data máxima ou data mais recente

    • 3 respostas
  • Marko Smith

    Como faço para listar todos os esquemas no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Listar todas as colunas de uma tabela especificada

    • 5 respostas
  • Marko Smith

    Como usar o sqlplus para se conectar a um banco de dados Oracle localizado em outro host sem modificar meu próprio tnsnames.ora

    • 4 respostas
  • Marko Smith

    Como você mysqldump tabela (s) específica (s)?

    • 4 respostas
  • Marko Smith

    Listar os privilégios do banco de dados usando o psql

    • 10 respostas
  • Marko Smith

    Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Como faço para listar todos os bancos de dados e tabelas usando o psql?

    • 7 respostas
  • Martin Hope
    Jin conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane Como faço para listar todos os esquemas no PostgreSQL? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh Por que o log de transações continua crescendo ou fica sem espaço? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland Listar todas as colunas de uma tabela especificada 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney O MySQL pode realizar consultas razoavelmente em bilhões de linhas? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx Como posso monitorar o andamento de uma importação de um arquivo .sql grande? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison Como você mysqldump tabela (s) específica (s)? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas Como posso cronometrar consultas SQL usando psql? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas Como faço para listar todos os bancos de dados e tabelas usando o psql? 2011-02-18 00:45:49 +0800 CST

Hot tag

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve