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 / 11250
Accepted
cofiem
cofiem
Asked: 2010-12-08 17:27:41 +0800 CST2010-12-08 17:27:41 +0800 CST 2010-12-08 17:27:41 +0800 CST

Problema de coleta de lixo Sql FILESTREAM

  • 772

atualizado 3x

Estou usando o FILESTREAM, mas estou tendo problemas com a coleta de lixo. Os arquivos FILESTREAM não estão sendo limpos quando defino a coluna como nula.

  • No log de eventos, há um número enorme desse erro: Internal FILESTREAM error: failed to access the garbage collection table.

  • É o erro número 5571 nesta página: http://msdn.microsoft.com/en-us/library/cc645602.aspx

  • Usando esta postagem do blog, confirmei que existe uma tabela 'tombstone', mas não posso consultá-la ( Invalid object name 'sys.filestream_tombstone_xxxxxxx'.)

  • Não estou excluindo linhas, estou definindo a coluna FILESTREAM como nula, conforme este artigo msdn : "Quando um campo FILESTREAM é definido como NULL, os dados BLOB associados ao campo são excluídos."

  • O banco de dados está em uma unidade local.

  • O banco de dados está usando Recuperação Simples.

  • Executei vários CHECKPOINTs quando a atividade estava muito baixa. Isso parece não ter feito nada. A mensagem de erro parece indicar que o coletor de lixo FILESTREAM está tentando coletar lixo, mas não pode acessar a tabela para descobrir o que fazer.

  • SQL Server 2008 (10.0.2531.0, SP1, Enterprise Edition

  • Não há outros erros anteriores aos erros 5571 que posso ver no log do SQL Server ou no log de eventos.

DBCC CHECKDB

Foi detectado um erro. O que eu faço sobre isso?

DBCC results for 'sys.filestream_tombstone_1819153526'.
Msg 8951, Level 16, State 1, Line 1
Table error: table 'sys.filestream_tombstone_1819153526' (ID 1819153526). Data row does not have a matching index row in the index 'FSTSNCIdx' (ID 2). Possible missing or invalid keys for the index row matching:
Msg 8955, Level 16, State 1, Line 1
Data row (4:4712151:3) identified by (oplsn_fseqno = 62856 and oplsn_bOffset = 82647 and oplsn_slotid = 2) with index values 'file_id = 65537 and rowset_guid = '3F972309-9B0B-4C4F-939A-5618897050B4' and column_guid = '4A143C0D-B877-494E-B1E6-B70B0A834BB6' and oplsn_fseqno = 62856 and oplsn_bOffset = 82647 and oplsn_slotid = 2'.
There are 209624 rows in 3382 pages for object "sys.filestream_tombstone_1819153526".

Perguntas:

  • Como as permissões devem ser configuradas para o FILESTREAM funcionar? Outras pessoas têm acesso a este servidor e este banco de dados pode ter sido restaurado de um backup em algum momento.

  • Como verifico as permissões da conta de compartilhamento/contêiner do FILESTREAM (Windows) e a conta sob a qual o SQL Server é executado?

Obrigado a @vgv8 por solicitar mais informações e ideias.

sql-server sql-server-2008
  • 1 1 respostas
  • 7554 Views

1 respostas

  • Voted
  1. Best Answer
    Gennady Vanin Геннадий Ванин
    2010-12-08T23:28:52+08:002010-12-08T23:28:52+08:00

    Parece informação insuficiente para dizer algo definitivamente. Por exemplo, você está excluindo através do Transact-SQL ou através do Win32API, etc.

    Os dados FILESTREAM não são excluídos imediatamente do sistema de arquivos porque o log de transações do SQL Server em modelos de recuperação total e em massa permite a recuperação de travamento.

    Você excluiu com CHECKPOINT

    delete from tablename CHECKPOINT
    

    ou tentou executar a instrução CHECKPOINT ou usar um modelo de recuperação simples?

    Além disso, IMO,:

    • a alteração da (re)configuração do FILESTREAM exige a reinicialização do SQL Server
    • Os dados FILESTREAM são restritos apenas a unidades LOCAL
    • As operações do FILESTREAM dependem do hardware, consulte o white paper de Paul Randal
    • "excluir ou renomear qualquer arquivo FILESTREAM diretamente pelo sistema de arquivos resultará em corrupção do banco de dados"

    Verifique as seções de segurança e confiabilidade do white paper de Paul Randal

    Discussões relacionadas contendo muitas sub-referências:

    • SQL Server Filestream - Excluir “velocidade”
    • Como forçar o coletor de lixo do fluxo de arquivos a concluir seu trabalho com a prioridade mais alta?

    Atualização:
    você verificou as permissões do compartilhamento/contêiner FILESTREAM (Windows) versus a conta sob a qual o SQL Server é executado. Deve ter permissões de administrador local. Recomenda-se que nenhuma outra conta receba permissões no contêiner de dados

    Atualização 2:
    Do white paper de Paul Randal :

    • "As operações abertas de acesso ao sistema de arquivos não aguardam nenhum bloqueio. Em vez disso, as operações abertas falham imediatamente se não puderem acessar os dados devido ao isolamento da transação. As chamadas de API de streaming falham com ERROR_SHARING_VIOLATION se a operação aberta não puder continuar devido à violação de isolamento"
    • "Software antivírus... o acesso aos dados BLOB no arquivo afetado será impedido e, para o SQL Server, o arquivo parecerá ter sido excluído."
    • "Observe que, para uma tabela ter uma ou mais colunas FILESTREAM, ela também deve ter uma coluna do tipo de dados uniqueidentifier que tenha o atributo ROWGUIDCOL. Essa coluna não deve permitir valores nulos e deve ter uma única coluna UNIQUE ou PRIMARY KEY restrição"
    • "qualquer coisa que possa impedir o truncamento do log de transações também pode impedir que um arquivo FILESTREAM seja excluído fisicamente. Alguns exemplos são:"
    • Os contêineres de dados FILESTREAM não podem ser aninhados

    Executar
    DBCC CHECKDB

    Update3:
    Não posso treiná-lo online. Este é o quadro de perguntas e respostas. Eu já fui banido várias vezes por infringir as regras do StackExchange tendo discussões em vez de postar perguntas ou respostas

    Corre

    DBCC CheckDB (QPS8, repair_rebuild)

    DBCC CheckDB (QPS8) WITH No_INFOMSGS, ALL_ERRORMSGS
    

    e coloque a saída aqui.

    Para verificar/definir permissões NTFS: clique com o botão direito do mouse na pasta no Windows --> Propriedades --> Segurança

    Para verificar/definir MSSQLServer: digite na linha de comando

    SQLServerManager10.msc 
    

    navegue até SQL Server Services e clique duas vezes na instância correspondente do SQL Server

    Atualização 3b:
    Provavelmente, você deve descartar e recriar o índice ou tem problemas mais profundos e deve restaurar o banco de dados do backup ou executar o reparo do banco de dados, permitindo a perda de dados. Este é um tópico / pergunta bastante separado.
    Não quero assumir nenhuma responsabilidade para orientá-lo sobre isso.

    • 3

relate perguntas

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

  • Quanto "Padding" coloco em meus índices?

  • Existe um processo do tipo "práticas recomendadas" para os desenvolvedores seguirem para alterações no banco de dados?

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

  • Downgrade do SQL Server 2008 para 2005

Sidebar

Stats

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

    Como fazer um mysqldump com um banco de dados de uso no dump

    • 4 respostas
  • Marko Smith

    No MySQL Workbench, insira uma nova coluna no "topo" de uma tabela?

    • 4 respostas
  • Marko Smith

    SQL Server - Tabelas temporárias x físicas

    • 3 respostas
  • Marko Smith

    Quando uma varredura de tabela completa é melhor que uma varredura de índice?

    • 4 respostas
  • Marko Smith

    Qual é a diferença entre Shrink Database e File?

    • 3 respostas
  • Marko Smith

    Problema de coleta de lixo Sql FILESTREAM

    • 1 respostas
  • Marko Smith

    Problemas de DBCC do SQL Server 2008

    • 2 respostas
  • Marko Smith

    Como você para, coloca offline e exclui um banco de dados SQL Server em recuperação?

    • 2 respostas
  • Marko Smith

    Como faço para restaurar um banco de dados do SQL Server 2000 para uma instância do SQL Server 2008?

    • 5 respostas
  • Marko Smith

    Desempenho atingido usando CAST em T-SQL

    • 3 respostas
  • Martin Hope
    user481826 Como fazer um mysqldump com um banco de dados de uso no dump 2010-10-29 16:08:59 +0800 CST
  • Martin Hope
    Will A SQL Server - Tabelas temporárias x físicas 2010-07-05 08:46:10 +0800 CST
  • Martin Hope
    NibblyPig Particionamento de tabelas no SQL 2008 - Por quê? 2010-06-30 00:59:23 +0800 CST
  • Martin Hope
    Gnomo Interpretando um plano de execução 2010-09-10 10:31:11 +0800 CST
  • Martin Hope
    ahsan Quando uma varredura de tabela completa é melhor que uma varredura de índice? 2010-12-10 10:16:54 +0800 CST
  • Martin Hope
    Tom DeMille Devo reduzir regularmente meu banco de dados ou pelo menos meu arquivo de log? 2010-04-24 08:19:19 +0800 CST
  • Martin Hope
    Jango Qual é a diferença entre Shrink Database e File? 2010-08-24 10:25:42 +0800 CST
  • Martin Hope
    CrapHands Como você para, coloca offline e exclui um banco de dados SQL Server em recuperação? 2010-12-18 07:12:36 +0800 CST
  • Martin Hope
    Ryan Delucchi Desempenho atingido usando CAST em T-SQL 2010-07-02 15:11:16 +0800 CST
  • Martin Hope
    Manjot SQL 2005: Podemos determinar quanto o trabalho de manutenção do índice de reconstrução pode aumentar os arquivos de log do banco de dados? 2010-08-12 18:40:44 +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